天天看点

代码大全2(读书笔记13)

141、Herbert Simon 报告了关于人类解决问题的一系列试验,发现人们并不总能自行找出解决问题的巧妙办法,即使这些办法很容易传授给他们(Simon 1996)。换句话说,就算你想再发明个车轮,也不会注定成功,你发明的也许是方车轮。

 142、“硬干”或者“苦干”并没有带着光环。“硬干”是种徒劳的、大可不必的努力,只会说明你急切但并不是在完成工作。人们容易混淆行动与进展,混淆忙碌与多产。有效编程中最重要的工作是思考,而人思考时通常不会看上去很忙。如果和我共事的程序员总是忙个不停,我会认为他并非优秀的程序员,因为他没用最有价值的工具------自己的脑袋。

144、根据环境的不同,坚持可能是财富,也可能是负担。和大部分的中性词一样,依据你的褒贬意图而有不同的意思。如果你想表达贬意,可以说是“固执已见”或“顽固不化”;如果你要表达褒意,可以说是“坚韧不拔”或“持之以恒”。

    多数时候软件开发中的坚持其实就是没有好处的“固执”。当在某段新代码上卡壳时,坚持很难让人称道。不妨另辟蹊径,尝试重新设计类,或者绕过去,以后回头再试。当一种办法行不通时,正好可以换个办法试试(Pirsig 1974)。

   高度时,花四个小时干掉某一错误肯定会很有满足感;但通常最好只要有一段时间没有进展,比如说15分钟,就该放弃排错过程,让潜意识仔细品品。想个其他法子将问题绕开;从头编写有麻烦的代码段;理清思绪后再来做。和计算机错误斗气是不明智的,更好的方法是避开它们。

   知道何时放弃很难,但这是必须面对的问题。当你遭受挫折时,提出此问题正是时候。提出并不是说这时就放弃,而是该为目前的行为设置底牌了:“要是这种方法三十分钟之内还不解决问题,我就会花十分种想些其他办法,再用一个钟头尝试最可行的办法。”

 145、与其他行业相比,软件开发行业的经验比书本知识价值要小,这有几个原因:在其他许多行业里,基础知识变化得很慢。即便晚你10年毕业的人,他所学的基础知识还和你那时学的一模一样;而软件开发,即使基础知识也变化很快,晚于你10年毕业的人所学的有效编程技术,其数量有可能是你的两倍。一些老程序员往往被看作另类,不仅是因为从未接触某些专项技术,还因为他们没有用过从学校毕业之后出名的基本编程概念。

146、if语句的使用

糟糕的if语句使用方法:

代码大全2(读书笔记13)
代码大全2(读书笔记13)

好的if语句:

代码大全2(读书笔记13)

146、case的使用范围

case语句应该用于处理简单的、容易分类的数据。如果你的数据并不简单,那么就使用if-then-else语句串。

147、表驱动的好处

用逻辑语句

代码大全2(读书笔记13)
代码大全2(读书笔记13)

用表的方法

代码大全2(读书笔记13)

148、软件开发的规模扩大并不是像“拿一个小项目来,然后增大它的每一部分”那样简单。假设你花费20个人月开发了一套有25000行代码的Gigatron(千兆子)软件包,并在领域测试试中找出500个错误。再假设Gigatron1.0很成功,Gigatron2.0也一样成功,现在你正在着手开发Gigatron Deluxe版,该版本将对该程序做出重大更新,预计将有250000行代码。

   虽然它的规模是最初Gigatron的10倍,但是开发Gigatron Deluxe版的工作量却不是原来工作量的10倍;而是30倍。此外,整体工作量增长为30倍并不意味着构建活动的工作量就会增长为30倍。很可能是,构建活动的工作量增长为25倍,架构和系统测试工作量增长为40倍。你的得到的错误数量也不会增长为10倍,而会是15倍甚至更高。

  如果你习惯于开发小项目,那么你的第一个中大型项目有可能严重失控,它不会像你憧憬的那样成功,而会变成一头无法控制的野兽。

149、更大的项目要求采取一些组织技术来改善交流效率,或者有意识地对其加以限制。

   改善交流效率的常用方法是采用正式的文档。不是让50个人以各种可能方式相互交流,而让他们阅读和撰写文档。有些文档是文本,有些是图形。有些文档需要打印出来,有些则是电子格式。

150、项目的规模既会影响错误的数量,也会影响错误的类型。你也许不曾想到错误类型也会受到影响,然而随着项目规模的增大,通常更大一部分错误要归咎于需求和设计。