第十一章

最后更新于:2022-04-01 06:48:57

';

第十章

最后更新于:2022-04-01 06:48:55

';

第九章

最后更新于:2022-04-01 06:48:53

';

第八章

最后更新于:2022-04-01 06:48:50

';

第七章

最后更新于:2022-04-01 06:48:48

';

第六章

最后更新于:2022-04-01 06:48:46

';

第五章

最后更新于:2022-04-01 06:48:43

';

第四章

最后更新于:2022-04-01 06:48:41

> 出处:[编程派](http://codingpy.com/article/the-little-printf-chapter04/) > 原文:[http://ferd.ca/the-little-printf.html](http://ferd.ca/the-little-printf.html) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-10_5691a4774a3af.jpg) ## 第四章 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-10_5691a4775f3f1.png) 他来到了一家软件公司,希望能从经验丰富的开发者那里得到建议和帮助。 他碰到的第一个人是一位非常自傲的资深工程师,自我感觉非常良好。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-10_5691a4776c5cd.png) “啊哈,来了个学徒!欢迎来到我的领域,我就是这里的专家”,他说道。 “专家?”小Printf问道。“那是不是说你能够编写出任何程序?” “没错!”这位专家回答说。接着又补充道,“差不多吧;我只编写那些值得编写的程序。我不会在小玩意上浪费时间。有很多程序我都没去开发,但是只要我去做,就能够不费吹灰之力完成。” “呃,那你能不能帮我改进下系统?”小Printf还没开始解释自己的网站系统,这位专家就打断了他: “抱歉,但我不觉得这样做有什么意义。” “为什么没意义?” “经验。我擅长编写我开发的东西,我也只做我擅长的领域的开发。通过在这个小领域内不断地提升,我确保了自己的价值会越来越高。你可以称之为职业保障,或是适者生存,但这就是我的工作方式。” “那你为什么不能帮我?” “你看啊,我花时间去帮你,就意味着我将可以自我投资的重要时间,用到了便利他人的事情上面 ——这在我看来就损己利人。你要学习的话,最好按照我的方式来:努力尝试,自己弄懂。这样还可以锻炼你的心性。” “那样似乎效率不太高...” “嗯,那你可以上学嘛,或者自己自学。事实上这种方法还可以剔除那些想要不劳而获的懒人,确保每个人都是有真才实学的。我们一旦让招摇撞骗的人进了这行,那我们自己工作的价值就会被贬低。” “你不觉得与人合作或同事也能帮助你吗?” “不觉得。没人打扰我的时候,我的工作效率最高。每次我不得不和别人合作时,几乎都没办法输出成果。只能气急败坏之下,把他们的代码拿过来,重写;这样,程序才能正常运行。” 小Printf没想到自己居然碰到了一个对帮助他人毫无兴趣的专家,不仅如此,他还因人为别人的技术不行而恼火。可悲的是,这个人将自己限制在了自己所知的这一个领域,甚至是除了给自己制造问题之外,就不再做别的事了! “我明白了...我觉得自己有点庆幸你没有帮我”,我的小伙伴说。 “你这是什么意思?”这位资深工程师问道,似乎自己的价值一下就被贬低了很多。“你难道不认为我所做的工作十分有趣吗?” “这个我同意。只是觉得你会把我看作一个阻碍,和别人一样让你讨厌。而我需要的别人的帮助,不是伤害。” 小Printf快速地离开了,因为他知道这位专家已经将自己变得无法接近。 END
';

第三章

最后更新于:2022-04-01 06:48:39

> 出处:[编程派](http://codingpy.com/article/the-little-printf-chapter03/) > 原文:[http://ferd.ca/the-little-printf.html](http://ferd.ca/the-little-printf.html) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f74823a4.jpg) > 小Printf刚开虽然只能写一写简单的程序,但是随着自己的水平慢慢提升,也尝试开发了一个较为大型的系统,使用了多种模块。但是,毕竟还是太年轻,很多问题没有处理好,导致程序不断崩溃。认识到了自己的不足,他决定走出去,向偌大的软件世界学习、求助。 - [上一章](http://codingpy.com/article/story-of-little-printf-chapter2/) 我很快就弄清楚了这个小家伙目前的成果。他的代码仓库里面只有一些小程序,带有表格的简单网页以及一些命令行脚本。它们都没有什么出彩的地方,创建之后,也会很快被删除。 后来,他开始开发一个更大的程序,这个程序用到了多个模块。它需要使用套接字,访问磁盘,并与真正的数据库进行交互。当程序第一次构建完并成功运行的时候,小Printf高兴地跳了起来。但是这个程序还不够好。 它需要进行重构,编写更好的测试脚本、文档、lint检查和分析。程序运行一段时间之后,一天早上突然就崩溃了。 然后,又不断出现崩溃的情况。 程序的设置是错误的,日志文件没有轮转(rotate),磁盘读写速度不稳定,网络也会时不时中断,总是会出现各种故障,程序编码也被弄混了,数据库没有定期清理,导致数据库交易挂死;证书最终过期,不断出现各种通用漏洞(CVE)。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f7496842.png) 总之,他的那个程序最后变得一团糟。 他告诉我说:“看来我还什么都不懂!我本应该满足完自己的需求就好了。但是由于编写了一个不错的系统,我慢慢地自大,我花了那么多时间去打补丁,甚至是已经抵消掉了程序为我节省的时间。” 一天早上,他决定离开自己的办公室。“再见了”,他对着办公室说道。他要走出去,看看软件世界除了自己乱糟糟的服务器之外,都有着什么精彩之处。 他离开之后,原来那个程序的日志会越积越大,直到硬盘空间被耗尽。
';

第二章

最后更新于:2022-04-01 06:48:37

> 出处:[编程派](http://codingpy.com/article/the-little-printf-chapter02/) > 原文:[http://ferd.ca/the-little-printf.html](http://ferd.ca/the-little-printf.html) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f741de14.jpg) > 《小Printf的编程故事》第二章:故事中的我终于和小Printf相遇了。他们之间,会发生些什么呢? - [上一章](http://codingpy.com/article/the-little-printf-chapter01/) ## 第二章 就这样,我开始满世界地演讲,教别人怎么去做一些有时候我自己都没有做过的事情,不过大家似乎都相信了我是一名真正的程序员,而理由正是我做的那些与编程没有太大关系的事。 有一天,我参加完一个会议准备回家,但却被困在了机场。我愤怒地在终端上打字,突然听见有一个奇怪、柔和的声音问我: “你能不能,为我设计一个系统?!” “什么?!” “为我设计一个系统!” 这样的请求让我吃惊,抬起头想看看是谁提的。我看了看四周,发现有一个小孩站在不远处。他说自己渴望成为一名开发者,还让我叫他“Printf”。我觉得这个名字有点愚蠢、花哨。他的样子大概是这样的: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f742de5e.png) “我还不太懂计算机,但是你看上去是个行家。我想编写程序,通过博客让大家都知道,用上我写的程序。求求你,为我设计一个系统!” 这真的是一个令人惊讶的请求,当时我已经有20个小时没有睡觉了,有点不确定自己听清楚了他的话。我跟他说,开发系统很困难。我不清楚他希望系统实现哪些功能,如何处理异常,应该支持多少个读者,在哪里部署,所以在这种情况下,我没办法给他设计一个良好的系统。 “那个没关系。只要给我设计一个系统就行。” 没办法,我给他画了下面这个架构图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f743e4d1.png) 他看了看图,摇头说道:“这个系统还不够好。再设计一个吧”。我照做了: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f74578ed.png) 并给他逐一介绍了背后的原理。 我这个新朋友礼貌地笑了笑。“这并不是我想要的,它太复杂了,很多功能都不是我需要的。” 我有点不高兴,我可是考虑了冗余、监控、备份、缓存、负载、外部支付、故障切换备份、快速部署等诸多因素。光是这份系统设计,我就能收一笔不小的咨询费!终于没了耐心,我就随便给他画了张图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f7470324.png) 然后补充道,“这就是你要的设计,你所要的系统就在那个黑盒子里”,希望这个乱七八糟的答案会让他离我远点。但是他的回答再次让我感到惊讶: “这就是我想要的设计!” 就这样,我认识了小Printf。
';

第一章

最后更新于:2022-04-01 06:48:34

> 出处:[编程派](http://codingpy.com/article/the-little-printf-chapter01/) > 原文:[http://ferd.ca/the-little-printf.html](http://ferd.ca/the-little-printf.html) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f0410bcd.jpg) > 原作者Fred Hebert,是一名加拿大程序员,写过一本Erlang入门书籍。这个故事的英文名叫The Little Printf,是他在今年10月份芝加哥的CityCode大会上所做的一次分享的内容,模仿了法国经典名著《小王子》,其中夹杂着他自己学习编程的一些经历。这个短篇故事一共有11章,其中的插画按照作者的介绍,应该是他自己画的。想看原作者分享的朋友可以前往[YouTube](https://youtu.be/EWdqtMdcNkE)。译文如有不妥之处,请大家指正! ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f0427e14.png) ## 第一章 我庆幸自己出生在电脑、电子游戏普及之前。我和小伙伴们经常在室外玩耍,那个时候我们可以享受自己发明游戏的乐趣。 我们会自己扮演英雄,手里拿着的树枝可以立刻变成一张弓、一把枪、一柄剑或是一个望远镜。我们可以把树枝变成任何东西,当然回旋镖除外,因为一旦你把树枝当回旋镖扔了出去,就得自个儿捡回来。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f04365a5.png) 慢慢地,我长大了,继续玩这样的游戏让人感到有点尴尬。你没办法把松球当做手榴弹,假装自己有超能力,因为其他的孩子都觉得大人的世界才精彩。我已经不太合群了。最终,我不得不长大。但是,不管怎么说,这仍然是一个非常幸运的童年。 后来,我有机会玩上了电子游戏,有了自己的电脑。在游戏和电脑里,我一直梦寐以求的虚构世界真实地出现在面前。我整个人都陷进去了,在那个世界里,我完全过上了另一种生活。 但是大部分电子游戏都有一个特点:你不能创造,你只能应对、消费。少年时代,我参加了即兴剧场。在剧场里,我又可以与人交流,一起创造,自由放任自己的想象力。 当然,魁北克的即兴剧场与别处不同;里面有一个溜冰场——一切都和冰球有关。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f0447446.png) 2005年到2008年期间,我在大学里学习多媒体技术,机缘巧合之下接触了编程工作。我觉得编程太不可思议了!我又充满了创意,而且还能赚钱!当时,我设计了自己的第一个游戏雏形,高兴地跳了起来。 不过别人后来告诉我,“那并不是真正的电子游戏”。“那只是一个HTML表单,如果你把文字和选项替换成数组,就更好了。代码还需要进一步清理。” ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f0459fad.png) 我有一点心灰意冷;那个游戏其实是根据我自己写的一个脚本设计的,想让玩游戏的人“选择自己的冒险旅程”。不过,我也认识到了一点:如果我想让自己开发出的东西被更多人认可,我就必须再学很多相关的知识才行。 我必须要学习“真正的编程”。从GUI工具里的JScript,转型到更好的语言,比如说PHP。所以,我学习了PHP,还有JavaScript。然后,又有人告诉我怎样才算是真正的编程;PHP糟透了。有人说,我或许可以尝试下Python,我后来也学了。 但是,真正的程序员懂得更加高深的东西,Python的lambda还不行,面向对象编程也不算。别人跟我说,接下来你最好读一读SICP(计算机程序的构造和解释),因为这本书就是计算机科学领域的圣经。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-05_568b3f0469a69.png) 就这样,我接触了Scheme。后来我买了K&R(C语言程序设计),因为现实世界中真正的程序员都会C语言。我在当地的大学报了一个培训班,因为真正的程序员都懂数据结构和数学,我也有学到几分。我开始读论文和技术书籍,因为真正的程序员要与时俱进,掌握时髦的算法。 在这个过程中,我学习了Erlang,开始以此谋生。我写了一本有关Erlang的书。有趣的是,没人质疑过我是不是真的会写书,是不是真的会画插画。不管怎么说,我就这样得到了一份教别人学Erlang语言的工作,而自己还从没有用Erlang做过生产级别的开发。
';