教师节重发十年前写的一篇旧文,回忆留学时的一位可敬的教授。 “高等教育是一项奇特的个人巨额投资:它的回报完全由你控制!”——Jim Fawcett教授(以下简称F)
父亲节就要到了。每年这个时候,我总会想起我在美国留学时的F教授,他对我在美国硕士后的日子带来巨大影响。
F是数学或计算机的Ph.D,好像在业界做过很多年,后回到学校教书。他开设六门C++高级课程。因为他的学识、个人魅力和极端敬业,加上课程设置给从业带来的巨大回报,这些课是学校里最热门的课程,有大量计算机系之外的学生争夺有限的留给外系的名额。
秋季学期:
1. Project SDLC (研二课程,其它五门课的总汇课程,每个前半个学期学生写编译器的Parser、Linker。最后半学期的大项目是完全按微软内部团队的管理方式,学生共同开发写一套带有GUI的类似SVN的软件并严格按业界要求写完整文档;学生选出一个PM,一个Architect,其他人分为八个小组,各组有一个Team Leader,我是整合组的Team Leader,我们的工作是Integration Test和用COM整合所有的部件)。
2. Multi-Threading、Win32系统及3D绘图 (研二,每个学生开发一个3D绘图软件,三人一组小组开发一套可以监控6000架飞机的飞行管理软件)
春季学期
3. OOD in C++ (研一,教材是C++创始人的那本Bible,学生要完成四个中级程序:大稀疏矩阵、高速搜索、学生档案管理和一个游戏软件)
4. Software Design Pattern (研一,教材就是那本著名的同名书,当时只有十六个Pattern,学生用每个Pattern写一套小型程序,每个学生要做好几次Presentation,讲解自己的设计)
夏季小学期
5. COM/DCOM (研一课程,Window平台,每个学生写四套程序)
6. MFC及Window GUI开发 (研一,据说现在是C#,每个学生完成一个很复杂的GUI)
大家可以看到,作为职业教育的硕士课程,F教授的侧重点很明确,就是给业界提供毕业后不需培训就能上手开发的高级程序员和Project Manager。微软很喜欢F教授的学生,毕业生明年不小比例去微软,IBM,Oracle,HP,朗讯等专业软件公司。F教授的课程安排不只强调技术,也很注重文档和项目管理,去软件公司的人,绝大部分后来都升了上去。没去软件公司的毕业生,少数继续攻博,大部分在纽约附近的投资银行或Hedge Fund做IT。
在中国大学里我尚未见过像F教授那么敬业的老师。每个学生的程序他都亲自测试,学生的代码他都仔细检查和测试(当然他有工具,一次一个台湾MM把我的程序借去“学习”,简单改了改交了上去被他发现,我还挨了顿训,下不为例),然后讲解哪些部分是好的,哪些需要改进。他对待考试就更认真,每门课都出六套不重样的考题,年年适当更新。考试题量很大,英语非母语的学生因为做不完废掉的不少。废了没关系,补考过就行(不过最高成绩是B)。每次大家拿回试卷时都很感动,因为教授用红笔做了密密麻麻的批注。补考就是坐在教室里一整天加一晚上,把六套题都答一遍。用F教授的话说,他的试题如都会答,面试不会被任何技术问题难住,而考试和补考的目的,就是保证学生能正确回答这些问题。事实如此,他的学生们很容易通过著名软件公司或投行的面试。
他非常注意因材施教。我因为做好一年毕业的打算,他为研二开设的两门高级课程,我只能开学就上,而本科学机械的我当时一点C++程序设计的基础也没有。他开始有些担忧,我列举了我的优势,包括用两天半时间准备,通过了《离散数学》免修考试的事情。他专门向教《离散数学》的德国教授询问免修考试的事,又到系里查了我选课的情况,得知我选了五门课,告诉我必须退掉一门,并建议我退掉汉森教授的《并行运算》一课(汉森是C++创建人当年的博导之一。他的一些发明,今天还用在各类操作系统中),说那门课的六个程序对我来说可能太难太费时了,而且汉森教授很严格,六个项目有五个A一个A-,总成绩就是A-。推掉汉森教授的课挺遗憾,因为他只在秋季学期教授此课,而我只有这一个秋季学期,等于和一位大师擦肩而过。
编程菜鸟上了F教授的课才知道有多难,好在他有求必应。Project SDLC,第一堂课一百多页教科书就讲完了,第一个项目写编译器的Parser,我用了一个月,每晚在机房通宵才拿了个A。期间F教授不厌其烦地解答我提出的任何问题。借着前两个程序得A,我给F教授写信自荐Team Leader位置。信写得很幽默,教授特地在课堂上念给大家听,然后说“写信自荐很新鲜,创造历史“,他”不能阻挡历史车轮”,欣然同意。整合是最后一步,别的组晚了我们只能等PM协调,有个印度人为主的team那叫一个慢呀,最后PM和Architect两位编程超人只好自己赤膊上阵,用一个晚上帮他们弄完,给我剩下十几个小时。交活当天,我和组里的两个骨干从中午不间断一直干到午夜,在教授规定时间的五分钟前发给了他。
另一门研二课程,6000架飞机的空管程序,我和同是哈工大来的一个小师妹加一个南开帅哥一起做,南开帅哥被汉森教授的程序折磨得痛不欲生,没能给出太多力,不过他开始做的框架很好(他后来是波士顿一家公司的总工)。完成上述Project SDLC的大项目后,我想好好放松一下,第二天睡到中午,踢了一下午室内足球,晚上又去打两小时排球,然后游泳。乐极生悲,游泳后穿着一件单薄的运动服冒着零下二十度严寒走到停车场,受了风寒,连续几天高烧,6000架飞机项目是带病天天在机房熬夜做的,小师妹天天给我做好三顿饭送到机房。教授得知我的病情,允许我晚几天在12月31日前上交(秋季学期在圣诞节前结束,教授们要把各科总成绩在新年后上报)。因为文件大没法用Email传,教授特地在节假日到办公室等我。
图书馆的这张桌子,差不多是我的专桌,窗外景色特别美。 我顺利成为98年秋季入学唯一一个一年毕业的学生。我们这里硕士毕业的要求是十一门课(四门必修)33个学分加论文。我免修了一门必修课。秋季学期除了选教授的两门课,还有臭名昭著的必修课《计算机组织结构学》,教材是名著《Computer Architecture: A Quantitative Approach》,平时作业就要写大量汇编,很费时,考试要手写大量汇编,要象编译器一样去思考和优化Code,自然废掉很多人,我期中和期末都是六十多分,已经在高分区,总成绩是A。唯一失手的是《操作系统设计》,只得了A-,恨呀。经过秋季学期两门研二课程的洗礼,春季和夏季学期轻松了许多,周末和节假日能够有时间在自己的公寓开party。春节的时候,教授还应邀到我们这里吃饺子,但因故爽约。春季还选了门JAVA,完全是小菜,但必修课《大规模集成电路设计》还是费了不是心思。夏季学期F教授的两门课不难,但程序很多,每天要花几个小时,不过晚上可以打牌或看电影。三天时间完成的论文短小但是很精悍,推翻了几位教授学者即将发表的一套计算机测试理论的数学基础。
十门课,六门和后来职场生涯有直接关系的课都是出自同一位教授。
教授苍老了许多。 F教授看上去是个很普通的人,乐天派一个,嘻嘻哈哈,整天穿着牛仔裤,休闲类浅色西服,不打领带,上课喜欢坐在大教室第一排桌子上。学生中流传着各种关于他的八卦,说他开着一辆皮卡,说他网球和墙球打得很好,外出旅行骑一辆大摩托,说他正在离婚....他快六十的人,头发有些花白。多愁善感的台湾MM们说他象父亲似的,正合了那句老话:一日为师,终身为父。F教授在学校的网页上,后来在各个领域遍地开花的毕业生们经常去浏览和留言,留下他们对教授发自内心的赞誉之词,就像孩子回访父亲。
教授的课基本都在这个大教室。 这里有些母校图书馆照片,2010年全家去蒙特利尔,返程路上特地在Syracuse停留一天: 学校图书馆音乐文献馆藏丰富,有大量的密纹唱片。有唱机供学生使用,是我经常光顾的地方,有时会整体泡在这里,听唱片、看书。