我们该向国外的 CS 课程学习一下了

December 16, 2007 – 3:58 pm

今天在刘未鹏的 Blog 上看到 Joel Spolsky 在耶鲁的演讲([1] , [2] , [3])的导读,便跟着链接过去看了一下。演讲真是非常诙谐有趣,而且看了以后也觉得蛮有收获的,所以也来推荐一下。

演讲中提到了几门 CS 课程,也是相当有趣。比如 MIT 的那门著名的计算机基础课,第一堂课就讲了“Computer Science isn’t about computers and it isn’t a science”。

cs

这门课确实相当有名,其实就是用 SICP (Structure and Interpretation of Computer Programs) 的那个课程,在 MIT 的网站上有教学视频可以下载。我也看过其中一部分,上图就是我从视频中截出来的 Hal Abelson 在第一堂课中解释“Computer Science”究竟是什么的时候的场景(我印象特别深刻,因为他上课是用左手写字的,而且全是大写字母,我还发现 MIT 的粉笔特别粗 :p )。

也许许多人并不关心 CS 究竟是什么,不过,联想起竺可桢老校长的那句话,有两个问题却还是很总要的:“诸位在校,有两个问题应该自己问问,第一,到 CS 来做什么?第二,将来毕业后做什么样的人?”其实 CS 基本上也可以分为两大类了,一类是读 PhD ,做研究(据说 PhD 是 Permanant Head Damage 的缩写?:p );一类是做程序员。然而,即使只有这两个选择,也是让许多人迷茫的了,就我自己到现在仍然是很不知所措的,可是看了 Joel 介绍的 Yale 的两门课程之后,我似乎对这个选择问题也大概有了些底,国外的课程果然是很人性化的:

首先是 CS 322 (后来由于学分分配的原因改成了 CS 323 ):

…the half credit was therefore completely useless, but it did justify those weekly problem sets that took 40 hours to complete. After years of students’ complaining, the course was adjusted to be a 1 credit class, it was renumbered CS 323, and still had weekly 40 hour problem sets. Other than that, it’s pretty much the same thing. I loved it, because I love programming. The best thing about CS323 is it teaches a lot of people that they just ain’t never gonna be programmers. This is a good thing. People that don’t have the benefit of Stan teaching them that they can’t be programmers have miserable careers cutting and pasting a lot of Java.

每周 40 小时的 coding 才能完成的课程,确实是足以完成“是否适合做 programmer”的自我审查了。可惜没有机会参加一下这种测试 :D ,我们这里嘛,虽然一些课程(比如陈越 JJ 和翁恺的一些课程)也有不错的进度和项目编程工作分配,但是大多数都是期末之前一个星期看看课件,或者再花几天时间赶工做一个 project 出来就可以应付过去的。比如我现在正在修的一门课虽然平时也布置课后作业,可是作业的检查方法是:期末的时候统一检查,数个数就行。就是说在期末检查作业的那个 deadline 的前一天把布置过的作业次数那么多个文件上次到指定的 FTP 就可以了。Sigh~ 不过,咱们这样培养出来的学生(如果能培养出来的话)肯定是比国外那些学生的自觉性要强了。

总之,如果不适合做 coding ,一般就要选做研究了。打小的理想就是要读书读穿了,从小学一直读到博士,后来听说还有个东西叫博士后,于是列表里又多了一项,任重而道远啊,大概许多人小时候都是那样想的吧:

For a moment there, I actually thought I’d get a PhD. Both my parents are professors. So many of their friends were academics that I grew up assuming that all adults eventually got PhDs. In any case, I was thinking pretty seriously of going on to graduate school in Computer Science.

不过渐渐长大了也明白了,除了读书读到头这条众所周知的路之外,还有其他路可以走,不过这反而麻烦了,到底走哪条路呢?Joel 倒是一个幸运儿,其实接着前面那段引用还有一句话:

Until I tried to take a class in Dynamic Logic right here in this very department. It was taught by Lenore Zuck, who is now at UIC.

这里的 Dynamic Logic 究竟是怎样的一门课程呢?按照 Joel 的说法,第一堂课时老师就证明了“f := not f”这个程序在运行偶数次之后,f 的值还是和原来一样。证明写满了黑板,使用了“proof by induction”、“proof by reductio ad absurdum”、“proof by exhaustion”以及“proof by graduate student” :D ,最后还拖堂了,可惜得到的结论却恰恰相反,一个前排的学生(就是“proof by graduate student”的同一个学生)指出在 63 步之前由于黑板上的污渍导致一个 bit 不小心被弄错了……课后作业是证明“f := not f”,如果运行了 n 次之后还是原来的结果,那么 n 必然是偶数。在课后作业上痛苦挣扎之后,Joel 最终退掉了这门课:

…I decided on the spot that graduate school in Computer Science was just not for me, which made this the single most useful course I ever took.

看来,选一门很 PhD 的课试试确实效果不错,不知道我们有没有这样的课,不过看上去好像特别恐怖!

Joel 提到的还有一门课程是 CS115 ,教会了他写作,他最后如此总结这三门课:

So anyway, those were the highlights of CS. CS 115, in which I learned to write, one lecture in Dynamic Logic, in which I learned not to go to graduate school, and CS 322, in which I learned the rites and rituals of the Unix church and had a good time writing a lot of code. The main thing you don’t learn with a CS degree is how to develop software, although you will probably build up certain muscles in your brain that may help you later if you decide that developing software is what you want to do.

ps: Joel 的演讲确实是非常有趣,除了我上面提到的一些东西,还有许多(有意思而且有意义的)内容,推荐去看一看(在本文开始的地方有链接)。

  1. 3 Responses to “我们该向国外的 CS 课程学习一下了”

  2. Thanks, they are my tonight’s reading :)

    By goncha on Dec 16, 2007

  3. 视频放到ftp上吧,我也想看

    By FlyingBear on Dec 17, 2007

  4. 你是说 SICP 的视频吗?校内的话,有下的,在 mirror.6600.org 上有下的。 :)

    By pluskid on Dec 17, 2007

Post a Comment