大师访谈录

这本书比《编程大师访谈录》要好,内容上结构化,从软件工程师职业发展不同阶段来介绍内容,一位大师的访谈和一篇总结交替,对于不同年龄、不同阶段的从业者来说,都能够根据自身的问题找到参考内容。

它能够帮助我们在职场上获得最大的成功以及最大的影响力,这是一本值得购买收藏的书。

书摘

p5 几乎我采访过的所有人都谈到了寻找自己喜欢的工作的重要性

p7 无论什么事,乐在其中都是事业成功的关键

Brad Fitzpatrick

Brad 生于 1980 年,5 岁时就在一台自制的 Apple II 克隆机上学习编程。十几岁时,正好赶上了因特网革命的大潮,高中时就建立自己的第一个商业网站,在进入大学的夏天创立了著名的社区 LiveJournal。

由于 LiveJournal 越来越流行,Brad 开始学习构建可伸缩网站,期间他和他创建的 Danga 交互技术公司里的程序员们开发了几个开源软件,包括 memcached、Perlbal 和 MogileFS。

Brad 是极富才华的程序员,很早就展现了天赋。高中参加 AP C.S. 考试得了 5 分(满分),考试内容是写一个大整数类。这道题目即使是现在也经常在面试题中出现。

高中就在在 Tektronix 工作,业余时间凭借兴趣开发了可以免费投票的软件 FreeVote,一出世就非常流行,Brad 凭借在 FreeVote 上的 Banner 广告收入颇丰。大一就去 Intel 实习了。

运营网站过程中,遇到的问题是 CPU 和 IO 瓶颈

我在 Google 时重写了 memecached,让它能同 Google 的基础设施协同工作,并将其加入到 App Engine 里。这里全部使用 C++,因为我需要对内存进行独占式控制,这样可以减少碎片,我很欣慰 C++能够做到。

memcached 并没有太多代码,所以直接用 C++重写能更快些。重写后代码差不多相当于以前的一半。

我遇见过很多聪明的人,我觉得他们是好程序员,但是他们只懂 Java。他们解决问题的思路被局限在他们的知识范围内。他们不会全面地思考问题,虽然你不用操作整个系统,但对其有所了解还是很有必要的。

我还记得数据库老师是个完全没有实际经验的人。那时我用过 Oracle、MySQL 和 MicroSoft SQL Server。我会问一些我希望得到答案的、我们网站遇到的现实问题,但他只是给我一些书本中的答案,我只能说:“不,不,那样没用。”

我和我的朋友们还是会互相转发好的论文,不久前我读了一篇关于运行时调整布隆过滤器大小的新技术文章。我会去读那些来自存储会议、业界和学院的论文,那些关于不同系统的论文。Google 有很多阅读小组-系统阅读小组或者存储阅读小组。我会看 Reddit 上的文章、朋友转发的论文,或者博客上的链接。

对于那些自学的程序员,你有什么建议?

要试着做点更难的东西,超出能力范围的东西。要多读代码,我以前常听人这么说,不过那时一直没有静下心来去做

我意识到看完别人的代码后,我并不需要记住它们,我开始去了解模式。看着它们的代码,我要明白他们的代码结构

关于招聘

我总是找这种类型的人,他们会做很多别人没有要求他做的事,不仅是学校的项目或者是前雇主要求他做的。他们对某些事情充满激情,有额外的项目。我问清楚他们如何维护它,对它有多上心,还是就草草调整随后放弃它们。

程序员最重要的技能

像科学家那样思考,一次改变一样东西。有耐心,试着去了解问题的本质

要学会交际,那些会交际的孩子一生都能赚钱,而不是那些成绩好的。我觉得这个结果很有意思

Douglas Crockford

《JavaScript 精粹》作者,发明了 JSON,资深 JavaScript 架构师。从电视广播专业转到 CS 专业。

当今世界快被计算机控制了,为了保护自己或者让自己更加全面,你应该了解这些东西的工作方式

笔者注:AI 时代来临,当今世界很快被 AI 控制,要试着了解 AI

软件的发展速度要比摩尔定律慢很多,花费了我们 20 年的时间才使软件开发速度翻了一番,但至少已经看到了改进。

看看编程技术的历史吧,首先使用机器码,然后是符号化的语言,接下来是高级语言,后面是结构化编程,现在又来到了面向对象编程的时代。每次前进都需要一代人的时间。

招聘、学习

在招聘人员时,我采取的手段就是代码阅读。我会让应聘者带来他们写过的优秀代码并带领我们阅读这些代码。

对于自学程序员,要多读。现在有不少好书,去找些书来看吧。如果从事 web 开发工作,请找一些优秀的站点,看看他们的代码。

Brendan Eich

Eich 是 Mozilla 公司 CTO,JavaScript 发明者。拥有坚实的理论基础和较强的工程实践能力。他希望 Mozilla 项目能够“引领科学方向”,吸收更多具有务实精神的研究机构人员参与到 Mozilla 当中,让理论研究和行业实践结合得更紧密。

他觉得做程序员跟学声乐差不多,练习更重要。当然,读别人的代码也可以学到不少。我总觉得编程算是工程学,还有点数学,然后这里面有很多应用性的东西

招聘

公司一个技术大牛推荐的候选人,这个孩子是很不错的实习生,他做过不少东西,会 OCaml,研究它的运行时、本地方法、还在用 OCaml 写操作系统。牛人会彼此欣赏,厉害的人只愿意跟厉害的人一起工作。

谷歌用题目做第一轮筛选,他们会招到不少“答题高手”。但是有些人市井般的精明其实没有必要,我们应该有更成熟的评判方式。

Joshua Bloch

Google 首席 Java 架构师。读博时参与设计了 Camelot 分布式交易处理系统。

如果语言周围没有形成社群,这通常表明,要么这个语言无人问津,要么就还很不成熟。语言繁荣发展,就会自然地表现为出现越来越多各式各样的社群。

我喜欢写小的程序,代码库之类的。