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

来源:互联网 发布:咏春实战 知乎 编辑:程序博客网 时间:2024/05/17 08:45

56、程序员的一部分工作是教育老板 和合作者,告诉他们软件开发过程,包括在开始编程之前进行充分准备的重要性。

60、编程语言影响程序员的思维的证据随处可见。典型的故事类似下面的样子:“我们用C++编写一个新系统,但是大多数程序员没有太多C++经验。他们具有Fortran语言背景。他们编写出能用C++编译的代码,但实际上编写的是伪装成C++的Fortran代码。他们扭曲C++来模拟Fortran的不良特性(例如goto语句和全局数据)并且忽略了C++丰富的面向对象能力。”这种现象多年来在整个行业当中随处可见。

62、大多数重要的编程原则并不依赖特定的语言,而依赖于你使用语言的方式。如果你使用的语言缺乏你希望用的构件,或者倾向于出现其他种类的问题,那就应该试着去弥补它。发明你自己的编码约定、标准、类库以及其他改进措施。

 63、设计就是把需求分析和编码调试连在一起的活动。

64、“险恶的”问题

“险恶的”问题就是那种只能通过解决或部分解决才能被明确的问题。这个看似矛盾的定义其实在暗示说,你必须首先把这个问题“解决”一遍以便能够明确地定义它,然后再次解决该问题,从而形成一个可行的方案。这一过程已经如影随形地在软件开发中存在数十年了。

 65、在现实世界里,设计者工作的一个关键内容便是去衡量彼此冲突的各项设计特性,并尽力在其中寻求平衡。如果快速的反应速度比缩减开发时间更重要,那么好的设计者又要巧妙地开成另一套不同的设计方案。

66、正因为设计过程充满了不确定性,因此设计技术也就趋于具有探索性------“经验法则”或者“试试没准能行的办法”---------而不是保证能产生预期结果的可重复的过程。设计过程中总会有试验和犯错误。在一件工作或一件工作的某个方面十分奏效的设计工具或技术,不一定在下一个项目中适用。没有任何工具是用之四海而皆灵的。

67、把设计的这些特性综合归纳起来,我们可以说设计是“自然而然形成的”。设计不是在谁的头脑中直接跳出来的。它是在不断的设计评估、非正式讨论、写试验代码以及修改试验代码中演化和完善的。

几乎所有的系统都在其开发的起始阶段经历过某种程度的设计变更,而当它们进入后续版本后通常都会进行更大的改变。软件性质决定了这些改变在多大程度上是有益且可被接受的。

68、设计的要点,一部分是在创造可能发生的事情,而另一部分又是在限制可能发生的事情。

69、对于不好找错误的代码,采用先备份,后精简的办法。把无关的代码去掉,将问题代码充分暴露。对于复杂的代码,最好写条理了,写注释。复杂的代码,当然是在摸索中写出来的。第一次肯定不规范,需要多次迭代将其规范。时间得有这个提前的考虑。

 70、没有谁的大脑能容得下一个现代的计算机程序,也就是说,作为软件开发人员,我们不应该试着在同一时间把整个程序都塞进自己的大脑,而应该试着以某种方式去组织程序,以便能够在一个时刻可以专注于一个特定的部分。这么做的目的是尽量减少在任一时间所要考虑的程序量。

   在软件架构的层次上,可以通过把整个系统分解为多个子系统来降低问题的复杂度。人类更易于理解许多项简单的信息,而不是一项复杂的信息。所有软件设计技术的目标是把复杂问题分解成简单的部分。子系统间的相互依赖越小,你就越容易在同一时间时专注问题的一小部分。精心设计的对象关系使关注点相互分离,从而使你能在每个时刻只专注于一件事情。在更高汇聚的层次上,包提供了相同的好处。

保持子程序的短小精悍也能帮助你减少思考的负担。从问题的领域着手,而不是从底层实现细节入手去编写程序,在最抽象的层次上工作,也能减少人的脑力负担。