本篇文章是阅读《程序员修炼之道——从小工到专家》第一章 “注重实效的哲学” 的笔记。有了一些开发经验后再看这本书会比较有感触,本书第一章讲了一些对程序员最基本的要求,如果你正在进行职业规划,那么这本书有很好的参考意义。下面我结合自己的经历聊聊第一章的内容。
责任
责任是做一切事情得前提,小到对自己的代码,大到人生规划,我想这也是作者把它作为第一章第一段的原因。责任是你主动承担的东西,当然如果这件事超过了你的控制范围,你有权不对它负责。否则的话你需要切实负起责任,即使过程中犯了错误也应该坦诚承认,而不是找各种借口。我觉得大部分程序员都会对自己的代码有很强的的责任心,毕竟它就像孩子一样,当然责任心太强往往会导致不愿承认一些错误。其实在职场中领导也比较喜欢那些能够主动承认错误的员工,谁也不能保证不犯错误,但对于犯了错误藏着掖着甚至乱甩锅的员工,领导可能更不放心交付他更重要的任务。
软件的熵
熵是一个物理学的概念,指的是某个系统中 “无序” 的总量,当软件中的无序增长时,我们称之为 “软件腐烂”。至于什么情况会导致软件腐烂,作者举了一个 “破窗户” 的例子,也就是我们常听说的 “破窗理论”。简单来说,一扇破窗户,长时间不修理,会给人们带来一种废弃感。于是又破了一扇窗户,人们开始乱扔垃圾,乱涂乱画,最终房屋的结构遭到严重破坏,且超出了业主的修理程度,从而废弃感变成了现实。破窗理论启发了警察部门对一些轻微的案件也严加处理,防止大案件的发生。
在软件开发中,低劣的设计、糟糕的代码和低质的文档等,都是 “破窗户”,应该看见一个修一个,不能让这种无序的状态越来越严重,导致软件腐烂。当然我们可能没有时间、精力去清理所有的 “破窗户”,我们可以加一些 TODO,或者集中整理成文档,拉一个专项专门处理。所以说,没有不好的程序员,只有不好的设计、代码和文档。
石头汤与煮青蛙
我们开发过程中,需要其他团队配合的时候,往往容易出现其他团队对我们所做的事情的漠视、拖延。这时候比较好的做法是,我们需要先把自己的想法进行落地,设计并开发出一个初版,有一些成就积极与大家分享。当其他人看到这个东西正在走向成功的时候,别人就会愿意帮助我们,最终共同协作完成项目,当然成果也要与大家共享。为了说明这个问题,作者讲了一个故事,有三个饥饿的士兵,路过一个村庄,由于多年的战乱,村民的食物也很匮乏。于是,士兵们便煮了一锅水,里面放了几块石头。士兵告诉惊讶的村民说这是 “石头汤”,如果放一点胡萝卜会更鲜美,一个村民就跑开去拿胡萝卜。士兵又说放点土豆会更好,另一个村民回去拿土豆。接下来不断有人拿东西,食物变得越来越多,汤越来越丰盛,最终士兵和村民一起享用了一顿美餐。这就是 “石头汤” 的案例。当然,工作中也会碰到有些团队就是不配合,就像有些村民就是不愿意把自己私藏的东西拿出来。这也没办法,或许别人有更重要的事情去做。至少这个案例给了我们一个解决这类问题的新视角。
从村民的角度来,这个案例也告诫我们视野不要太狭窄,要关注到别人做的事情,如果是一件值得去做的事情就要积极主动地参与进去,留心大图景。不要固执地只负责自己那一块的内容,不要做温水里的青蛙。所以,石头汤和煮青蛙看似两个独立的案例,却有一定的联系。
用户的参与
完美的软件需要用户的参与,因为通常我们是为别人编写软件。除了软件的功能需求,还要关注交付时间、软件质量等需求,无视用户的需求,一味地追求新特性、粉饰代码并不是有职业素养的做法。以我所从事的大数据工作为例,其实我们的用户就是运营、产品,如果无视他们的数据需求,一味地增加一些酷炫的指标,可能对分析产品并没有什么帮助,显然这样做是不对的。同样,为了交付期限、功能需求而无视工程质量的做法也不可取。所以,我们经常需要在满足用户需求与完美的工程实践之间权衡。
知识资产
我们经常听到说程序员是吃青春饭的,也就是说知识资产是有时效性的。随着我们的知识价值降低,我们对公司或者客户来说,我们的价值也在降低。为了阻止这样的事情发生,我们需要像对待金融资产一样,对待我们的知识资产。每年学一门新编程语言、每个季度读一本书(定期投资自己)。多接触了解其他的技术栈,比如:做前端的了解后端技术,做大数据的了解算法(多元化的投资)。关注新技术,在新技术流行前就花时间研究,当它流行时我们已经领先了大部分人(低买高卖)。要经常评估自己掌握的技术在市场上中的地位,如果已经凉了,需要果断放弃把经历放到新的方向(周期性地重新评估资产)。我们经常拿老外来反驳程序员吃青春饭,看完这部分内容才发现,原来老外把知识资产当做了金融资产,所以才能保证自己的价值。
交流
虽然程序员生活中不善言谈,但在工作中往往需要大量的沟通,小到接口协议,大到架构设计。交流一方面是为了推进自己的工作,另一方面是为了输出自己的观点,建立自己的影响力。同时交流的过程需要注意一些细节,比如:了解听众,选择沟通的时机,选择沟通的风格,沟通前注意自己的思路、文档是否清晰,交流中要倾听别人意见、让听众参与,沟通后及时总结、回复他人。
小结
本篇内容各个小结看似比较独立,但其实是有一定的联系的。首先责任是后续所以内容的一个前提。其次,作为程序员我们要把自己的工作做好,“软件的熵” 告诉我们要立足于我们自己的工作,要解决自己软件里的的“破窗户”。当我们把自己的事情做好,需要别人参与到我们的软件中,组成一个大的协作体的时候,需要我们怎么去协作,便是 “石头汤与煮青蛙” 一节的内容。我们开发软件,最终要解决用户的需求、为用户创造价值,所以这个过程要有 “用户的参与”。虽然目前我们开发出了让用户满意的产品,但过程中我们用到的知识有时效性的,“知识资产” 这节告诉我们如果让自己有价值。最后提到的 “交流” 是为了让我们上面所有的努力能够输出,建立自己的影响力。