小王子之程序员版

【伯乐在线提示】:本文较长,Fred Hebert 仿照《小王子》小说,写了一个小程序员在学习软件开发中的各种历险,分了 11 个小故事。正如读者 lei 的评论所言:所有程序员都是文中这些人的缩影。

补充:《小王子》是法国作家安托万·德·圣·埃克苏佩里于 1942 年写成的著名儿童文学短篇小说。本书的主人公是来自外星球的小王子。书中以一位飞行员作为故事叙述者,讲述了小王子从自己星球出发前往地球的过程中,所经历的各种历险。

 

 

printf-nocover

第 0 章

我出生在电子游戏和电脑泛滥年代之前。所以我还算幸运,有足够的时间和我哥,还有小伙伴们一起做户外运动,还发明我们自己的游戏。

我们自己扮演英雄,拿着一根树枝,我们就能瞬间把它想象成弓、剑、枪,甚至是望远镜,当然也可以是任何其他东西。哦,对了,唯一的例外就是你不能把它想象成回旋镖,因为真的回旋镖扔出去是会自己飞回来的,但是树枝扔出去了,你要自己去捡回来。

boomerang

后来我们就长大了,再这么玩就有些尴尬了。要知道,在孩子们开始觉得大人的世界很精彩的阶段,你要是再玩那些把松果想象成魔法手榴弹的游戏,这就很不合群了。迟早你要面对成长的烦恼。不过,能有一个完整的童年还是很幸运。

后来我就开始学会玩电子游戏了,当然也开始使用电脑。电子游戏的世界可绝对是你梦寐以求的世界,因为它能把你想象中的东西在你面前实现出来。玩游戏很消耗时间,但是它绝对会让你体验到不同的人生。

不过对于电子游戏来说,有一个特点:那就是你不负责创造,你只负责响应和付出时间。我长到青少年的岁数,还当过即兴表演的演员。所以说,无论是与人相处,还是装作旁若无人,这对我都不是问题。

improv

当然,在魁北克做即兴表演还是有点儿不同寻常,因为我们是在溜冰场地上表演——你知道冰球在加拿大多火吗。

后来我去了职业学校学习多媒体,大概是 2005 年到 2008 年这个时段,我终究还是要做些编程的事情。不过我发现编程是个有意思的事情!我又感觉到了创造性!并且我还能靠这个赚钱!于是我设计了我的第一套游戏,这可让我受益匪浅。game

不过后来又有人告诉我:“你做的并不是真正的电子游戏。你做的只是一个 HTML 表单。而且你做的时候应该用数组来表示文字和选项,这样效果会更好。你写的代码应该更整洁一些。”

我对这个评价觉得有点儿沮丧。我做的这个游戏是一个基于文字的游戏,文字大概有 11 页,通过选择来“进行你的冒险”。不过我意识到,如果想让大家对我做的东西更加满意,我还有很多东西要学。

我应该学一些“真正的编程知识”。于是我从基于JScript 的 GUI 工具跳到了一些更牛的东西上面,例如 PHP。我学了 PHP,同时也学了 JavaScript。可是后来,我听说这些还是不行,我还得学一些“真正的编程知识”。别人跟我说,PHP 不行,我应该学的是 Python,当然后来我真的去学了。

不过“真正的程序员”还会一些更时髦的东西,Python 的 Lambda 可到不了那个逼格,而且面向对象编程模式简直就是弱爆了。人家告诉我说,我应该去读一读 SICP,毕竟这是计算机科学的圣经嘛。

sicp

然后我就接触了 Scheme。我还买了 Brian Kernighan 和 Dennis Ritchie 合写的《The C Programming Language》,因为真正的程序员就是要用 C 语言写程序的嘛。我还在本地大学报了一个业余班去上课,同时我还得去上班,因为真正的程序员都是很懂数学和算法的嘛,所以我也得学。我开始读论文,看书,因为真正的程序员在算法这件事情上肯定是与时俱进的啊。

后来,我学了 Erlang 语言,而且还靠这门语言找了份工作。我写了一本 Erlang 的书。不过有意思的是,从来没人问过我是不是这本书的作者?我还有没有写其他的书?或者书里的图是不是我画的?好吧,我找到了一份教 Erlang 语言的工作,但是却从来没有在生产环境中用过这门语言。

第 1 章

