Dave Thomas:一个开发者的为与不为

非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/60099程序员

Dave Thomas是一位程序员,同时也是一位做者和出版人。他和Andy Hunt一块儿开办了出版公司The Pragmatic Bookshelf,他们整个线上业务都是他和Andy用Ruby建立的。他的我的做品包括《Web开发敏捷之道》、《Programming Ruby》。他和Andy共同写做了《程序员修炼之道》,这本书也是The Pragmatic Bookshelf品牌下的第一本书。做为一位开发者,他充满了热情,他相信这是个属于勇敢者的时代。对于业界存在的问题,他痛心疾首,并不断寻求着解决方法。做为一位出版人,他务实、精明,时刻为本身的做者着想,也为像他同样的开发者搜罗好书。他是一位彻彻底底的Pragmatic Programmer。面试

图片描述

你用Ruby干什么?你是如何参与Ruby社区的?数据库

Dave:在过去的8年中,我用Ruby作全部的事!咱们整个的线上业务都是用Ruby写的。若是你成为咱们的做者,咱们用来造成一本书的软件也是用Ruby写的。因此能够说Ruby就是咱们公司的所有。另外,我几乎天天都会写Ruby脚本,这是我生活的一大享受。个人记性不好,若是我生活中能找到任何能够自动化的步骤,我必定会把它自动化,这样个人生活就会更加简单。编程

在开始的时候Ruby社区人不多,第一次聚会的时候大概只有30人。因此参与这么小的社区其实只是和朋友打交道而已。说到开源社区的贡献,我大概写了有四、5千行代码,有一些文档,也提交了一些补丁。另外,我常常参与Ruby大会,而且乐在其中。ruby

你对其余Rubyist有什么建议?你对对Ruby这门语言感兴趣的人有什么建议?微信

Dave:好问题!我最大的建议就是参与进来。这就意味着找到一个你须要作的事,每一个人均可以作到,不是非要是个编程大牛才能够。只要找到一个小bug或者你使用的库没有作你但愿的事情,那你就能够作一个新版本出来,或者把补丁发给做者。若是有一些功能彻底不存在,那么不要只是作出来给本身用,打个包发布给你们。若是这么作的话,你就是社区的一员了。这种回馈不只会让你感受很好,也会帮助其余人。一样,这么作也会帮到你本身,由于你有了名誉和声望,你在社区中也有了本身的位置。网络

你是怎么成功地做为程序员、做者、出版者工做的?这些东西占据的比例是怎么样的?架构

Dave:我睡得很少(笑)。做为一个出版人,个人团队很是出色。首先,咱们都要感谢自动化,咱们多是世界上自动化程度最高的出版公司。咱们整个公司没有一张电子表,这些都要归功于Ruby。好比我知道不少出版商若是要发布一本书的新版本的话,须要在以前工做一两天的时间,而咱们只须要……大概5秒钟。自动化是关键点之一,经过高度自动化,我就有了更多空余时间。另外有不少杰出的人才和咱们一块儿工做,他们工做得比我好。我很幸运,他们能够帮我完成不少工做,因此我有时间空余出来。虽然有一些我必须作的事,可是大部分时间我能够作我喜欢作的。也就是去了解新的科技,和有趣的人交谈,继续探索,说实话……这种生活真的很享受!框架

咱们没有办公室,每一个人都在家工做。因此我早上起床以后,查查邮件,遛遛狗,回来再作事……全部事都是生活的一部分,因此我不用把个人时间分割成8小时工做和下班。其实我天天的工做时间多于8小时,可是事情都是分布在各类时间段里,因此感受起来不像是在工做。当天气晴好的时候,我能够坐在外面边晒太阳,边打字,这样的感受很好。编程语言

做为一个出版人,你怎么策划出下一个选题?

Dave:有两个问题,第一个是须要知道接下来什么才是最有趣的技术;第二个是找到合适的了解这门技术的人来写做。

