实习到现在差不多两个月了,博客也一直荒废了没写。这次更新就先来写写读书笔记好了。

这本书从书名来看其实很像那种鸡汤类的书,英文名「The Pragmatic Programmer」(注重实效的程序员)看上去就好了许多。豆瓣评分 8.6 分。大一的时候买的书,之前随意地写过几年的玩具代码,所以初读这本书的时候觉得很有道理,但是读完了之后发现什么也没有记住。用徐宥的话来说就是「读者如果没有类似的经历,看到这些珠玑,也只是觉得把玩颇为有趣而已,极少能有同感。」大一的时候读这是这种感觉。

出来实习之后,接触到实际生产中的代码,在代码量比较大的情况下(几十万行),之前书中所讲的一些问题都一一浮现了。为了写出优雅的代码,有必要把这本书再读一遍,可能以后还要反复读很多遍(不是所有的内容看一遍就能内化在心里的),所以每读一部分就记一点笔记,留作日后复习用。

给自己制定以下阅读的计划,因为这本书每一张的内容读起来都比较轻松,所以预计用两周的时间读完:

  1. 每 1-2 天阅读一章(共 8 章)
  2. 每一章都写一篇笔记,读的时候可以做一些摘录,读完一章之后写一篇总结性的笔记;

下面是「序言」和「第一章」的笔记。


注重实效的程序员都有哪些特征

  • 早期的采纳者/快速的改编者:给你一样新东西,你很快能把握它,并把它与你的知识的其余部分结合在一起(尝试新技术);
  • 好奇:你喜欢提问,你是收集小知识的林鼠(建立自己的知识 wiki);
  • 批判的思考者:你会首先抓住事实,而不是照搬别人所说的;
  • 有现实感:你会设法理解你面临的每个问题的内在本质(事情有多困难,需要花多长时间完成?)
  • 多才多艺:你尽力熟悉广泛的技术和环境;

(审视一下自己,上面几点好像都没有做到,或者说有的做到了但是并不到位。)

Tip 1 Care About Your Craft 关心你的技艺

如何做到上面所说的?在你做某件事情的时候思考你在做什么

Tip 2 Think! About Your Work 思考!你的工作

它是一个持续的过程

每天为提炼你所拥有的技能而工作,为把新的工具增加到你的技能列表中二工作。草坪不是一天修成的。

第一章:注重实效的哲学

我的源码让猫给吃了

在所有的弱点中,最大的弱点就是害怕暴露弱点。—— J.B.Bossuet

如果你确实同意要为某个结果负责,你就应该切实负起责任。当你犯错误的时候,不要责备别人或别的东西,或是拼凑借口。你可以选择提供解决方案,而不是寻找借口。

Tip 3 Provide Options, Don’t Make Lame Excuses 提供各种选择,不要找蹩脚的借口

在你走向任何人,告诉他们为何某件事做不到、为何耽搁、为何出现问题之前,先停下来,听一听你心里的声音。在你去告诉他们坏消息之前,是否还有其他你可以再试一试的办法?有时,你其实知道他们会说什么,所以还是不要给他们添麻烦。

(这一点深有感触,在实习的这一段时间里面,经常因为一些小事去麻烦 leader,比如说环境跑步起来,某个莫名其妙的报错等,这虽然有文档不全的原因在,不过自己也没想着去补全文档这种解决办法。)

软件的熵

软件中的无序增长时,程序员们称之为「软件腐烂」(software rot)。

「破窗理论」:以一幢有少许破窗的建筑为例,如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户。最终他们甚至会闯入建筑内,如果发现无人居住,也许就在那里占领、定居或者纵火。又或想像一条人行道有些许纸屑,如果无人清理,不久后就会有更多垃圾,最终人们会视为理所当然地将垃圾顺手丢弃在地上。

Tip 4 Don’t Live with Broken Windows 不要容忍破窗户

不要留着「破窗户」(低劣的设计、错误决策、或是糟糕的代码)不修,发现一个修一个。

如果没有足够的时间进行适当的修理,可以把出现问题的代码放到注释中,或者是用虚拟的数据来代替。采取某种行动防止进一步破坏,并说明情势处在你的控制之下

如果你发现自己在有好些破窗户的项目里工作,会很容易产生这样的想法:「这些代码的其余部分也是垃圾,我只要照着做就行了。」

石头汤与煮青蛙

Tip 5 Be a Catalyst for Change 做变化的催化剂

(有的时候想要做出一个新功能,可以先开发一个简单的版本,然后诱导别人往其中添加新功能。)

Tip 6 Remember the Big Picture 记住大图景

当你设法催生变化时,你能否确定你是在做石头汤还是青蛙汤?决策是主观的还是客观的?

足够好的软件

Tip 7 Make Quality a Requirements Issue 使质量称为需求问题

不要因为过度修饰和过于精于求精而破坏完好的程序。继续前进,让你的代码凭借自己的质量站立一会儿,它也许不完美,但不用担心:它不可能完美。

你的知识资产

知识上的投资总能得到最好的回报。—— 本杰明·富兰克林

管理知识资产与管理金融资产非常相似:

  • 严肃的投资者定期投资
  • 多元化是长期成功的关键:你知道的不同的事情越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性,但不要就此止步。
  • 聪明的投资者在保守的投资和高风险、高回报的投资之间平衡他们的资产
  • 投资者设法低买高卖,以获取最大回报:在新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来的收益一样。
  • 应周期性地重新评估和平衡资产

Tip 8 Invest Regularly in YOur Knowledge Portfolio 定期为你的知识资产投资

  • 每年至少学习一种新语言
  • 每季度阅读一本技术书籍。一旦你养成习惯,就一个月读一本书。在你掌握了你正在使用的技术之后,扩宽范围,阅读一些与你的项目无关的书籍。
  • 也要阅读非技术书籍
  • 上课
  • 参加本地用户组织。不要只是去听讲,而要主动参与。
  • 试验不同的环境
  • 跟上潮流。订阅商务杂志和其他期刊。
  • 上网

持续投入非常重要,一旦你熟悉了某种新语言或技术,继续前进,学习另外一种。设法把你学到的东西应用到你当前的项目当中,即使你的项目没有使用该技术,你或许也能借鉴一些想法。

所有阅读和研究都需要时间,而时间已经很短缺。所以你需要预先规划。让自己在空闲的片刻时间里总有东西可读。

最后一个药店是,批判地思考你读到的和听到的。你需要确保你的资产中的知识是准确的。

Tip 9 Critically Analyze What You Read and Hear 批判地分析你读到的和听到的

交流

Tip 10 It’s Both What You Say and the Way You Say It 你说什么和你怎么说同样重要

除非你生活在真空中,你猜不需要交流,交流越有效,你就越有影响力。

总结

大概花了两个多小时的时间把第一章的内容看了一遍,顺便摘录了一些内容。这一章其实更多的是讲「道」层面上的内容,与技术内容关联不大,但又是至关重要的,做好了上面几点可以从「码农」蜕变成「程序员」,能有自己的思考,能够与他人交流,能够对自己进行投资,而不是一味地按照要求写代码。