【题记】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的实验台上验证,使两者成功通信!
既然来地里的大都是出国的,那么清华学生写的《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..--
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。. check 1point3acres for more.
.-- 5)Software Engineering
这简直是个人文学科,集计算机科学、管理学、心理学、社会工程学于一身。在此我不展开,可以参考UW教授的讲座Software evolution then and now: the research of David Notkin。同时敬礼图灵奖获得者、北卡教堂山教授、《人月神话》作者Brooks,但我推荐的是他另一本书《设计原本》。
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已经完成了这一步),不可谓不是个奇迹。
还是那句话,计算机专业是很practical的,Dr. Brooks是因为领导IBM 360而成就的图灵奖;系统结构领域也是很活跃的——传统的处理器设计(包括cache一致性、互联网络等)、软件层级的并行编程模型(如TAMU的STAPL、UCLA的CDSC、Intel的TBB等等)、多核众核,以及利用GPU/FPGA加速的可重构计算等等,甚至还包括系统平台相关的编译支持。Mr. Esmaeilzadeh关于系统结构的进化,特别是多核芯片功耗的研究,非常具有前瞻性;Prof. Dave Patterson和Dr. Pradip Bose分别阐述了自己的观点。
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)."
计算机的博士研究,需要扎实的数学基础,更需要人文素养。在介绍SE时,其实更多的书目是偏人文的。是的,我认为中国缺少安贫乐道、少欲知足的精神,这与缺乏真正Ph.D.教育——五到六年时间在一个方向钻研(Prof. Mike Gleicher给出了很多建议)——有关。以计算机专业而言,本科学位是B.E.,工科学士;研究生或是M.S.,科学大拿;博士是Ph.D.,哲学博士。Ph.D.毕业后,追求的不应该是过分的物质生活,反而应是研究领域精神上的快乐! ..