我就这样一直在全世界飞来飞去,教给别人一些连我自己都没有做过的事情,结果突然之间大家就觉得我也是真正的程序员了。要知道我的工作一开始和写程序是没什么关系的。

有一天,我参加完某个技术会议回家,然后被滞留在机场了,正当我气急败坏地在电脑上打字的时候,突然听到了一个奇怪的,但是很绅士的声音对我说:

“能帮我设计一个系统吗?”

“啥?”

“设计一个系统!“

我被这个请求惊呆了,于是抬起了头。我环顾四周,看到了一个小孩,他非常希望成为一名程序员,然后他说我可以叫他”printf”,当然,我觉得这肯定不是他的真名,而且这个名字也挺蠢的。他看上去长得这个样子:

printf-end

”我不是很懂电脑,但是看上去你很懂。我想写一个博客程序给大家用,然后还想让大家阅读这个博客。所以麻烦你帮我写一个系统吧。”

这可是一个让人吃惊的请求,可能是因为我已经 20 个小时没睡觉的原因,我还不是很理解,或者说我感觉还是很不真实。我跟他说,这可不是简单的事情。我不太清楚他到底要做什么?有没有考虑过失败了怎么办?这个博客要支持多少人同时在线阅读呢?服务器的主机放在哪儿呢?在缺乏这么多信息的前提下,我是没法设计一个合理系统的。

“这些都不重要。就给我设计一个系统就好。”

好吧,那么我就画了一个系统的架构图:

arch1

他看了看,然后说:“不行,这个系统还不够好。给我再做一个吧。“

然后我就又做了一个:
arch2

接着我跟他简要解释了一下这个系统是如何工作的。

我的新朋友礼貌地笑了笑,说:”这不是我要的系统,它太复杂了,好多功能我其实都不需要。“

我听了感觉气不打一处来啊,我可是考虑了冗余、系统监控、备份、缓存还有很多其他的机制,来降低负载,减轻额外的处理器负担,并且还能对系统进行有效保护,失效备援,易于部署等等。要知道,如果平时我给人拿出这种方案,那可是要收咨询费的!好吧我失去耐心了,然后我就画了下面这个图:

blackbox

然后我还补充说:“这就是你要的设计。你要的系统就在这个黑盒子里。”我希望这个设计方案能让他放过我。不过我听到了一句非常意外的回答:

“没错!这就是我要的系统!”

这就是我和小 printf 初识的故事。

第 2 章

我迅速地对小 printf 做了点调查。发现他之前写的东西都是些小程序,基于表单的小网页,还有一些无关紧要的命令行工具。这些东西平淡无奇,就算是做出来了也很快会被人忘记。

然后突然之间,他就开始做包含好几个模块的大项目了。这个项目要用到 sockets,要能访问本地硬盘,而且还要和数据库交互。程序刚一做出来的时候,小 printf 还觉得很神奇。但是即便如此这个项目还是差强人意。

这个项目还需要重构,需要更细致的测试,需要更完备的文档,需要更好的包装和分析。项目上线已本来应该正常运行,但是某一天早上,它崩溃了。

接下来就是各种崩溃,崩了又崩。

系统配置不对,日志界面也不再滚动,磁盘速度忽快忽慢,网络不定时抽风,bug 开始各种出现,系统编码也让人匪夷所思,数据库需要清理,事务也被挂起,证书过期,各种漏洞开始暴露,系统监测则什么动静也没有。

spaghetti

系统开始变成一锅粥了。

他对我说:“事实上我什么都不懂!我本应根据我的需求来做判断的。我太想做一个完美的系统,花了这么多的时间,结果却是‘磨刀误了砍柴功’。当然,我还是知道这个系统的美妙之处的。“

于是一天早晨,他决定离开办公室。他对着一大堆电脑指示灯说了「再见」。他离开是为了要看看,除了他那乱糟糟的服务器之外,软件的世界还能给他提供些什么好办法来实现他的系统。

如果照现在的情况,只会是日志继续不停地累计,直到硬盘存爆了为止。

第 3 章

building

他来到了一个工作区,想找个经验丰富的人指点迷津。

他找的第一个人是一个超级自信的高级工程师,他看上去地位很高的样子。

pro”啊,来向我取经啊!你可找对人了,我可是这个领域的专家!“这个人说。

”专家?”小 printf 问到,”这就是说你什么程序都能写,什么程序都会写?“

