《编写可读代码的艺术》读书笔记

表面内容

1.代码的写法应当是别人理解他所需的时间最小化。一条注释可以让你更快理解代码。尽管减少代码行数是一个好目标,但是八里街代码所需的时间最小化是一个更好的目标。

2.选择专业的词,比如函数名使用getxxx(),这个get没有表达出很多信息,是从缓存中得到?从数据库中得到?或者从网络得到?如果是网络,可以用更专业的fetchxxx()或者downloadxxx()

3.tmp,retval这样泛泛的名字,可以根据情况命名,比如tmpFile,让人知道变量是一个临时的文件。(tmp这个名字只应用于短期存在且临时性为其主要存在因素的变量)

4.for循环嵌套的情况,以前习惯使用i,j,k这样处理。但是如果一旦嵌套中的索引使用错误(应该使用k,结果手误写成i这种情况),要查起来比较困难,可以使用classA_i,classB_i,classC_i这种形式,这样缺陷会更见明显,因为一旦数据使用的索引所代表的类型和数据的类型不一致,一眼而见。

5.一个变量名就像一个小小的注释,尽管空间不是很大,但是不管你在名中挤进任何额外的信息,每次有人看到这个变量名时都会同时看到这些信息。比如:

string id;//eg:"af84ef845cd8"

如果想要读者记住这个id的格式很重要的话,不妨将它命名为hexId

6.丢掉没用的词,比如ConvertToString(),完全可以写成ToString().

7.通常来讲,加上像is,has,can,should这样的词,可以把布尔值意义变得更明确

8.方法定义,getMean()给函数调用者的感觉是这个一个轻量级的快速的获取中值的方法,computeMean()则是一个计算量更大一点的【计算】出中值的方法。小心用户对特定词的期望。

逻辑内容

1.把条件、循环以及其他对控制流的改变做得越“自然”越好,让读者能够很连贯、不用停下来重读这段代码。

2.相对于追求最小化代码行数,一个更好的度量方式是:最小化人们理解它所需要的时间。比如三目运算符,建议默认情况下都使用if/else,而只有在最简单的情况下才使用三目。

3.避免使用do...while循环,这种代码,很多读者最后会将代码读两遍。

4.嵌套很深的代码很难以理解。每个嵌套层次都在读者的“思维栈”上又增加了一个条件,所以,当读者见到一个右大括号"}"的嘶吼,可能很难“出栈”来回忆起它背后的条件是什么。通过提早返回来减少嵌套;将代码改写成更加“线性”的代码来避免深嵌套。

5.当对代码做改动的时候,从全新的角度审视它,把它当做一个整体来看待。尽量避免单纯的去找最容易插入我需要增加的代码的地方,可能当时修改完之后代码很清晰,但是其他人整体读代码时,可能易读性就不够了。

6.超长表达式拆分成更容易理解的小块。

7.让所有的变量都缩小作用域,并非只针对全局变量,让变量对尽量少的代码行可见:这样可以有效减少读者同时需要考虑的变量的个数。

8.在javascript中,总是使用var这个关键字来定义变量。

重新组织代码

A.抽取出那些与程序主要目的不相关的子问题

B.重新组织代码使它一次只做一件事情。

C.先用自然语言描述代码,然后用这个描述来帮助你找到更整洁的解决方案。

1.如果你在想:“我希望我们的库里有一个xyz()函数”,那么就写一个(如果它还不存在的话),经过一段时间之后,你会建立起一组不错的工具代码,这个工具代码可以应用于多个项目。

2.当使用一个独立的小函数的时候,你会感觉添加功能、改进可读性、处理边界情况等都更加容易。

3.从项目中拆分出来的独立库越多越好,因为代码中的其它部分会更小而且更容易思考。

4.如果你所用的接口并不整洁,你还是可以创建自己整洁的“包装”函数。

以上可以总结为:把一般(通用)代码和项目专有的代码分开。这样做的结果是,大部分代码都是一般(通用)代码。通过建立一大组库和辅助函数来解决一般问题,剩下的只是让你的程序与众不同的核心部分。这么做的原因是:可以让程序员关注小而定义良好的问题,这些问题已经同项目的其它部分脱离开来。其结果是,对于这些子问题的解决方案倾向于更加完整和正确

5.重新组织代码:将其中一些任务分割到代码中单独的区域来进行改进之后,这些区域相互之间是独立的,当读一个区域的时候,你不必去想起他的区域的内容。难的是要准确地描述出你的程序所做的所有这些小事情。

6.编写精炼代码的一部分工作时了解你使用的库提供了什么。

7.需求常常以微妙的方式互相影响。这意味着解决一半的问题可能只需要花1/4的工夫。

8.让代码库越小、越轻量级,这样越好。创建“工具”代码来减少重复代码;减少无用代码和没有用的功能;让项目保持分开的子项目状态。

《编写可读代码的艺术》读书笔记,布布扣,bubuko.com

时间: 2024-10-28 23:08:18

《编写可读代码的艺术》读书笔记的相关文章

码农的产品思维培养第一节(人人都是产品经理读书笔记)

