论编程的最后期限
中文英文:http://blog.jobbole.com/6132/
英文原文:http://rdegges.com/on-programming-deadlines
普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。当你给自己写程序的时候,只要你愿意,就可以用很多(或者很少)的时间来完成,但是当你给别人写程序的时候,你就只有一点有限的时间和资源来完成任务。而根据我的经验,一般会导致以下两种情况之一:
1. 你必须延长时间以妥善完成任务。
2. 你必须写些不严谨的代码来应付过关。
如果你做过专业编程,你会明白我的意思。只有极少数够灵活的项目能够给予足够的时间和资源来完成任务。这就使得程序员必须做出艰难的抉择。
任何一个有自尊的程序员都不愿意提交不合格的代码;但是当交易中伴随有超时违约金时,想要始终提交高质量的代码是很困难的,尤其是在专业环境下,与那些不需要理解技术违约概念的非技术员交易。
幸好,这里有几条准则供你参考,可以在临近截止日期时,帮你把不严谨的代码总数最小化。它们不一定能够快速修复问题,但毫无疑问将有助于那些需要日复一日,始终写出一流代码的人。
准则一:编码之前设置连续部署
这是我从《The Pragmatic Programmer / 程序员修炼之道》一书(绝对是程序员的必读之书)中找出的小窍门。总是,我是说总是,在编码之前设置你的连续部署系统。
我所说的连续部署是什么意思?好的,在你开始编写你的项目之前,你应该有一个能部署你的项目代码为产品的系统(最好对于分期和开发环境也是如此)。这样,当你编码时,你就会有一个平和的心态,因为你知道你可以随时部署你的项目。
在很多的编程流程中,这一点能节约相当多的开发时间。一些测试环境(或者更糟,直接在服务器上编码),你可以直接把代码放到你首选的源代码控制系统 中,然后让你的连续部署系统负责接下来的事情。这也许看起来不想个节约时间的方法,但是如果你考虑一下每天都要把你的代码复制过去并手动测试所浪费的时 间,你就知道这样做能快速完成并在每月中节约数小时。
准则二:先写测试
如果你从没听说过测试驱动开发(TDD),请立刻看看易做图的解释。如果有人付钱让你编写软件,并且规定了截止日期,你就要随时练习TDD。
测试驱动开发的基本概念是,在写项目代码之前,你写一段简单的代码来测试你假设的项目代码,以获得预期的反应。例如:你的项目需要你写一个函数,把 两个数相加,并返回和。在写这段代码之前,你应该写一个测试函数,test_add_two_numbers,它调用你的add_two_numbers 函数来验证不同的输入值所返回的结果都是正确的。
这看起来很麻烦,但是它有许多好处:
-
- 写测试首先能帮你明确你的应用程序架构。
- 你将有一个平和的心态,因为你知道你的代码是可运行的。
- 你能够轻易的重构项目,而不用担心破坏代码。
- 你可以避免放出低质量的代码以免玷污你的声誉。
准则三:透明
透明很难实现(取决于你的工作环境),但却非常有益处。