文章目录
  1. 1. Dave Thomas:生命不息,编程不止
  2. 2. 附:Dave Thomas 妻子的博客文章——The Future

在这个信息爆炸的移动互联网时代,我们身边总会有一些技术圈的大牛出现,介绍他们的文章大多是以技术角度,描述他们的作品多么牛逼,而我们往往除了膜拜也无从知晓这些技术人的成长经历。

带着写一些「有趣」的技术人故事的初心,《技术人创业攻略》的作者张兰开始了她的乌托邦式的旅程。她从 2013 年开始,从 SegmentFault 的创始人高阳,开始了她的访谈之旅。当时张兰并没有工作,每篇访谈耗费她大量精力,最后都免费放到网上供大家阅读。

带着这样的初心,她一直坚持完成了 37 位不同年龄,不同技术领域,不同背景的技术人。在她的采访稿中,她以技术人的真实背景出发,试图揭示出这些人成功的原因。

这些被他采访的技术人里面,包括 SegmentFault 的创始人高阳,七牛云存储的创始人许式伟这些创业公司的 CEO,也包括擅长运营的前端领域的一姐田爱娜,也有深入开源社区,成为 Linux 内核核心贡献者的吴峰光,还有资本领域的天使投资人杨轩。我也有幸在一次阿里举办的技术沙龙上认识了她,继而成为了她笔下的一个技术成长故事。

因为张兰写的这些故事都很有趣,于是有出版社愿意将它出版成书,这就是《技术人创业攻略》。但是张兰的性格里面有着极强的「处女座」式的追求完美的情结。所以这本书整整花费了她将近一年的时间进行重新的内容梳理和再采访。

仅仅为了封面的设计,张兰就多次因为不满意而调整,最后还是找到了西乔设计封面(下图)才满意。此时西乔的公众号已经成为几十万粉丝的大号了,如果你还没有看过程序员的漫画,一定得关注一下:「神秘的程序员们」(coderstory)。

最终在上个月,《技术人创业攻略》终于出版了。不过在本书出版的时候,张兰已经和她老公旅居到了加拿大,开始了一段新的生活。而张兰此时开始学习上了 JavaScript,打算成为了一个前端工程师。她的第一个小作品,是用 DFS 生成的一个迷宫,我专门看了看她的代码:https://github.com/Graciazl/RandomMazeGame/blob/master/script.js,整体的代码风格和结构完全不像是一个初学者。我想这就是我认识的张兰最好的描述:做什么事情都那么认真。

最后我得到了张兰的授权,为大家附上《技术人创业攻略》书中节选的一篇内容。这是书中唯一一位受访的外国人:Dave Thomas,《程序员修炼之道》的作者,让我们看看在张兰笔下的大神是如何成长的。


Dave Thomas:生命不息,编程不止

Dave Thomas,是一位从业近 40 年的大神级人物,他和 Andy Hunt 于 1999 年合著的《The Pragmatic Programmer》(中文译名《程序员修炼之道》),是历史上最畅销的开发指南书籍,曾获得 Jolt 大奖,影响深远。Dave 是敏捷宣言的 17 位发起人之一,Ruby 语言的支持者和传播者,正是他对 Ruby 语言的传播,使 Ruby 逐渐成为与 Perl,Python 齐名的语言。2003 年,他和 Andy Hunt 成立了 The Pragmatic Bookshelf 出版公司,致力于出版软件开发相关书籍,并用开发软件的方式实现了图书出版业的重大突破。

Dave Thoma 是一位令人尊敬的大师,更是一位伟大的程序员。在近 40 年的从业生涯中,他从未间断过编程,并时刻保持旺盛的好奇心和探索新技术的热情。在 Ruby Conf China 2013 大会上,Dave 接受了技术人攻略的访谈邀请,并在回信中 100% 地肯定了技术人攻略 “传递技术热情” 的理念:

“I think your ideas about spreading passion are 100% correct. I would love to help spread this message.”

希望大师的访谈可以鼓励更多还在奋斗的程序员,技术人攻略也会继续把这种对技术的热爱传递给更多的人。

