什么才是真正程序员?

这篇文章的原文来自:A Little Printf Story
做者仿照《小王子》中的情节,经过小printf碰见的不一样类型的程序员,最后悟出什么才是真正的程序员!第一次翻译有不少不妥,欢迎留言指正。html

文章略长,可是耐心读完,你确定会受益良多!python

第一章

(推荐看完整篇文章,再回过头看一遍第一章)程序员

我很是幸运出生在一个电脑和电子游戏尚未广泛的时代。因此我能够和个人小伙伴们一块儿玩耍,同时发明属于咱们的游戏。redis

咱们十分会玩:用树枝作成'🏹️'。咱们能够用树枝作出任何东西,除'回旋镖'。由于你把树枝扔出去,你须要本身捡回来。(做者这个故事是活跃气氛吗?😓)sql

当咱们长大了,上面说的游戏变得很幼稚。你不能把一个松塔当成一个手榴弹;伪装拥有神奇的魔法;当其余孩子以为做为一个成年人很酷。你最终会迫于压力而长大。不过总的来讲这也是一个很是幸运的童年。mongodb

偶然的一次机会我接触了电子游戏和电脑。你可能想沉浸在这个虚拟的世界,这会毁了你。docker

大多数电子游戏:你不能创造,只能反应,浪费你的时间。我在十多岁的时候,参加过'即兴表演'。在哪里我能够发挥个人创造性。数据库

我大学的专业是'多媒体',可是我最终却从事'编程'工做。我以为编程is amazing!我能够发挥个人创造性,同时又能够挣钱!以后我作了个人第一个游戏。编程

"这不是一个真正的电子游戏。"别人跟我说:"它只是一个html的表单,并且代码须要简化。"小程序

这席话使我有一些沮丧,它花费了不少心思和时间。可是,我意识到若是我想作出被人们承认的东西的话,我还须要学习更多知识。

我须要学习真正的编程。从GUI工具里的JS,转到更好的语言:像PHP。因此我先学习了Js,后来又去学习PHP,可是一切并非很顺利,其余人给个人建议去试试python。最后,我学习的是python(🎊我也是这样走上python之路的🍻)。

可是python中高深一些的东西:'lambdas'和'面向对象编程',让我云里雾里的。后来别人建议我去读一下《计算机程序的构造和解释》,由于它是编程的基础入门圣经。

就这样,我知道了Scheme,后来我又去学习C语言。由于大多数的程序员都会C,同时我旁听了咱们学校的计算机课程,跟着他们一块儿学习。由于,真正的程序员都知道数据结构和数学,可是这些我只略懂皮毛。我开始读技术文章和书,由于程序员的知识更新太快。

通过一段时间,我掌握了Erlang,从而开始了个人职业生涯。(这篇文章的做者写了一本:Erlang入门书)。十分奇怪的是:我这个没有用Erlang作过任何生产级别的开发的人,却获得了一份教Erlang的工做。

第二章

因此我忙于到世界各地演讲,教别人(夸夸其谈)。可是,你们彷佛都相信我是一个真正的程序员。由于,我讲的这些事情大多都和编程无关。

一天,我结束了一个会议回家,飞机晚点。我愤怒的敲击着键盘,一个柔弱的声音打断了我:

"你好,能请你给我设计一个系统吗?"

我:"什么?"

"给我设计一个系统!"

我对这个请求很惊讶。我环视四周,发现一个渴望成为开发者的孩子。他叫'printf'(主角闪亮登场)。我以为这个名字很傻。他的样子以下图:

"我还不是很了解计算机,可是你好像是计算机方面的专家。我但愿写一个blog程序,人们可使用和访问它。求求你帮我设计一个系统!"

这是个使人惊讶的请求,而且我已经二十多个小时没睡了。我不是彻底理解他所说的。我告诉他,作一个系统十分困难。我不知道他想要作什么:须要支持多少访问者;在哪里部署;因此我没法根据他提供的少许信息,设计一个合适的系统。

"没有关系,给我设计一个系统吧。"

因此我作了下面这幅结构图:

他看了以后说:"不,这个系统还不够好。请给我再设计一个别的。"

