首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

代码整洁之道【笔记】

一、整洁代码 A.混乱的代价 1.有些团队在项目初期进展迅速,但有那么一两年的时间却慢去蜗行。对代码的每次修改都影响到其他两三处代码 2.花时间保持代码整洁不但有关效率,还有关生存 3.程序员遵从不了解混乱风险经理的意愿,也是不专业的做法 4.Bjarne Stroustrup,C++发明者:我喜欢优雅和高效的代码。代码逻辑应该直接了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。 5.Grady Booch,《面向分析与设计》:整洁的代码简单直接。整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直接了当的控制语句。 6.Dave Thomas,OTI公司创始人:整洁的代码应可由作者之外的开发者阅读和增补。它应有单元测试和验收测试。它使用有意义的命名。它只提供一种而非多种做一件事的途径。它只有尽量少的依赖关系,而且要明确地定义和提供清晰、尽量少的API。代码应通过其字面表达含义,因为不同的语言导致并非所有必须信息均可通过代码自身清晰表达。 7.Michael Feathers,《修改代码的艺术》:我可以列出我留意到的整洁代码的所有特点,但其中有一条是根本性的。整洁的代码总是看起来像是某位特别在意它的人写的。几乎没有改进的余地。代码作者什么都想到了,如果你企图改进它,总会回到原点,赞叹某人留给你的代码——全心投入的某人留下的代码。 8.Ron Jeffries,《极限编程实施》:简单代码,依其重要顺序:能通过所有测试;没有重复代码;体现系统中的全部设计理念;包括尽量少的实体,比如类、方法、函数等 9.Ward Cunningham,Wiki发明者:如果每个例程都让你感到深合已意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。 B.思想流派 1.读与写花费时间的比例起过10:1 C.童子军军规 1.“让营地比你来时更干净” 2.如果每次签入时,代码都比签出时干净,那么代码就不会腐坏 二、有意义的命名 A.名副其实 1.变量、函数或类的名称应该已经答复了所有的大问题,如果名称需要注释来补充,那就不算名副其实 2.代码的模糊度:即上下文在代码中未被明确体现的程度 B.避免误导 1.程序员必须避免留下掩藏代码本意的错误线索。应当避免使用与本意相悖的词 2.以同样的方式拼写出同样的概念才是信息,拼写前后不一致就是误导 3.要注意使用小写字母i和大写字母O作为变量名,看起来像“壹”和“零” C.做有意义的区分 1.同一作用范围内两样不同的东西不能重名,如果名称必须相异,那其意思也应该不同才对 2.废话是另一种没意义的区分。假设你有一个Product类,如果还有一个ProductInfo或ProductData类,那它们的名称虽然不同,意思却无区别 3.只要体现出有意义的区分,使用a和the这样的前缀就没错 4.废话都是冗余。Variable一词记录不应当出现在变量名中,Table一词永远不应当出现在表名中 D.使用读得出来的名称 E.使用可搜索的名称 1.单字母名称和数字常量有个问题,就是很难在一大篇文字中找出来 F.避免使用编码 1.把类型或作用域编进名称里面,徒然增加了解码的负担 2.也不必用m_前缀来标明成员变量,应当把类和函数做得足够小,消除对成员前缀的需要 3.不加修饰的接口,不要用前导字母I G.避免思维映射 1.不应当让读者在脑中把你的名称翻译为他们熟知的名称,单字母变量名就是个问题 2.专业程序员了解,明确是王道 H.类名 1.类名和对象名应该是名词或名词短语,类名不应当是动词 I.方法名 1.方法名应该是动词或动词短语。属性访问器、修改器和断言应该根据其值命名,并依Javabean标准加上get、set和is前缀 2.可以考虑将相应构造器设置为private,强制使用这种命名手段 J.别扮可爱 1.言到意到,意到言到 K.别用双关语 1.避免将同一单词用于不同目的 2.应尽力写出易于理解的代码,把代码写得让别人能一目尽览而不必殚精竭虑地研究 L.使用解决方案领域名称 1.尽管用那些计算机科学术语、算法名、模式名、数学术语 M.使用源自所涉问题领域的名称 1.如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称 2.优秀的程序员和设计师,其工作之一就是分离解决方案领域和问题领域的概念 N.添加有意义的语境 1.你需要用有良好命名的类、函数或名称空间来放置名称,给读者提供语境 2.如果没这么做,给名称添加前缀就是最后一招了 O.不要添加没用的语境 1.只要短名称足够清楚,就要比长名称好 P.最后的话 1.取好名字最难的地方在于需要良好的描述技巧和共有文化背景 三、函

03

程序员该如何学习数据结构与算法?

一个成熟的程序员数据结构和算法属于基本必备素质,很多程序员觉得算法距离自己有点距离,正常情况下算法不是渗透到每个角落。但程序的执行效率散布在每个角落。所以学习数据结构和算法能让效率的执行贯彻到每个角落里面,优秀的程序员会反复的揣摩自己写代码执行效率,以及代码的耐久程度,这点经常玩开源社区的小伙伴应该有启示,之前订阅过linux内核以及浏览器内核邮件每天邮件数量成千上万,不仅仅为了给软件增加新的功能,更多的是对软件代码的重构,觉得之前的代码实现效果不如想象的样子,于是推到重来继续搞,觉得还不过瘾,继续重构直到达到实际效果为准,这里面包含着一种内在的求知欲。

01

Gradient Descent

梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。

01
领券