首先,恭喜各位师弟师妹加入XYLinuxer大家庭,成为陈/刘老师的研究生。咱们学校(XUPT)研究生为三年制,看似很长实则时间很有限。可能有些同学和我一样并非计算机专业出身,基础薄弱那么相信我这三年时间对你来说更加宝贵。
下面的表格介绍了通常情况下这三年时间的安排,让大家可以对这三年时间如何使用有个大体的了解。
学期 | 任务 |
---|---|
研零 | 补基础知识 |
研一(上) | 上课;补基础知识;Linux内核学习 |
研一(下) | 上课;补基础知识;Linux内核学习;参与项目 |
研二(上) | 课题研究;补基础知识;Linux内核学习;参与项目 |
研二(下) | 课题研究;编写、发表小论文;准备暑期实习招聘(春招); |
研三(上) | 参加秋招;编写、发表小论文;编写大论文 |
研三(下) | 完善大论文;准备毕业事宜 |
研零指还未正式入学的阶段,从这个阶段开始我建议各位同学就不要想着玩了,可能你的同学正在进行本科阶段最后的狂欢,然而你并没有这样的资格。研究生阶段供各位静心学习的时间满打满算总共两年,需要指出的是研一整整一年都有课程而进入研二你就要开始课题相关的研究,所以分秒必争。所以从研零开始(5月到9月入学)这几个月的时间里,我强烈建议诸位进入学习状态。
在研零阶段你至少需要完成以下的学习:
- Linux常用命令的学习。
- Linux基本的使用。这里并不是指点击鼠标的使用,我强烈建议从现在开始养成脱离鼠标使用Linux操作系统的习惯(是的,浏览网页也可以完全使用键盘完成。你需要Chrome的cVim插件,这样你就可以使用Vim的key binding浏览网页而无需使用鼠标 ;-P )。
- 学习vim/emacs的使用方法。学习Linux C/C++我强烈建议摆脱IDE,这对你学习没有什么好处。
- 学习Markdown语法,使用Markdown编写博客。博客我更推荐自己搭建、维护静态博客而非使用现有的博客平台,当然使用博客平台也没有什么不妥。
- 学习使用git以及github管理你的代码。
在研零阶段你必须要开始以下的学习:
- Linux C及系统编程的学习。Linux C及系统编程的学习我建议使用《Unix/Linux环境编程实践教程》辅以《Unix环境高级编程》进行学习。
- 网络、操作系统原理、数据结构、组成原理的补习。特别是组成原理建议细致阅读《深入理解计算机系统》
- Linux操作系统内核。除去教材外各位需要仔细阅读《Linux内核设计与实现》、《深入理解Linux内核》,辅以《深入理解Linux内核架构》进行学习。
恭喜你正式入学了,成为一个准研究生。从现在开始我强烈建议各位除去一周一日的休息日以外,平时保证早上八点至晚上10点在实验室学习,除去上课、吃饭以及睡觉的时间,你应该都在实验室度过。
待研一上学期结束之时你应该已经完成了以下的学习:
- 完成《Unix/Linux环境编程实践教程》的学习,辅以《Unix环境高级编程》(下面简称APUE)你应该已经达到基本熟悉系统编程的水平。
- 熟练使用Linux操作系统,可以达到你的主要工作都可以通过命令行进行。
- 完成《Linux内核设计与实现》的学习与阅读,基本完成《深入理解Linux内核》的阅读,通过源码阅读工具完成对部分Linux关键子系统的源码阅读。
- 熟悉Linux C编程,入门Linux内核编程。
在研一上学期如果学有余力我建议你开始以下的学习:
- C++的学习。仔细阅读《C++ Primer》
- bash脚本的学习。
- Linux网络编程的学习。
进入研一下学期,你应该已经对于Linux有所入门。从现在开始你需要深入学习C++以及网络编程,同时深入的进行Linux内核的学习,并选择自己感兴趣的方向逐渐进入学术研究的状态。
待研一上学期结束之时你应该已完成以下的学习:
- 完成对于APUE的深入阅读,结合Linux内核原理深入理解Linux系统编程。
- 完成《C++ Primer》的阅读,基本熟悉C++编程。
- 入门C++并发及Linux网络编程。
- 开始阅读期刊论文,寻找研究方向。
在这一学期如果你学有余力我建议你开始或者已完成以下学习:
- 多遍阅读《C++ Primer》阅读,编写读书笔记,熟练使用C++编程。
- 阅读《Efficient C++》
- 学习设计模式
- 阅读《Linux高性能服务器编程》,结合《Unix网络编程》(下面简称UNP)学习Linux网络编程及并发编程
- 可以熟练编写bash脚本
- 着手学习、研究自己感兴趣的方向,并阅读相关论文
进入研二后恭喜你,你已经完成了研究生阶段的所有课程,要进入科研的状态了。如果你严格律己、勤奋学习相信已经达到以下水平:
- 熟练使用Linux命令行,可以编写一些bash脚本。
- 熟练使用git、vim/emacs、gdb等开发工具
- 较为熟悉Linux内核,深入了解过部分Linux内核中的子系统或机制的实现。
- 熟悉Linux C系统编程,结合Linux内核对于系统调用的内部原理有较为深入的了解。
- 有一定的Linux内核编程经验,有一定的Linux内核模块调试经验。
- 熟悉C++语法,熟悉STL
事实上研二上学期可能是你最后一个可以完全静心学习的学期,因为从下个学期开始毕业以及找工作相关事宜将开始逐步占用你大量时间。在研二上学期结束时你应该已经完成以下的学习:
- 多遍阅读《C++ Primer》,熟练使用C/C++进行编程
- 阅读《Efficient C++》,学习设计模式,修炼自己的编程能力。
- 完成《高性能Linux服务器编程》的详细阅读,完成大部分《UNP》的阅读。
- 深入学习Linux内核中的某个或某几个子系统的实现。
- 找到自己感兴趣的方向,或结合第二领域的交叉点开始大量阅读期刊论文
- 参与项目,积累实战经验。
如果你学有余力的话,建议你可以着手进行下列学习工作:
- 阅读《Linux多线程服务器端编程》,达到熟悉并发网络编程的水平。
- 熟悉C++的各个语言细节,了解STL的内部实现
- 大量阅读期刊论文,着手进行小论文的编写。
这个学期对你来说有两件重要的事情:
- 进行春招暑期实习的面试或着手进行研三上学期的秋招的备战
- 大论文开题
研二上学期到研二下学期春节的这个寒假是及其关键的时刻,如果你想有份自己满意同时令人羡慕的工作(没错我说的是BAT、红帽、SUSE、IBM等一流计算机领域的企业)同时可以顺利毕业的话,你春节就不要过了。在研二下学期中段,大约4月份之前你需要达到以下能力:
- 熟悉Linux C/C++编程,熟练使用STL并了解内部实现
- 熟练使用Linux,熟悉Linux操作系统的配置,可以熟练编写bash脚本,熟练使用sed/awk等文本处理工具。
- 熟悉Linux系统编程,并对系统调用的内部实现有深入的理解
- 熟悉并发、网络编程
- 熟练使用vim/emacs,熟练使用git进行协同开发,熟练使用gdb进行调试。
- 对Linux内核整体较为熟悉,深入的学习过部分子系统。
- 有一定的Linux内核模块编程能力
- 阅读大量期刊论文,找到研究方向,确定大论文题目
- 正在着手编写或已将小论文投稿
Changelog
日期 | 编辑者 | 版本 | 备注 |
---|---|---|---|
20170503 | 赵南雨 | 0.5.0 | 创建文档 |