1)Programming Language
入门当然是C,否则都不好意思说自己是学cs。我当年用的是C Prime Plus,很基础。C之父写的C bible——The C Programming Language绝对是好书,是进阶和reference必备。C进阶还有各种C专家编程,C与指针,C陷阱了,可以提高。之后是C++,java,C#就看科研/项目需要了。我认识的一些MSRA实习生从C++转到C#(C++++),说什么编码效率高云云。反正我因为做llvm,就是C++一条道走到黑。人称“大牛”的师兄跟我说,按照某语言排名榜的说法 c++快挂了;anyway,大牛没给出出处。而在TAMU任教的C++之父还在弄STAPL,并行版的STL,我觉得C++肯定还不至于是五丈原的诸葛半仙。C++入门,我用的是C++ Prime(注意,不是C++ Prime Plus)。C++之父写的C++程序设计语言,其实比较难懂,入门之后可以翻一翻。C++的进阶书更多,各种Efficient C++,侯捷老师的STL源码剖析啊。boost是C++广泛应用的开源库。C++11也很有趣。(不好意思,我也只是知道,没怎么看。)而Java是不适合作为第一门语言的;CMU, "the home of object-oriented modular programming" by David Parnas,2010年3月末取消了大一的OOP,转而开设OOD,因为前者反模块化反并行化。当然,这点还在广泛争论中。
既然来地里的大都是出国的,那么清华学生写的《OSDI, SOSP与美国著名计算机系的调查》自然不能错过;虽然有些信息已经过时,比如Prof Zhou已转到UCSD了;OSDI、SOSP已经“沦陷”了。文中以这两大OS领域顶级会议为基础,介绍了MIT、Princeton、UW-seattle、Stanford、Berkeley和CMU的OS牛教授。我相信,包括我在内的大多非牛牛们,对这些学校大都只是dream而已(给写推荐信的教授直接灭了我Stanford, berkeley的念想,各种they are top云云),那么大家可以关注下这些牛教授的学生们,都去哪些地方任教了,比如Utah,OSU都是很不错的,可以尝试。另一方面,从ASPLOS、HPCA、MICRO、PACT、PLDI、FAST、SC、ICS和CGO等会议发表的论文,可以大致了解系统方向的牛校。
4)Database
不好意思,我db没学好。但其实db是相当成熟也很有意思的领域,可惜mysql已死。入门我就不推荐了,直接进阶吧——《数据库系统实现》。Prof. Anhai Doan recommends the Cow Book, or the Complete Book.-baidu 1point3acres
Wisc的DB据说比较强势:
i)CS 564 (Database Management Systems: Design And Implementation) is "everything you should know so that you can get an industrial job working with relational databases".
ii)CS 764 (Topics In Database Management Systems) is "all the gory details you may (or may not) want to know about relational data management systems"
iii)CS 784 (Data Models And Languages) is "all the stuff beyond relational data (e.g., Web, text, data mining, data integration, data extraction) that you should know to broaden your data management knowledge or to work in the field as an advanced developer/researcher". 而其课程项目列表足以成立若干创业公司。同时推荐Principles of Data Integration。CMU就有应用DI技术于建筑设计领域的startup Schema Fusion。
The co-author (and UW alumnus) of lmbench, a system performance benchmark, is proud of his Sourceware Operating System proposal considered as the peer to Raymond's Cathedral and Bazaar paper. He also recommends this to everyone who was annoyed at countless bugs.
.--
搭车说一下,我不是鄙视web。如果想学web,也应该学习CSS,Ruby的framework,再不济也得HTML5。在我看来,后端架构更为重要,包括apache,linux sever管理(鸟哥的linux私房菜馆)之类的。但如果真想学web,推荐UIUC课程,我上届创业师兄建立的pureweber及其搭档的关于前后端开发的博客。
6) Compiler及PL设计哲学
出来混,早晚都要还的。我本科学的最差的就是编译;一个字,混。结果研究生做的都是编译器,即LLVM。那些用iDevice的同学为什么觉得系统很流畅,闭源版本的llvm功不可没;当然还有基于freeBSD(B是伯克利的哦,他们有做工具、开源的传统。8g一下,现在Berkeley的工程系主任Sastry教授,就是受不了Harvard的理论派作风,于1994年跳过来白手起家做系统的)的Mac OS X及其简化版iOS的功劳。北京intel研究院实习的师兄跟我说,intel之所以牛,是在于其编译器优化。所以说,学好OS和compiler,走遍天下都不怕。