技术人攻略:您从什么时候开始接触编程?编程带给了您什么样的乐趣?在不断超越自我的过程中,是否遇到过什么困难,是否曾有过想放弃的时刻呢?

我初次接触编程是在 1972 年,那时我还在英国上高中。有一部分人提前完成了考试,在学校没有别的事情可做。正巧校园对面的科技学院开设了编程课,于是我们申请了参加这个一周两次的课程。

我最初打算学数学专业,但当我开始编程,我慢慢爱上了它。

那时候我用 Basic 语言,将代码敲到纸带上,通过一台 110 波特的调解器将数据传到大型机上运行。虽然如此麻烦,但我发现编程十分符合我的大脑的运作方式——我喜欢这种创造性和精确性兼备的体验。

从那时开始,我从未间断过编程。我十分确定——除非是在度假的时候,我生命中的每一天都离不开写代码。

我也常常会有感到艰难的时候,但每次考验过去之后,你的技艺都将更上一层楼。所有值得做的事情都是困难的,但克服这些挑战不仅会让你更强大,还会让你变得更加投入。

技术人攻略:我们处在一个快速变化的时代,新的技术层出不穷,程序员应该如何保持和这个世界同步,持续提升自己的竞争力?

想要跟上技术更新的速度越来越难。当我开始编程的时候,主要通过阅读书籍和杂志了解进展,但现在几乎每天都有新概念出现。

但事实上很多的新事物只是人们对旧东西的再发明。我们行业里的许多人,眼光只看向将来,对计算机的历史却知之甚少。这些人想要创造东西(当然是好的),但他们并不知道自己想做的东西在 20 或 30 年前已经实现了。

正因为如此,许多新生成的事物其实并没有那么新。对我来说,要跟上潮流就变得简单了,因为看到它们就会让我想起 “啊,这和 X 很像呢”。

但同时,也确实有一些不错的创新。我每个月总有那么一到两次,会遇到很有意思的东西,让我有兴趣去尝试一下。阅读技术内容是有趣的,但只有通过尝试才能认识得更加深入。

这很花时间,但对于程序员来说这种投入非常重要。如果不这么做,很快我们就会被淘汰。

技术人攻略:在大公司里,职位被划分得很细,例如前端、后端、运维、数据库等,程序员被固定在了公司设定的职位上,您认为程序员应如何提升技术的广度和深度?

专业化分工属于昆虫世界。真正能够改变世界的人:他们具备更加广泛的能力,并能将不同的技术结合起来创造价值。

我认为很多公司并没有意识到这点,他们更乐于创造层级制度和把员工限制在某个职位上。

但是也有些不一样的公司,懂得通过制定目标和提供指导让程序员有最好的产出,而不是监督所有的细节。这些公司理解一个优秀的程序员可以同时胜任数据库设计、规划应用部署,也许还喜欢解决技术支持方面的问题。

我鼓励年轻程序员获取一些在不同的公司工作的经验,以寻找适合自己的工作方式。例如试试在大公司和在创业团队工作有什么不同,甚至尝试下独自工作。一旦你了解了自己适合的方式,就可以找到或者创造出合适的职位,让自己做得更好。

作为一名员工,很容易抱怨自己的公司,或者怀有这样的想法 “我就是一个普通人,没有能力改变什么”。但事实上,你有责任作出改变——让事情变得更好。这种责任不仅是对公司的,而且也是对自己的。看看你是否能让公司有所改变,如果无法改变现状,那么你应该换一个更适合自己的环境。

技术人攻略:《The Pragmatic Programmer》影响了非常多的人,如果这本书出修订版,您打算做哪些改变?今天,一个讲求实效的程序员正在做些什么?

我和 Andy Hunt 常常会讨论这件事。实际情况是,虽然书上的案例看上去古老了一点,但背后的概念仍然很适用。无论你是做 C++ 还是 Javascript 编程,DRY(注:DRY 即 Don’t Repeat Yourself,不要重复自己)原则仍然适用:)

我个人认为可以修改或者去掉一些小的 tips,但没什么大问题。

如何做一个高效的程序员:do what works, and work at what to do。“do what works” 意味着你应该不断问自己 “我正在做的事情有什么样的价值?”,每天都尝试寻找提升所做事情价值的方法。“work at what to do” 意味着要时常回顾,从全局角度看问题,并且寻找改进工作的新方法。

