阅读更多

0顶
0踩

非技术

翻译新闻 论项目开发的最后期限

2011-11-16 11:38 by 见习编辑 jobbole 评论(0) 有4405人浏览
普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。

截止日期 / 最后期限

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

1. 你必须延长时间以妥善完成任务。
2. 你必须写些不严谨的代码来应付过关。

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

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

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

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

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

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

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

准则二:先写测试

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

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

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

  • 写测试首先能帮你明确你的应用程序架构。
  • 你将有一个平和的心态,因为你知道你的代码是可运行的。
  • 你能够轻易的重构项目,而不用担心破坏代码。
  • 你可以避免放出低质量的代码以免玷污你的声誉。
准则三:透明

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

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

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

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

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

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

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

  • 写一个音乐文件加载功能的单元测试,检查mp3是否能够播放。
  • 写一个音乐文件加载功能的单元测试,检查加载wav文件时是否崩溃。
  • 创建新的特性分支,设计升级,适用于新的网页设计模板。
  • 使用网页设计新模板升级style.css。
有一个明确的可操作的事件列表可以使你集中力量在一段时间内解决一个单独的任务。这样就不用时刻平衡分配和在脑子里想着接下来的步骤。编写软件已经够复杂的了,不要让你的生活更困难。

准则五:做应该做的事

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

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

结语

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

你能够做到!


