【题记】Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
【前面的话】本文可以随意转载,有任何建议、意见,都可以给我发邮件,hitzzy at gmail dot com。
作为计算机科班、系统方向,谈谈我对计算机专业素养的理解,希望对大家有所帮助。
. ----
所谓,知之者不如好之者,好之者不如乐之者,计算机专业也不例外。虽然本科是被选到计算机专业,但大一因为C语言老师的激励而喜欢这个专业,并在大三偶然参加国防科大“微处理器设计”研究生暑期学校后,我决定做系统领域研究。兴趣入门,比如《计算机文化》(第10版?)《编码的奥秘》(我觉得旧版比新版的小开本更好)《大话处理器》,以及传记类的《ACM图灵奖演讲集:前20年 (1966-1985)》《ACM图灵奖 (1966-2006):计算机发展史的缩影》(ACM网站1966-2009的演讲原稿)《IEEE计算机先驱奖:1980-2006》。更专业一些,推荐Prof. Patt的《计算机系统概论》(Introduction to Computing Systems: From Bits and Gates to C and Beyond)和Prof. Bryant合著的《深入理解计算机系统》(Computer Systems: A Programmer's Perspective)。CMU流传着这个段子:15-213,给CMU门牌的课程。这里的15-213,既是以CSAPP为课本的Introduction to Computer System课程编号,也是匹村的邮编。信不信由你,我就是因为这本书,喜欢上系统这个方向的;另一个原因是利用VHDL编写自定义RISC指令集的cpu和串口,并在带有FPGA的实验台上验证,使两者成功通信!
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. 1point 3 acres
不好意思,我db没学好。但其实db是相当成熟也很有意思的领域,可惜mysql已死。入门我就不推荐了,直接进阶吧——《数据库系统实现》。Prof. Anhai Doan recommends the Cow Book, or the Complete Book.
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。
6) Compiler及PL设计哲学
出来混,早晚都要还的。我本科学的最差的就是编译;一个字,混。结果研究生做的都是编译器,即LLVM。那些用iDevice的同学为什么觉得系统很流畅,闭源版本的llvm功不可没;当然还有基于freeBSD(B是伯克利的哦,他们有做工具、开源的传统。8g一下,现在Berkeley的工程系主任Sastry教授,就是受不了Harvard的理论派作风,于1994年跳过来白手起家做系统的)的Mac OS X及其简化版iOS的功劳。北京intel研究院实习的师兄跟我说,intel之所以牛,是在于其编译器优化。所以说,学好OS和compiler,走遍天下都不怕。
当然,不能少了龙书虎书和鲸书。Wisc的程序语言和编译方向的qual自然不可错过。对于the life of Binaries,程序员又知多少。编译也是注重实践的一门学科;基于SSA形式中间表示的LLVM从UIUC发芽,经过10多年的发展,成我的简短飞跃总结为apple主力支持的用于iOS的商业编译器,且大有替代gcc之势(FreeBSD已经完成了这一步),不可谓不是个奇迹。
Prof. Mark Hill shared PBS American Experience: Silicon Valley and pointed out that "This excellent documentary is mostly about how discrete transistors and then integrated circuits became commercially successful at Fairchild Semiconductor, which then in turn spawned many companies. At one time NASA bought over half the transistors sold, accelerating computer development (and IMHO allowing you to have a smartphone now and not in decade)."
. 1point3acres.com
Wisc维护的World-Wide Computer Architecture Information以及Computer Architecture Research at Wisconsin提供了很多信息。ISCA是系统结构的顶级会议;有些国人分享了他们在ISCA的经历:计算所研究生的《ISCA和中国》,计算所系统组副教授的《ISCA08见闻》,Prof. Kevin Skadron学生记录ISCA 2011的《ISCA归》。. From 1point 3acres bbs
而从我的偶像,LLVM首席architect Chris Lattner自述的简短生平中,能从中了解他的成长轨迹;更重要的是,他和咱的差距也就是十年!不过,系统结构方向更务实的马拉松目标,可以定为Wisc的09届本科、11届硕士,UIUC 11年入学的博士Matt Sinclair。 .--
最后,推荐威斯康馨系统结构课程Advanced Arch I和II(Prof. Mark Hill或Prof. Mikko Lipasti版),以及Qual的备考资料和历年真题,让想做CA研究的感受一下!话说,我当年本科时苦于没人指导如何研究系统结构,就下载《微处理器设计》、caaqa等经典书籍每章后面感兴趣的论文,陷于浩瀚paper海而没有灯塔指引。希望后来者不要重蹈我的覆辙!
.--
上面推荐了一些书,但是对于《最常被程序员们谎称读过的计算机书籍》,不知是不是有人躺枪了;反正,我是中了。
8) Systems
CS科研,尤其是系统领域的研究,不是一门课的知识就能涵盖的。比如,此文介绍了垂直搜索引擎Duckduckgo的架构。 虚拟化也是系统领域研究的热点之一,比如Virtual Machine Moniter应用于smartphone平台方面,哥大比较前沿。
计算机的博士研究,需要扎实的数学基础,更需要人文素养。在介绍SE时,其实更多的书目是偏人文的。是的,我认为中国缺少安贫乐道、少欲知足的精神,这与缺乏真正Ph.D.教育——五到六年时间在一个方向钻研(Prof. Mike Gleicher给出了很多建议)——有关。以计算机专业而言,本科学位是B.E.,工科学士;研究生或是M.S.,科学大拿;博士是Ph.D.,哲学博士。Ph.D.毕业后,追求的不应该是过分的物质生活,反而应是研究领域精神上的快乐! ..