”那当然!“专家回答到。他补充说:”总的来说,我只写那些值得写的程序。我可不写那些没意义的东西。我能写但不写的那些程序,都是因为太简单,所以不劳我动手。“

”啊,那你能帮我看一下我的系统吗?”就在小 printf 开始阐述他的系统的时候,这位专家打断了他:

“抱歉,我真心觉得这么做没什么意义。”

“为什么?”

“因为经验。我善于编写我善于的程序,我给我善于编写的东西编程。我要严格限制我只做我擅长做的事情,这样才能变得更好。我管这个叫做‘职业安全’,这就是程序界的适者生存原理,而且这一行就是这么玩的。“

”那你为什么不能帮我呢?“

”好吧,你看,如果我花时间帮助了你,那么我就会让我的技术自我投资的方向发生分散和偏离——这对我来说是失策。对于你来说,最好的学习方法就是我当年做的那样:通过痛苦的努力来找到解决的办法。这有助于锻造你的个性。“

”但是这样效率好低。“

”好吧那你就去学校学,你也可以自学。但是无论哪种做法,都只是把那些想不劳而获的懒人踢出去,让真正愿意踏实学习的人留下来。如果不是这样的话,那我坚持恪守的价值观就会随之崩溃。“

”那你觉得跟人合作,或者是你的同事能不能帮助你?“

”并不能。我工作状态最好的时候其实是我一个人独自待着而且没人打扰的时候。每次我被迫和别人一起工作的时候,几乎可以肯定我们做的东西没法凑到一起。最后只能是我怒了,然后把他们写的东西又自己重新再写一遍,然后这才能行。“

小 printf 对这个专家不愿帮助别人的态度感到非常意外,而且也对专家描述的周围的人能力如此之差感到很困惑。专家把自己的全部视野只集中在自己擅长的领域,只解决自己能解决的问题,这听上去有点儿悲哀。

”我明白了…我觉得你别给我帮助的话就最好了。“ 小 printf 说到。

”你什么意思?“自带高大上光环的专家似乎感到了自己的价值观受到了挑战。”你是说我的做的工作毫无趣味可言吗?“

”哦,并不是,你做的工作很有趣。不过从你的眼光中看来,我只是一个烦躁而讨厌的家伙。我是来寻求帮助的,不是来找罪受的。“

小 printf 迅速地离开了这个专家,因为他明白,除非你在他的”职业安全“范围之内,否则根本就不能碰他。

第 4 章

books

在继续寻找帮助的路上,小 printf 来到了一个办公室的的门口,办公室里四面都是书架,书架上放着装帧优美的硬皮书,书上有各式各样的精美图画,一个人坐在办公室里面。

“先生你的书真不错啊“小 printf 说。

”谢谢!我觉得这些书都是程序员必备的材料。如果你没有这些书,你都不好意思跟人家说你是真正的程序员。“

”啊,那我觉得我可能就不算是真正的程序员了“,小 printf 说,”那你最喜欢哪本书呢?“

”哦,大部分书我还没看过呢。“

”那你不是个优秀的程序员咯?“

”啊不,我不是。“这个开发者骄傲地补充到:”实际上,我是个糟糕的程序员。“

”真遗憾,“,小 printf 说,”我可是不断在进步呢。“

“你听说过 Dunning-Kruger 效应没?”,房间中的人问到。

“没有,那是个啥玩意儿?”

“就是一种认知偏差。它的意思大概就是说,那些能力不太强的人更容易高估自己,而能力很强的人更容易低估自己。”

“所以按照你的意思,如果我认为我在进步,其实是因为我不够好造成的?”

“是啊,就是这个意思。很可能就是你其实能力不强。而我,我公开声称自己是一个糟糕的程序员。但是根据 Dunning-Kruger 效应,我很可能是在低估我自己,这就意味着我其实是一个很棒的程序员,你还不明白吗?”

“为什么会这样?”

“那是因为自黑是程序员的一大法宝。当你自我感觉良好的时候,你实际上已经停滞不前了。”

“但是这样一来不就意味着,一旦你自己感觉不错的时候,你就开始走下坡路了,所以你应该让自己感觉糟糕起来吗?”

“对的。但是这件事情正确的做法是,你要对任何东西都说很糟糕,即便是你不知道怎么解决问题也要这么说。这样就能让你看上去很聪明,而且又并不用真的做什么。“

”能具体解释一下么?“