技术人攻略:您是一名技术高手,又拥有自己的软件公司,您觉得程序员应该创业吗?程序员创业有哪些优势和劣势?

这是一个很棒的问题,但我也还不知道答案。

我的一个弱点在于我喜欢让事情保持简单——我认为大多数程序员都喜欢这点。但现实世界——公司运作的世界,并不简单。我不得不克服把事情过度简单化的诱惑,因为我知道这样会让自己错失机会。

我认为程序员从事商业,最重要的强项在于我们懂得事物的关系如何。管理代码的原则,同样可以用在管理公司上,这也是 The Pragmatic Bookshelf 这家出版公司成功经营的原因之一。我们在一开始的时候,并不知道图书出版公司该如何运行,所以我们采用了管理软件公司的方式去产出图书,而不是产出代码。结果,我们将版本控制、持续系统构建,以及全自动化等方式运用在了商业运营的方方面面。其它出版商无法做到这些,我们对于出版行业的无知成为了最大的优势。

技术人攻略:在 Ruby 大会上听说您最近在关注一门新语言 Elixir,它为什么吸引您?您会像推广 Ruby 一样去推广这门语言吗?它是否代表了接下来的技术流行趋势?

我非常确信未来的世界属于并行和分布式,五年之内,还要编写一个从头到尾顺序化执行的程序,这将是一个笑话。

但同时我们并没有拥有真正可以让我们创建分布式和并行系统的工具,用 Ruby 或 Java 写并行代码很容易出错,用 Javascript 也同样痛苦。

Erlang 诞生差不多 25 年了,这种语言的目的就是要进行分布式和并行编程,就是解决大规模和可靠性问题——在后者的环境中,要保持代码一直处于运行状态,即使代码在升级时也是如此。

Elixir 则没有这个问题,这种语言看上去跟 Ruby 很像,非常易于理解和编写。但是它运行在 Erlang 虚拟机上,这意味着它可以获得 Erlang 的一切好处。同时又可以胜任 Erlang 完成不了的任务,它有很强的元编程能力、宏和协议等方面也不错。

Elixir 会统治世界吗?可能不会。但我认为它代表了未来的方向。学习 Elixir 的过程可以让我理解未来的编码方式。五年后我可能不会用 Elixir,但我十分确信我会用一些类似的语言,我通过 Elixir 学到的东西仍然可以帮助我。

这听上去好像是我认为 Elixir 不会流行,但其实我不这么想。到目前为止,Elixir 是我们所拥有的最好的语言和运行时之一。当我没有为(由 Ruby 编写的)已有系统写代码的时候,我会用 Elixir 开发,我十分喜欢它。

我鼓励其他程序员试试 Elixir(或者其它类似的语言),我总是鼓励程序员去学习更多的东西。

技术人攻略:在移动互联网时代,产品的开发模式和以前互联网时代相比,有哪些新特点?

我认为程序员面对的世界和五年前相比有了显著的变化。浏览器基本上还和 IBM 将老式 3270 终端连到主机上的应用一样——你向它发送数据,用户输入一些东西,然后浏览器给出回应。还是以服务器为主。我知道:客户端在不断加入很多令人头痛的东西,比如 JavaScript 应用什么的,但是整体架构仍然一样。我认为浏览器技术基本上已经进入死胡同。我观察身边的人——他们在手机和平板上使用 App,只有在必须用到浏览器的时候才会用一下,移动世界是以用户为核心,而非以服务器为核心的。

在移动 App 上,客户端掌管一切,服务器仅仅作为资源提供方。这要求程序员掌握一些新的技能和技术支持这种结构。在客户端,我们需要通过编写复杂的,异步的应用,并且将这些应用运行在一系列不同的设备上(不仅是手机和平板)。在服务器端,我们需要从 Rail 风格的应用转向更灵活、更多以联合方式运行的架构。(这正是 Elixir 令人兴奋的原因之一。)

技术人攻略:去年的 Qcon China 上,您谈到了敏捷的腐化和到底什么是敏捷,有没有哪些软件项目领域,是敏捷开发模式不适用的?

