Coders at Work (一)

偶然间看到的这本书,本以为是讲软件工程的,没想到是采访牛人们的书,正好符合本人的八卦风格,不得不看。

像这样的书,一看就知道其质量完全取决于采访者(作者)的问题质量,还好,以我之见,作者的问题还算不错,牛人们回答得也比较详细,所以这本书是很值得读的。

书中共采访了15位牛人,本人见识浅薄,在此之前只知道其中5位,主要是因为这些牛人中有不少是来自我不关心的 Java/Javascript 领域,和我并不熟悉的 Haskell,Lisp 领域。虽然是采访类的书,但章节顺序还是有关系的,因为作者在采访后面的人时会提到前面的人,但从我的感觉来说,这个关系不重要,完全可以按照你喜欢的顺序去读。我还没读完,目前读完了我最关心的三个牛人:Jamie Zawinski,Ken Thompson,Donald Knuth,下面计划去读 Joe Armstrong 和 Fran Allen,其他牛人就是我之前不知道的了,按先后顺序去读吧。慢慢来,不必着急,一天读上几页就行。这本书还是有遗憾的,那就是有不少我喜欢的牛人没有在这里。如果让我采访,我至少还会加上 Linus大神RMS大仙Alan KayEris S RaymondDMRRob PikeBill JoyJohn Carmack

言归正传,书中提到的一些问题很有意思,也很值得思考,而且书中最值得你去体味的地方是牛人们讲述的自己的编程经验,看了之后受益良多,牛人之言不我欺啊!

Jamie Zawinski:如果你不知道他,我不会感到奇怪,但是他说过的那句话你一定有所耳闻:

“Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. ”
大牛这句话道出了使用正则表达式的人们的心声啊!这位大牛是XEmacs的作者,Mozilla的早期作者,他也写过XScreenSaver,这条是我读了这本书后才知道的。更为牛B的是这位大牛是从CMU退学的,Orz了。。。在说到为啥退学时,牛人说,他上高中时就在CMU里编程了,到了大学却还要学习如何使用鼠标,于是一怒之下就退学了!!牛人的原话是这么说的:
So it’s just same shit, different day—I couldn’t take it. Getting
up at eight in the morning, memorizing things. They wouldn’t let me
opt out of this class called Introduction to Facilities where they teach
you how to use a mouse. I was like, “I’ve been working at this
university for a year and a half—I know how to use a mouse.” No way
out of it—“It’s policy.” All kinds of stuff like that. I couldn’t take it. So I
dropped out. And I’m glad I did.
谈到这里我发现一个很有意思的现象,本文到此为止列出名字的牛人当中,没有一个参加过什么 ACM 竞赛,退学的反倒不少,两个:Jamie和John。这不得不说是对贵国计算机教育的一个绝好的讽刺!杯具啊,我这辈子是没机会退学了!每思及此,后悔不已……打住。

这位大牛对C++ Template极其排斥,可谓恨之入骨啊,你要是去他那面试时说你用这玩意儿他会马上拒你!他这么说是有道理的,因为C++的模板太复杂了(以至于需要一本专门的书来讲它!),而且各种编译器的解释也可能会有出入,当然了你要是能玩到boost那种程度就另说咯~!

在被问道如何调试程序时,他说以前也使用调试器,比如gdb,但他曾碰到过gdb的一个bug,所以后来更多使用print了。发自肺腑啊!虽然本人不是牛人,但也很少使用gdb等调试器了,尤其是调试内核,基本上只用printk()了。实际上内核的情况更复杂,即使你有kgdb等调试工具你也可能用不上,比如系统刚启动时,比如内核做kexec跳转时,这些情况我都遇到过,你只能用乖乖地去用printk()。

在被问道都看哪些书时,他还是推荐MIT那本经典的《Structure and Interpretation of Computer Programs》,然后就是《Design Patterns》,他承认他确实没读过《The Art of Computer Programming》,虽然他也觉得应该去读的。本人这三本都没看过,内牛满面地掩面而过,无地自容……

作者问他一个程序员应该必备的关键素质是什么,他说是好奇。知音啊!他的观点我再同意不过了!!不过还是牛人说得更透彻,再次引用一下原话吧:

Well, curiosity—taking things apart. Wanting to know what’s going on under the hood. I think that’s really the basis of it. Without that I don’t think you get very far. That’s your primary way of acquiring knowledge. Taking something apart and looking at it is how you learn to build your own. At least for me. I’ve read very few books about computers. My experience has been digging through source code or reference manuals. I’ve got a goal and, alright, to do this I need to know what this thing does and what this thing does. And I’ll just sort of random-walk through that until I find where I’m going.
对于程序员来说,有一颗好奇的心才能驱使着你去发掘更多的代码,遇到问题之后多去思考为什么会出现这个问题,其根源是什么,以后如何避免它,只要这样自己才能不断进步。