”比如我在网上看到了一个让我不爽的项目。然后我就说这个项目所有的地方都不对,但是又并不具体说哪儿不对。我只需要轻描淡写地说,因为做这个项目的人本身就是个白痴,就这样就可以了。“

“但是你这么说,别人怎么会信呢?”

“哈哈,我觉得他们都愿意相信他们做错了,而且他们也愿意让别人指出来。这就有点儿像烟雾或者镜子。实际上没人知道自己做的东西是啥样,他们只能知道自己做的东西看上去是啥样。”

“那么如果他们说他们没法解决问题,让你来帮他们的话,那你怎么办?“

”这样的话就又回到了一切事情都很糟糕的那个问题;你就说你很忙,有很多事情要做,然后你还很悲观。这样的话,他们就只能靠他们自己了。“

”所以说这一切都只是摆个姿态而已?这对你来说只是一个套路?你懂的时候装作不懂,是为了让真正啥都不懂的人失去信心,你不懂的时候装懂,是为了让真正懂的人感觉糟糕。“

”在大多数情况下,有能力没什么用。只有名声才是最重要的。老板招人的时候喜欢招自己的朋友,公司裁人的时候不招人喜欢的和不被重视的人会先被裁。这就是规则。如果你想改变社会的规则,你就会成为异类。这就是套路。业界就是这么运作的,学术界也大致如此,尽管这些都是潜规则,但是我还是都看出来了。一切都取决于你认识谁,如何推销自己,如果经营你的个人品牌。只有这样你才能在业界拥有一席之地。“

”如果我必须要觉得自己很糟糕,而且还得让别人觉得很糟糕,这样才能找到工作的话,那我想还是算了。“小 printf 说完就走开了。

第 5 章

realprog

接下来就是午餐时间了,printf打断了一个全神贯注工作忘记吃午饭的人,他一直盯着屏幕,饭都已经凉了。

工作这么忙碌的人应该很擅长软件行业。于是小 printf 问到:

”如果主数据库崩溃了,那从数据库也会崩溃么?“

”你运行的一切东西。“这个忙碌的人回答说,”迟早都会崩溃的。“

”那么那些告诉你程序崩溃的程序呢?它们也会崩溃么?“

”是的,它们也会崩溃。所有的大型系统在任意时刻都处在某种部分崩溃的状态。“

”那么,我们搭建可靠系统(reliable system)的意义在哪儿呢?“

这个忙碌的人不知道,他也在思考同样的问题,因为就在此时,他们又接到了一个问题,说是一朵云坏掉了,造成了天空塌下来砸到了头上。

”那么,搭建可靠系统的意义到底在哪儿呢?“小 printf 追问到。

这个忙碌的人此时一脸的不爽,一看就是在工作遇到问题的样子。他就像一个放了学被留下来不让走的孩子,而且他的三明治显然是废了。他很不耐烦地大声回答说:

“显然没有任何意义。因为程序本身就是一坨屎。”

“噢!”他倒抽了一口气。

接下来,就是一段完全的沉默。

trashcan

小 printf 打破了沉默,并且带着一丝愤怒:

“我不相信你说的话。程序确实是脆弱的,但是程序员能够通过努力让程序变得更好且可用。”

没有回应。这个时候忙碌的人已经打开一个文档,查看如何从头启动一个集群备份,情况似乎变得越来越糟糕了。

“那么你真的相信可靠的程–”

“噢不!”忙碌的人说,“不不不!我不相信什么好的或者可靠的程序!再也不信了!它们都不行!我告诉你我现在脑袋里想的就是怎么处理手头的这个垃圾系统。你没看到是我在努力维持让这些东西运行吗?这些破玩意儿多么重要!”

小 printf 瞪了回来,表情有些惊愕。

“都坏成这样了还很重要?你的口气就像是个真正的程序员似的。“

他补充说:

”你把概念完全搞混了。世界上有成百上千的程序,年复一年地运行,而且总是会崩溃。但是即便如此人们还是需要这些程序,使用这些程序。而且我知道还有一种程序,它们只会在单台笔记本上运行,但是只要发生一点点错误,其结果就能瞬间毁灭整个社区。如果这样,你还认为不重要吗?“

接下来这个忙碌的人就不再说话了。

第 6 章

frameworks

小 printf 造访的第四个工作区有一个人,他的电脑前贴满了各种不知名的即时贴。

”motor-mvc, quadrangular JS, GoQuery, cometeor, 还有一些听上去像是日语的东西, …“