你的问题认为,“敏捷” 是一种东西。

真相是,“敏捷” 并不存在。它不是一种 “东西”,不是一个名词。人们是把它当成一个名词开始用起来的,但是他们并不理解背后的含义。

“敏捷” 不是一种东西,敏捷是一个形容词——它描述了一种东西。你可能有一个敏捷的团队,或者一种敏捷的过程,但你却从来不是 “敏捷”。

这是什么意思?这意味着那些向你硬推 “敏捷” 这个名词的人在撒谎,因为 “敏捷” 是买不来的。

相反,敏捷是因人而起的——它来自于那些希望把事情做得更好的个体。这些个体观察如何做事,并寻找改进事情的方法。Kent Beck 说这需要勇气,他说得没错。每当你尝试做出改进,你都在尝试改变现状,你将直面风险,你挑战了那些和你共事的人,他们也会用挑战来回敬你。

但是,我认为:在任何环境下,这些挑战和相关的讨论都是合适的。

技术人攻略:您接触过中国的程序员吗?您觉得他们和西方的程序员有哪些区别?

我喜欢来中国的原因之一,就是可以和这里的程序员交流。

这次的中国之行,我们在一家创业孵化咖啡馆(注:车库咖啡)渡过了非常愉快的一段时光。大家的活力和热情让我和我的妻子非常震惊,她甚至还为此写了一一篇博客。

西方的程序员也拥有这样的热情,但我在中国遇到的程序员表现出更多东西。或许是因为中国程序员要在更困难的环境下工作,又或许是因为中国的市场正开始爆发。不管是因为什么,我总能从中国程序员身上感到更多能量。

中国同时还有另外一类程序员,我在和他们谈话的过程中注意到,他们把工作当成任务。或许在家庭的推动下进入这个可以获得一份 “好” 工作的行业,或许想在一个大型机构里寻求安全感。不管是出于什么原因,这类程序员身上都缺乏激情,缺少一份对他们所作事情的热爱。这令人伤心,因为写程序真的是一件非常有成就感,非常让人满足的事。我建议这些程序员们看看我妻子的那篇博客上的照片,问问自己是否也愿意加入其中,是否愿意向桌子对面的人分享自己的新想法?
他们可以做到——任何人都可以做到。

采访时间:2013 年 11 月 7 日

附:Dave Thomas 妻子的博客文章——The Future

晚餐过后,大会组织者将我们带到了一个创业孵化器——一家大型的互联网咖啡馆,年轻的中国技术创业者们在这里工作、和投资人会面、推销想法、编写代码——这些事情都同时进行。这一切简直是太赞了!星期天晚上的 11 点,我们走进了这个灯光昏暗、大堂几乎没有家具的路边办公室。穿过后门,上了楼梯,直接加入了充满创业热情的人群。我们比房间里的人年长得多,他们有着令人惊叹的能量,几乎所有的人都在参与创业项目。他们出来聊天,碰撞想法,并马上付诸实践。Dave 被包围了,起先,我以为他们是在寻求某种投资。但并不是——我彻底错了。我们听到,并不断听到,想投资他们的人比他们需要的多得多。他们想了解 Dave 对自己创业项目的看法,他的祝福和他的批评——他们十分投入,期待成功。他们想有所成就,而且他们每个人都有非常棒的,独特的事业。

在一个角落里有一台 3D 打印机——正在做一个脊椎。另一个大的角落作为演示区域,配置好了笔记本的投影。后面的墙上是一组技术书架(他们向我们保证,有许多 Pragmatic 出版的书)。这里的环境是随性而自然的——桌椅随意摆放,人们可以根据讨论需求随意组合。

这些年轻人了解各个层面的知识,不仅仅是技术上的。他们理解在开曼群岛上注册公司、天使投资以及 IPO,3D 打印机旁的电脑连着 Kickstarter。这些人聪明、热情,并且很努力,一点也看不到懒惰、傲慢以及理所当然的态度。
还有来自香港和台湾的年轻人,他们认为中国大陆才是做事的地方。

我对此毫不怀疑——他们说得很对。