代码整洁之道 读后感

代码整洁之道 读后感

The Clean Coder —— A code of Conduct for Professional Programmers 读后感

看完这本书的感受是,这本书和标题的 “代码整洁之道” 没有什么关系。倒是与 A code of Conduct for Professional Programmers 这个副标题很贴切。

这本书开篇说到了一个面试必问的面试问题,来强调 专业开发人员的职业素养。
在你过去的工作中,遭遇过哪些印象深刻的困难,最后是怎么解决的?
为什么这个问题是面试必问的?
书中强调:简历写的再漂亮的人,如果回答不好这个问题,大都可以直接忽略。因为我们需要招聘的不是“经验丰富”的人,而是“有职业素养”的人。我们看重的并不是问题的难易程度,而是解决问题的方式、步骤以及反思程度。

那么如何成为专业人员,专业人员该怎么做?整本书主要阐述了专业软件开发者应该具备的素养和专业精神

  • 什么是软件专业人士?
  • 软件专业人士应该如何做事?
  • 工作中的时间管理
  • 软件专业人数如何和管理人员打交道?
  • 软件专业人士如何应对压力?

1、什么是软件专业人士?

  • 对自己不完美的代码负责
  • 不要把QA当做啄木鸟
  • 遵循软件项目的根本原则:软件要易于修改
  • 职业发展:每天充电 3 小时
  • 坚持学习
  • 了解自己领域的相关技术
  • 了解自己的业务

1.1、对自己不完美的代码负责

没有人能写出完美的软件,但这并不代表不用对不完美的代码负责。专业人士就是对自己犯下的错误负责的人,哪怕一些错误实际上在所难免。

如果不小心犯了一个错误,专业人员该怎么做呢?
如果不小心放过了某个模块里的一个小bug,以致公司损失了1万元,专业人士需要为这一万元买单。

专业人士的失误率应该越来越少,甚至趋近于零
另外,职业发展多年后,专业人士的失误率应该越来越少,甚至趋近于零。失误率永远不可能等于零,但专业人士有责任让它无限接近零

1.2、不把QA当做啄木鸟

  • 不要向测试发送有缺陷的代码。什么样的代码是有缺陷的呢?那些你没有把握的代码都是!
  • 提测前要确信代码可以正常运行。如何知道代码可以正常运行呢?一遍一遍的自测,翻来覆去、颠来倒去的测,使出浑身解数的自测

1.3、软件要易于修改

如何保证自己的软件结构易于修改?如果希望自己的软件灵活可变,那就应该时常修改它!

  • 不要为了加快项目进度、或者急于发布新功能,让代码结构变得糟糕。结构良好的代码更加灵活,易于修改。为赶工期,以牺牲结构为代价,得不偿失,将来必将追悔莫及。
  • 阅读某个模块代码时,如果发现某些代码没有预想的那样简单。那么你就应该做一些修改,改进设计,使后续修改变得简单
  • 有一种策略叫做 “无情重构” :对每个模块,每检入一次代码,就要让它比上次检出时变得更为简洁。每次读代码,都别忘了进行点击的改善。(我觉得,这种方式有些过了,我的境界遵循第一条就够了)

最好的软件开发人员都知道一个秘密:美的东西比丑的东西创建起来更廉价,也更快捷。构建、维护一个美得软件系统所花费的时间、金钱都要少于丑的系统
美的系统是灵活、易于理解的,构建、维护它们就是一种快乐。

1.4 每天充电 3 小时

职业发展是你自己的事。将自己的职业发展寄希望于雇主的软件开发人员将会很惨。

  • 雇主出了钱,你必须付出时间和经历。以一周工作40小时作为标准,这40小时应该用来解决雇主的问题,而不是你自己的问题。
  • 你应该每周工作60小时,前40小时给雇主,后20小时留给自己。这留给自己的20小时里,差不多每天 3 个小时,这 3 个小时,你应该看书、练习 或 做一些其他提升职业能力的事情

1.5 坚持学习

这一条和上一条貌似重复了,其实我只是想多提醒一下自己,坚持学习的重要性

病人不会找已经不堪医学期刊的医生看病;发生纠纷时,人们不会聘用不了解最新律法和判例的律师。

同样:不再写代码的架构师必然被时代淘汰;不学习新语言的程序员,只能眼睁睁看着行业一路向前发展,而自己被抛在后边

1.6 了解自己领域的相关技术

了解自己从事行业的 各种观点、实践、技术、工具与术语

1.7 了解自己的业务