”Hi,“ 小 printf 打断了他,”请问你在做什么呢?“

”alchemist, bongodb, mochascript, walktime.js, portasql, …“这个人不停地念叨。

”请问您在做什么呢?“小 printf 又问了一遍,这次声音更大了一些。

”噢,我在尝试新的框架,工具,数据库,编程语言。“

”哇!你好像进度很快啊,效率和10个程序员加起来一样高。“

”是啊,你看,这个行业的前进速度是非常快的!“他对着手机看了几秒,然后补充说,”这儿!cardboard.io 框架推出了 3.5 版本,这个版本和 3.4 不兼容,目前已经产生了 4 个 fork 了!我必须要把他们都试一遍,然后决定自己用哪个。“

”但是你学这么多,都拿来做什么呢?“

”我是一个提前学习主义者。如果你不保持着与时俱进的心态,现在你可能还要靠写 COBOL 或者 MUMPS 来过日子呢。如果你想做大事情,就要确保自己站在浪潮之巅。“

”那这么做有效果么?“

”有啊,我在 Rails 火起来之前就知道它要火了,我在 node.js 流行起来就知道它要流行了。我参与了 Redis、Mongodb 和 Riak早期的 beta 测试!我是第一个用 Vagrant 的人,后来又切换到了Docker上面,当然现在的潮流是 Unikernel“

”酷,那么你掌握了这么多最前沿的技术,有什么回报呢?“

”哦,并没有回报,Rails 变得越来越臃肿了以后,我就必须得赶快去关注别的重要技术,保证自己不要落后。其他的各种技术差不多也是这个套路。目前我希望掌握的是 Unikernel。“

”明白了。“,小 printf 补充到,”那么这些新框架和技术都会用来解决哪些问题呢?“

”噢,不是重大技术我们不用,我主要是要确保这一点,这样才能让我们公司不至于把资源花费到没有未来的技术上。这是很重要的,因为如果你不这么做的话,你的技术就会被那帮花白胡子的过时老程序员绑架,为了避免这样,你就必须成为一个自我驱动力强大的学习者,一个提前学习主义者。“

”真有趣。“小 printf 插了一句嘴。

”这可不是有趣,这是很难做到的!在创业的世界里,如果你想要吸引人才,你就必须要通过优秀的技术来招揽他们!否则你就是个不灵活的落后者。没人愿意做不灵活的落后者。“

小 printf 赶紧说:”不,我不是这个意思。“,然后他补充到,”我感到有趣的地方在于,工具本来是用来给我们解决问题的,但是对于你来说,工具本身却成了问题。“

接下来,这个人就站在他那个新潮的健身式办公桌前,没有任何回应了,小 printf 真希望自己赶紧出去。

第 7 章

ops

在下一个办公室,坐着一个看上去很疲倦的员工,他的桌子上堆满了空咖啡杯。她无精打采地坐着,愤怒地敲击着键盘。

”嗨!“小 printf 说。

这个疲倦的女人并没有停下手上的动作。他继续愤怒地敲击着键盘。

”你好?“小 printf 又打了一遍招呼。

这个女人忽然间停了下来,从抽屉里取出一只水壶,然后大口喝起水来。

”我的工作太糟糕了。“她说,”我是做 Devops 的。一开始还好,我大部分时间做开发,偶尔也做做调试的事情,但是随着时间的推移,情况变得越来越糟糕。我开始在各处救火,但是问题还是不断发生。我解决了其中的大部分问题,但是有些小毛病还是要期盼奇迹发生,这才能赶得上开发计划预定的期限,而且开发工作也是我的。“

”他们没有再找个人帮帮你么?“

”没有,这就是问题的所在。小问题总是到处发生,因为我必须要解决这些问题,所以我在做开发的时候就不可能像以前只做开发时那么专注,所以我本身就会制造更多的问题。现在,我每天都没日没夜地给系统灭火,我真是恨死我的工作了。“

”那你的雇主为什么什么都不做呢?“

”那是因为我擅长我的工作啊,我长期以来一直可以控制住局面,而且大家都已经习惯了。当你把创造奇迹变成一种习惯的时候,人们就适应了。然后你就会被困在‘总是要创造奇迹’的局面当中,否则人们就会认为是你的工作不得力。“

”这听上去可真是悲哀!“