因此我又作了下面这个:

而后我给他讲解这个系统的工做原理。

个人新朋友 (printf)十分礼貌的说:"这不是我想要的,它又太复杂并且好多东西都是我不须要的。"

我感到十分不爽,我设计的这个系统考虑到了:冗余、监控、备份、缓存、负载、支付、故障转移、部署简单等等。我设计的这个系统都已经能够得到一份可观的咨询费用了!我已经失去耐心了,因此我就画了这个:

我又告诉他:"这是你设计的系统,你要的系统在这个黑盒子里。"我但愿这个滑稽的答案,能够打发他。可是他的回复让我十分惊讶:

"这正是我想要的!"

这就是我和小printf相识的过程。

第三章

过了一段时间,我知道了这个小鬼的编程水平。在他的代码仓库只有些小程序、网站的小demo、琐碎的程序片断。都是些不值得一提的东西。

以后他开始着手作一个须要不少模块的大型程序。这个程序须要socket、磁盘读写、用到真正的数据库。当它第一次跑起来的时候,小printf十分兴奋。可是,这个程序还不够好。

这个程序须要重构、更好的测试、文档、分析。它只运行了一段时间就崩溃了。而后一次,又一次的崩溃!

程序的设置是错误的,日志不工做、磁盘速度不稳定、网络卡顿、有bug、编码混乱、数据库须要清理、证书过时、没有异常处理致使问题找不到根源。

真的想面条同样一团糟。

小printf跟我说:"经过这件事,我发现本身简直是一无所知!这个程序原本是根据个人须要写的。我原来的想法太天真了,后来我修复bug的时间和这个程序给我带来的便利根本不成正比!最后,变得跟我原来想的一点都不同。虽然这样,我仍然认为这件事情让我收获了不少。"

一天早上,他决定离开我这里。"再见。"小printf跟我作了最后的作别。他想要出去看看世界,看看其余人写的程序。

小printf写的应用,最后由于不断增长的日志,致使硬盘没有空间,完全的崩溃了。

第四章

小printf走进了一个办公楼,想寻找有经验的程序员取经,得到一些建议和帮助。

他遇到一个骄傲的高级程序员,并且自我感受良好。

傲慢的高级程序员说:"哎,过来新手!欢迎来到我所擅长领域,在这个领域我是专家!"

"专家?"小printf问到:"专家的意思是:能够编写任何程序吗?"

"是的!"傲慢的高级程序员回答道,接着他又说:"准确的说,应该是大多数程序。由于我只编写有价值的程序,我不会浪费个人时间在没有意义的小程序上。不少程序我都没有写过,可是他们都难不倒我!"

"额,因此你能够帮我完善个人程序?"小print问到,以后他开始阐述他的网站系统,可是傲慢的高级程序员打断了他:

"对不起,我以为你的网站系统没有一点价值。"

小printf:"为何?"

"经验,我擅长编写我开发的东西,我也只作我擅长的领域的开发。我须要确保我在个人领域的永远有价值。这叫作工做保障,也叫作适者生存。但这就是个人风格。我只专一于个人领域!"

小printf:"那你为何不帮我呢?"

"花费个人时间去帮助你,意味着我须要花费精力去帮助别人,而不是提升本身----这对我来讲不是一个好的主意。个人建议是:本身多努力,本身弄懂。还能够塑造你本身的心性"

小printf:"你说的方法,好想不是很高效。。。"

"你能够到学校去学,或者自学。事实上这种方法能够淘汰那些懒惰,只喜欢简单的事情的人。真正渴望知识的人才能成功!"

小printf:"你认为合做和同事不能帮助你吗?"

"不,我并非这个意思。我作好的工做状态是:独立空间,没有让我分心的事。每次我和同事合做的时候,都是一次很差的经历。以往的经验:最好的办法是:把他们的代码拿过来重写。而后就能够了!"

小printf对这个不喜欢帮助别人的专家感到十分惊讶,不只如此,他还因人为别人的技术不行而恼火。这个专家眼界是狭隘的,他只关心本身擅长的领域。活在本身的世界里。

小printf:"我明白了,我想我很庆幸你没有帮助我。"