要想知道什么技术会大放异彩的关键就是要和正确的人对话。我有一条原则,若是我在一个礼拜内听到某种新技术两次,那这种技术就会进入个人候选名单中。每周咱们都会召集咱们全部的编辑开一次会,咱们在会上会讨论这些话题。这时候可能就会有某个编辑说,嘿,刚巧我认识一个这方面的人。不然,咱们就得出去找人了。这可真是个问题,由于知道这些技术的人还刚巧都是些大忙人,他们都在本身的项目上忙着呢。因此,为了减轻他们写书的痛苦,让他们的工做更加简化,咱们提供了一些工具。若是你是一位开发者,使用这些工具是很天然的事。但不管如何,写书都是一项艰难的工做。

如今不少书都在教人如何制做本身的编程语言,操做系统,这样的DIY项目彷佛也不是大牛的专利,比过去更加容易实现了,你对想作这些的程序员有什么建议吗?

Dave:每一个人到了一个时期,都会看着某个项目或者技术说:我能作得比他好。这种可能确实存在,可是90%的多是,他们作不到。由于他们没有理解到这个项目或技术后面的细节以及微妙之处。对于那些能够作到的人,不少人都花上一年的时间,根据某些已有的项目从新实现某些功能。这个项目可能会变好……5%,但我所看到的是,他们在别人的想法上花了一年的生命,而这种提高只是边边角角的。倒不如把这一年的时间花在实现本身的想法上,这样作的话你可能会失败,可是你学到的东西会多得多!若是你没有失败,那你就创造出了一种全新的东西,这是让人兴奋的。

你想作本身的编程语言吗?若是你愿意的话,固然能够。可是现实是,这门语言颇有可能不会大受欢迎。由于有不少人在这么作,并且你成功与否不只在于技术能力,更要靠运气。若是我想贡献本身的代码的话,我不会这么作。由于从个人经验来看,我每一年都会又一次坐在那里勾勒本身的语言,而后我想起来这句话:不要这么干!而后我就会放弃掉。

作本身的语言或操做系统变得更简单了吗?是也不是。可能更难了。创造这些的工具确实是更好了,咱们对于技术的了解也更多了。你能够把你的语言放在JVM上。可是人们对于编程语言的期待也更高了,因此实现起来很困难。因此若是你想投入大把精力在某件事上,我不建议你去发明一种语言,这样作的风险很高。

做为一个出版者,你对于这些自建项目的书也不感兴趣吧?

Dave:咱们每一个礼拜大概都会收到两个这样的提案。他们会说咱们作了一种全新的语言或者框架,关于这个项目我想写一本书。咱们管这些书叫作“我充实的暑假”。一门受欢迎的语言至少须要你花半个月的时间把它发布出来,而后须要至少有50-100个积极参与者。一门语言至少须要这些启动力,才有可能变得被大众接受。若是只有你和你的爱犬喜欢这个项目,那你就还差得不少。为这样的项目写书,不会让它变得更好,只会浪费你又一年的时间。美国有一句谚语叫作:“good money after bad”(陪了夫人又折兵)。因此咱们通常不会作我的项目的选题,这样对于出版社和做者都是一种伤害,尤为是对做者。

Ruby和移动开发结合比较热门,松本行弘本人也专一去作mruby了。请问对Ruby与移动开发的前景有什么见解,须要逾越那些障碍?

Dave:对于移动方面的开发最大的挑战就是没人知道怎么去作。可是不要紧,由于咱们在不断努力尝试,犯错误,而后从中学习。我认为移动不是重要的,而是惟一相当重要的开发。它并不仅是手机,而是分布网络下的各类东西。人们讨论的因特网同样的链接,我认为这种实现的到来会比咱们期待的更快。因此咱们要找到一种编写系统的办法,这种办法能够支持成千上万处理器,它们出如今各类地方,进进出出,而后把他们整合到一块儿,在须要的时候还能够拆分开来。好比当我走入一个房间,而后个人手机,或者设备就开始和这个房间对话,它会告诉我须要知道的信息。我认为这将在不远的将来就能够实现。

