阅读更多

0顶
0踩

非技术

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

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

截止日期 / 最后期限

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

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

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

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

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

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

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

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

  • 基于Tensorflow的iOS图像处理工程,效果类似Primsa.zip

    人工智能-深度学习-tensorflow

  • 该仓库用于存储项目“基于云边深度学习融合的COVID-19智能检测系统”的识别模型测检测代码部分.zip

    人工智能毕业设计&课程设计

  • 基于ssm的中小型企业财务管理录系统.zip

    基于ssm的中小型企业财务管理录系统.zip

  • JAVA毕业设计之springboot057洗衣店订单管理系统(springboot+mysql)完整源码.zip

    这个资源是一个基于Spring Boot和MySQL的洗衣店订单管理系统的完整源码。它包括了所有的源代码文件,以及一个详细的文档,可以帮助你理解和运行这个系统。这个系统的主要功能包括:用户注册和登录,下单,查看订单,修改订单,删除订单等。用户可以在系统中选择洗衣服务,然后提交订单。系统会自动计算订单的总价,并将其显示在用户的订单列表中。用户还可以查看自己的历史订单,以及每个订单的详细信息。此外,系统还包括了一个管理员模块。管理员可以查看所有的订单,以及对订单进行管理。他们可以修改订单的状态,例如将订单标记为已完成,或者取消订单。这个系统使用了Spring Boot框架,这是一个非常流行的Java开发框架,它可以帮助你快速地开发和部署应用程序。同时,系统也使用了MySQL数据库,这是一个广泛使用的关系型数据库,它可以存储大量的数据,并提供高效的查询功能。总的来说,这个资源是一个非常完整的洗衣店订单管理系统的源码,它可以帮助你理解如何使用Spring Boot和MySQL来开发一个实际的应用程序。无论你是正在学习Java编程,还是已经有一定的开发经验,都可以从这个资源中学到很多有用的知识和技能。

  • W9825G6KH-6I 产品规格书pdf

    W9825G6KH-6I SDRAM,256Mb(32MB,16Mbx16),3.3v 动态随机存取存储器

  • WeRoBot-1.10.1-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • (后端)本科毕业设计-基于深度学习的人脸识别考勤系统.zip

    人工智能毕业设计&课程设计

Global site tag (gtag.js) - Google Analytics