发布日期: 2022-05-17 02:10:18 浏览次数: 39712
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)
面对目前大量存在的在线服务(Online Service)程序,需要具备对程序的运行状态进行细致而持续监控的能力。
这要求在程序设计时就提供相关的机制,包括程序状态的收集、保存和对外输出。
9. 可运维(Operational)
可运维已经成为软件研发活动的重要组成部分,可运维重点关注成本、效率和稳定性三个方面。
程序的可运维性和程序的设计、编写紧密相关,如果在程序设计阶段就没有考虑可运维性,那么程序运行的运维目标则难以达成。
10. 可扩展(Scalable and Extensible)
可扩展包含“容量可扩展”(Scalable)和“功能可扩展”(Extensible)两方面。
在互联网公司的系统设计中,“容量可扩展”是重要的设计目标之一。系统要尽量支持通过增加资源来实现容量的线性提高。
快速响应需求的变化,是互联网公司的另外一个重要挑战。可考虑使用插件式的程序设计方式,以容纳未来可能新增的功能,也可考虑使用类似Protocol Buffer 这样的工具,支持对协议新增字段。
1. 不好的函数名称(Bad Function Name)
如do(),这样的函数名称没有多少信息量;又如myFunc(),这样的函数名称,个人色彩过于强烈,也没有足够的信息量。
2. 不好的变量名称(Bad Variable Name)
如a、b、c、i、j、k、temp,这样的变量名称在很多教科书中经常出现,很多人写代码时也会经常这样用。如果作为局部变量,这样的名称有时是可以接受的;但如果作为作用域稍微大的变量,这样的名称就非常不可取了。
3. 没有注释(No Comments)
有写注释习惯的软件工程师很少,很多软件工程师认为写注释是浪费时间,是“额外”的工作。但是没有注释的代码,阅读的成本会比较高。
4. 函数不是单一目的(The Function has No Single Purpose)
如LoadFromFileAndCalculate()。但现实中这样的函数其实不少。很多函数在首次写出来的时候,就很难表述清楚其用途;还有一些函数随着功能的扩展,变得越来越庞杂,也就慢慢地说不清它的目的了。
这方面的问题可能很多人都没有充分地认识到——非单一目的的函数难以维护,也难以复用。
5. 不好的排版(Bad Layout)
不少人认为,程序可以正常执行就行了,所以一些软件工程师不重视对代码的排版,认为这仅仅是一种“形式”。
没有排好版的程序,在阅读效率方面会带来严重问题。这里举一个极端的例子:对于C语言来说,“;”可作为语句的分割符,而“缩进”和“换行”对于编译器来说是无用的,所以完全可以把一段C语言程序都“压缩”在一行内。这样的程序是可以运行的,但是对人来说,可读性非常差。这样的程序肯定是我们非常不希望看到的。
6. 无法测试(None Testable)
程序的正确性要依赖测试来保证(虽然测试并不能保证程序完全无错)。无法或不好为之编写测试用例的程序,是很难有质量保证的。
(1)在编码前,需要做好需求分析和系统设计。
(2)在编码时,需要编写代码和编写单元测试。
(3)在编码后,要做集成测试、上线,以及持续运营/迭代改进。
因此,一个好的系统或产品是以上这些环节持续循环执行的结果。
上一篇:为什么要使用flex布局?
下一篇:什么是影响网站建设周期长的因素?
联系我们
13932058117(系统开发)
地址:邯郸市友谊时代广场B座21层
邮箱:jsb@hbcg.cc