Bob 解答程序员的“35 岁危机”:
认为编程只适合年轻人的想法其实是个错觉,但确实是个很有影响力的错觉。这种错觉之所以存在,是因为过去 70 年里,对程序员的需求像坐火箭一样飙升。
其实我们这些“老程序员”都还在,只是数量上不那么显眼罢了。
出品 | 《新程序员》编辑部
函数式编程不仅仅是“用函数编程”。函数式编程是没有赋值语句的编程。
一旦你尝试不用赋值语句编程,函数式编程的所有其他特性就水到渠成了。你要处理函数,就必须用递归,所有这些东西在你决定不用赋值的那一刻,就自然而然地形成了。所以说,函数式编程就是这么回事。
——《函数式设计》,Robert C. Martin
50+ 年的代码人生
《新程序员》:在采访开始之前,能否请您做一个简短的自我介绍?
Bob 大叔:好的,我叫 Bob Martin,有些人叫我 Bob 大叔(Uncle Bob),我做程序员已经有五十多年了。在我刚开始编程的那个年代,计算机的体积能塞下一个大房间,而且价格昂贵,高达数百万美元。
我使用过多种编程语言,包括汇编语言、COBOL、FORTRAN、PL/I、C、C++、Pascal、Java、C# 等。多年来,我参与开发了各种系统,从金融系统到嵌入式实时系统和过程控制系统。因此,可以说我在这个行业有着丰富的经验。
此外,我还撰写了几本书,包括《代码整洁之道》(Clean Code)、《架构整洁之道》(Clean Architecture),而今天我们讨论的这本书叫《函数式设计》(Functional Design)。
《新程序员》:除了写书之外,您在业余时间做些什么呢?顺便说一下,我经常看您的推特,发现您大约 50% 的推文是关于美国大选和特朗普的社会新闻,另外 50% 则是关于技术内容、编程以及您对代码的看法。
Bob 大叔:确实如此。在非大选年,我大约 90% 的推文是关于软件的。但由于今年是大选年,因此涉及其他话题的内容也比较多。当我不在写书或编程时,我会做很多事情。我喜欢骑自行车,经常骑车四处游览。我还是一名飞行员,经常驾驶自己的飞机四处遨游,这给我带来了很多乐趣。我有一个庞大的家庭,有四个孩子和十个孙辈,平时我会尽可能多地去看望他们,所以我的时间安排得非常充实。
《新程序员》:请把我们带回您编程生涯的起点,说一说您在 1970 年开始做程序员的故事。那时您 18 岁,学习的第一门语言是汇编和 COBOL,能否谈谈刚开始时的经历?
Bob 大叔:嗯,那时并没有很多大学课程。我当时对学校没有兴趣。那个年代,越南战争正激烈进行,校园里有很多骚乱和动荡。而且,我已经学到了很多计算机编程的知识,并学会了 COBOL 和 FORTRAN,甚至还会几种计算机的汇编语言。所以,我觉得完全没必要上大学。
至于编程生涯的起点,一切都始于我母亲在我 12 岁时买了一台小型塑料计算机。那个玩具有三个触发器和六个与门,需要通过转动一个小杠杆来操作它,内部的一些橡皮筋和杠杆会移动部件,让它进行简单的计算,比如从 0 计数到 7,或者从 7 计数回到 0。此外,还可以通过编程,让它对两个比特(bit)进行加法运算,生成一个和位和一个进位位,我甚至在上面编写了很多有趣的程序 —— 编程的过程是,通过将小管子插到插销上,这些管子会阻挡杆进入槽中,进而改变触发器的状态。
所以,我花了几个星期的时间学习如何让那台玩具计算机工作,通过这个过程,我成了一名程序员。从那以后,我一直都是程序员。
这是我的起点,之后,我父亲买了很多关于计算机和编程语言的书籍,尽可能多地为我提供信息。后来,在 16 岁时,我找到了一份编程工作,为 Honeywell 200 编写程序。这份工作持续了两三周,那时我还只是个少年,是在暑假期间做的,非常有趣。
大约两年后,在我 18 岁时,我找到了一份全职工作,主要为 IBM 360 编写汇编语言和 COBOL。不久之后,我开始用汇编语言为许多微型计算机编程。当时这些计算机是由 Varian 公司生产的,那时候许多公司都在制造微型计算机,但很少有公司成功,最后是数字设备公司(DEC)主导了这个领域。随后,我在编程 PDP 8 和 PDP 11 这些设备方面变得非常熟练,这些设备都是在 70 年代初期生产的。
《新程序员》:1970 年代真的是一个非常有意思的年代,那时万维网还没有发明,USENET 刚刚出现。您相当于世界上最早一批 USENET 用户,我还了解到“Bob 大叔”这个昵称最初是由一位同事在公司给您起的绰号。后来,您在 USENET 上误用了这个昵称作为签名,最终这个名字成功从绰号变成了真名。能否分享一下其中的故事?
Bob 大叔:我当时在一家名为“Clear Communication”的初创公司工作,这是我职业生涯的第四站,时间大约在 1987 至 1989 年间。在那里,有个同事给每个人起了个绰号,我的就是“Bob 大叔”。起初这让人有些不爽,因为他总是四处走动,不断用这个昵称呼唤我:“Bob 大叔,这个怎么弄?”“Bob 大叔,那个怎么办?”。
后来我离开了那家公司,成为了一名顾问,没有人再叫我“Bob 大叔”了。结果,我还挺想念这个称呼的,所以我犯了个错误,把它加到了电子邮件签名里。
当时我在 USENET 上非常活跃,经常在 comp.object 和 comp.lang.c++ 等新闻组上发文章,大家就开始注意到我的签名里的“Bob 大叔”。有一次我参加一个 C++ 会议,大概是 1990 年,有人从大厅对面指着我说:“看,那是 Bob 大叔!” 我当时心想,天啊,我犯了个错误,真应该把签名改了 —— 但后来我意识到,“Bob 大叔”其实会是个不错的品牌,于是就一直保留了它。
《新程序员》:USENET 可以算是您参与的第一个社交媒体。您和许多传奇开发者一样,很喜欢参与不同的社区或论坛,我曾在 Hash Note 上看到您发帖说:“我就是 Robert Martin,大家可以向我提问。” 当时许多开发者都积极向您提问并参与交流。现在,这种交流似乎变成了