这给我们带来了一个重要的观点:架构是所有优秀软件的核心元素。有两个原则:
1. 尽可能节约资源地进行编程
2. 尽可能模块化编程
这篇文章已经给出了第一个提示,有时不同的编程语言会有所帮助。
编写软件。实现这一目标的一种方法是使用不同的编程语言。 C作为一种非常面向硬件的语言,可以避免很多样板,但在手动释放内存时会带来内存泄漏的风险。另一方面,Java 被广泛使用(并被理解),但 JVM 总是附带一个将 Java 字节码转换为最终硬件架构的工具,这会消耗额外的性能。这么一比较,Python 更像是跑车中的 Trabbi。就速度而言,该语言是一个致命的罪过(对人工智能眨眼,它喜欢依赖 Scikit-Learn),但在原型设计方面它是无与伦比的。
Peter Hruschka 和 Gernot Starke(Arc42 的开发者)在他 珠宝商电子邮件列表 们的《软件架构师礼仪》一书中展示了软件架构师的各种性格特征(不仅如此)(ISBN:978-3-86802-080-9)。反模式是“好事太多了”:努力提高资源效率是好事,但不惜任何代价。欧盟绿色新政呼吁建立现实的修复基础。因此,在开发软件时,有必要权衡优化在哪里有意义以及优化本身在哪里成为目的。
来自实践
IDE 是一件很棒的事情。它们使我们的工作变得更加轻松。它们提供格式化、自动完成、语法突出显示和错误检测。 IDE 通常还会做一些简单的可读性优化。例如,在 Java 中,导入时经常使用 * 运算符。作为开发人员,我们通常不会注意到这一点;该类已导入并且可用。在这里我们应该问自己是否所有的类都真的需要被类加载器知道。
示例:在存储和分析网络流量的项目中,需要使用连接信息填充 Postgres 数据库。仅决定端口是否存储为 2 字节无符号短整型或 4 字节整数就需要两个字节。该项目有 14 亿个条目,我们的空间已经达到 2.6 GB 左右。然而,网络连接只有通过 5 元组(SourceIP、SourcePort、DestinationIP、DestinationPort、L4 协议)才变得唯一。对于 IPv4 地址,我们可以选择 4 字节整数,或者在最坏的情况下选择 15 字节字符串。单独的目标地址和源地址的 IP+端口会导致大约 33.9 GB 的差异。并且该数据多次可用。