`

《高效程序员的45 个习惯》读书笔记

    博客分类:
  • Book
阅读更多


本书和其他的"怎么写好出优秀的程序"的书籍基本没有什么两样. 如果说要有些区别的话, 就是里面添加了一些敏捷的元素.
另外为了说明某个问题, 里面的一些比喻非常有趣.

对于里面一些觉得对自己有益的东东, 做了一些笔记.

你深知怎样才是正确的, 或者至少知道目前的做法是错误的. 要有勇气向其他的项目成员, 老板或者客户解释你的不同观点. 当然, 这并不容易. 也许你会拖延项目的进度, 冒犯项目经理, 甚至惹恼投资人, 但是你都要不顾一切, 向着正确的方向前进.

做正确的事, 要诚实, 要有勇气去说出实情. 有时这样做很困难, 所以我们要有足够的勇气.

不停的问为什么, 不能只满足于别人告诉你表面现象. 要不停地提出知道你问明白问题的根源为止.

问问题, 你有可能会跑题, 问了一些与主题无关的问题. 就好比是, 如果汽车启动不了, 你问是不是轮胎出了问题, 这是没有任何帮助的, 问"为什么", 但是要问到点子上.

"这个, 我不知道"是一个好的起点, 应该由此进行进一步的调查, 而不应该到此戛然而止.

以固定有规律的长度进行迭代, 也许刚开始你要调整迭代的长度, 找到团队最舒服可行的时间值, 但之后就必须要坚持.

好的设计应该是正确的, 而不是精确的, 也就是说, 它描述的一切必须是正确的, 不应该涉及到不正确或者可能会发生变化的细节, 它是目标, 而不是具体的处方.

你依赖单元测试, 如果代码没有测试, 你就会觉得很不舒服, 就像是高空作业没有系安全带一样.

开发代码时, 更应该注重可读性, 而不是只图自己方便, 代码阅读的次数要远远操作编写的次数, 所以在编写的时候值得花点功夫让它读起来更加简单. 实际上, 从衡量标准上来看, 代码清晰程度的优先级排在执行效率之前.

注释有时候是为了帮写的不好的代码补漏.

代码必须明确说出你的意图, 而且必须富有表现力, 这样可以让代码更易于被别人阅读和理解. 代码不让人迷惑, 也就减少发生潜在错误的可能. 一言以蔽之, 代码应意图清晰, 表达明确.

应该让自己或团队的其他任何人, 可以读懂自己一年前写的代码, 而且只读一遍就知道它的运行机制.

解释代码做了些什么的注释用处不那么大, 相反, 注释要说明为什么会这样写代码.

编写代码的时候, 要经常留心可以改进的微小方面, 这可能改善代码的可读性. 也许你会发现可以把一个方法拆成几个更小的方法, 使其更易于测试.

在写几行代码之后, 你会迫切地希望进行一次构建/测试循环, 在没有得到反馈时, 你不想走得太远.

如果你和测试循环花费的时间过长, 你就不会经常运行他们了, 要保证测试可以快速运行.

优雅的代码第一眼看上去, 就知道它的用处, 而且很简洁.

代码几乎总是可以得到进一步精炼, 但是到了某个点之后, 在做改进就不会带来任何实质性的好处了.

当然简单的解决方案必须要满足功能需求. 为了简单那而在功能上妥协, 这就是过分简化了.

假定把所有的衣服都扔到抽屉里, 当需要找一双袜子的时候, 要翻遍里面所有的衣服:裤子, 内衣, T恤等, 才能找到. 这很麻烦, 特别是在赶时间的时候. 现在假定所有的袜子都放在一个抽屉里面(而且是成双放置的), 全部的T恤放在另外一个抽屉中, 其他衣服也分门别类, 要找到一双袜子, 只要打开一个抽屉就可以了.

类也要遵循内聚性, 如果一个类的方法和属性共同完成了一个功能(或一系列紧密相关的功能), 这个类就是内聚性的.

一个更具有内聚性的组件不会有太多导致其变换的原因, 也因此更加稳定.

面向过程的代码取得信息, 然后做出决策, 面向对象的代码让别的对象去做事情.

作为某段代码的调用者, 开发人员绝对不应该基于被调用对象的状态来做任何决策, 更不能去改变该对象的状态, 这样的逻辑应该是被调用对象的责任, 而不是你的. 在该对象之外替他做决策, 就违反了它的封装原则, 而且为bug提供了滋生的土壤.

假定送报男孩来到你的门前, 要求你付给他本周的报酬, 你转过身去, 让送报男孩从你后屁股兜里掏出钱包, 并且从中拿走两美元(你希望是这么多), 再把钱包放回去. 这个过程中, 送报男孩作为调用者应该告诉客户付给他两美元, 他不能探究客户端财务状况, 或者钱包的厚薄, 他也不能代替客户做任何决策. 这都是客户的责任, 而不属于送报男孩. 敏捷代码也应该以同样的方式工作.

要遵循里氏替换原则, 相对基类的对应方法, 派生类服务(方法)应该不要求更多, 不承诺更少, 要可以进行自由的替换, 在设计类的继承层次时, 这个一个非常重要的考虑因素.

记录问题的日志内容:
问题发生的日期
问题简述
解决方案详细描述
应用文章或者网址, 以提示更多细节或相关信息.
任何代码片段, 设置或对话框截屏, 只要他们是解决方案的一部分, 或者可以帮助更深入地理解相关细节.

记录问题的时间不能超过解决问题的时间. 要保持轻量级和简单, 不必达到对外发布式的质量.

要记录团队做出一个重要决策的原因, 否则, 在6~9个月之后, 想要重新回顾决策过程的时候, 这些细节就很难再记得了.

警告即错误

在解决问题时, 要将问题域与周边环境隔离开, 特别是在大型系统应用中.

由于大家都是在团队中一起工作, 每个人都要修改自己的个人编码习惯, 来适应团队的其他成员.

关于站立会议
要保证会议议题不会发散, 每个人都应该回答下述三个问题:
昨天有什么收获?
今天计划要做哪些工作?
面临哪些障碍

只能给予每个参与者很少的发言时间(大约两分钟), 也许要用计时器来帮助某些收不住话头的人, 如果要详细讨论某些问题, 可以在站立会议之后, 在召集相关人员(在回忆中说"我需要跟Fred和Wilma讨论一下数据库"是没有问题的, 但是不要是深入讨论细节.)

一般来说, 在大家到公司之后的半个小时到一个小时之内举行, 是个不错的选择.

每日站立会议的好处:
让大家尽快投入到一天的工作中来
如果某个开发人员在某一个点上有问题, 他可以趁机将问题公开, 并积极寻求帮助.
帮助TL了解哪些领域需要更多的帮助, 并重新分配人手.
让团队成员知道项目其他部分的进展情况.
帮助团队识别是否在某些东西上有重复劳动而耗费了精力, 或者是不是某个问题有人已有现成的解决方案.
通过促进代码和思路的共享, 来提升开发速度.
鼓励向前的动力:看到别人报告的进度都在前进, 会彼此形成激励.

注意事项:
站立会议的时间最多不能超过30分钟, 10~15分钟比较理想.
虽然大多数团队需要每天都碰头, 但是对于小型团队来说, 这样做可能有些过头了, 不妨两天举行一次, 或者一周两次, 这对小团队来说足够了.
如果觉得站立会议是浪费时间, 那可能是大家都还没有形成真正的团队意识. 这并不是坏事, 有利于针对问题进行改正.

最基本的code review列表
代码是否被读懂和理解
是否有任何明显的错误
代码是否会对应用的其他部分产生不良影响?
是否存在重复的代码?
是否存在可疑改进或重构的部分?

代码复查需要积极评估代码的设计和清晰程度, 而不只是考量变量名和代码格式是否符合组织的标准
分享到:
评论

相关推荐

    一个程序员的工具箱

    ### 一个程序员的工具箱:全面解析 #### 引言 在信息技术(IT)领域,特别是对于程序员来说,拥有一套高效、实用的工具是至关重要的。这些工具不仅能提高工作效率,还能帮助解决各种技术难题。本文将详细介绍《一个...

    程序员的学习与思考.doc

    从给定的文件信息来看,本文档探讨的主题围绕着程序员的学习方法、思考习惯以及如何构建一个有益于个人成长和知识分享的社群环境。以下是对这些关键知识点的详细解析: ### 知识点一:程序员的学习习惯 #### 1. ...

    程序员资料整理软件

    【程序员资料整理软件】是一款专为程序员设计的...总之,程序员资料整理软件是程序员不可或缺的辅助工具,它整合了各种实用功能,帮助程序员打造一个高效、有序的知识管理系统,使他们在编程学习和工作中更加得心应手。

    程序员需要的高效率工具

    Markdown是一种轻量级标记语言,易于阅读和编写,非常适合用来撰写文档、笔记等内容。它有许多变种,如 GitHub Markdown、Markdown Extra 等,每种都有其独特的扩展特性,适用于不同的应用场景。 #### 编码工具 **...

    #资源分享达人# Typora For Markdown.rar 程序员人手一份编辑笔记好帮手,附有安装全过程,还不快来拿

    学习和掌握Markdown,结合Typora的使用,将极大地提升程序员的文档编写效率和笔记质量。不论是日常开发记录、项目协作,还是个人知识管理,Markdown都是一个不可多得的工具。而 Typora 作为Markdown编辑器中的佼佼者...

    林信良java学习笔记

    在阅读笔记理论知识的同时,通过代码示例,学习者可以将所学应用到具体的编程任务中,如数组操作、循环和条件语句的使用,以及设计模式的实例应用。这些例子不仅能够让学习者更直观地理解概念,也能够帮助他们掌握...

    c语言学习笔记,好东西

    它的语法简洁、高效,是很多程序员入门编程的首选。本压缩包包含了一份精心整理的C语言学习笔记,旨在帮助读者深入理解和掌握C语言的核心概念与技术。 笔记首先从基础语法开始,包括变量、数据类型、运算符以及...

    2018有道云笔记最新安装包

    有道云笔记是一款深受广大用户喜爱的笔记应用,尤其对于技术编程工程师来说,它更是日常工作中的得力助手。2018年的最新安装包...只需下载压缩包中的"YNote.exe"文件,即可开始体验这个智能、高效、便捷的笔记世界。

    Typora程序员专用的md文档编写器

    总的来说,Typora作为一款Markdown编辑器,不仅提供了Markdown的基本功能,还通过实时预览、代码高亮、LaTeX支持等功能,为程序员提供了一种高效、便捷的文档编写方式,极大地提升了编程工作的效率和舒适度。

    c语言课程笔记18.pdf

    C语言是一种广泛应用于系统开发和应用编程的高级编程语言,其简洁、高效的特点深受程序员喜爱。本篇笔记主要探讨了C语言中注释的使用及其重要性,以及如何有效地为不同结构的代码添加注释,以提高代码的可读性和可...

    行业文档-设计装置-笔记本电脑专用小夜灯.zip

    这个设计考虑到了现代人长时间使用电脑的工作和生活习惯,以及夜晚使用电脑时对周围环境的影响。 首先,我们要理解小夜灯的功能性。它可能是通过磁吸、夹持或粘贴等方式固定在笔记本电脑屏幕边缘,以提供定向照明,...

    CodeNoteBook代码笔记本

    作为一个专注于代码存储和管理的应用,CodeNoteBook旨在为程序员提供一个高效、便捷的环境,以便于整理、查阅和分享代码片段。 在当今的软件开发环境中,代码笔记本的重要性不言而喻。随着项目复杂度的增加,开发者...

    平板电脑与笔记本电脑的区别.docx

    在使用体验方面,平板电脑的优势在于其轻便的身形和直观的触控操作,使得它非常适合移动使用,例如在公交车上阅读、在咖啡店中观看视频或是轻量级的内容浏览。此外,许多平板电脑还提供了丰富的应用程序,特别是在...

    java笔记_Java笔记_

    笔记采用Ediplus编辑器编写,这是一款轻量级且功能强大的文本编辑工具,非常适合程序员进行代码编写和学习。 首先,Java基础部分包括了以下几个关键知识点: 1. **Java环境搭建**:安装Java Development Kit (JDK)...

    C-learn-notes:这是我的C程序员学习笔记

    "C-learn-notes"这个压缩包很可能是某位C程序员在学习过程中积累的笔记,包含了他的学习心得、代码示例和理解要点。尽管没有具体的标签提供更多信息,我们可以基于C语言的一般学习路径来探讨一些核心知识点。 1. **...

    CherryTree.rar

    在IT领域,文本编辑器是开发者和程序员不可或缺的工具之一,它们能够帮助我们高效地编写、修改和管理代码。今天我们要讨论的是名为“CherryTree”的文本编辑器,这是一款功能丰富的开源笔记应用程序,专为那些需要...

    《代码大全》学习笔记

    对于刚从学校毕业的新手程序员来说,他们缺乏实际的编程经验,需要一本像《代码大全》这样的书来引导他们形成良好的编程习惯和风格。书中的建议,如变量和函数的命名规则,可以立即应用到实际工作中,以提升代码的...

Global site tag (gtag.js) - Google Analytics