论编程的最后期限

  普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。

  截止日期 / 最后期限

  当你给自己写程序的时候,只要你愿意,就可以用很多(或者很少)的时间来完成,但是当你给别人写程序的时候,你就只有一点有限的时间和资源来完成任务。而根据我的经验,一般会导致以下两种情况之一:

  1. 你必须延长时间以妥善完成任务。

  2. 你必须写些不严谨的代码来应付过关。

  如果你做过专业编程,你会明白我的意思。只有极少数够灵活的项目能够给予足够的时间和资源来完成任务。这就使得程序员必须做出艰难的抉择。

  任何一个有自尊的程序员都不愿意提交不合格的代码;但是当交易中伴随有超时违约金时,想要始终提交高质量的代码是很困难的,尤其是在专业环境下,与那些不需要理解技术违约概念的非技术员交易。

  幸好,这里有几条准则供你参考,可以在临近截止日期时,帮你把不严谨的代码总数最小化。它们不一定能够快速修复问题,但毫无疑问将有助于那些需要日复一日,始终写出一流代码的人。

  准则一:编码之前设置连续部署

  这是我从《The Pragmatic Programmer / 程序员修炼之道》一书(绝对是程序员的必读之书)中找出的小窍门。总是,我是说总是,在编码之前设置你的连续部署系统。

  我所说的连续部署是什么意思?好的,在你开始编写你的项目之前,你应该有一个能部署你的项目代码为产品的系统(最好对于分期和开发环境也是如此)。这样,当你编码时,你就会有一个平和的心态,因为你知道你可以随时部署你的项目。

  在很多的编程流程中,这一点能节约相当多的开发时间。一些测试环境(或者更糟,直接在服务器上编码),你可以直接把代码放到你首选的源代码控制系统中,然后让你的连续部署系统负责接下来的事情。这也许看起来不想个节约时间的方法,但是如果你考虑一下每天都要把你的代码复制过去并手动测试所浪费的时间,你就知道这样做能快速完成并在每月中节约数小时。


  准则二:先写测试

  如果你从没听说过测试驱动开发(TDD),请立刻看看维基百科的解释。如果有人付钱让你编写软件,并且规定了截止日期,你就要随时练习TDD。

  测试驱动开发的基本概念是,在写项目代码之前,你写一段简单的代码来测试你假设的项目代码,以获得预期的反应。例如:你的项目需要你写一个函数,把两个数相加,并返回和。在写这段代码之前,你应该写一个测试函数,test_add_two_numbers,它调用你的add_two_numbers 函数来验证不同的输入值所返回的结果都是正确的。

  这看起来很麻烦,但是它有许多好处:

  1.写测试首先能帮你明确你的应用程序架构。

  2.你将有一个平和的心态,因为你知道你的代码是可运行的。

  3.你能够轻易的重构项目,而不用担心破坏代码。

  4.你可以避免放出低质量的代码以免玷污你的声誉。

  准则三:透明

  透明很难实现(取决于你的工作环境),但却非常有益处。

  为了达到透明,你需要确保与接收代码的客户之间保持一条清晰的通信线路。你需要保持定期更新,这样才能看出来工作正在进行,并且进展的哪里。再好一点就是,你能一直部署代码到分期系统,从而让客户够看到未完成的项目和它一天天的改变。

  如果你能跟你的老板(们)保持透明化,他们就很有可能了解是否需要推迟截止日期。非技术人员通常不懂软件开发,视它为黑盒技术。通过与客户保持清晰的通信和透明化,并让他们参与到开发进程中,客户可以更了解你的工作,使得对将要开发出来的产品更青睐。

  规则四:维持日常计划表(Todo list)

  时间管理问题肯定是超出本文谈论的范围,但是我仍要指出,为确保事情一直向前进展,作为一名程序员你所能做的最好的事情之一就是维持一份日常计划表。另外,一个得力的时间追踪工具也能帮上大忙。伯乐在线的这篇文章中有老外推荐的10个时间追踪工具。

  软件开发是极为复杂的事情。成为一名优秀的程序员要求有多年的实践,耐心和锻炼,并且学无止境。当需要在截止日期内开发软件时,往往你正在编写一个复杂的系统。为保持思路清晰,并且确保发挥你编程的最大能力,你应该维持一份由每日需要完成(编码方向)的单独的任务组成的日常计划表。

  不要写过于空泛的计划表,像“调试声音问题”这样的,而是要真正地想一遍,并且写出事情的几个步骤。例如:

  1.写一个音乐文件加载功能的单元测试,检查mp3是否能够播放。

  2.写一个音乐文件加载功能的单元测试,检查加载wav文件时是否崩溃。

  3.创建新的特性分支,设计升级,适用于新的网页设计模板。

  4.使用网页设计新模板升级style.css。

  有一个明确的可操作的事件列表可以使你集中力量在一段时间内解决一个单独的任务。这样就不用时刻平衡分配和在脑子里想着接下来的步骤。编写软件已经够复杂的了,不要让你的生活更困难。

  准则五:做应该做的事

  毫无疑问,会有令你紧张和不舒服的情况出现。你拖延时间并忽略了新特性的单元测试吗?当这些情况发生时,不要任意妄为。相反的,做应该做的事。

  不管是否需要你回顾还是重新查看一些旧代码,都要多写一些测试用例,甚至推迟截止日期也要这么做。作为一位专业的技术人员,持续地开发能够运行的代码是你的工作,即使这意味着你必须做出艰难的抉择。

  结语

  对一个软件开发人员来说没有轻松的任务。我们的世界一直充满挑战和困难,只有磨练和时刻准备着才能帮助我们渡过难关,并在好时光里成功。一直利用我们最精确的判断,通过运用毫不动摇的工程实践去打破时间的桎梏并且不向困难低头。

  你能够做到。

