代码整洁之道 读后感
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、压力
想象一下灵魂出窍后的体验:
看到自己躺在一张手术台上,一位外科医生在做开胸手术。医生竭力挽救性命,但时间有限,此时,他的一举一动都与病人生死攸关。此时的自己,肯定希望医生可以沉着冷静,发挥出应有水平。
同样,面对压力时,专业的开发人员更需要沉着泠静。
规避会导致压力的处境,如果无法规避,则直面压力。
如何应对压力?
- 面对压力时,沉着泠静。
- 对导致压力的
问题深思熟虑,努力寻找可以带来最好结果的路径,然后沿着那条路径以合理稳定的节奏前进
。 - 让你的团队和主管知道你正在深处困境中。告诉他们你所制定的走出困境的最佳计划,请求他们的支援与指引。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。