《 The Pragmatic Programmer: From Journeyman to Master 》这本书已加入愿望单许久,最近终于在通勤路上读完了。对于处于或将处于熟练工阶段的程序员,毫无疑问这是本值得用心阅读的书,因此我也写一下短评和推荐理由。
作为思想指导性读物,首先它具备不挑剔阅读设备的优点,电子书随处可见的内链(实体书则是页码)可以方便地跳到引用的章节,也能帮读者构建知识的关联体系,因此你可以放心挑选你感兴趣的专题。
其次,它比《 Code Complete 》更凝练,比《 Unix 编程艺术》更平和。尤其推荐给所有所谓的中级程序员,这一点也体现在了书的副标题上 —— 面向读者为 journeyman
,也就是训练有素的熟手。
虽然中文版将其译为“小工”,私以为也得是足够可靠的小工,更像是许多大牛自谦的说辞,而不代表毫无软件工程基础的 newbie
。对于真正的新人而言,阅读此类书籍所遭受的影响可能是深远的,却也可能不及耳旁风。因为随着当代软件工程的普及程度,阅读时多半会觉得这些道理显而易见、理所当然,“几乎都是课堂和应试中学过的”,这种感觉在《 Code Complete 》更甚。建议没有多少工作经验的人,先去读《 Clean Code 》和 《 Refactor 》,实践更为重要,至于编程思考类的读物凭兴趣看一本足以。
上面是说对未出师的准程序员意义相对较小,而下山历练之人,亲历过绝望的 deadline、妥协的设计以及巨大的屎山,不论将它们克服还是被击败,都更能体会到为何如此常识便是属于大师的技巧与原则。在阅读过程中,就像面向一面镜子自我矫正,你可以不断反思近段时间的行为、状态是否得当。
接下来分享几个阅读本书的 tips:
- 类似《人月神话》,本书用到了大量的比喻,只凭目录的小标题无法直观地理解作者想表达的主旨。放在最后的附录《Quick Reference Guide》原本是用作复习的,但其实它非常值得在正文前初步阅读,作为章节目录的补充,非常契合跳越式阅读的需要。
- 英文原版更利于理解作者的思想,透过标题也得承认这一点。
- 由于个人记笔记经常疏于回顾,为了提高转化效率,就得强迫自己复习思考。我把《Quick Reference Guide》默背着一字一句地敲了下来,效率不算高,但终究是极短时间内让自己多了一些复习过程,所有不清晰的点也在这一步排除掉了。作为一种输出形式,时间性价比极高。
然后聊聊对个人印象最深的几个点,虽然不擅长写读后感,但假设有人翻到了这篇博客,希望可以抛砖引玉。
- 没有完美的软件,不要任何时候都奉行完美主义,尤其要知道什么时候该停下来。这个对我而言是最为欠缺的,吹毛求疵耗费了大量时间和精力,但从自身角度很难评估哪些时候哪种做法是正确的,正所谓当局者迷。我能想到的对策,除了自省,还必须要走出自己的小圈子,多吸取他人经验。
- 不要容忍低劣的设计,留着祸患无穷,盘它,一次不行多来几次,不需要犹豫。我经常认为是自己没有考量好才没有动手,回想起来其实就是犹豫,错失了很多磨练的机会。计算常有遗漏,而踩坑则不然,真动起手来才能弄明白设计者的初衷。只有你不希望为这个软件续命时才可以忽视它……(大误
- 提供解决方案,而不是借口。就算心底没想着找借口抵赖,表达方式上也要额外注意,为了提供更有价值的信息,最后解释甚至不解释。这一点可能我做的还好,
甩锅是不存在的,而且非常抵触三句之内讲不到重点的沟通。
原本还想贴一下读书笔记,不然篇幅太短,认真考虑了一下决定不发了,毕竟博客只想放个人产出的东西,书中自有黄金屋,未经加工的笔记还是偷摸着恶心自己吧。
最后是想对自己说的话。
事实上我还远未达到熟练工的程度,遇到没挑战的事只能代表未跳出舒适区。矫正可以帮助自己找到舒适区,而破除壁障,需要在技术根本上出力。最近手痒又折腾起周边工具,看一些效率宝典(包括开篇这本书),想寻求新的突破,久而久之其实也是一种逃避。是时候直面最大的舒适区,把焦点回到编码上,突破更多的自我设限,Keep your mind sharp!