原文:On Programming Deadlines 翻译:伯乐在线 敏捷翻译 -魏哲

如需转载,但请注明原文/译文出处、译文超链接和译者等信息,否则视为侵权,谢谢合作

时间: 2024-09-19 09:19:28

论编程的最后期限的相关文章

Java多线程编程详解

编程|多线程|详解 一:理解多线程多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立. 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单.多个线程的执行是并发的,也就是在逻辑上"同时",而不管是否是物理上的"同时".如果系统只有一个CPU,那么真正的"同时"是不可

ASP动态网页编程的19个基本技巧

编程|动态|技巧|网页 1. 现在的日期时间命令是<%=now%> 即可 2.ASP取得表格(from)数据输入的方法,是使用一个内置的对象(object)-Requect,它以get,post而异. 3.若要自己用VB或其它语言编写,.dll文件供ASP使用需将DLL文件注册方可:DOS下输入 regsbr32 *.dll 4.显示五个重复的句子,字体越来越大<% for i=1 to 5 %><font size=<% =i %> color=#00ffff&

ASP 3.0高级编程(六)

编程|高级 第3章 ASP应用程序与会话 在前面的章节中介绍了ASP提供的访问一个客户请求和产生响应的方法,本章将讨论ASP的另两个对象.就是Application和Session对象.这两个对象不是直接地与请求和响应的管理有关,而是更多地与ASP网页运行环境的管理相关.与建立Web站点或Web应用程序有关的共同问题之一,是使用HTTP协议时没有状态.状态提供了与一个指定用户有关的变量值.对象和其他资源,并且应用程序中的任意例程都能使用它:以一种像VB或C++这样的程序设计语言编写一般的基于客户

C++ Builder多线程编程中一些体会

最近在写一个程序用到了多线程,所以对CB下的多线程有一定的学习. 现在把自己的一些心得讲一下.水平有限,写的很粗略,请大家见谅. CB相对于VC来说,在CB下写多线程程序是很简单的.不仅是VCL中有TThread这个类.封装了那些关于多线程的WINDOW API.我觉得更方便的是他提供了 直接访问主VCL线程中对象的能力.可以很容易的和主线程中的窗体,控件 打交道.和单线程的方式没有太多区别.只是在有多个线程都要访问主线程 中的对象(比如访问同一个窗体上的StringGrid).只要用Threa

分布式编程模式中的租约、事务和分布式事件机制

Jini技术面向网络及分布式计算的特性决定了Jini技术必然与传统的单机系统在许多方面有概念上和实际应用中的差别.如网络的延迟.失败,或者设备的突然撤出,将导致信息的无序和丢失:资源的获得.保存.维护和回收情况更为复杂:不同实体之间通讯和协调工作的可靠性及效率并不像单机系统中那样较为容易地获得保证.因而在 Jini 中以 Java 为基础加入了分布式编程模式,特别是引入了租约.分布式事务和分布式事件. 租约 租约的基本概念是资源只能被使用一段时间,这由租约的持有者(lease holder)和租

每位开发人员都应铭记的10句编程谚语

所谓谚语,就是用言简意赅.通俗易懂的方式传达人生箴言和普遍真理的话,它们能很好地帮助你处理生活和工作上的事情.也正因如此,我才整理了10句编程谚语,每位开发人员都应该铭记他们,武装自己. 1. 无风不起浪 别紧张,这也许只是一场消防演习 代码设计是否糟糕,从某些地方就可以看出来.比如: a. 超大类或超大函数 b. 大片被注释的代码 c. 逻辑重复 d. If/else嵌套过深 程序员们通常称它们作代码异味(Code Smell),但是就我个人认为"代码警报"这个名字更为合适一些,因为

程序员:编程能力vs职业技能,哪个更重要

即便不是伟大的程序员,你也可以走的更远 每个程序员应该具备2种能力,即编程能力和个人的职业技能. 编程能力意味着你写的代码是可靠,高性能,易维护的.这跟程序员花费的时间,他的思维,以及广泛的阅读有关. 职业技能让你成为一个好的员工,好的同事.这需要反应敏捷,有良好的沟通,明白期限,及时公开的反馈,能清楚解释复杂的事物等能力. 一个极端的例子. 想象有2个人. Rodrigo是麻省理工的毕业生,在他的空闲时间里面他在编写一个编译器.他是Haskell核心的贡献者,并且开发了一些著名的Python

20年资深程序员编程经验分享

原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务.生物技术.房地产.医疗.保险和公用事业. 从11岁时,我就一直在编程,并且一直都很喜欢技术和编程.这些年来,我积累了一些艰难又容易的经验.作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友. 虽然我想我会持续更新这些经验,可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了.下面就是我至今最难忘的经验

编码20年的老程序员分享所积累的20条编程经验

       从11岁时,我就一直在编程,并且一直都很喜欢技术和编程.这些年来,我积累了一些艰难又容易的经验.作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友.        我会持续更新这些经验,我可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了.下面就是我至今最难忘的经验. 1. 估算解决问题所需要的时间.不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时.为自己定一个时间限制吧,1小时.30分钟或甚