在这样的将来中,Ruby的领域在哪里呢?松本在作mruby,这是一种模块化设计语言,因此你能够选择你须要的功能。你能够选择运行,或者把它变得更加轻量。我昨天和他通话时谈到了mruby,他说有一家公司在使用mruby作他们的渲染器,他们把它设置成有45kb的内存印迹,这真是难以置信。这就是Ruby应该发展的领域吗?我不肯定。Ruby最开始应用的领域是比刚才所说的退一步的地方,也就是设备之间的接口。全部设备只是骨架上的皮肉。回归这样的位置也许更好,我但愿Ruby能够从一种杰出的Web开发语言的定位上移开。它并不仅是一种Web开发语言,不能由于rails很红就说它只属于Web开发。Ruby并无改变!它只是用来写Web应用很顺手而已。我以为Web应用在将来可能会降温,因此我也但愿Ruby能够回归本源,而且与时俱进。

pragprog.com前段时间出版了ruby motion的电子书,以后是否有更多相似题材的选题能够先透露一下。

Dave:还有不少。咱们其实很自私,咱们只出版本身感兴趣的书!对于和咱们所作的其余事相关的话题通常都很感兴趣。ruby motion颇有趣,我也想出一本mruby的书。咱们不只关注语言,也很关注语言的不一样用法。咱们这方面的书还不够多,我很期待有人可以提供Ruby,Erlang等等这些语言的成功用例。这些话题老是颇有意思。

你从事开放出版很长时间了,你能介绍一下你的经验,和开放出版在当下的现状吗?

Dave:咱们写书的方式和其余出版商不一样。大部分出版社会对做者说,第一章应该在3个月内完成,第2、第3、第四章要在……因此做者们写完一章就继续写下一章。这样真是荒缪极了。根据咱们的经验,当你写书时(尤为是第一次写书时),你其实不知道书的总体结构会是怎么样的。因此你常常会写下一些东西,而后发现它不该该出如今如今的位置上。因此咱们不会一章一章的写做,而是让做者把主要内容写出来,而后咱们的编辑会和做者一块儿来为书梳理架构。因此咱们不会说“这是本书的前五章”,咱们会说“这是本书50%或60%的内容,也许真实出版后的顺序会大不同,但这些都是书中的内容”。因此当一本书达到50-60%的时候,编辑赞成的话咱们就会把这本书发布出来做为一本beta书。从个人观点来看,这是很容易作到的,只要按下发布按钮就能够了。之因此咱们须要编辑赞成,是由于一般咱们会期待这本书每两三个月就有一次更新,在书出版以前,做者还有更多内容要放进来。

这样作的好处就是,首先从读者来讲,先拿到一本技术书是很重要的,若是这本书足够有趣,就能够先睹为快。从做者来讲,忽然之间,收到上千条的反馈是颇有意义的。大部分反馈可能都是一些小问题,可是曾经有几回,有人明确指出了书中的一些错误,那么做者就须要从新写这个部分。这其实就是咱们想要的。这样作也让这本书吸引到了更多的人。当新版本造成时,编辑们会更新改动日志,而后告知你们新版本已经发布。如今甚至更近了一步,咱们有几本书,它们永远处于持续更新状态。做者赞成,这本书会持续两年不断更新,咱们也会在网站上跟进。咱们不会用传统印刷方法(传统方法意味着每次更新都要印3000册书),咱们会采起“按需印刷”的方式。读者能够说我要这本书如今这个状态的纸质版,而后咱们就会印出来发给他。这种方式真的很受欢迎,惟一的问题就是很难找到能和咱们这样合做的做者。这样作对于做者来讲是有很大回报的,书的销量会有很大上涨。这样书的内容既新鲜,寿命也更长久。人们总会为这样的书蜂拥而至。若是一本书一出来就已通过时了的话,人们就不会再买了。

图灵社区:听起来很不错,这更像是一种产品,而不是一本书。

Dave:你说得很对,这更像是一个软件产品。

图灵社区:在美国还有别家出版社也在这么作吗?

Dave:有的。Manning有“先睹为快计划”,O'Reilly好像也有相似的项目。要知道,好主意老是被模仿嘛!