"你什么意思?"傲慢的专家问到,貌似他的权威受到了威胁:"你不承认我,你是在质疑我吗?"

小printf:"并非这样,就像你以为我是一个累赘,使人恼怒的同样。我是来寻找帮助的,而不是来找骂的。"

说完以后,小printf飞快的跑出了傲慢专家的办公室。当小printf离开后,这个专家又从新找回了他所擅长领域的权威,同时自我感受良好。

第五章

而后,小printf又走进了另一个办公室。里面有一个男士,他的座位周围都是精装厚厚的书籍(例如代码大全这种书)。

小printf:"先生,你有好多书啊!"

"是的,我想这些都是程序员必看的书籍,若是你没看过这些,你很难成为'大牛'(专业人士)。"

小printf:"我想我如今仍是很菜,请问这些书里面你最喜欢哪本?"

"哦,是这样的这些书大多数我尚未读过。"

小printf:"那你如今是个'大牛'吗?"

"不,我还不是。"这个程序员很骄傲的说:"我实际上是一个很垃圾的程序员。"

小printf:"这太丢人了,我正在努力变强。"

"你听过'达克效应'吗?"

小printf:"那是什么?"

"简单的说就是:能力强的人老是低估本身,能力弱的人老是高估本身。"

小printf:"也就是说,若是我以为本身在变强,其实我并无变强。"

"是的,你说的很是正确。你极可能在原地踏步。另外一方面,我宣扬我是一个很糟糕的程序员,但根据'达克效应'。我是低估了我本身,因此我是一个好的程序员,你怎么看?"

小printf:"我。。。额"

"这就是为何程序员都喜欢自嘲(称本身是码农也算吧?)。当你认为你足够好了,你就放松了,也就没有前进的动力。"(这句话我仍是很赞同的👍)

小printf:"你的意思是:一旦自我感受良好,也就是正在走向失败,因该时刻以为本身还不够好。"

"是的,可是用着这种方式应对全部的事很危险,若是你尚未拿到offer。这种方式会让你显的聪明,可是没有任何实际用途,别人不会由于你显的聪明就雇佣你。"

小printf:"你的意思是?"

"比方说:我在网上看到一个我不喜欢的项目。我留言说项目一无可取,可是不明确的指出哪里很差。最后你还能够说这个项目的做者是笨蛋,也没有人管你。"

小printf:"可是这样作有什么好处呢?"

"我想让他们知道他们走上歧途了,却又不明确的指出来。这表现的我比他们厉害。然而他们毫无头绪,像雾里看花。没有人能明白个人意思。哇咔咔"

小printf:"当别人请教你的问题,你不会的时候,你会怎么办?"

"这种状况下你就说处处都是问题,还有不少的不完善的事情要作,总之就是转移话题。然他们感受绝望,最后仍是要他们本身解决。"

小printf:"因此这就是你的立场?这是你的一向做风?你会的问题装做对此无能为力,使得真正没法解决这个问题的人抓狂;当你遇到不会的问题时,你装做很了解,使得别人根据你的建议改善其它的地方,而与真理相行渐远,浪费时间"

"不少状况下,才能不是最重要的。但口碑很重要。人们雇佣朋友,不被喜欢的人和可有可无的人会被第一个被炒鱿鱼(😤MLGB)。要不就改变环境,改不了就要适应,适应不了就被淘汰。这就是'社会'。企业中就是这样,学术届没准也是。作这行,你认识谁,学会推销本身,创建本身的声望。这样你才能在企业里站住脚。"

小printf:"若是在企业中工做是这么恶心,要给别人'使绊'。那么我真不想在这种环境下工做!(黑暗的办公室政治,还好我尚未遇到🙊)"

第六章

到了吃午餐的时间,小printf打断了一个貌似忘记吃午餐的人。他桌子上的三明治已经凉了,可是他仍是坐在桌子前面盯着他的屏幕。

他好像十分的忙,可是没人知道他在作什么。

小printf:"若是主数据库挂掉了,从数据库也会挂掉吗?"(建立主从数据库是为了减小DOWN机时间,让数据库能够一直处于工做状态中)