在前段时间,密集的推出Android学习记录之后,我觉得接下来的Android开发进入了一个精进演变的过程,革命性的东西略缺.每日更新特别新的东西也违背认知规律.所以以后关于Android方面的知识,碰到什么,然后记录什么. 而今天,在前一篇日志里面,我描述了我为什么要去理解"产品经理",从这一节开始,我要实施我的计划.所以,和Android记录一样,我要记录这个过程.对自己是一个回归总结吸收的过程,同时也希望能够帮助到更多的朋友,如果你也心存学习进取之心,如果你也如我一般疑惑未解心不

人人都是产品经理读书笔记(四)

补充:

《启示录:打造用户喜爱的产品》—— 读书笔记

这是一本非常不错的书,即使你可能只是一名开发工程师,也会有意想不到的收获! 如果你是一名产品经理,那就更不能错过了!不要留下遗憾! 这真的是一本很好的书,读每一遍都会有不同的收获,绝对让你震撼!我是会再读一遍或者N多遍的, 而能把这些内容转应用到实际中的人才是真正的高手,细细体会,在工作中好像已经有人在用了!惊讶!得抓紧时间了! 通过这本书,你将会知道一个合格的产品经理应该做什么,怎么做 本书主要讲解三个方面:人员.流程.产品 人员:产品从开始到完成过程中所有的参与者 流程:产品在开发过程中的所

产品经理学习笔记(二)------产品经理的工作职责(下)

二.产品经理的工作职责(下) 4.产品宣讲 ---宣讲对象:客服.市场.销售.运营.其他(开发进度到50%) ---宣讲目的:内部培训.获得认可 ---宣讲方式:内部推荐会(预测.演示.试用).注意控制(氛围.引导) ---宣讲目标:获得认可.帮助其他团队更好理解产品.协助其他团队更好开展工作 5.市场推广 ---对产品资料进行内容把关:网站.移动应用.印刷品等 ---主要针对:市场.公关.运营.销售 6.产品推出后的管理与迭代 ---运营数据的整理分析 ---深入一线体验产品 ---关注用户需

产品经理--读书静心的日子

入行教育,做教育产品工作,需要不断的进步. 一.了解产品开发.项目管理经验. 二.教育基础理论及相关知识. 小学阶段 (2016.2017不断的翻阅,有新的体会) 中学阶段(2018主攻方向)

谷歌和亚马逊如何做产品(读书笔记)

《产品经理》读书笔记

自从鼠标手犯病后,就刻意减少使用电脑的时间并且加强运动,目前已经完全康复,但是还是需要注意.因此更新博客的频率大大降低,但是也有时间多看看书,学习学习了! 最近看了<yes,产品经理>上下册,作者 汤圆 老马,文笔诙谐,把管理知识融入工作日常内容,浅显易懂,对于非管理专业的门外汉,还是不错的读物! 下面是摘抄的部分主要内容,个人认为比较有用的就记录下来. ------------------------------------------------ 制定产品价格策略的6步: 确定企业目标 冲

产品经理的那些事第一章读书笔记

1.一个产品经理的信仰:好产品能改变世界. 2.为什么要做产品经理:因为热爱,改变世界的方法有很多,技术可以改变世界,好的产品也可以,当然还有其他,但我热爱产品,一件事只有热爱了,才能持续不断的去做好,所以我选择了产品经理这条路. 3.产品是什么:产品是用来解决某个问题的东西. 4.产品经理为何而设:想要更了解产品与它面临的竞争情况,最终目的是要满足顾客的需求. 5.产品经理概念的进化: 分析: 1)行业形态不同:成熟行业vs.新兴行业 ①传统行业 概况:经过几十年乃至上百年的摸爬滚打,市场已经

【读书笔记】产品经理要做的事

文章链接:http://www.chanpin100.com/archives/44223 作为一个产品经理,不能只画图:产品经理更像是一个纽带,连接着各个环节,保持项目的正常运行. 在开始要做一个产品的时候,不能上来就画图,也不能告诉你需求就开始画图.应该先对需求进行筛选和挖掘:把伪需求去掉,挖掘出潜在需求. 1.分析产品的步骤:目标人群.使用场景.业务核心. 2.在团队中担任掌舵人,有目的的引导团队:激发团队灵感可以使用商业画布:客户分布.价值主张.渠道通路.客户关系.收入来源.核心资源.关

【读书笔记】神一样的产品经理(一)

 第一篇 产品经理 1.产品经理诞生的背景和价值 *很多入门级书里都会提到这一部分,本书讲了保洁诞生的第一个产品经理的故事. 2.很牛的产品经理(例子是乔布斯.郭靖) 1)几个重要特性:*影响力 *核心需求把控力 *创新力 *痴情力 2)产品经理的职责: *明确产品的目标用户群及其特征*获取.评估和管理用户需求*完成产品需求文档.产品原型和流程图*精通用户体验.交互设计和信息架构技能*项目管理.需求变更管理和需求验收*产品运营数据的分析和总结*提供运营.市场和销售等支撑 3)产品经理常犯的错误