翻译版的技术书籍上市时间通常要晚于原版一年甚至更久。在出版流程的合做方面,能够在beta阶段就由翻译方介入,加快中文图书的上市速度吗?是否考虑与中文翻译方(图灵)是否有这方面的讨论和进展?

Dave:这个问题咱们每一个礼拜都要被问到。就像上面所说的,咱们的根本问题在于咱们的书不是按章写成的。若是咱们给大家一本书,其中有50%的内容还没有完成,那么一个月后,我再给大家一个新的版本,如今有60%未完成。可是第一章的一半被挪到了第七章,第三章被删除了,第四章和第二章合并了,并且咱们打算给这种技术换个名字……若是大家拿到这样的书,译者可能会出门右转,了却今生。若是大家愿意尝试的话,咱们能够一块儿试验,看这样的方式会怎么样。对于咱们来讲这样作很简单,可是咱们不想为别人制造痛苦。另外还有一个缘由就是,咱们从未卖过一本尚未完成的书,我我的不喜欢销售尚未完成的做品,可是这样作并不是彻底没有可能。这也就是从咱们系统上只能买到已经正式出版的书籍的版权的缘由。个人担心是,这么作有可能会得不偿失。可是若是有人想接受这样的风险,咱们也能够共同来尝试。

现代计算机领域的发展真的像某些“专家”说的那样不多是我的创造历史的时代了吗?你们只能依附于大公司的团队吗?

Dave:我以为这些专家真是错得一塌糊涂。我认为我的才是创造历史的源泉。而大公司只是跟风而至,创造金钱而已。听起来有点愤世嫉俗,可是事实就是,只有我的才有那种勇气和自由来不断实验和犯错。你必须是一个有勇气的人。

若是你从事的是硬件领域的工做,制药、制造这些,固然,你须要一个大公司,你须要价值百万的设备来从事你的工做。可是若是你身处软件行业,你须要什么?一台电脑,足矣!你站在不少巨人的肩膀上,好比Linux, Microsoft,你有用来编译各类语言的免费编译器,你有免费的数据库,你有成功所须要的一切!也许最终确实须要一个团队来把事情作得更好,可是在开始的一两年中,你本身就能够完成伟大的事。事实上我认为,做为我的,成功的概率要比大公司高得多。

你须要亲身体会风险的感受,你处在前沿,同时你也处在失败的边缘。若是你是事务缠身的商务人士,我很难想象你会进入这样的状态。

不少公司在招募新人的时候倾向于找具备技术广度的人,可是做为程序员可能在某一阶段对深刻的研究某些技术感兴趣,对于深度和广度,你认为在什么时间点作这样的抉择比较合适呢?

Dave:个人经验偏偏相反,我认为大多数公司在招人的时候并不看重知识面宽广与否。他们有不少坑,他们只想找到可以填充到那个坑里的萝卜就行了。他们招人的要求很是具体,程序员面试的时候会作一些编程测验,只要他们能作这份工做就能够了。他们填完这个坑,就开始盘算填下个坑。若是你是一位程序员,你想被通常的破公司雇佣,那你只要看看他们的要求,而后把你的经验填进去就能够了。这真是惨绝人寰。

有两种程序员,一种人把编程看成工做,一种糊口的手艺。他们早上上班,而后编程,而后下班。他们在工做之余从不想关于编程的任何事,他们不看相关书籍,也不会和朋友们聊到这些事,这只是一份工做而已。对于这些人,他们在坑里也很开心。可是若是你所说的是优秀的程序员,那他们想都不应想跳到这些坑里去。他们在这样的环境下会窒息。他们须要的是找到那些不根据那些条条框框招人的公司。这样的公司须要的是“聪明人”,能够沟通的人,有激情的人。这也是咱们的目标读者,这也是我想要雇佣的人。

我多是世界上最差的雇主,我招来的人要么就是完美的,要么就是一场灾难。我看人最重要的一点始终是热情。我招的人可能只有一半接受过正式的计算机相关教育,其余的人都是自学的。可是这些自学的人基本上都是更优秀的开发者。