"你运行的全部东西,或早或晚都会挂掉。"

小printf:"你以往的经历告诉你这一切都会失败?"

"是的,不只如此。全部的大系统,都会在特定的时间出现问题。"(就像千年虫问题?🤔)

小printf:"那么,作一个可靠的系统,都须要作什么?"

那我的忙于他本身的事情,没有理会小printf。

小printf又问了一次:"作一个可靠的系统,都须要作什么?"

那我的正在尝试解决产品中的一个问题,可是小printf还一直问个不停,同时他尚未吃午餐。

因此他不耐烦甚至粗鲁的吼道:"这根本不可能,编程就是shit💩。"

小printf倒吸了一口气,半天说不出一句话。

小printf💢愤怒的回击道:"我不相信你说的。程序是脆弱的没错,可是程序员能够改善这一点,同时作出更好和有用的东西"

那我的没有任何回答,他在翻阅文档,尝试从新启动一个新的集群,可是状况却愈来愈糟糕。

小printf:"而且你应该相信有好的可靠的程。。"

"不可能"那我的打断了小printf,接着说道:"我不相信有可靠或者好的的程序!根本不可能!这是个人第一个感受,由于我正在处理一个垃圾的系统。你没看见我想法设法地让这个东西跑起来吗?事实如此!"

小printf很震惊的看着他说道:"事实如此?说的好像本身是个专家!是你本身把一切都搞的很糟糕。这世界上有上百万的和久经考验的程序,它们也有bug,也崩溃。可是人们仍是须要它们,使用它们。据我所知不少程序是没有问题的。出现问题的缘由大可能是由于电脑的环境配置问题,或者一个错误的操做形成的。你不认为这才是问题的所在吗?"

那我的听完哑口无言。

第七章

小printf来到了第四个地方,遇到了一我的,他的电脑几乎被便签盖满了,没有人知道他在干什么。

"motor-mvc, quadrangular JS, GoQuery, cometeor, some japanese soundy thing, ..."

小printf打断了他的自言自语说道:"你好,你在干什么?"

"alchemist, bongodb, mochascript, walktime.js, portasql, ...",哪一个男士继续自言自语

小printf提升了音量又问了一次:"你在干什么?"

"哦,我正在尝试新的框架,工具和语言。"

小printf:"哇,你接触的东西好新鲜啊!大多数人还都没有据说过这些。"

"是的,这个行业跟新很快!"他看了一眼他的手机接着又说到:"看,cardboard.io框架又推出了3.5版本,它宣布不兼容3.4了。于此同时社区中已经有4个衍生版本了。我必须从他们之中挑一个。"

小printf:"你这么作为了什么?"

"我是最先的尝鲜者,若是你不保持更新技能树,仍是用老掉牙的:COBOL或者MUMPS(两门老掉牙的编程语言🤖)。你还想抓住成功的契机,抢占先机,乘势而起?"

小printf:"你成功的预测过之后的热门技术吗?"

"是的!我发现Rails的时候它还很小,我学会Node.js的时候它尚未流行。我是redis,mongodb和riak的内测用户。我是第一批试用vagrant的用户,而后我转去使用docker,可是如今我全身心的关注unikernels。。"

小printf:"太酷了!你是第一批试用这些的技术的人,你从中获得了什么回报?"

"额,并无。当Rails壮大的时候,我就去关注另外的新鲜东西了。一样的,其余的几门技术我也是这样的(他不独宠一个,而是雨露均沾🙈)。我如今把但愿寄托在unikernels上。"

小printf沉思了一会说到:"你用这些框架和工具都解决了什么问题?"

"我每次都确保不使用不成熟的东西,由于不能用公司作赌注。这一点十分重要,由于若是你使用最新的技术,你就可能招不到人,而不关注新的技术,有可能脱离时代的步伐。因此咱们鼓励学习新的技术。"

小printf:"这很是有趣。"

"在这个飞速发展的世界中,若是你想参加这场游戏,你须要有先进的技术。不然你就会被时代淘汰,没有人想被时代淘汰。"

小printf:"不,你误解个人意思了,个人意思是:好的工具是为了解决问题而被制造出来的。可是你却盲目追求新的技术,而不是为了什么实际的目的。"

