2006 年,波兰程序员Jaroslaw “sztywny” Rzeszótko (亦称 Stiff)写了一篇文章《Stiff asks, great programmers answer》,不过原英文链接已挂。Dodgy Coder 的博主近期从 Stiff 那得到允许,把文章转发布在他的博客中《Q&A With Nine Great Programmers》。以下为全文。
在一个炎热无聊的下午, 我突发奇想。 我通过公众可以取得的电子邮件地址列表, 向一干牛人们提了 10 个问题, 他们都是我认为很有趣, 而且很佩服的人, 都干了很多大事。 我只用了 5 分钟来准备这些问题 — 这些问题是我打算私底下如果有机会和牛人们说话, 就说谈个 10 分钟吧, 就会问到的, 那时候我也不会有时间去想那么多。 最后的两个问题其实跟编程无关, 只是我碰到谁都会问他的, 算是我个人的爱好好了。 不是人人都想回答这些问题, 没有关系。 这是我第一次”采访”别人, 难免犯了一些小错, 当别人开始回答问题时, 我自己却跑开了…… 但先别管这个, 我从这些东东里学到很多东西, 这绝对是一次价值非凡的体验。
不是每个人都答复了我的邮件, 也不是所有的人都想回答这些问题的, 可能以后我还会收到, 但我实在等不及了, 现在发表的这些可能随时都会更新的哦。(更新:Bjarne Stroustrup 的回复内容于 03.08.2006 补上 —— Jaroslaw)
●Linus Torvalds :Linux kernel作者。
●Dave Thomas:《Pragmatic Programmer | 程序员修炼之道》和《Programming Ruby》和其他优秀书籍的作者。 你可以到这里来了解他的编程思想。
●David Heinemeier Hansson:写了 Rails Framework- 新鲜热辣的 web 开发框架。他的博客在这里。
●Steve Yegge:可能是最不为人所知的, 但也是回答得最有趣的一个, 他的博客很有名, 也是关于编程的。 他也是游戏 “Wyvern” 的作者。
●Peter Norvig:Google 的研究部主管, 著名的 Lisper, 写过很著名的 (至少在某些圈子里) AI 方面的书。 他的博客。(伯乐在线注:他的《Teach Yourself Programming in Ten Years》这篇文章非常有名,对应中文译文我们有翻译《Peter Norvig:自学编程,十年磨一剑》
●Guido Van Rossum:Python发明者。
●Bjarne Stroustrup:C++ 之父,个人主页。
●James Gosling:Java 之父。(个人博客)
●Tim Bray:XML 与 Atom 规范缔造者之一,他的博客。
Steve Yegge:
我自己在一台 HP 计算器上开始编程的, 用他们的 RPN 堆栈语言, 当时 17 岁。 之前也学过几次编程, 但都没有真正去学。 HP 的 28c 和 48g 科学计算器性能强劲, 文档也齐全。 我在 48g 上写了一个 3D 线框查看器 — 我有一本 3D 图形编程的书, Pascal 的, 花了好大力气把书里的例程转成 RPN 堆栈语言。 最后它成功运行了, 真是甜蜜的回忆。 之后我就买了一台 PC 还有 Turbo Pascal, 努力地学习编程。 当我去大学读 CS 时我已经是个象模象样的程序员了。 (注意: CS 不是 Counter-Strike)
后来我去了 University of Washington 并在那里得到 CS 学位。 这是绝对值得努力的, 我建议所有的程序员在条件允许的情况下都要尽力攻读 CS 学位。
Linus Torvalds:
我没在学校里学编程, 大部分是我自己看书然后就动手干了起来(一开始在 Commodore VIC-20 上, 后来在 Sinclair QL 上)。
这么说吧, 我尤其认为大学是非常有用的。 我没有选择上技工学校, 而是上了 Helsinki University, 那里偏重理论, 所以那里的教学并不集中在编程上面(编程只是一小部份, 总之我算是很”不务正业”的), 大部分课程集中在基本概念和诸如复杂度分析上面。
那些东西看起来很闷甚至是在浪费精神, 但我认为很有用, 我非常喜欢它们。 我认为我可能是那方面会做的更好。
David Heinemeier Hansson:
我从建立自己的个人主页开始学习编程。 后来我又想增加一些动态的内容, 就先学了 ASP 再后来学了 PHP。 当我知道怎样编程以后, 我就去攻读一个计算机科学与工商管理的交叉学位。
Peter Norvig:
我在高中和大学里都学过编程, 但总觉得自己是自学的多。
Dave Thomas:
读中学时我在当地一间专科学院上过电脑课。 我整个儿被迷住了: 我爱上了编程, 并四处找开设有软件课程的学校。 后来我上了 Imperial College, London University 的分部。 当时他们才刚开设软件课程第二年, 说起来很难相信: 教职员工和和学生们一起工作, 把那些东西弄好, 大家从中都获益匪浅。 在那里读的本科课程给我打下了强大的软件开发基础。 我本想呆到博士毕业, 但还没等到开始读博士就被人挖走了。
但是问题的重点是”你怎样学的编程?” 真正的是”我还在学编程。” 我想优秀的开发者整个生涯都不断在学习。 这可不仅是学习新语言和新库的问题: 优秀的开发者经年不断的磨练自己的技术, 提升自己的体验。
Guido Van Rossum:
我上了大学, 那里有一台大型主机, 很多计算机课程。 这(上学校)很重要。
James Gosling:
最初我是自学的。 上大学之前我就得到第一份编程工作了。 但我很高兴我上了(大学)。 其乐无穷。 我一直读到拿到了博士学位。
Bjarne Stroustrup
现在?Aarhus ,后去了剑桥大学。学校教给我很多实用的东西,包括我未来工作中用到的基础。此外,我也从为钱而编程中学到东东,理解了现实世界中的问题,正确性、可维护性、实时交付等等。
Tim Bray:
我原来想当数学教师来着。 数学教学大纲里要求学生研修几门计算机课程。 (结果就糊里糊涂成了计算机科学家?)
Steve Yegge:
笔头和口头沟通的技能。 除非你事先把自己的意见清楚地传达给每一个人, 否则当程序员们开始工作时, 你说什么他们都听不见。 程序员应该不倦阅读, 赋诸文字, 上写作课, 甚至学会公开演讲。
Linus Torvalds:
是那种我称之为”品味”的东西。
我向来不以”有多专业”为标准来评价与我共事的人: 有的人很会写代码, 一下就能弄出一大坨, 但他们给别人代码造成的影响则还要更大坨, 而这显然是由他们自己的代码风格, 和他们选择的解决方法所造成的。 这就能告诉我他们有没有”品味”, 而真相就是, 没”品味”的人通常也不太好让他去判断别人代码的好坏, 而他自己的代码到最后也不会是十分的好。
但是, 还有。 有一件事非常重要, 特别是在开源的项目里, 那就是沟通好你想干什么, 怎么干的能力。 向别人解释清楚你为什么非要用某种方式干某些事情的能力十分重要, 并非人人有这个能力。
这么说吧, 到最后也会有人搞出好的代码来。 他们可能解释能力不行, 也没什么品味, 但是代码是可以正常工作的。 这是你往往会需要另一个人(一个”品味”特殊的人)去整理那些代码, 使它的适用范围更广, 而仅仅是写出干净的代码, 解决难题不过是作为程序员必需有的最基本的能力而已。
David Heinemeier Hansson:
强烈的价值观。 有能力问自己: 我做的事情有价值吗? 太多太多的程序员把太多太多的精力浪费在无关痛痒的事情上面。 却忽略了那些真正重要的事情。
Peter Norvig:
我觉得没有, 专注算是吧。
Dave Thomas:
激情。
Guido Van Rossum:
你的问题问得太泛, 无法回答。 :-) 我想有能力煮个鸡蛋当早餐就是无价。
James Gosling:
会自我鞭策。 想真正做得好, 你得热爱你所做的东西。
Bjarne Stroustrup
清晰思考的能力:一个程序员必须理解问题并表述解决方案。
Tim Bray:
以事实为依据, 不跟着感觉走。
Steve Yegge:
数学上有一个分支对程序员非常重要, 它叫”离散数学”或”具体数学”。 包括概率学, 组合学, 图论, 归纳证明和其它有用的东西。 我会鼓励所有程序员去学离散数学, 无论他们能学多少。 即使一点点也比完全不会强。
至于传统数学, 我倒不常用到, 但当我需要用到它就会很方便。 举例来说, 之前我只在工作中用到过一次微积分。 我必需为某个服务从象正弦波那样的曲线图中计算出每日交通高峰期负载。 最简单的方法就是求出特定时间内 1/24 曲线的积分。 如果我不懂微积分, 我就做不出合理正确的估算。
在我写 Wyvern 游戏的时候, 我扎实的平面几何知识作用极大。 日常基本工作中用得更多的是代数和线性代数。 但是很少用到三角学和微分方程, 微积分也很少用。
我会说我的数学基础带给我 5% 至 10% 的进步。 如果我懂的更多, 毫无疑问我会变得更好, 所以每个星期我都抽出几个钟头来学习数学。
我喜欢物理, 毕生都在探索尝试掌握量子力学的基本结构。 但我没觉得物理对我作为一个程序员的工作有任何帮助。 当然了, 如果我在物理领域工作, 象 3D 游戏编程, 或某种类型的模拟, 那就不同了。
Linus Torvalds:
我个人认为扎实的数学基础是好事情。 我不大清楚物理会如何, 但我深信懂数学, 有良好的数学基础有助于使你成为更好的程序员。 如果只是因为它们的思维模式相近似 — 你可以建立起自己想要的法则, 但它必须和自我一致。
David Heinemeier Hansson:
一点用都没有。 至少在商业目的的 web 编程上。 我考虑一个人的笔头功夫好会比这重要的多。
Peter Norvig:
是的, 电脑的很多方面来自数学: 归纳, 递归, 逻辑等。
Dave Thomas:
也许吧。 但是老实说, 我没见到他们之间有多大的关联。
然而, 我的的确确发现一个人的音乐才华与他的编程技能有很大的关联。 我也不知道为什么, 我怀疑大脑的某个区域在提升你音乐才能的同时也会提升你的软件开发技巧。
Guido Van Rossum:
数学, 是的(是一部分; 我不管微分方程, 但是代数和逻辑就很重要)。 物理嘛, 我认为没有, 但保持对不同事物的兴趣是一件好事。
James Gosling:
是的! 它们教会你逻辑和推理。。。 。 拥有火眼金睛。 在分析算法时数学无物可替。
Bjarne Stroustrup
这取决于程序员和编程工作。某些形式的数学分类还是非常有用,物理用的少,但学习物理是学习实用数学的最佳方法之一。
Tim Bray:
就我个人来说, 我几乎从没用过我大学学到的数学知识。
Steve Yegge:
我认为 web 应用正逐渐在变成最重要的客户端形式。 它将会逐步淘汰其它的客户端技术: GTK, Java Swing/SWT, Qt, 当然还有 Cocoa 和 Win32/MFC/等那些依赖平台的技术。
这不会在一夜之间发生。 它会在今后十年里慢慢地朝那个方向前进, 可能到 web 应用完全”取得胜利”之前还需要另一个十年。 工具, 语言, API, 协议, 浏览器技术的发展会远远超过今天你所用到的。 这个差距每年都在缩小, 而我则决定从现在起把我所有的开发工作转移到浏览器上来。
Microsoft 和 Apple 当然不愿意看到这些了, 所以至关重要的第一步就是要使一个象 Firefox 那样的开源浏览器取得统治性的市场份额, 然后还需要一些 Firefox-only 的杀手级应用。 (杀手级应用会象 iTunes, 人人都想用它, 会为了它去下载 Firefox。)
Linus Torvalds:
我不认为会有什么”巨大的飞跃”。 我们已经看到很多可以帮助我们减轻日常工作压力的工具 — 高阶语言或者把简单数据库集成到语言里面可能会是主要的一个。 但大部分喋喋不休基本上没起什么作用。
举例来说, 我个人相信 “Visual Basic” 比”面向对象语言”作用更大。 虽然人们嘲笑 VB, 说它是烂语言, 而他们谈论 OO 语言谈了几十年。
是的, VB 不是很好的语言, 但是我认为象 VB 集成的简单 DB 接口基本上比面向对象重要得多。
所以我想会有很多逐步的改进, 硬件性能的提升也会有助于编程, 但我不指望有什么东西会使生产力大幅度提升或者出现什么革命。
至少当真正的 AI 出现时, 我不认为真正的 AI 还需要你去搞什么编程。
David Heinemeier Hansson:
我尽量不去预言未来。 也不怎么相信运气。 预见未来的最好方法就是实现它。
Peter Norvig:
大规模分布式计算。
Dave Thomas:
电脑编程的下一个热点会被下下一个热点吞掉, 周而复始。 我对不停地寻找热点有点反感, 因为当这样会使人们忘记真正的重点: 打好基础。 我们必需更好地和我们的客户交流, 关注所提供的价值, 并为此而自豪。 做到了这些那开发者就能提供更好的软件更好的工具, 而不需要去担心自己是否跟得上潮流。
Guido Van Rossum:
Sorry, 我对水晶球不敏感。 我曾经在 CGI 发明的 5 年后预言了它。 :-)
James Gosling:
我最关心的两件事是并行复制和复杂度。
Bjarne Stroustrup
我不知道,我不喜欢猜测。
Tim Bray:
不知道。
Steve Yegge:
我刚好有 3 个月时间(作兼职), 我正在学 Dojo (http://dojotoolkit。org ) 和高级 AJAX 和DHTML。 我在做一个巨NB的web应用, 边做边学。 Dojo 真的很酷, 它也一定会与时俱进。
Linus Torvalds:
唔,我真的很喜欢 FPGA 的, 就是一直没有时间坐下来好好地学。 我喜欢直接和硬件对话的感觉: 这说明我为什么最后选择了做 OS, 因为那样(和编译器呆在一起)和硬件的距离最近, 就差你不能亲自去设计和制造它了。
David Heinemeier Hansson:
Mac 上的 Cocoa 编程。
Peter Norvig:
我想多学一点 Javascript。 还有 Flash。
Dave Thomas:
如果”新”指的是 Dave Thomas 的新, 我想去上高强度的钢琴课。
如果”新”指那些技术玩意, 我会选择可帮助残疾人的相关技术。
Guido Van Rossum:
滑雪。
James Gosling:
为了乐趣, 我想学最新的 3D 渲染技术。 我可能会写一个照片-地图渲染器。
Bjarne Stroustrup
在三个月之内,很重要值得学习的东西不多。我认为应当考虑好好完善某个领域的训练。
Tim Bray:
安全, 加密, 数字签名, 身份验证等。 麻烦的是这些东东我从来没学过。
Steve Yegge:
我想如果你停下来想一下为什么运动员不是都一样好的话, 你就会知道的。 爱迪生关于天才的那段话也会给你启示。
Linus Torvalds:
我真的不知道。 我想有些人就是能够更好地把精力集中在那些有用的事情上, 我想他们天生就是会这样。 我认识的很多程序员从小就这样。
David Heinemeier Hansson:
把难题转化成”易”题的能力。
Peter Norvig:
调整头脑去适应问题的能力。
Dave Thomas:
他们关心自己所做的。
Guido Van Rossum:
遗传性头脑结构差异。
James Gosling:
他们深思熟虑。 他们不会仓促行事, 七拼八凑。 他们对结果胸有成竹。
Bjarne Stroustrup
首先,缺乏专业且足够的训练,导致基础太差。第二,有些人有“智慧”(清晰思考和直达事物本质的能力)、经验和工具知识。编程在这些方面有很大空间,因为编程是理论和实践的结合,二者都离不开领域知识。
Tim Bray:
人类思维的多样性令人惊异。
Steve Yegge:
操作系统: Unix! 我用 Linux, cygwin, 现在也用经常用 darwin。 它是无法代替的生产工具。 每个程序员必须学会用 /bin 和 /usr/bin 目录里的所有工具。
脚本语言: Ruby。 我精通所有主流脚本语言: Perl, Python, Tcl, Lua, Awk, Bash, 还有一些已经忘了。 但我是个懒人, 而 Ruby 是目前为止最轻松的, 这是天堂里才有的比赛。
编程语言: 没有我最喜爱的; 它们都不好。 我会选择Java, 因为它强壮, 可移植, 有好工具和库。 但Java不进化就得死; 照现在的样子它不足以长期掌握领导地位。
编辑器: Emacs, 因为当前没用比它更好的。
版本控制: SVN。 Perforce 更好, 但很贵。
Shell: Bash, 因为我实在懒得去学其它的。
数据库引擎: 当然是 MySQL, 没有更合适的了。
其它: 我发现 GIMP 无法评价, 它的不直观也令人抓狂。 我用它多年却总是干不成什么。 但我又离不开它, 真是讽刺。
Firefox 是我工具库阵容中日益重要的一员。 当不得已去用 IE 或 Safari 时我会觉得自己就快死了。
注意这些工具(Unix, Emacs, Firefox, GIMP, MySQL, Bash, SVN, Perforce)都有一个共同点: 它们可以扩展; 也就是, 它们都有 API 可以编程。 优秀的程序员懂得如何给它们的工具编程, 而不仅是用它们。
Linus Torvalds:
实际上我没用那么多工具, 我花了些时间写了我自己的工具。 操作系统这块最大, 还有我自己的版本控制系统(Git), 我用的编辑器(micro-emacs)也是经过我定制和扩展的。
除了那三块, 我最关心的是邮件阅读器。 我一直用 Pine — 不是因为它最好, 而是因为我习惯了, 它也提供了我所需要的一切而且没什么毛病。
David Heinemeier Hansson:
OS X, TextMate, Ruby, Subversion, MySQL。 这就是我当前的组合。 我喜欢那些漂亮而且专注于自己职责的那些工具。
Peter Norvig:
不喜欢全部主流的 OS – Windows, Mac, Linux。 喜欢 Python, Lisp 和 Emacs。
Dave Thomas:
用了Linux 10 年, 几年前改用 Macs 了。 工具不需要好到特别好, 但不能是需要经常去维护的, 而必须是能让人用的。
我不会永远只用一种工具: 我经常尽可能地切换不同的工具以获得更好的体验。 目前我用的是 OSX, Emacs, TextMate, Rails, Ruby, SVN, CVS, Rake, make, xsltproc, TeX, MySQL, Postgres, 还有一大堆小工具。 谁知道明年我会用什么。
Guido Van Rossum:
Unix/Linux, Python, vi+emacs, Firefox。
James Gosling:
这些天来我住在 NetBeans 里面。 他帮我做了我想要的一切, 非常清晰直接和有效。 这是我住过的最舒服的环境。
Bjarne Stroustrup
Unix、sam(一个极简的文本编辑器),当然还得有一个出色的 C++ 编译器。
Tim Bray:
我喜欢类 Unix 操作系统, 象 Python 和 Ruby 那样的动态语言跟象 Java 那种静态类型语言(特别是 Java 的 API), Emacs, 随便, bash, 随便, NetBeans。
Steve Yegge:
老兄, 这问题真要命。 也许是 GEB(《哥德尔、艾舍尔、巴赫书:集异璧之大成》) 吧, 虽然这本书不是严格的编程类书籍。 如果你特指”最喜爱的编程书”, 那也许就是 SICP (mitpress。mit。edu/* sicp*/) 了。
Linus Torvalds:
呃。 我最近喜欢读幻想小说, 或非电脑类的书(旧书一本: Richard Dawkins 的 “The Selfish Gene”)
说到编程方面, 跃然脑海的唯一真正编程书就是 Kernighan 和 Ritchie 经典的 “The C Programming Language”, 因为它实在是太有用了, 而且又薄又耐读。 想想你基本能从这本书中学会我们这个时代最重要的编程语言之一, 而它又是那么薄那么耐读, 这不能不说是一个奇迹。
还有很多我喜爱的书是跟编程本身无关的, 而是关于计算机结构和硬件方面的。 这里面当然有 Patterson 和 Hennessy 关于计算机结构的书, 对我个人而言可能还应该包括 Crawford 和 Gelsinger 的 “Programming the 80386″, 它是我刚开始 Linux 时的工具书。
基于相同的原因, 我还喜欢 Andrew Tanenbaum 的 “Operating Systems: Design and Implementation”。
David Heinemeier Hansson:
我喜欢 《Extreme Programming Explained | 解析极限编程》, 因为它反传统的思想;
《Patterns of Enterprise Application Architecture》, 因为它打破抽象与具体之间的平衡。
Peter Norvig:
《Structure and Interpretation of Computer Programs | 计算机程序的构造和解释》
Dave Thomas:
这取决于你如何定义”最喜爱”。 可能这方面我读过的最好的书是 IBM 的 “IBM/360 Principles of Operation”。
Guido Van Rossum:
Neil Stephenson 的 “Quicksilver”。
James Gosling:
Jon Bentley 写的《编程珠玑》。
Bjarne Stroustrup
K&R 的《C程序设计语言》
Tim Bray:
Bentley 的《编程珠玑》
Steve Yegge:
只有一本? 这不可能。 太多了, 太难选。
这个月我读过的好书有 “Stardust” (Neil Gaiman) 和 “The Mind’s I” (Hofstadter/Dennet)。
我最喜爱的作家是 Kurt Vonnegut, Jr。 和 Jack Vance。
Linus Torvalds:
嗯, 我已经提到过 Dawkins 的 “The Selfish Gene”。 在幻想小说方面, 我读过很多, 都很好, 但是很少有称得上”最喜爱的”。 我很少再去读读过的书, 选择也会随时间改变。 多数是科幻类的, 象 Heinlein 的 “Stranger in a Strange Land” 就是我少年时期最喜爱的, 但现在也渐渐淡忘了……
David Heinemeier Hansson:
“1984″, George Orwell。
Guido Van Rossum:
Neil Stephenson 的 “Quicksilver”。
James Gosling:
“Guns, Germs & Steel”, Jared Diamond
Bjarne Stroustrup
一直在变化。目前喜欢?O’Brian’s Aubrey/Maturin 系列书
Tim Bray:
Ivan Denisovich 的 “One Day in the Life”
Steve Yegge:
最喜爱种类: 古典, 动漫音乐, 游戏音乐
最喜爱作曲家: Rachmaninoff, Chopin, Bach
最喜爱歌手/演奏家: David Russell (classical guitar), Sviatoslav Richter(piano)
最喜爱动漫音乐: Last Exile, Haibane Renmei
Linus Torvalds:
我不常听音乐, 要是听的话, 我会听老摇滚歌曲, 范围从 Pink Floyd 到 Beatles 到 Queen 到 The Who。
David Heinemeier Hansson:
种类很多。 Beth Orton, Aimee Mann, Jewel, Lauryn Hill。 其实, 你看看我举的例子她们都是弹吉他的女孩 。
Guido Van Rossum:
Philip Glass。
James Gosling:
我比较喜欢民谣歌手: Christine Lavin, Woody Guthrie, Pete Seeger…
Bjarne Stroustrup
乐队: The Dixie Chicks;作曲家:贝多芬
Tim Bray:
去看我的博客。
At some hot, boring afternoon I got an _Idea_. With thehelp of public accessible e-mail adresses I asked 10 questionsto a bunch of programmers that I consider veryinteresting people and I respect them for variuos things theycreated. Coming out with question was a 5 minute job for me -these are things I would ask about if I could speak withthem personally for, let’s say, 10 minutes, and I didn’t havetime for thinking too much. The last two question don’t haveanything to do with programming, this is simply somethingI like to know about everyone I talk to, lets say that’smy hobby. Not everyone wanted to answer them, and that’s fine. Itwas the first „interview” I ever made, so I also madesome mistakes, which went out as people started answering… Butdespite of this, I learnt a lot of interesting stuff, soit was definetly a valuable experience.
Not everyone responded to my e-mail, not everyone agreed toanswer the questions, maybe I will also get some answers afterI published this, I didn’t have the patience to waitlonger, so new things may appear here over time.
Finally, here we go:
Starring:
Linus Torvalds - The Linuxkernel author
Dave Thomas - Author of the „PragmmaticProgrammer”, „Programming Ruby” and other great books aboutprogramming. One can read his mainly programming-related thoughtshere.
David Heinemeier Hansson - Author of theRails Framework - the new hot web developmentframework. He has a weblog here.
Steve Yegge - Proably the least known from guyshere, but also made one of the most interestings answers, hasa popular weblog about programming. He is also theauthor of a game called „Wyvern”.
Peter Norvig - Research Director at Google,a well known Lisper, author of famous (in some circles atleast) books about AI. Seehis homepage.
Guido Van Rossum - The Python language creator
James Gosling - The Java language creator
Tim Bray - One of the XML and Atomspecifications author and a blogger too.
And here comes the main content:
- How did you learn programming? Were any schools of any use? Ormaybe you didn’t even bother with ending any schools:) ?
Steve Yegge:
I taught myself to program on an HP calculator using theirRPN stack language when I was 17 years old. I’d tried to learnprogramming a few times before that but never really „got” it.The HP 28c and 48g scientific calculators were pretty powerful andhad great docs. I wrote a 3D wireframe viewer for the 48g— I got a book on 3D graphics and painstakinglytranslated an example program in Pascal into the RPN stacklanguage. It was pretty sweet when I got it running. Afterthat I bought a PC and Turbo Pascal, and started studyingprogramming in earnest. I was a decently good programmerby the time I went into the CS program in college.
I went to the University of Washington and got an undergraddegree in CS. It was definitely worthwhile, and I recommendthat all programmers should try to get a CS degree ifpossible.
Linus Torvalds:
I didn’t learn programming in school, but mostly on my ownreading books and just doing it (initially on a CommodoreVIC-20, later on a Sinclair QL).
That said, I think especially University was very useful.Rather than go to an engineering school, I went to HelsinkiUniversity, which is pretty theoretical, so there the teachingconcentrated not so much on programming (which was justa small part, and which I ended up doing more of „on theside” anyway), but most of the courses tended to be on fundamentalconcepts and things like complexity analysis.
Which can seem boring and even a waste of effort at times,but I think it was useful, and I mostly enjoyed it. AndI think I’m probably a better programmer for it.
David Heinemeier Hansson:
I learned programming by starting to put together my firstweb page in HTML. Then I wanted to make some dynamic piecesand picked up first ASP then PHP. After I already knew how toprogram, I then started on a joint computer science andbusiness administration degree.
Peter Norvig:
I took courses in high school and college, but always feltI learned more on my own.
Dave Thomas:
During my secondary schooling I took a class ina local technical college on computers. It got me totallyhooked: I fell in love with programming, andlooked around for colleges offering courses in software. EventuallyI went to Imperial College, part of London University. It wasonly the second year they’d offered a course in software, andit was absolutely marvelous: the staff and studentsworked together to make the materials better, and everyone learneda lot. The undergraduate course there gave me an incrediblystrong background in software development. I stayed on tostart a PhD, but got lured away by a startup.
But the overall question is „how did you learn programming?” Thereal answer to that is „I’m still learning programming.”I think any good developer continues to learn throughout theircareers. It isn’t just a question of picking up new languagesand libraries: good developers also refine theirtechniques and practices over the years.
Guido Van Rossum:
I went to university where they had a big mainframeand there were various computer courses. This was very importantfor me.
James Gosling:
Initially, I was self-taught. I got my firstprogramming job before I went to college. But I’m gladI did. I had a lot of fun. I kept going untilI had a PhD.
Tim Bray:
I thought I was going to be a math teacher. Themath program at University required a few computer sciencecourses.
- What do you think is the most important skill every programmershould posses?
Steve Yegge:
Written and verbal communication skills. You’ll never make itvery far as a programmer in any field unless you can get yourideas across to people effectively. Programmers should readvoraciously, practice writing, take writing courses, and evenpractice at public speaking.
Linus Torvalds:
It’s a thing I call „taste”.
I tend to judge the people I work with not by howproficient they are: some people can churn outa _lot_ of code, but more by how they react to other peoplescode, and then obviously by what their own code _looks_ like, andwhat approaches they chose. That tells me whether they have „goodtaste” or not, and the thing is, a person without „good taste”often is not very good at judging other peoples code, but his owncode often ends up not being wonderfully good.
But hey, it’s not the only thing. One thing that is very useful,especially in an open source project, is simply the ability tocommunicate well what you want to do, and how you are going to doit. The ability to explain to others _why_ you do somethinga certain way is very important, and not everybody has thatability.
That said, in the end there are also the people who just churnout good code. They may not be good at explaining it, and they maynot even have great taste, but the code works well. Sometimes youneed another person (one that _does_ have that hard-to-define„taste”) to maybe massage the code into a form where it’suseful in the bigger picture, but just the ability to write clearcode for difficult problems is obviously a fairly fundamnetalpart of any programmer.
David Heinemeier Hansson:
A strong sense of value. The ability to ask yourself thequestion: Is it worth doing what I’m doing rightnow? So many programmers seem to waste oceans of time on stuff thatjust doesn’t matter. And not enough on the stuff that does.
Peter Norvig:
I don’t think there’s one, but let’s say concentration.
Dave Thomas:
Passion.
Guido Van Rossum:
Your questions are rather general and hard to answer.:-) I guess being able to cook an egg forbreakfast is invaluable.
James Gosling:
To be self motivated. To be really good, you have to be in lovewith what you do.
Tim Bray:
Ability to prefer evidence to intuition.
- Do you think mathematics and/or physics are an important skillfor a programmer? Why?
Steve Yegge:
There is a large branch of mathematics that’s veryimportant for programmers called „discrete math” or „concretemath”. It includes disciplines such as probability, combinatorics,graph theory, induction proofs, and other useful tools.I would encourage all programmers to study discretemathematics to whatever extent they can. Even a little isbetter than none at all.
As for more traditional math, well, I don’t use it asoften, but it comes in very handy when I need it. Forinstance, I’ve only used calculus once in the past year as part ofmy job. I had to estimate loads for the peak traffic hour ofthe day for a service whose load „follows the sun” in anapproximate sine curve. The simplest way to make the estimate wasto integrate over 1/24th of the curve at a specific time. IfI hadn’t known calculus, I would not have known how tomake a reasonably accurate estimate.
When I was writing my game, Wyvern, having a solidworking knowledge of basic planar geometry was incredibly helpful.And it’s quite common to use algebra and linear algebra ona regular basis. But I rarely use trigonometry ordifferential equations on the job, and not much calculuseither.
I’d say my basic math foundation has made me maybe 5% to 10%better as a programmer. If I knew a lot more math,I’d undoubtedly be a much better programmer than I amtoday, so I study and practice math several hoursa week.
I love physics and I have an ongoing, lifelong questto try to understand the underpinnings of quantum mechanics. ButI’ve never personally found any physics very useful towards my jobas a programmer. That would, of course, be diffferent ifI were doing something in a physics domain, such as 3Dgame programming, or certain types of simulation.
Linus Torvalds:
I personally think a fairly strong math background isa good thing. I’m not as sure about the physics side, but I’mconvinced that understanding math and having a good backgroundin it helps you to be a better programmer. If only because themental models are similar - you can build up any kind of set ofrules you want, but it should be self-consistent.
David Heinemeier Hansson:
Not at all. At least not for the kind of business programmingneeded for web applications. I consider it much more importantthat someone is a good writer.
Peter Norvig:
Yes. Many ideas are inherently mathematical:induction, recursion, logic, etc.
Dave Thomas:
Maybe. But, to be honest, I haven’t seen much ofa correlation either way between these types of discipline andgood software developers.
However, I _have_ seen a strong correlation betweenpeople who have some music in their background and programmingskills. I have no idea why, but I suspect that some ofthe areas of the brain that make someone musical also make themgood at software development.
Guido Van Rossum:
Math, yes (for some parts; I don’t care for differentialequations, but algebra and logic are important). Physics,I don’t think so except it’s always useful to be interested inmany different things.
James Gosling:
Yes! They teach you logic & deduction…. To havean analytical eye. And there’s no replacement for mathematics whenit comes to analyzing algorithms.
Tim Bray:
In my case, I’ve almost never used my university-level math tosupport my programming.
- What do you think will be the next big thing in computerprogramming? X-oriented programming, y language, quantum computers,what?
Steve Yegge:
I think web application programming is gradually going tobecome the most important client-side programming out there.I think it will mostly obsolete all other client-sidetoolkits: GTK, Java Swing/SWT, Qt, and of courseall the platform-specific ones like Cocoa and Win32/MFC/etc.
It’s not going to happen overnight. It’s very slowly been goingthat direction for ten years, and it could well be another tenyears before web apps „win”. The tools, languages, APIs, protocols,and browser technology will all have to improve far beyond what youcan accomplish with them today. But each year they geta little closer, and I’ve finally decided to switch all my ownapp development over to browser-based programming from now on.
Microsoft and Apple definitely don’t want this to happen, soa necessary first step will be for an open-source browser suchas Firefox to achieve a dominant market position, which willin turn require some sort of Firefox-only killer app. (A killer appwould be something like iTunes, something that everyone in theworld wants to use, badly enough to download Firefox for it.)
Linus Torvalds:
I don’t think we’ll see a „big jump”. We’ve seena lot of tools to help make all the everyday drudgery easier -with high-level languages and perhaps the integration of simpledatabases into the language being the main ones. But most of thebuzz-words have been of pretty limited use.
For example, I personally believe that „Visual Basic” didmore for programming than „Object-Oriented Languages” did. Yetpeople laugh at VB and say it’s a bad language, and they’vebeen talking about OO languages for decades.
And no, Visual Basic wasn’t a great language, butI think the easy DB interfaces in VB were fundmantally moreimportant than object orientation is, for example.
So I think there will be a lot of incrementalimprovements, and the hardware improvements will make programmingeasier, but I don’t expect any _huge_ productivity help orrevolutions in how people do things.
At least not until you start approaching real AI, andI don’t think real AI is going to be anything you will ever„program”.
David Heinemeier Hansson:
I try not to predict the future. I’m not a bigbeliever in fortune telling. The best way to predict the future isto implement it.
Peter Norvig:
Large-scale distributed processing.
Dave Thomas:
The next big thing in computer programming will be eclipsed bythe next–next big thing in programming, and so on, and so on. I’mkinda tired of the endless search for the big things, because whiledoing it people tend to forget about the realissues: getting the fundamentals right. We need toget a whole lot better at talking with our customers,focussing on delivering value, and taking pride in what we do.A developer who can do these things can deliver great softwarewith any tool set, and won’t need to worry about tracking the fadsand fashions.
Guido Van Rossum:
Sorry, I’m not much of a crystal ball person.I predicted CGI about 5 years after it had been invented.:-)
James Gosling:
The two issues I’m most concerned about now are coping withparallelism and complexity.
Tim Bray:
No idea.
- If you had three months to learn one relativly new technology,which one would You choose?
Steve Yegge:
I do happen to have 3 months (part-time), and I’m spendingit learning Dojo (http://dojotoolkit.org) andadvanced AJAX and DHTML. I’m learning it by writing a fairlyambitious web application. Dojo’s really cool, and I’m sure it willonly improve with time.
Linus Torvalds:
Hmm. I’d really love to do FPGA’s, but I’ve always been too busyto really sit down and start learning. I love the notion ofplaying with hardware: it’s obviously one of thereasons I ended up doing operating systems, since that (alongwith compilers) is about as close as you can get to playing withthe hardware, without actually designing or building ityourself.
David Heinemeier Hansson:
Cocoa programming for the Mac.
Peter Norvig:
I’d like to know Javascript better. Also flash.
Dave Thomas:
If „new” means „new to Dave Thomas” then I think I’d takeintensive piano lessons.
If „new” means technology stuff, then I guess I’d choosetechnologies related to accessibility for people withdisabilities.
Guido Van Rossum:
Snowboarding.
James Gosling:
For fun, I’d catch up on the latest in 3D rendering. I’dprobably write a photon-map renderer.
Tim Bray:
Security, encryption, digital signatures, identity, etc. It’sa big problem for me that I’ve never learned this stuff.
- What do you think makes some programmers 10 or 100 times moreproductive than others?
Steve Yegge:
I think if you pause to consider why not all atheletes areequally good, you’ll have your answer(s). Thomas Edison hasa relevant quote about genius that might also provide you someclues.
Linus Torvalds:
I really have no idea. I think some people are justbetter able to concentrate on the things that matter, andI think a lot of it is just doing it. Most of the reallygood programmers I know started doing it fairly young.
David Heinemeier Hansson:
The ability to restate hard problems as easy ones.
Peter Norvig:
The ability to fit the whole problem into their heads at onetime.
Dave Thomas:
They care about what they do.
Guido Van Rossum:
Genetic differet brain structure.
James Gosling:
They think about what they do. They don’t rush in and slapthings together. They have a holistic picture of what is to bebuilt.
Tim Bray:
The surprising variability of the human mind.
- What are your favourite tools (operating system,programming/scripting language, text editor, version controlsystem, shell, database engine, other tools you can’t live without)and why do you like them more than others?
Steve Yegge:
OS: Unix! I use linux, cygwin, and darwinall about equally often now. You just can’t beat it forproductivity tools. Every programmer should learn how to use everytool in /bin and /usr/bin.
Scripting language: Ruby. I’m proficient withjust about every major scripting language outthere: Perl, Python, Tcl, Lua, Awk, Bash, andothers I’m forgetting. But I’m really lazy, and Ruby’s by far theeasiest, so it’s a match made in heaven.
Programming language: I don’t havea favorite; I think they all suck. I tend to preferJava because it’s a strong, portable platform with good toolsand good libraries. But the Java language will evolve or die; it’snot good enough as-is to hold the lead indefinitely.
Text editor: Emacs, because it’s the best thingout there today.
Version control: SVN. Perforce is better, butit’s very expensive.
Shell: Bash, because I’m too lazy to learna better one.
Database engine: MySQL, of course. Nothing elsecomes close.
Others: I find the GIMP invaluable, andalso maddeningly unintuitive. I’ve been using it for years and canstill barely do anything with it. But I couldn’t live withoutit, ironically enough.
Firefox is becoming an increasingly critical part of my toolslineup. I feel suffocated when I’m forced to use IE orSafari.
Note that all these tools (Unix, Emacs, Firefox, GIMP, MySQL,Bash, SVN, Perforce) have something in common:they’re extensible; i.e., they all have programming APIs. Greatprogrammers learn how to program their tools, not just usethem.
Linus Torvalds:
I actually don’t end up having that many tools I workwith, and for the many of them I have spent some time of myown to just make them work for me. The OS part is clearly thebiggest one, but I’ve obviously also written my own version controlsystem (git), and the text editor I use (micro-emacs) I’veended up customizing and extending upon too.
Other than those three parts, the only thing I care deeplyabout is my email reader. I use „pine” - not because it’snecessarily the greatest email reader ever, but because I’m used toit, and it does what I need it to do with a minimum offuzz.
David Heinemeier Hansson:
OS X, TextMate, Ruby, Subversion, MySQL. That’s the combocurrently keeping me happy. I like tools that exhibit goodtaste and a focus on the stuff that matters.
Peter Norvig:
I dislike all three major OS - Windows, Mac, Linux.I like Python and Lisp. Emacs.
Dave Thomas:
I switched to Macs a couple of years ago after beinga Linux person for more than 10 years. The tools are notnecessarily better, but they don’t have to be sharpened ormaintained as often, which lets be concentrate on just usingthem.
I’m not a great believer in single tools:I tend to switch around quite frequently just so I canget experience with as many tools as possible. Right now I’m usingOSX, Emacs, TextMate, Rails, Ruby, SVN, CVS, Rake, make, xsltproc,TeX, MySQL, Postgres, and a whole lot of small productivityaids. Who knows what I’ll be using next year.
Guido Van Rossum:
Unix/Linux, Python, vi+emacs, Firefox.
James Gosling:
These days I live in NetBeans. It does everythingI want, very cleanly simply and efficiently. It’s the nicestenvironment I’ve ever lived in.
Tim Bray:
I like Unix-like operating systems, dynamic languages likePython and Ruby and statically-typed languages like Java (inparticular the Java APIs), Emacs, whatever, bash, whatever,NetBeans.
- What is your favourite book related to computerprogramming?
Steve Yegge:
Man, that’s a tough one. Maybe *Gödel, Escher,Bach: an Eternal Golden Braid *(Hofstadter)?Although it’s not strictly about programming. If you specificallymean „favorite book about programming”, then maybe SICP(mitpress.mit.edu).
Linus Torvalds:
Heh. When I read these days, I tend to either readfiction, or non-computer-related stuff (oldie butgoodie: „The Selfish Gene” by Richard Dawkins).
When it comes to programming, the only real programming bookthat comes to mind is actually the classic Kernighan& Ritchie „The C Programming Language” book,because it’s such an incredibly useful book while being so veryreadable and _short_. Considering that you can basically learn oneof the most important programming languages of our times from it,the fact that it’s thin and readable is just a wonder.
That said, many other books I enjoyed a lot were notabout programming per se, but about computer architecture andhardware. There’s obviously Patterson & Hennessy’scomputer architecture book, but for me personally perhaps even moreCrawford & Gelsinger’s „Programming the 80386″,which was what I used when I started with Linux.
For similar reasons, I have a soft spot for AndrewTanenbaum’s „Operating Systems: Design andImplementation”.
David Heinemeier Hansson:
I like Extreme Programming Explained for its rejection ofcommon thinking about programming practices and Patterns ofEnterprise Application Architecture for striking the right balanceof abstract and concrete.
Peter Norvig:
Structure and Interpretation of Computer Programs
Dave Thomas:
It depends on what you mean by „favorite.” Probably the bestwritten book I’ve read in the area is IBM’s „IBM/360 Principles ofOperation.”
Guido Van Rossum:
Neil Stephenson’s Quicksilver.
James Gosling:
Programming Pearls by Jon Bentley.
Tim Bray:
Bentley’s Programming Pearls
- What is Your favourite book NOT related to computerprogramming?
Steve Yegge:
Just one book? You’re asking for the impossible. There are toomany great books out there to choose just one.
My favorite books that I’ve read this month are „Stardust” (NeilGaiman) and „The Mind’s I” (Hofstadter/Dennet).
My favorite writers are Kurt Vonnegut, Jr. and Jack Vance.
Linus Torvalds:
Well, I already mentioned the Selfish Gene by Dawkins. Onthe fictional side, there’s just a lot of books I’ve read andanjoyed, but few I’d say were my „favourite” one. I tend tonot often re-read the books, and the selection would change overtime. It’s mostly science fiction and fantasy, eg „Stranger ina Strange Land” by Heinlein was my favourite one asa teenager, but it’s a bit less clear-cut for me thesedays..
David Heinemeier Hansson:
1984, George Orwell.
Guido Van Rossum:
Neil Stephenson’s Quicksilver.
James Gosling:
Guns, Germs & Steel by Jared Diamond
Tim Bray:
One Day in the Life of Ivan Denisovich
- What are your favourite musicbands/performers/compositors?
Steve Yegge:
Favorite genres: classical, anime soundtracks,video-game music
Favorite composers: Rachmaninoff, Chopin,Bach
Favorite performers: David Russell (classicalguitar), Sviatoslav Richter
(piano)
Favorite anime OSTs: Last Exile, Haibane Renmei
Linus Torvalds:
I’m actually not very much into music, but when I listen toit, I tend to listen to various classic-rockish things,ranging from Pink Floyd to the Beatles to Queen and The Who.
David Heinemeier Hansson:
I like a lot of genres. Beth Orton, Aimee Mann, Jewel,Lauryn Hill. Actually, all those examples would fit under Girlswith Guitars ;).
Guido Van Rossum:
Philip Glass.
James Gosling:
I tend to like folk musicians: ChristineLavin, Woody Guthrie, Pete Seeger…
Tim Bray:
Read my blog.