若是你的工做和事业是软件开发,你的热情也在于软件开发。那你就必需要不断学习。若是你不持续学习的话,你就会过期,你的技巧会没有用武之地,你也体会不到乐趣。做为程序员,你应该始终领先于潮流一点点。若是你们都在看Java,你应该学Ruby,若是你们都在学Ruby,你应该看Scala或者Elixir,或者其余什么。有的人会说,我上班的时候太忙,没有时间。我要说,这不是你的工做,这是你的事业,这是你的生活。

现代编程提倡让他人理解最重要,斯坦福大学的老师甚至说注释和代码同样重要。冗长的注释会不会让代码的简洁性大打折扣?

Dave:我不太一样这种说法。我认为注释会让代码更不容易理解。我认为注释是一个借口,为了你表意不明的代码找的借口。若是你认为你的代码很复杂,或者有些问题没写清楚,那你就会想为你的代码写一段注释。别这么作!你的代码有问题,解决代码的问题先,让它变得清晰、易懂。若是某家公司有一个编程标准,说程序员必须为代码写上大把的注释。快停下来吧!这都是些不相干的事。程序员的产出应该是商业价值,注释并无增长任何商业价值。我用注释吗?我确实用,可是极少。基本上,我都是在本身没有能力把代码变得更好的状况下才写注释。对于我来讲,注释是一个“这段代码有问题”的信号。

您以为数学和编程的关系怎么样?最近Google大牛Steve Yegge以为数学很重要,您以为二者关系大吗?

Dave:我不认为数学是必学的功课。可是我认可,有一些人的思惟和软件开发的思路很契合,这种思惟追寻模式,寻找事物之间的联系,能把各类各样的东西结合在一块儿。这可能也是数学家们的思惟方式。可是我知道不少音乐家也可以作到这些。若是有一屋子的程序员,你问问他们谁会演奏乐器,你的结果差很少应该是30-40%。我不知道对于通常人来讲,这样的比例是多少,可是应该达不到这么高。程序员们演奏起乐器来可能比普通人更擅长。个人朋友Chad Fowler(《Ruby编程(第2版)》合著者之一)原来是一位职业萨克斯表演者,他曾经在田纳西的孟菲斯乐团演奏。个人合做伙伴Andy是一位爵士鼓表演者。我认识的不少人都会表演乐器。可能有些人的大脑和思惟方式更适合作这些事。

程序员可能会擅长于数学,或擅长于音乐,可是我不认为必需要有很深的数学功底,才能成为一位开发者。

图灵社区:我在您的网站上看到了您写的音乐。

Dave:是,我是做了一些曲子,可是个人问题是我不会表演。演奏我曲子的是另外一位程序员,如今他正在一个和爵士乐相关的开源项目上。咱们共同创做了这首7分钟长的曲子。

据说您对中国的教育事业很感兴趣,是真的吗?

Dave:我对中国的两件事很感兴趣,不不,实际上是不少事(笑)。 第一件事软件开发,我去过世界不少地方,也见过世界各地的程序员。每一个地方作事情的方式都不同,这种区别一般以国家为界。我想理解每一个国家的文化是如何影响当地的软件开发过程的。这只是个人一个爱好。好比说在日本,那里的文化要求全部人的意见都能统一,甚至是没法统一的状况。因此和那里的程序员交流挺没意思的。他们只能看到须要他们来修补的东西,他们必须是团队的一员。这是不对的,这样的作的结果就是整个的开发流程也会因地制宜,受到影响。我也想了解中国的程序员是如何工做的,可是如今我尚未掌握足够的信息。

至少在美国,在大公司上班的程序员不少都有本身的项目。他们在公司上班的状态也是不固定的,他们常常上一阵班,而后再赋闲在家开发一段时间。我以为这样的混合经历会让他们能够常常换换脑筋。我感受中国的状况可能不是这样,可是我不肯定,我还须要和更多的人交流。

