#4.1 编程语言的选择

编程语言的选择会通过多种方式影响生产力和代码质量。

程序员使用熟悉的语言比使用不熟悉的语言更有效率。IBM 的一项早期研究发现,对一个语言有丰富经验的程序员的工作效率是那些经验很少的程序员的三倍多

使用高级语言的程序员比使用低级语言的程序员可以获得更好的生产力和质量。高级语言相对于低级语言在生产效率、可靠性和可阅读性提高了 5 到 15 倍。高级语言相对于低级语言有更高的表达能力,即每行代码可以实现更多的任务。

萨丕尔-沃夫假说 认为人思考某个想法的能力取决于他是否知道能够表达该想法的词语。如果你不认识单词,你就无法表达想法。也因此程序员可能会类似地受到他们的语言的影响。

编程语言对程序员思维影响的证据很常见,如一些拥有 A 语言背景的人去使用 B 语言开发,他们很可能只是通过 B 语言来实现 A 语言的特色,而忽略了 B 语言本身的能力。

#4.2 编码约定

在复杂的项目中,架构赋予项目结构平衡,而编码约定则提供实现层的和谐。如果没有统一的编码风格,编写的代码将在风格上存在杂乱的变化。而这些变化会消耗开发者的大脑——大脑会需要分出一部分精力去理解编码风格差异。成功编程的关键之一是避免任意变化,以便让开发者的大脑可以专注于真正需要关心的逻辑上。

如果你有一幅画的伟大设计,但一部分是古典派,一部分是印象派,一部分是立体派,该怎么办?无论你多么严格地遵循其宏伟的设计,它都不具有概念完整性。它看起来像一幅廉价拼贴画。

在开始构建之前,需要阐明你将使用的编程约定。编码约定的细节将非常精确,以至于在编写软件后几乎不可能对其进行改造。

#4.3 你在科技浪潮中的位置

理解**用一种语言编程(Programming in one language)**和 利用一种语言编程(Programming into one language) 之间的区别对于理解本书至关重要。

大多数重要的编程原则并不取决于特定的语言,而是取决于你使用它们的方式。如果你的语言缺乏你想要使用的结构或者容易出现其他类型的问题,请尝试弥补它们。发明你自己的编码约定、标准、类库和其他增强语言的方式。

如,VB 语言本身并不支持数据和业务的解耦,但可以通过约定 .fsm 文件仅可以支持查询查询数据库和将数据存储回数据库,将对于数据库业务的访问的工作难度降低,因为后续所有的开发者都可以基于这个约定知道 .fsm 本身并不会修改数据库。这就是作者通过约定对 VB 语言的加强。

#4.4 构建实践的选择

准备构建的一部分是决定你将强调哪些可用的良好实践。一些项目使用结对编程并优先编写测试,而另一些项目则使用单独开发和事后的测试。根据项目的实际情况,这两种选择都可能发挥很好的作用。

以下清单总结了在构建过程中应有意识地决定包含或排除的具体实践,这些实践的细节将在本书的其他部分进行阐述:
Ch 04 Construction Practices Checklists