小printf的故事

这篇文章的原文来自:英文原文
作者仿照《小王子》中的情节,生动有趣的阐述了小printf从编程小白到专家的成长历程。这是我第一次尝试翻译文章,肯定有很多不足之处,情不要像文中的第五章中的程序员那样,希望您可以留言给我,可以让这篇文章变的更好!

这个故事结构和《小王子》一样,以一个新手程序员的视角,讲述他遇到的不同风格程序员的故事。共十一章,我已经翻译了九章。

第一章

我非常幸运出生在一个电脑和电子游戏还没有普遍的时代。所以我可以和我的小伙伴们一起玩耍,同时发明属于我们的游戏。

我们十分会玩:用树枝做成'?️'。我们可以用树枝做出任何东西,除'回旋镖'。因为你把树枝扔出去,你需要自己捡回来。(作者这个故事是活跃气氛吗??)

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

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

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

我大学的专业是'多媒体',但是我最终却从事'编程'工作。我觉得编程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的故事(未完待续)相关推荐

  1. 进阶之路(故事未完待续)

       加入爪哇第一天:9月11日    第一周:      呀,过中秋去了      所以,什么都没做-真是一个懒惰的银    第二周:      正式在周六的下午踏入了707,感觉好好      目 ...

  2. 微信小程序发展(未完待续)

    1 微信小游戏:https://www.zhihu.com/question/264750381 2 微信小程序价值:https://www.zhihu.com/question/50875544

  3. 微信小程序开发(未完待续)

    1.生命周期 生命周期如下图: -事例代码: onLaunch: function () {console.log('index---------onLaunch()')//调用API从本地缓存中获取 ...

  4. 黑马程序员—离开黑马,一切都并未结束,我们的故事,未完待续--------

    文章来源:黑马程序员,黑马论坛 今天又收到一位同学工作后发来的信.公开以勉励后来者. --------------------------------------------------------- ...

  5. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  6. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  7. Diabetes 糖尿病及其并发症.|2021/1/25(未完待续)

    目录 前言: 正文: ①宏观严重性: ②普遍状况:" 三多一少": ③定义 : ③胰岛素(Insulin,一种激素(harmone)) ④引出糖尿病病理: 1> 1-型糖尿病 ...

  8. 构建Linux根文件系统(未完待续)

          所谓制作根文件系统, 就是创建各种目录, 并且在里面创建各种文件. 比如在/bin ./sbin 目录下存放各种可执行程序, 在/etc 目录下存放配置文件, 在/lib 目录下存放库文件 ...

  9. 《今日简史》读书笔记(未完待续)

    <今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...

最新文章

  1. 在asp.net中使用jQuery实现类似QQ网站的图片切割效果
  2. R语言入门第五集 实验四:数据分析
  3. 北京对无人车的热情,华尔街都感受到了
  4. 基于 Token 的多平台身份认证架构设计
  5. python常用内置函数总结-Python 常用内置函数
  6. lvs为何不能完全替代DNS轮询--转
  7. python Anaconda2安装OpenCV2
  8. 前端学习(3213):setstate的一个使用
  9. android Handler Message传递参数,handler子线程和主线程通讯
  10. Android studio aar包多层嵌套,Add library ‘Gradle: __local_aars__: 。。。unspecified@jar‘ to classpath
  11. sql机器学习服务_机器学习服务–在SQL Server中配置R服务
  12. mysql directx repair_[MySQL]快速解决is marked as crashed and should be repaired故障
  13. 生物流体力学及血流动力学建模仿真技术实战
  14. Chango的数学Shader世界(十七)RayTrace三维分形(二)—— Julia Set造型
  15. 电视hdmi接口在哪_HDMI是什么意思?花5分钟看完这篇文章:原来如此!我现在明白了...
  16. 三消游戏算法图文详解
  17. 针对VMware安装Win10需要安装.NET Framework 3.5常见的0x800F0906、0x800F081F错误解决办法
  18. android数据库降级_Android之sqlite数据库版本升级和降级的处理(onUpgrade和onDowngrade)...
  19. ios真机测试,Ineligible Devices,不可以选中真机
  20. mysql异地多活方案_数据库异地多活解决方案

热门文章

  1. Arcpy 通过mxd模版生成专题图
  2. 安装及使用pixsfm记录
  3. 和丨c语言运算符号理解(单片机学习)
  4. 关于 jQuery 的八卦
  5. FFmpeg音视频编解码示例
  6. 给安卓开发小白们的unit test指南 - 这也能测?这也要测?
  7. 【转】物理隔离与数据交换-网闸的设计原理与误区
  8. hfai images | 自建镜像,环境配置的最后绝招
  9. 分享个常用的跨境电商数据分析平台
  10. sysstat 工具详细说明(一)