不存在有完美的软件,但学会务实的偏执,可以把遗憾变为优势
这个世界上没有任何事情可以达到十全十美,同样,也不可能有完美无缺的软件项目。虽然这是一个比较令人遗憾的现实,但作为一个务实的程序员可以利用某些偏执的方法,把这种遗憾变成另一种优势。
正如世界上没有完美的人,软件也不可能是完美的,对于在所难免的软件缺陷,最主要的是保护代码和用户对象避免受缺陷的影响。因此,为自己代码中可能产生的缺陷建立一个防御机制,是务实的程序员必有的保证措施。
这种务实的预防措施可以让你的代码质量更高效,很大程度上保证了代码的安全性和可靠性,让你在编写代码过程中条理清晰,软件质量和工作效率事半功倍。
- 契约式设计:这里包含了第一个防御措施。契约是对双方共同的权利和责任的规定,在软件模块中,对于代码是否能正好完成它宣称要做的事情,就可以使用契约进行检验和文档化,这也是契约式设计的核心内容。
- 死掉的程序不会说谎:程序员在编写代码时,会意识到某些程序出现问题,有可能是不小心给库传了一个空值或空表;可能是哈希表中缺少一个键值;也可能有一个系统文件没被捕获,得到一个空数据等。诸如此类情况,都是一些微小的细节问题,许多程序员都曾经忽略它们。而一个务实的程序员一定不会错过这些问题细节,即使有错误漏出,他们也会查看详细的错误信息,因为死掉的程序要比有缺陷的程序造成的损害小很多。
- 断言式编程:务实的程序员应该会使用断言来预防假设的事情,断言能够校验你为避免错误而写下的假设,因此断言实际上是为了保护你的代码而来。在许多编程语言中都有一些检查布尔条件的断言语句,这大大方便了程序员对自己代码的正确判断。比如,一个参数或返回结果永远不该为null,则用以下显式的检查:assert(result !=null);同样地,断言也能用于检查算法的操作,例如你写了一个排序算法,叫my_sort,检查一下它工作是否正常:books=my_sort(find(“scifi”))
- assert(is_sorted?(books))
- 如何保持资源的平衡:正如厄休拉·勒古恩在《地海巫师》所说过的经典语句:“点亮一盏烛火,便投出一道阴影”。对于软件中的资源,一直使用遵循可预测的模式,那就是先分配资源,再使用资源,最后释放资源。因此,分配资源的函数或对象,也有责任去释放资源,我们通过本书第119页一段Ruby程序例子可以搞懂它的具体方法。这也说明如果将灵活多变的变量维持在一个范围内,那么打开资源的过程会短暂并且明显可见。
- 不要冲出前灯范围:一个长期保持务实编码习惯的程序员来说,永远小步前进,在前进中不断的自我检查和及时反馈,并能做到在推进之前先做好调整是一个良好的偏执行为。在对软件做维护设计时,一定要保持在你能预测到的范围内进行设计,对于未来不可预测的设计,一定要在可控范围内适时更替,如此才能避免犯更大的错误。