# 0x00:写在最前
《代码整洁之道:程序员的职业素养》(The Clean Coder - A Code of Conduct for Professional Programmers)应该算是我从大二开始编程以来,读到的第一本与程序员软实力相关的书籍了。说来不怕被耻笑,在公司培训期间就各种听到大家说Clean Code是本好书,入职了之后迫不及待买来看,结果发现这本书和Clean Code虽然都是bob大叔所写,但是却是两本完全不同内容的书。所以今天赶紧下单把Clean Code给买了。
这本书对于我目前(2020年10月13日)来说可能缺少一定量的工程实践经验来支撑或者联想bob大叔在其中提到的各种观点,但是作为初学者的我来说也能在初学者的角度去有自己的见解。
2020年是我第一次读这本书,希望在未来的三五年内我能够再多读几次,希望到时候自己能有更多的发现。
今天不总结整本书,挑三个对我来说印象比较深的内容来说。
**以下所有内容均代表个人观点与个人理解,不完全正确,不具备参考意义。**
# 0x01:说“不”与说“是”
bob大叔专门用两章说明了作为专业人士,学会合理地说“不”与说“是”是非常重要的。
说“不”的场景主要集中在在面对不合理的需求或者要求时,需要积极地说出“不”。
在一个软件开发的团队中,通常不可避免地存在着角色的对抗。例如PM希望尽快完成当前的开发内容,以节省成本;BA希望最终的成品与期望中的一致,而不是去考虑实现难度;开发则希望能够尽可能地开发出一份健壮的、易维护易拓展的软件。
不难看出其实上述角色的目标之间是存在着矛盾的,而这个矛盾则是角色对抗的由来。bob大叔在书中说道,`面对艰难的决定,直面不同角色的冲突是最好的方法。` `同样,程序员也有其工作职责所在,绝大多数程序员也知道该如何出色地尽职尽责。如果他们是专业的程序员的话,他们也会竭尽所能地去追求和捍卫自身的目标`
因此,在角色对抗的过程中,遇到了不合理的需求和要求,我们需要去说“不”。而不是一味地顺从,然后自己加班加点或者走捷径去实现自己的承诺。这个于自己或于项目都是一个巨大的隐患点。
其实再说出“不”的那一刻,代表着我们自身对这个问题有着充分的理解与思考,并且寻求与对抗角色的积极沟通。如果对方也是专业的,那么应该是从各个方面考虑从而提出另一个合理的需求或要求。
并且,在面对一些高风险的关键时刻,合理的“不”就越是重要。重要到经常能影响到软件的成败,公司的存亡。
那其实我看到这里觉得,这个还好,还能在大部分场景下做到。但是到“是”这一部分,就不好说了。
首先是一句话让我印象深刻:
> “能就是能,不能就是不能,不要说‘试试看’” —— 尤达
虽然这种情况对目前的我来说比较少,但是我相信后面上到项目上经常会遇到自己不了解的领域却要求在期限内作出的。其实如果是按照我现在的本能反应,我肯定是会说“尽力”“努力”之类的词语。
那除此之外,在和别人沟通的时候,“缺乏承诺”的征兆有哪些呢?一般带有以下几个用词和短语,都会透露出“缺乏承诺”的蛛丝马迹:
+ 需要/应当
+ 希望/但愿
+ 让我们(而不是让我)
而bob大叔通过一个案例告诉我,当遇到在自己能够掌控的范畴之外却又必须去做的事情的时候,最好的做法应该是用一段时间去了解这个“无法掌控”的东西对于我来说有多么的无法掌控,然后进行预估,在合理的范围内说是。
如果当我意识到事情“out of control”的时候,那应该怎么去应对?bob大叔又给出了可能的原因和应对方法:
+ 之所以没成功,是因为我寄希望于某某去做这件事
`寄期望于某某`就属于无法掌控的事情。在这种情况下可以承诺自己会采取一些具体行动来达成最终目标
+ 之所以没成功,是因为我不太确信是否能真的完成得了
那这已经没有什么很好的理由去解释了,需要做的就是如何去缓解无法完成目标所带来的问题,缩短与最终目标的距离。
+ 之所以没成功,是因为有时候我真的无能为力
这个相比起上一个来说更加严重一点,但是也很现实。因为有些事情的发生没有办法预料到。在这种情况下应该尽早向各利益相关方发出预警信号。
# 0x02:程序员的mp
bob大叔说,程序员的注意力就与游戏中的魔法值(mp)是一样的,开发的时候会慢慢地使用,随着时间的流逝以及忧虑和分心都会消耗注意力点数。作为一个合格的程序员,应该学会如何去管理自己的注意力点数。
在书中注意力点数是放在了第九章讲,而关于编码状态则是放在了第四章。我个人觉得是可以结合到一起去的。
因为注意力点数在无形中直接或者间接地影响到了我们的编码状态。例如熬夜写代码,通常是状态极差的,其实深究其原因是因为经过一天的劳累和高强度编码,注意力点数已经消耗殆尽或者来不及恢复了。亦或是在焦虑的时候写代码,就像中了debuff一样没有办法很好地回蓝造成我们的输出不给力。
所以,当我们察觉到我们不够蓝的时候,应该学会保持节奏,知道什么时候离开一会,或停下来休息一下。这个对我来说非常有启发意义,因为我经常是在电脑面前一坐就是一上午,也就偶尔去上上厕所。读完这本书之后我也在想办法去改变,当发现自己蓝不够的时候能够离开一会儿。
除了注意力点数之外,bob大叔在第四章还提到了一个我之前不知道的概念——流态区。当一个人陷入流态区时会`效率极高`并且会觉得自己`毫无错误`。
确实有那么几次经历,在写后端接口的时候自己进入过这样的一个状态,写接口写的飞快感觉自己贼牛逼,但是后面却不得不去重新审查这段时间写的某些代码——因为有bug。
所以bob大叔认为,进入流态区并非真的极为高效或毫无错误。`这只是一种“浅层冥想”的状态,在这种状态下,为了追求所谓的速度,理性思考的能力会下降`,所以**在某些场景下,我们应该避免进入流态区**
进入流态区的可能性有很多种,比如在写自己十分熟悉的、完全掌控的代码,甚至在边听音乐(比如很嗨的电音)边写代码的时候,都会滑入流态区。
当发现自己进入流态区的时候,最好起来走动一下,去换个脑筋。
# 0x03:卡塔
卡塔是书中的一个小节,是属于编程实践方面的内容。
在武术里,卡塔是一套设计好的、用来模拟搏斗一方的招式。目标是要逐步把整套招式练习到纯熟。习武者努力训练自己的身体来熟悉每一招,把他们连贯成流畅的套路。训练有素的卡塔看起来非常漂亮。
类似的,编程卡塔的终极目标,也是逐步练习以达到纯熟。其实这里的纯熟包含了很多方面——`IDE的快捷键使用,对于语言和代码的理解,对于包、工具类的熟练使用`等各个方面。
卡塔的目标并不是去解决一个自己不知道的问题,而是通过已知的解决方式去训练自己各个方面的纯熟度。
比如说,我可以不断地练习TUWC中的保龄球问题,去训练我在mac写的IDEA快捷键熟练度。对我来说,这是一个全新的训练领域。
# 0xFF:小结
总的写下来让我感觉我对以上知识点没有办法很深入地去解释,很多都是照搬bob大叔的话,在浅层上理解。这也造成了在前两个小结我写的时候感觉冗余而又没用。
当然,作为一个新人第一次读这也是正常的。更何况通过读这本书我最大的收获并不是软实力,而是接触了一些我之前从未接触过的名词或领域。
希望自己能够再接再厉,在未来的某一天重新读这本书或者这份读后感的时候能够有更新的见解~
【读后感】《代码整洁之道:程序员的职业素养》