”是啊。因为你是最熟悉怎么去给系统灭火的人,所以你就总得去,久而久之就是你的工作了,直到有一天老板雇了新人来替代你做你心爱的工作。如果你真的很在意你的工作的话,那么就去做那种谁都不愿意干的脏活累活,接下来所有人都会感谢你,你干得越多人们就会越感谢你,直到所有的脏活累活全都归你。当然,这样的话工作就没有什么乐趣可言了。“

”那么你可真不走运。“小 printf 说。

说着,她的呼叫器又响了。

”那个女人,”小 printf 对自己说,就像是他父亲的口吻,“那个女人的工作被所有人轻视,专家、明星程序员、提前学习主义者,他们都看不上她的工作。但是她做的工作才是唯一有帮助的。这很可能是因为她总是在考虑别人,而不是只考虑自己吧。”

第 8 章

architect

在建筑的一角,小 printf 发现了一间大办公室,办公室有巨大的落地窗,窗外视野极好。办公室内有一张非常大的办公桌,桌子上的文件堆成了小山,有一个老绅士坐在办公桌前。

“啊,开发者来了”老绅士看到小 printf 走到门厅,于是就大声喊到,“进来!”

透过窗户看去,小 printf 注意到窗户的玻璃上写着各种各样的字,还有用修正液涂改的痕迹,以至于窗外的风景都快被各种圈圈点点,箭头,圆柱等几何图形给盖住了,而且上面还画了云朵的图案。明明窗外就有真正的云,为什么还要在窗户上画云朵的形状?还有整个图案的含义也让人很感兴趣。

”这是什么?“,小 printf 指着窗户问。

”这个么?这是我们的生产系统!“那个老绅士说,一副看上去对外面事物毫不关心的样子,”我是一个软件架构师。“

”软件架构师是什么?”

“多数情况下,架构师是那种最了解组件之间的结构,并且最能够合理调度组件关系的人,架构师能让大型系统的各个部分完美协调地工作。同时,软件架构师也了解数据库、编程语言、框架、编辑器、序列化格式、协议以及诸如封装、协议隔离等概念。“

”听上去真有趣!“小 printf 说,“终于有一个人能够回答所有的问题了!”他看了一眼架构师的图,“你的系统真是让人印象深刻啊!那么这个系统速度快么?”

“我不知道,”架构师说,“应该挺快的吧。”

“那系统的代码呢?写得好么?”

“我也没法告诉你”

“用户对系统满意么?”

“恐怕我还是没法告诉你。”

“但是你是软件架构师啊!”

“对啊!但是我并不是开发者啊。软件架构师的任务并不是去写模块、类,也不是调用类库。软件架构师的工作相比写代码来说要重要得多。软件架构师会和开发者,程序员们聊天,问他们问题,给他们提供指导。如果程序员问的问题很有趣,那么架构师也许会亲自出马给这个问题做规划。”

“为什么要这样?”

“因为我们更有经验啊。我们对系统能做哪些事,不能做哪些事了解得更多。开发者则是我们知识的延伸,他们会去把优秀的系统真正做出来。”

“但是你们不亲自编码,怎么能确认开发过程是顺利的呢?”

“因为我们信任开发人员啊。”

“所以你相信开发人员能够正确实现你的想法,并且不会产生他们自己的想法?”

软件架构师听了小 printf 的话后明显有些震惊,他说:”我想我还是有点儿脱节。“,他最后承认说,“问题确实存在,别人总是跟你说要按照某种思想或者主意去做事,但是你又没法有效验证你做的事情是不是真的符合这种思想。”他低下了头,沉思着,“有的时候软件架构师既不做软件,也不做架构,这貌似是真的。”

接着,小 printf 离开了坊间,然后结束了他的访问,离开了大楼。

第 9 章

charity

小 printf 刚一走出门,就碰到了一个男人正在路边募集善款。

“Hi,”那个男人说,“你今天想不想给别人献点儿爱心呢?”

”好吧,这样做我感觉可能会好点儿“,小 printf 回答说,”我已经在这栋大楼里待了一整天,可是我出来的时候感觉更加困惑了。“

”啊,我明白了。这些人都是开发者。他们其实一点儿也帮不上忙,对不?他们总是喊着要改变世界,而且他们确实也做到了。“

”但是为什么感觉这么奇怪呢?“小 printf 回答到。