另一件事就是教育。在美国,软件开发在学生中间不是很受欢迎的专业。在大学学计算机相关专业的学生在减小。我认为这是一场危机。由于这就意味着咱们讲没有足够的人才,咱们有可能会落后于世界。这在美国是一个问题,因此我一直都想办法让美国的青少年对软件开发更感兴趣。我一直在尝试,可是始终没有找到好的方法。在美国,女性程序员的比例小于20%,在其余职业中的比例小于50%。我但愿这个情况能够改善,至少能够增长开发者的总体人数。这件事的意义固然不止于此,我不知道形成这样结果的缘由是什么。是遗传生理上的差别,仍是现有软件社区很丑陋,排斥女性加入。我知道中国的状况可能还不如美国。不知道这样的状况经过让青少年增长接触编程的机会可否有所改善。对于有些人来讲,软件会是一件颇有趣的事,毕竟这是为数很少的凭借单枪匹马就能够改变世界的事。你能够改变现实,经过打字,就可以创造一片天地。若是咱们能把这样的思想传递出去,也许就会有愈来愈多的人来学习编程了。这就意味着咱们必需要实现承诺,让公司们明白,软件不是填坑就能够了,要让程序员们有空间发挥本身的热情,创造出更杰出的产品。

从这个意义上讲我确实对教育很感兴趣。好比说在美国有一个项目,让无业和穷苦的人们接受教育,学习新技能。软件是一个学习成本很低的技能。有的机构向贫苦的孩子们捐助电脑,帮助他们学习,这真是好事一桩。让每一个人都有机会接触电脑,不仅是玩游戏,而是亲手创造一些什么。

据说您正在写一本关于用Elixir编程的书,能告诉咱们Elixir最吸引你的地方是什么吗?

Dave:由于我喜欢!这其实就是最根本的缘由。Elixir能让我微笑,因此我愿意和别人分享这样的快乐。对于Ruby来讲也是这样,我想和别人分享这份愉悦。

从另外一个层次说,软件世界在发生变化。每隔两年,计算机的数量就会翻一番。为了适应时代,咱们必须改变计算机工做的方式。在过去,咱们作的就是让计算机变得更快。如今,计算机里的处理器更多了,个人笔记本是四核的,也许明年就是16核或32核的了。因此做为软件开发者,咱们没有选择,咱们须要写出在这些机器上运行良好的代码。这又回到移动设备上的问题,这些代码不只要在不一样的设备上运行,还要在同一设备上的不一样处理器上运行。用传统编程语言,好比Java、C#或Ruby,要写出多核运做的正确代码是很困难的。Elixir是一门以Erlang为基础的语言,Erlang已经诞生了30年。这门语言的很大一个部分就是Erlang虚拟机,它能够支持数以百万计的处理器,它们以极高的效率相互通信。它能够颇有效地调控这些处理器,若是其中一个坏掉了,仍能在不影响其余处理器的状况下继续工做。它也能够改变处理器,而不须要影响到正在运行的应用。因此在电话中转中,不少软件都是用Erlang写的。启动转换以后,运行不会中止。这些都是很好的特性。可是,Erlang语言自己却十分丑陋。虽然确实有人喜欢这门语言,但它对程序员并不友好,至少能够说独树一帜到使人担心的程度了。

Elixir是将与Ruby相似的句法,放在Erlang虚拟机上。这样既能够获得虚拟机的好处,又能够写出更加平易近人的代码。不只如此,Elixir还能够利用虚拟机作到Erlang也作不到的事。在Elixir里什么都是能够改变的,程序员会以为颇有趣,还能够避免Erlang里的重复代码。因此你写出来的代码会更短,也更容易改变。在将来,我以为Elixir能够用在大型分布式系统上面,它能够用在大容量,大量事务的环境中。它也能够为创业者们服务,为他们完成用传统方法没法完成的事。创业者们永远都在找从前没法实现的事,具体是什么呢?我不知道,若是我知道的话就去创业了。他们能够尝试从链接全部东西,和不少东西交互的角度来考虑(好比和洗碗机,或者洗衣机交流)。我对此充满了期待。


更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索