从《代码的艺术》中寻求“好代码”的要素

《代码的艺术》是一本深入探讨软件开发哲学与实践的书籍,其中深入地讨论了 “好代码” 的特点。代码的维护成本远高于开发成本。好的代码能让人专注于逻辑,而且“Don’t make me think”。那么怎样才能写出好代码?书中认为好代码需要关注如下要素:

  1. 鲁棒(Solid and Robust):
    代码不仅要被正确执行,我们还要考虑对各种错误情况的处理,比如各种系统调用和函数调用的异常情况,系统相关组件的异常和错误。
    对很多产品级的程序来说,异常和错误处理的逻辑占了很大比例。
  2. 高效(Fast)
    程序的运行应使用尽量少的资源。资源不仅仅包括CPU,还可能包括存储、I/O等。
    设计高效的程序,会运用到数据结构和算法方面的知识,同时要考虑到程序运行时的各种约束条件。
  3. 简洁(Maintainable and Simple)
    代码的逻辑要尽量简明易懂,代码要具有很好的可维护性。对于同样的目标,能够使用简单清楚的方法达成,就不要使用复杂晦涩的方法。
    “大道至简”,能否把复杂的问题用简单的方式实现出来,这是一种编程水平的体现。
  4. 简短(Small)
    在某种意义上,代码的复杂度和维护成本是和代码的规模直接相关的。在实现同样功能的时候,要尽量将代码写得简短一些。
    简洁高于简短。这里要注意,某些人为了能把代码写得简短,使用了一些晦涩难懂的描述方式,降低了代码的可读性。这种方式是不可取的。
  5. 可测试(Testable)
    代码的正确性要通过测试来保证,尤其是在敏捷的场景下,更需要依赖可自动回归执行的测试用例。
    在代码的设计中,要考虑如何使代码可测、易测。一个比较好的实践是使用TDD(Test-Driven Development,测试驱动开发)的方法,这样在编写测试用例的时候会很快发现代码在可测试性方面的问题。
  6. 共享(Re-Usable)
    在一个组织内部,应鼓励共享和重用代码,这样可以有效降低代码研发的成本,并提升代码的质量。实现代码的共享,不仅需要在意识方面提升,还需要具有相关的能力(如编写独立、高质量的代码库)及相关基础设施的支持(如代码搜索、代码引用机制)。
  7. 可移植(Portable)
    某些程序需要在多种操作系统下运行,在这种情况下,代码的可移植性成为一种必需的能力。
    要让代码具有可移植性,需要对所运行的各种操作系统底层有充分的理解和统一抽象。一般会使用一个适配层来屏蔽操作系统底层的差异。
    一些编程语言也提供了多操作系统的可移植性,如很多基于Python语言、Java语言、Go语言编写的程序,都可以跨平台运行。
  8. 可观测(Observable) / 可监控(Monitorable)
    需要具备对程序的运行状态进行细致而持续监控的能力。这要求在程序设计时就提供相关的机制,包括程序状态的收集、保存和对外输出。
  9. 可运维(Operational)
    可运维已经成为软件研发活动的重要组成部分,可运维重点关注成本、效率和稳定性三个方面。
    程序的可运维性和程序的设计、编写紧密相关,如果在程序设计阶段就没有考虑可运维性,那么程序运行的运维目标则难以达成。
  10. 可扩展(Scalable and Extensible)
    可扩展包含“容量可扩展”(Scalable)和“功能可扩展”(Extensible)两方面。系统要尽量支持通过增加资源来实现容量的线性提高。可考虑使用插件式的程序设计方式,以容纳未来可能新增的功能,也可考虑使用类似Protocol Buffer 这样的工具,支持对协议新增字段。
    这10个要素可以归纳为一张图:
    [图片]

写出优质的代码,我们更需要更加关注:鲁棒(Solid and Robust)、高效(Fast)、简洁(Maintainable and Simple)、简短(Small)这四方面的要素,这四方面要素放在最前面,除了彰显其重要性外,更需要长期坚持和努力才能达到。加深对这些理念的理解,并运用于日常开发活动不断实践和感悟,必能看到更多的“好代码”在软件实践中绽放光彩,共同推动项目向着更高的技术标准迈进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值