怎样编写优秀软件

本文是翻译,版权归原作者所有


原文地址(source):http://www.ideabyte.net/softwaredesign.html

软件必须是自由的

优秀软件是自由软件。我将避免使用“开源”,因为它根本没有包含社会层面,它和技术本身同等重要。你可以从这里了解更多。

广泛被接受的工具和语言

编写优秀软件的语言是被广泛使用的,这使得有人能够阅读和修改代码。优秀的语言,比如C、Python和Java。当然也有例外,一些较少被使用的语言是更好的选择。

保持简单

优秀软件不做不必要的事情。换句话说,没有不必要的功能。实现没人使用的功能只会产生bug。设计软件时,保持简单应该作为最高优先级。正如爱因斯坦说的“让事情尽可能简单,而不是比较简单。”

太多抽象是糟糕的。如果你把代码隐藏在多层抽象之后,你也隐藏了bug。太多的抽象让代码难以理解,难以跟踪执行路径和debug。它也会降低性能。抽象之上的抽象经常可以在Java编写的企业软件中看到。优秀软件可以用Java编写,但是Java也让编写恐怖的、结构复杂代码变得非常容易。C++也是如此。

不要弄成火箭科学

使用具有真正意义的变量名。不要使用单字符变量名。它们几乎不可能理解和追踪。也有单字符的变量名,它们是被普遍接受了。例如对于坐标,用x和y就行。对于循环,就使用i,j等等。除此之外,不要这样使用了。通常地,对于优秀软件,代码的结构是清晰的,还有可查的、记录下来的代码风格。

文档是重要的

不管文档是多么地让人厌烦,优秀软件也是有文档的。代码有清晰的注释,软件有随之一起安装的手册。对于web应用程序,让文档可以在线上访问到。

开发者经常认为,当软件被完成后再去写文档,就足够了。那是完全错误的方式。文档必须是开发人员在开发软件过程中的一件事情。文档必须是开发的一部分,而不是代码被写完之后的工作。

使用版本控制系统

优秀软件使用版本控制系统,一直都用。如今我差不多总是推荐Git做版本控制,但是有一些情况,SVN之类的系统就可以做得很好了。版本控制容易回滚到可能有问题的修改。考虑下面的例子,如果没有版本控制系统,该怎么办:

开发者A修改了文件program.c,该文件被拷贝到了源码树(source tree),旧文件被替换了。后来发现了一个bug,问题出在开发者A对program.c所做的修改。开发者B、C等人费了好大劲儿才搞清楚开发者A修改了什么。如果有版本控制系统,这就不是问题了。当然聪明的开发组应该有备份的,因此在这种情况下,他们将找到修改前的原始备份,使用diff工具看看修改了什么地方。然而,既花时间、又麻烦。更不要提从备份拷贝并替换文件是多么地容易出错了。

扩展性

扩展性不是严格意义上的强制项,不过它经常让软件更加有用。开发软件、便于让它能够与其它软件一起被使用,是一种优秀的方式。事实上,这是Unix主要设计原则之一。

例子

互联网充满了编写良好的软件。很多标准的Unix工具编写良好,然而有些就不是。一个写得不错的例子是Memo,这是我写的软件。

如果需要推荐一本书,那么我会为你推荐Eric Raymond编写的《Unix编程艺术》。

译文:怎样编写优秀软件 》| 腊八粥