3

请输入图片描述

文:Gracia

导语:本期采访对象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.”

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. 技术人攻略:《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”意味着要时常回顾,从全局角度看问题,并且寻找改进工作的新方法。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

他们可以做到——任何人都可以做到。

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

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

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

这些年轻人了解各个层面的知识,不仅仅是技术上的。他们理解在开曼群岛上注册公司、天使投资以及IPO,3D打印机旁的电脑连着Kickstarter。这些人聪明、热情,并且很努力,一点也看不到懒惰、傲慢以及理所当然的态度。

还有来自香港和台湾的年轻人,他们认为中国大陆才是做事的地方。

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

请输入图片描述


技术人攻略访谈是关于技术人生活和成长的系列访问,欢迎和我们有共同价值观的你关注“技术人攻略”,邮箱 devlevelup@gmail.com,新浪微博 @devlevelup,希望能成为技术人成长的精神家园。
欢迎通过微信公众账号关注技术人攻略

请输入图片描述


技术人攻略
1.2k 声望268 粉丝

技术人攻略访谈是关于技术人生活和成长的系列访问,由独立媒体人Gracia创立和维护。报道内容以“人”为核心,通过技术人的故事传递技术梦想;同时以小见大,见证技术的发展和行业的变迁。在这个前所未有的变革时代...