阅读更多

0顶
0踩

非技术

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

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

截止日期 / 最后期限

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

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.和大家一起制定了一个项目...

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

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

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

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

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

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

  • Tripple Farm:Match 3 Combination Game Complete Project 合成小镇三消Unity合成消除游戏项目游戏插件模版C#

    Tripple Farm:Match 3 Combination Game Complete Project 合成小镇三消Unity合成消除游戏项目游戏插件模版C# 支持Unity2020.3.4或更高 您知道像三合镇这样的著名益智游戏,并且您想制作一个自己的游戏。就是这样。这个包正好适合您。 这是一个完整的项目,您可以在零分钟内将其上传到 appstore 或 googleplay 商店。 基本规则: 3个或以上相同的道具可以匹配升级为新的道具。动物如果被困住,也可以合并。 羽毛: -移动(android/ios)就绪。 - 包含所有源代码。 -超过 12 座建筑/军团需要升级。 -三种特殊物品可以提供帮助。 - 三个不同的主题(场景和动物) -unity iap 支持 -Unity UI -广告位已准备好 -包含详细文档

  • 【JAVA编程基础】针对新手的JAVA基础测试题:涵盖选择题、简答与编程实践

    内容概要:本文档是一份针对Java初学者的基础测试题,分为不定项选择题、简答题和编程题三大部分。选择题涵盖标识符、数组初始化、面向对象概念、运算符优先级、循环结构、对象行为、变量命名规则、基本

  • MATLAB机器人运动学、动力学及轨迹规划的建模与仿真

    内容概要:本文详细介绍了如何利用MATLAB进行机器人运动学、动力学以及轨迹规划的建模与仿真。首先,通过具体的代码实例展示了正运动学和逆运动学的实现方法,包括使用DH参数建立机械臂模型、计算末端位姿以及求解关节角度。接着,讨论了雅克比矩阵的应用及其在速度控制中的重要性,并解释了如何检测和处理奇异位形。然后,深入探讨了动力学建模的方法,如使用拉格朗日方程和符号工具箱自动生成动力学方程。此外,还介绍了多种轨迹规划技术,包括抛物线插值和五次多项式插值,确保路径平滑性和可控性。最后,提供了常见仿真问题的解决方案,强调了在实际工程项目中需要注意的关键点。 适合人群:对机器人控制感兴趣的初学者、希望深入了解机器人运动学和动力学的学生及研究人员、从事机器人开发的技术人员。 使用场景及目标:① 学习如何使用MATLAB进行机器人运动学、动力学建模;② 掌握不同类型的轨迹规划方法及其应用场景;③ 解决仿真过程中遇到的各种问题,提高仿真的稳定性和准确性。 其他说明:文中提供的代码片段可以直接用于实验和教学,帮助读者更好地理解和掌握相关概念和技术。同时,针对实际应用中的挑战提出了实用的建议,有助于提升项目的成功率。

  • 基于单片机的无线环境监测-仿真设计(51x2+12864+18B20+HW).#0092

    包括:源程序工程文件、Proteus仿真工程文件、配套技术手册等 1、采用51/52单片机作为主控芯片; 2、发送机:18B20测温、开关模拟灯光,发送数据; 3、接收机:接受数据、12864液晶显示;

  • 微电网优化中风光不确定性的处理:基于机会约束与概率序列的Matlab实现

    内容概要:本文探讨了在微电网优化中如何处理风光能源的不确定性,特别是通过引入机会约束和概率序列的方法。首先介绍了风光能源的随机性和波动性带来的挑战,然后详细解释了机会约束的概念,即在一定概率水平下放松约束条件,从而提高模型灵活性。接着讨论了概率序列的应用,它通过对历史数据分析生成多个可能的风光发电场景及其概率,以此为基础构建优化模型的目标函数和约束条件。文中提供了具体的Matlab代码示例,演示了如何利用CPLEX求解器解决此类优化问题,并强调了参数选择、模型构建、约束添加以及求解过程中应注意的技术细节。此外,还提到了一些实用技巧,如通过调整MIP gap提升求解效率,使用K-means聚类减少场景数量以降低计算复杂度等。 适合人群:从事电力系统研究、微电网设计与运营的专业人士,尤其是那些对风光不确定性建模感兴趣的研究者和技术人员。 使用场景及目标:适用于需要评估和优化含有大量间歇性可再生能源接入的微电网系统,旨在提高系统的经济性和稳定性,确保在面对风光出力波动时仍能维持正常运作。 其他说明:文中提到的方法不仅有助于学术研究,也可应用于实际工程项目中,帮助工程师们制定更为稳健的微电网调度计划。同时,文中提供的代码片段可供读者参考并应用于类似的问题情境中。

  • linux之用户管理教程.md

    linux之用户管理教程.md

  • 基于组态王与S7-200 PLC的六层至八层电梯控制系统设计与实现

    内容概要:本文详细介绍了如何利用组态王和西门子S7-200 PLC构建六层或八层电梯控制系统。首先进行合理的IO地址分配,明确输入输出信号的功能及其对应的物理地址。接着深入解析了PLC源代码的关键部分,涵盖初始化、呼叫处理、电梯运行逻辑和平层处理等方面。此外,提供了组态王源代码用于实现动画仿真,展示了电梯轿厢的画面创建及动画连接方法。最后附上了详细的电气原理图和布局图,帮助理解和实施整个系统架构。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是对PLC编程和人机界面开发感兴趣的从业者。 使用场景及目标:适用于教学培训、工程项目实践以及研究开发等场合。旨在为相关人员提供一个完整的电梯控制系统设计方案,便于他们掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似项目的开发。 其他说明:文中不仅包含了理论知识讲解,还分享了许多实际操作经验,如解决编码器丢脉冲的问题、优化平层停车精度的方法等。同时强调了安全性和可靠性方面的考虑,例如设置了多重保护机制以确保系统稳定运行。

Global site tag (gtag.js) - Google Analytics