很简单,不了解自己的业务,雇主发现后会很不满…

2、专业人士应该如何做事?

  • 既然承诺了,那就必须兑现
  • 发现无法兑现承诺,那么最重要的就是尽早向你的承诺对象发出预警,越快越好,越早越好
  • 制造出很多bug的软件开发人员也会被人认为不专业
  • 软件开发是一场马拉松,需要维持稳定节奏来取胜
  • 被中断时,礼貌的表现出乐于助人的态度才是专业开发人员应具备的态度
  • 保持自己不落伍的一种方式是为开源项目贡献代码
  • 如果焦虑正在不断削弱工作效率,那么最好还是花上一个小时让他们先安静下来
  • 疲劳的时候,千万不要写代码

2.1、既然承诺了,那就必须兑现

承诺是必须做到的。如果你承诺在某天完成某件事情,就必须按时完成。即便它意味着你必须每天工作12小时,放弃周末的休假,也不得不如此。既然承诺了,那就必须兑现

2.2、如果发现无法兑现承诺

如果发现无法兑现承诺,那么最重要的就是尽早向你的承诺对象发出预警,越快越好,越早越好

你越早向各利益相关方发出预警信号,整个团队就越有可能抓住机会,中止并重新评估当前的活动,并决定是否采取些措施或做出改变(比如调整优先级等)。这么一来,任然有可能达成之前的承诺,或者,用另一个承诺来代替先前的承诺。

2.3、将Bug 降到最低

医生不喜欢重新打开病人的胸腔去修复此前犯下的错误;律师不喜欢重新接手此前搞砸的案子。
经常重新返工的医生或律师会被认为不专业。

同样,制造出很多bug的软件开发人员也会被人认为不专业。

衡量是不是一名专业人士的一个重要方面,便是看是否能将调试时间尽量降到最低。
绝对的零调试时间是一个理想化的目标,无法达到,但要将之作为努力的方向。

2.4、软件开发是一场马拉松,需要维持稳定节奏来取胜

软件开发是一场马拉松,而不是短跑冲刺。你无法全程一直以最快的速度冲刺来赢得比赛,只是通过保存体力和维持稳定节奏来取胜。

当碰到困难或者受到阻碍时,当你感到疲倦时,离开一会。。。

2.5、被中断时 注意自己的态度

中断无法避免,总有干扰会打断你、消耗你的时间。发生这种情况时要记住一点,也许下一次你会轮到你去打断别人,去请求别人的帮助。因此,礼貌的表现出乐于助人的态度才是专业开发人员应具备的态度

2.6、向开源工程贡献代码

保持自己不落伍的一种方式是为开源项目贡献代码,就像律师和医生参加公益活动一样。
开源项目有很多,为其他人真正关心的开源项目做一点贡献,应该可以算是提升技能的最好方法了。

2.7、焦虑时 不要写代码

如果发现自己虽然人坐在办公室里,但内心的焦虑正在不断削弱工作效率,那么最好还是花上一个小时让他们先安静下来,这要好过硬逼着自己去写代码。这样憋出来的代码,以后也将不得不抛弃。

2.8、疲劳的时候不要写代码

疲劳的时候,千万不要写代码。奉献精神和职业素养,更多意义上是指的要遵循纪律原则而非成为长时间工作的工作狂。要确保自己已经将睡、健康和生活方式调整到最佳,这样才能做到每天的8小时工作内容全力以赴。

2.9、如果你有看玄幻小说、言情小说的癖好 包容他们

“创造性的输出” 依赖于 “创造性的输入”
广泛阅读 天文、政治、历史、物理、化学、甚至科幻小说都有可能激发开发者的创造力。
因此,如果你有看玄幻小说、言情小说的癖好,不要再试图压制他们,去包容他们
也许这正是你舒缓疲劳神经、又创造力的一个良好来源。

3、工作中的时间管理

  • 自动化测试金字塔
  • 站立会
  • 凡是不能在5分钟解决的争论,都不能靠辩论解决(最终还是要拿出数据)
  • 坑法则。如果你掉进了坑里,别挖
  • 程序泥潭:回头绝对是最简单的方法,如果继续前进,系统可能深陷泥潭,永无法翻身
  • 如果你用光了自己的注意力,必须花费一个小时或者更多的时间去来补充它
  • 锻炼身体,保持充沛精力

3.1、自动化测试金字塔

代码整洁之道 读后感