英文原文:http://rdegges.com/on-programming-deadlines
来自: 伯乐在线
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法...

  • 论编程的最后期限

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

  • 解开最后期限的镣铐

    最后期限(Deadline)是软件从业人员必须面临的最大困难与挑战,准确地说,它是所有程序员包括项目管理者的可怕梦魇。当堂吉珂德看到郊野之上的数十架风车,风车的翅翼如巨人的胳膊,正耀武扬威地奚落着这位中世纪...

  • 项目管理论文十大领域各一篇

    论信息系统项目的整体管理 【摘要】 2016 年 7 月,我参加了╳╳市物价局发起的“智慧物价”信息综合管理平台系统的建设工作,担任承建方项目经理,该信息综合管理平台系统的主要功能有括价格监测预警、价格应急监测...

  • 论软件开发之后的发展趋向

    计算机应用的大型化、复杂化,对应的计算机软件也趋于大型化、复杂化,这就造成了软件开发难度的增加,特別是作为软件核心的软件架构。因此,要开发出优质的软件,其架构的实用性、安全性、稳定性等都要考虑到并且...

  • 软考高项范文——论信息系统项目的成本管理

    论信息系统项目的成本管理 【摘要】 2016 年 7 月,我参加了╳╳市物价局发起的“智慧物价”信息综合管理平台系统的建设工作,担任承建方项目经理,该信息综合管理平台系统的主要功能有括价格监测预警、价格应急...

  • 产品开发中项目与项目管理

    《人人都是产品经理》读书笔记3 之前提到产品立项之前会有需求...之前的都是准备工作,如果产品会议通过,进入立项开发阶段,那么项目就算正式起飞了,也就是项目的管理,包括立项、需求开发、产品开发、测试再到发布。

  • 软件开发本质论(敏捷开发)

    敏捷开发有 4 种价值 和 12个原则 ---------------价值----------------------------- 自然之路的原则: 尽早提供价值,经常提供价值(必须以创造价值为中心,而且价值必须是可见的) 一种观察软件开发过程的方法 ...

  • 【软考高项范文】论信息系统项目的范围管理

    论信息系统项目的范围管理 【摘要】 2016 年 7 月,我参加了╳╳市物价局发起的“智慧物价”信息综合管理平台系统的建设工作,担任承建方项目经理,该信息综合管理平台系统的主要功能有括价格监测预警、价格应急...

  • 信息系统项目管理--论文分析笔记

    信息系统项目管理–论文分析 (1)整体管理 制定项目章程 1.项目发起人发布了这个文件,项目启动了,我被授权了 2.项目章程的内容(6个项目,2个总体,2个其他) 制定项目管理计划 1.和大家一起制定了一个项目...

  • [转]论编程的最后期限

    普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。当你给自己写程序的时候,只要你愿意,就可以用很多(或者很少)的时间来完成,但是当你给别人写程序的时候,你就...只有极少数够灵活的项目能够给...

  • 【转】论编程的最后期限

    普通编程与专业编程之间有很多差别,而最为显著的就是截止日期。当你给自己写程序的时候,只要你愿意,就可以用很多(或者很少)的时间来完成,但是当你给别人写程序的时候,你就只有...只有极少数够灵活的项目能够给

  • 什么是敏捷方法论? 现代软件开发讲解

    无论您是敏捷应用程序开发的新手还是几十年前使用瀑布式软件开发方法学习软件开发,如今,您的工作至少都受到敏捷方法论的影响。 但是什么是敏捷方法论?在软件开发中应如何实践? 实践中,敏捷开发与瀑布有何...

  • JEDEC SPEC 最新版 合集 DDR2/DDR3/DDR4/DDR5/LPDDR2/LPDDR3/LPDDR4(X)/LPDDR5(X)

    JESD79-2F DDR2 JESD79-3F DDR3 JESD79-4D DDR4 JESD79-5C DDR5 JESD209-2F LPDDR2 JESD209-3C LPDDR3 JESD209-4E LPDDR4 JESD209-4-1A LPDDR4X JESD209-5C LPDDR5(X)

  • COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,comsol二维光子晶体角态 单胞能带,超胞能

    COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,COMSOL二维光子晶体角态研究:单胞与超胞能带计算及边界态与角态特性分析,comsol二维光子晶体角态。 单胞能带,超胞能带,边界态以及角态计算。 ,comsol;二维光子晶体;角态;单胞能带;超胞能带;边界态计算,基于Comsol的二维光子晶体角态及能带边界计算研究

  • 六自由度机械臂抓取动作仿真与代码解析:抓取动画、关节参数变化及轨迹图解详解,六自由度机械臂抓取动作仿真指南:掌握两套代码实现动画与轨迹图模拟学习攻略,六自由度机械臂抓取动作仿真-8 两套关于抓取动作的

    六自由度机械臂抓取动作仿真与代码解析:抓取动画、关节参数变化及轨迹图解详解,六自由度机械臂抓取动作仿真指南:掌握两套代码实现动画与轨迹图模拟学习攻略,六自由度机械臂抓取动作仿真-8 两套关于抓取动作的代码,包括抓取动画、关节角、角速度、角加速度的变化仿真、以及抓取轨迹图 简单易懂好上手~ ,六自由度机械臂;抓取动作仿真;抓取动画;关节角变化;角速度角加速度;抓取轨迹图;两套代码;简单易懂好上手,六自由度机械臂抓取动作仿真演示:代码与轨迹图解

  • ITC网络广播工具软件

    ITC网络广播工具软件

  • Multisim四位密码锁电路仿真设计:设定、开锁与声光报警功能演示资料包,Multisim四位密码锁电路仿真设计:设定、输入、开锁与报警功能详解,附源文件、原理说明书与演示视频,multisim四位

    Multisim四位密码锁电路仿真设计:设定、开锁与声光报警功能演示资料包,Multisim四位密码锁电路仿真设计:设定、输入、开锁与报警功能详解,附源文件、原理说明书与演示视频,multisim四位密码锁电路仿真设计 功能: 1.通过拨码开关1进行初始密码设定。 2.通过拨码开关2输入密码,实现开锁判断。 3.如果密码正确,LED绿灯亮,表示开锁。 4.如果密码不正确,LED红灯亮,蜂鸣器鸣叫,声光报警。 资料包含:仿真源文件+原理说明书+演示视频 ,四位密码锁电路、Multisim仿真设计、初始密码设定;拨码开关输入;开锁判断;LED灯显示;声光报警;仿真源文件;原理说明书;演示视频,Multisim四位密码锁电路仿真设计:初始密码设置与智能解锁功能的声光报警展示

  • 上班摸鱼打卡模拟器微信小程序源码.zip

    俗话说,摸鱼摸的好,上班没烦恼,毕竟谁能拒绝带薪拉屎呢(手动狗头) 这是一个云开发职场打工人专属上班摸鱼划水微信小程序源码,没有后台 直接导入微信开发者工具即可运行,UI简约大气漂亮,只需登录微信公众平台配置完合法域名即可轻松上线。 用户进入摸鱼小程序,可以自由设置薪资,上班时间、下班时间、发薪日、 月工作天数以提醒自己摸鱼,全民打酱油,让自己成为摸鱼冠军,《商鞅摸鱼哲学》 摸鱼不是自我放纵,而是个人实力的积蓄,我们的小目标是晚睡晚起 小程序中的今日待办会提醒用户带薪拉屎和闲逛,下方展示的是距离休息日的天数,距离下一次发工资的天数和节日的天数。

  • 【毕业设计】基于Java的开发的一个集合校园二手交易、拼车、失物招领等功能的app_pgj.zip

    【毕业设计】基于Java的开发的一个集合校园二手交易、拼车、失物招领等功能的app_pgj

Global site tag (gtag.js) - Google Analytics