”好吧,因为他们的工作就是把人们的职业转换成程序,让人们安逸的生活变得更加安逸。软件会吞噬整个世界,然后给让世界面貌一新……不过从深层次来看,面貌一新的世界还是那个旧世界,只是面貌变了而已。之所你觉得奇怪,是因为世界的改变并不一定朝好的方向改变。我们现在面临的问题其实和以前一样多,需要填的坑也和以前一样深。“

”那么我怎么才能让自己感觉好一点儿呢?”小 printf 显得有些焦虑。

这个男人思考了一会儿,然后希望小 printf 能和他一起来帮助别人,这是他认为的能让自己感觉变好的方式。printf用了一整个下午告诉这个人自己的问题和经历。这个人听完了以后沉默了很长一段时间,然后说:

“人们在社会中相互博弈,扮演不同角色,追逐和享受的名声,解决错综复杂的问题后得到瞬间的快感,这些都只是过眼云烟。最终,如果你没有解决什么有意义的问题,如果你完全不考虑别人,那么你是无法做到内心满足的。”

“得不到内心的满足也许也没什么,也许会很糟糕,在你成长的过程中,你的满足感可能来自于你的工作之外,也可能来自于工作。工作可以仅仅就是工作,也可以是单纯为了钱,也可以为了兴趣。这些都OK。只要你能从生命中的某处找到内心的满足,那就好了。”

“最后,只有当你以人类的面孔去解决问题的时候,你才会觉得真的正确;真正关键的点其实和电脑没关系。”

“真正的关键在于你用心花在系统上的精力,这才是最重要的。“,那个人补充到,”如果你忘记了为什么花这么多精力的初衷,当一切都变成了关乎个人骄傲的游戏,那么事情的性质就变了,从可慰变成可悲。“

”开发者们常常会忘记一个事实;如果你失去了对事物的眼光,那么在开发系统本身就成为了一个问题,这样的话最有效的办法就是把系统废掉,因为系统自己就是问题的根源。“

”只有当你以人类的面孔去解决问题的时候,才会觉得真的正确。“,小 printf 不断重复着这句话,他铭记在心。

第 10 章

printf

坐在我身旁的Printf现在要起身回家了。跟他的一席对话让我意识到了我现在所做的事情和我的爱好有多么大的距离,而我的爱好才是我真正开始编程的动力。小 printf 遇到的每一个角色,我每天也都会遇到很多。我曾受到他们的鼓舞,希望成为他们的一员,我可能也鼓励过别人这么做。

当我还在挣扎着成为一个真正的程序员的时候,小 printf 却没有这么做。他说他成不了一个真正的程序员也没关系,他更希望能成为一个长着人类面孔的程序员。

时至今日,回首望去,我的困境并没有改变,我还是要在人类的面孔和纯粹的工作之间做出选择,我希望我能有这个能力。而且在这两者之间好像也没有什么中间地段可以让我去选择。

无论如何,小 printf 觉得他不需要做一个真正的程序员了,我想我和他的感觉是一样的。

打赏支持我翻译更多好文章,谢谢!

打赏译者

打赏支持我翻译更多好文章,谢谢!

6 12 收藏 5 评论

关于作者:黄小非

黄小非:毕业于重庆大学计算机系,南开大学软件工程硕士,SCJP。 目前在一家国企信息中心任职软件开发工程师。主要技术兴趣为Java平台相关技术、系统构架、C/C++、计算机图形学等。(新浪微博:@黄小非) 个人主页 · 我的文章 · 65 ·  

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 此Jian少年   07/27

    没有看太明白,在人类的面孔和纯粹的工作之间做出选择 ?

    • 黄小非 程序员 07/30

      作者的意思是,程序员内心的快乐可能来源于工作,也可能来源于工作之外,不过这都不重要,只要能找到内心的快乐即可。而且无论以什么样的角色和身份去解决问题,最重要的还是从人的角度出发(也就是人类的面孔)去考虑解决问题的本质,而不是像文中描述的那些人一样,买书只是为了装点书架,为了赶时髦而学新技术但是完全不实用,贪图架构师的虚荣而完全脱离实际。程序员写程序是为了解决人类生活中的问题,所以还是要以人为本,脱离了这个目标一切就显得非常可笑。

  • 浩浩 ruby on rails 08/01

    感觉绝对稳定的大型系统真的不存在,作者看到了软件工程的本质

  • 大刀   08/04

    入行早优势还是很明显!

  • Andrew   08/07

    hkijhgjkhftjhyrdtrjuygfjhk

跳到底部
返回顶部