3.2、站立会

  • 所有与会者必须站着
  • 到场的人依次回答:我昨天做了什么?今天打算做什么?遇见了什么问题?
  • 每个问题的时长不超过20秒,每个人的发言不超过一分钟;
    这样即使10个人开站立会,总时长也就10分钟

3.3、争论

凡是不能在5分钟解决的争论,都不能靠辩论解决(最终还是要拿出数据)

如果争论必须解决,就应当要求争论各方在5分钟内向大家摆明问题,然后大家投票。这样整个会议也不要超过15分钟。

如果你是表决失败的一方,拿出行动,认真实行与会决定

3.4、走入了死胡同

慎重的态度和积累的经验可以避免走入某些死胡同若无法避免的走入了死胡同,真正需要的是在走入死胡同时可以迅速意识到,并有足够的勇气走回头路

这就是所谓的:坑法则。如果你掉进了坑里,别挖

3.5、程序泥潭

在泥潭中前进的危害是不易察觉的。

  • 面对简单问题,你给出解决方案,并且保持代码的简单、整洁;
  • 之后问题不断扩展,需求越来越复杂。你的代码也随之不断扩展,尽可能保持简洁;
  • 某一天之后,你突然发现,自己从一开始就做了某一项错误的选择,在需求不断变化的方向上,程序已跟不上节奏。

这就是转折点 !

这一刻回头修正设计,那还可以继续走下去。走回头路的代价很高,因为这要把已有代码推翻重来,但回头绝对是最简单的方法。如果继续前进,系统可能深陷泥潭,永无法翻身

###3.6、 如果你用光了自己的注意力,必须花费一个小时或者更多的时间去来补充它

编程是需要持续投入精力和注意力的智力活动。
注意力是稀缺资源,它类似魔力点数,如果你用光了自己的注意力点数,必须花费一个小时或者更多的时间去修复,来补充它

  • 好好睡一会儿
  • 楼下漫步半小时,或者与朋友聊会天
  • 翻翻杂志等

3.7、锻炼身体,保持充沛精力

定期跑跑步,不但可以提升心智注意力,还可以锻炼身体,保持充沛精力

比如

  • 每周1、3、5 , 跑步半小时;做两组仰卧起坐,每组三十;做两组臂力锻炼的器材。大约1小时的时间。
  • 骑行1~2小时

4、与管理人员打交道

  • 如何预估工期?预估工期的几种方式
  • 能就是能,不能就是不能,不要说“试试看”
  • 如果你的老板无法向你清楚的说明加班方案失败的后备预案,那么你就不该同意加班

4.1、如何预估工期?

  • 使用三个考虑到多种因素的预估期限:乐观预估 标称预估 悲观预估 。尽量严守这三个时间点。
  • 规划扑克
    团队成员根据自己的预估选出一张牌,背面朝上,保证其他人看不到牌的点数。然后主持人依次让每个人亮牌。
  • 把大任务分成许多小任务,分开评估,再加总。
    这样做的好处是,小任务的评估误差较小,最终大任务评估的结果就较为精确。

4.2 学会说“不”

能就是能,不能就是不能,不要说“试试看”

专业开发人员需要抵制一些不专业的需求(比如一些无关紧要但成本巨大的需求),抵制一些不专业行为(为赶工期而降低对程序质量的要求)

我愿意尝试“浮空术”,愿意尝试“点金术”,或者愿意尝试横渡大西洋,但是你觉得可以成功吗?

4.3、如果老板要求通过加班来完成某项紧急需求

加班应满足以下三个条件,否则加班很大程度失败

  • 你个人能能挤出这些时间
  • 短期加班,最多加班两周
  • 你的老板有后备预案,以防万一加班失败

所以 如果你的老板无法向你清楚的说明加班方案失败的后备预案,那么你就不该同意加班

5、压力

想象一下灵魂出窍后的体验:
看到自己躺在一张手术台上,一位外科医生在做开胸手术。医生竭力挽救性命,但时间有限,此时,他的一举一动都与病人生死攸关。此时的自己,肯定希望医生可以沉着冷静,发挥出应有水平。
同样,面对压力时,专业的开发人员更需要沉着泠静。

规避会导致压力的处境,如果无法规避,则直面压力。

如何应对压力?

  • 面对压力时,沉着泠静。
  • 对导致压力的问题深思熟虑,努力寻找可以带来最好结果的路径,然后沿着那条路径以合理稳定的节奏前进
  • 让你的团队和主管知道你正在深处困境中。告诉他们你所制定的走出困境的最佳计划,请求他们的支援与指引。