C++ 代码整洁之道:C++17 可持续软件开发模式实践 (2):简介 1.1

阅读数:12 2019 年 12 月 4 日 18:46

C++代码整洁之道:C++17可持续软件开发模式实践(2):简介 1.1

(软件熵)

内容简介
本书致力于讲述 C++ 整洁代码之道!如果你想让自己写的代码更加整洁,那么这本书适合你阅读。本书需要熟悉 C++ 语言的基本概念,才能有效的掌握其中的内容。如果你只是想从 C++ 开发开始,并且没有 C++ 语言的基础知识,你应该首先选择一个好的 C++ 入门的练习项目。此外,本书也不包含任何深奥的技巧和杂乱的知识点。我知道 C++ 有很多令人兴奋的技巧,但这些通常不是整洁代码的精神,也不是现代 C++ 的代码风格。除此之外,这本书为了帮助 C++ 程序员提高技能水平,并举例说明如何编写易于理解的、灵活的、可维护的和高效的 C++ 代码。即使你是一个经验丰富的 C++ 开发人员,这本书中也有一些值得学习的地方,我认为这些值得学习的地方能够促进你的工作。书中所提出的原则和实践可以应用于新的软件系统,有时被称为“绿地项目”,以及具有悠久历史的遗留系统,通常被称为“棕地项目”。

首先,有些东西就好像是一种自然规律,就像其他一些封闭和复杂的系统,软件会随着时间的推移而变得混乱,这种现象称为软件熵。这个词借鉴了热力学第二定律,意思是指,一个封闭系统的总混乱度不会减小,只能保持不变或增加。软件的表现看起来就是这样的,每次添加一个新功能或者改变一些原有功能,代码都会变得更加混乱,有很多影响因素能够提高软件熵,举例如下:

  • 不切实际的项目进度安排会给程序员增加压力,进而迫使开发人员以一种糟糕和非专业的方式处理开发工作。
  • 当今,软件系统大都庞大而复杂。
  • 开发人员拥有不同的技能水平和开发经验。
  • 全球分布的、跨文化差异的团队,执行和交流方面存在的问题。
  • 开发人员主要关注软件的功能性方面(功能性的需求和系统的用例),以致质量要求(例如非功能性要求),如性能、可维护性、可用性、可移植性、安全性等被忽略甚至被完全忘记了。
  • 不当的开发环境和糟糕的开发工具。
  • 管理层专注于眼前利益,而不了解可持续软件开发的价值所在。
  • 快速而糟糕的程序开发以及软件设计与实现的不一致(例如破窗理论)。

破窗理论
破窗理论是在美式犯罪研究中发展起来的。该理论指出,一幢被遗弃的建筑物中的一个被破坏的窗户,可能是整个周边地区开始破败的一个触发器。破碎的窗户给环境发出了致命的信号:“看,没人在乎这幢大楼!”,这引起了进一步的腐化、破坏和其他反社会行为。破窗理论一直是刑事政策学的很多改革的基础,特别是发展出零容忍策略。
在软件开发中,该理论被采用并应用于代码质量。对程序不适当的开发和糟糕的实现称为“破窗”。如果这些不好的实现没有被修复,那么会有更多不适当的代码出现在它们周围,因此,代码的混乱就开始了。
不要容忍“破窗”出现在你的代码中——及时地改正它们

然而,似乎 C 和 C++ 项目特别容易出现混乱,而且比其他编程语言更容易陷入一种糟糕的状态。即使是在互联网上,同样也充斥着大量的、糟糕的 C++ 代码的例子,它们看起来快速且高度优化,但实际上是使用了高技巧的语法,并且完全忽略了设计良好和易维护的代码的基本准则。

导致本节问题的原因之一可能在于 C++ 是一个中等层次的多范型编程语言,即它包含了高级和低级语言的特点。使用 C++ 编程语言,你可以编写庞大且复杂的用户界面的分布式业务软件系统,也可以编写小型的嵌入式实时响应系统,这要求与底层硬件密切关联。多范型编程语言意味着你能够编写程式化、功能化或面向对象的程序,甚至三种范型的混合体。此外,C++ 支持模板元编程(Template Metaprogramming,TMP),这种技术用到了一种被称作模板的东西,模板被编译器用于生成临时使用的源代码,而这些临时的源代码会和其余的源代码合并在一起,并进行编译。自从 ISO 发布了支持 C++11 标准以来,更多的方法被加入到 C++ 中,例如,具有匿名函数的函数式编程现在能通过 lambda 表达式以一种非常优雅的方式完成。由于这些多样性能力,C++ 同时也具有非常晦涩难懂、复杂和烦琐的名声。

开发出糟糕软件的另一个原因可能是很多程序开发者并没有 IT 背景。如今,任何人都可以开始开发软件,不必管他是否获得了大学学位或者是否是任何其他计算机科学方面的人才。绝大多数 C++ 开发者都是(或曾是)非专业人员,特别是在汽车、铁路运输、航空航天、电气 / 电子或机械工程等技术领域。许多开发工程师在投入编程之前的几十年里并没有受到过计算机科学方面的教育,随着复杂度的增加以及技术系统包含了越来越多的软件,世界对程序员的需求很迫切,这种需求被现存的其他劳动力所补充了,电气工程师、数学家、物理学家,还有很多人严格来讲并非是经专业训练过而开始开发软件的,他们主要通过自学和实操而简单地进行开发,并且他们已经尽了最大的努力。

基本上来看,这绝对是无可厚非的,但有时只知道开发工具和编程语言是不够的!软件开发与编程不一样,世界上很多的软件是由没有经过培训的软件开发人员在一起开发和维护的,开发人员要在抽象层次考虑很多的事情,以便创建一个可持续的系统,例如架构和设计。如何构建高质量达到某些目标的系统?面向对象的东西有什么好处?我如何有效地使用它呢?某个框架或库的优点和缺点是什么?各种算法之间的差异是什么?为什么同一个算法不适合所有类似的问题?到底什么是有限状态机,为什么它有助于处理复杂性问题?

不要灰心!一个软件的持续健康需要有人去关注它,而整洁的代码就是处理的关键所在!

C++代码整洁之道:C++17可持续软件开发模式实践(2):简介 1.1

购书地址 https://item.jd.com/12599914.html?dist=jd

评论

发布