听完这些话,哪一个人呆住了,小printf跳跃着离开了这个房间。

第八章

小printf来到了下一个办公室,这里又一个疲惫的女员工。桌子上杂乱无章,整我的无精打彩,疯狂的打字。

小printf:"你好。"

这个女士没有停下了她的手头工做,继续疯狂的打字。

小printf又打了一遍招呼:"你好?"

女士此次停下了,拿起一瓶咖啡猛灌了一口。

"我有一份十分糟糕的工做。"她说:"我是devops(开发,运维,测试于一体的职位)。刚开始的时候还好,原来我大多数时间进行开发,而后抽出一些时间修复bug。可是,状况变的愈来愈糟糕,bug开始接连不断。为了摆脱这种状况,同时在规定时间内完成。我不得不使用一些'奇技淫巧'。"

小printf:"你为何不顾人来帮你?"

"我很擅长作这些事情。我已经习惯这一切都在个人的掌控之下。还有由于他们已经习惯我能够hold一切,若是我提出我本身没法继续掌控全局的之后,他们很容易认为我在偷懒。"

小printf:"这真是叫人悲伤的故事。"

"事实就是这样子。由于你是最熟悉这些问题(bug🔥)的人,你只能变的愈来愈累,直到你的boss招了一我的顶替你原来的工做,这是惟一出路。但若是你担忧其余人修改你写的东西时候遇到问题,你只能帮助别人改一个又一个的bug,固然这些都是你讨厌的事情。直到你对这一切感到麻木。"

小printf:"你真不幸。"

这位女士又被叫去工做了。

小printf自言自语道:"这个女人会被我原来遇到的那些人嘲笑的:那个高级专家(只专一于本身擅长的领域),摇滚开发者(过度追求新技术的人),故作高深的程序员(那个周围都是大头书的装X程序员)。尽管他是这些人里面惟一乐于助人的。或许是由于,她认为一切事情仍是亲力亲为的好。"

第九章

小printf发如今这栋大楼里发现了一个有着巨大落地窗而且宽敞的办公室。这里坐着一个德国老头,他面前堆了一堆的文件。

"啊!来了一个开发者。"德国老头惊呼道同时招呼小printf说:"快进来!"

小printf环视四周的窗户,发现上面写满了东西。上面画了各类圆圈,箭头,圆柱和云彩(就是图片中玻璃上的图形)。真是搞不懂这个老头画这些东西有什么用。

小printf:"窗户上的都是些什么?"

"哦,这些?这是咱们的线上系统!"那个老头随口说到:"我是一个软件架构师。"

小printf:"什么是软件架构师?"

"总的来讲,就是知道如何构建大型系统而且让系统中的每一个部分都很是稳定的人。架构师还会数据库,编程语言,框架,编写程序,协议,封装和下降耦合等知识。"

小printf:"听起来都叫人兴奋!终于有人能回答个人全部问题了!"小printf瞥了一眼玻璃上的结构图说到:"大家的系统真大,他跑的快吗?"

"我无法告诉你。"架构师说;"应该会很快吧。"

小printf:"那它的代码怎么样呢?"

"我无法告诉你。"

小printf:"用户喜欢这个系统吗?"

"这个我恐怕也无法告诉你。"

小printf:"可是你是软件架构师啊!"

"个人确是架构师,可是我不是开发者。架构师不作,例如:功能模块,类,整合lib等。这种工做的。架构师最重要的不是写代码。他是指引程序员和开发者的人。若是遇到棘手的,没法解决的问题,架构师才会接手。"

小printf:"这是为何呢?"

"由于咱们经验十足。咱们了解系统而且能解决它的一切问题。开发者能够根据咱们的经验和指导,开发出好的系统。"

小printf:"可是你不写,不看代码怎么知道这将是个好的系统?"

"咱们相信开发者。"

小printf:"因此,所大家相信开发者们能够正确的实现大家的想法,可是开发者们没有机会提出他们本身的想法?"

这个软件架构师明显的愣了一下:"我想。。。"他最终认可了:"你刚才提出的这个问题,其实工做中不少的提议是没有被证明,或者实验的。。。"他停顿,并沉思了一下说道:"有些时候软件架构师看起来既不是软件工程师,也不是架构师(是老师?)。"

小printf离开了这个房间,结束了他的旅行。走出了这栋楼

第十章

pic18

小printf走到外边,发现了一个为慈善机构募集钱的男士。

"你好"那个男士说道:"你以为帮助一些须要帮助的人的感受怎么样?"

小printf:"那样可能会让我感受更好,我在那栋建筑(遇到了各类各样的程序员的大楼)呆了一成天,寻求帮助。可是如今,我感受比之前更加迷惑了。"

"嗯,我帮你分析下:那些人都是开发者,他们并无真正帮到你是吗?他们喜欢说"程序员改变世界",实时也是这样的。"

小printf:"那为何我却毫无收获呢?"

"是这样的,他们最擅长作的事情是帮助把人们的工做变成程序,令人们变的轻松。软件正在吞噬整个世界,使世界改革换面。可是事实上还这仍是个旧的世界。由于以这种方式的改变,并不意味着事情变好。咱们仍是有些根深蒂固的问题(例如:思想的问题,或是缺少创造性。)。"

小printf焦急的说:"怎么作才能让我感受更好?"

那个难事深思了一会,最后提出让小printf帮助他,为须要帮助的人募捐。由于这个男士认为这种方式可让他感受更好。用一下午的时间,小printf把他的问题和他的经历都告诉了这个男士。

这个男士沉思了很长时间说道:"在个游戏中,他们从解决复杂的问题而获得快乐和他们看重的名声和身份,这种快乐是片刻的。由于最终,若是你解决的问题没有实际价值(为了解决问题而解决问题),忽略了'以人为本'。那么你永远不会的到真正的知足!"(说的真好!)

他接着又说:"随着你的成长,可能找到一家比以前更好的单位。多是钱多,或者是由于这个工做更趣,这都很正常。只要你知道你本身想要的是什么!"

他最后补充道:"最后,当你解决了人们真正面临的问题的时候,你会以为真正的知足!有的时候根本不须要计算机。"

"你花费了大量的时间在你的系统上。最重要的是:你忘记当初为何建立这个系统,反而花费时间在优化系统上面,那么它就变成了一场炫耀的游戏。这才是最可悲的。"

"开发者常常忘记最开始的初衷(真正有意义的事情)。若是你失去作这件事意义,而是为了解决系统的问题,才花时间在这上面。这就是问题的所在(若是你只是为了作好的系统,而不是解决实际问题,那你就应该自我反思了)"

小printf不断重复这句话,想要印在脑子里:"只有在解决人们真正面对的问题的时候,才能得到真正的知足!"

第十一章

小printf坐在个人前面,和他聊天让我开始认真思考:我为何走上编程的道路。小printf以前遇到的每一个人,仿佛我未来的某一天会成为他们中的一员(这真是个悲伤的情景)。我被这样的人(小printf以前遇到的那些程序员)鼓励成为像他们同样的程序员。

我也被拖进,小printf不喜欢的那个,成为'真正程序员'的游戏中。小printf曾说过:相比于'真正的程序员',我更想成为可以为人们解决真正须要解决的问题的程序员(解决真正问题的程序员,而不是解决编程问题的程序员)。

今天我呆坐在这里,回顾个人整个编程生涯,我想弄清:成为解决真正问题的程序员,仍是一切都这是完成工做。这二者是彻底不一样的。

无论怎么样,小printf认为他不须要成为一个真正的程序员。我如今,也是这样认为的!

个人感觉

翻译完这篇文章,我以为这篇文章写的很是好,他让我意识到:编程为了什么?到底什么才是真正的程序员。

自我反思了下。我一只在忙于追求技术栈的数量,一直是为了追求技术(或者说工做)而学习。

这就好像,我毫无目的收集树枝,猛然的一个点。我低头看手边一困困的树枝,却忘记了我为何要去捡树枝。

对于之后的编程之路:我之后应该以目的为驱动力,不盲目的追求技术。常常问本身,我这么作有什么意义。

相关文章
相关标签/搜索