`
doyoueat
  • 浏览: 14645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转] 好程序需要你写(至少)两遍

    博客分类:
  • code
 
阅读更多

 

最近这些年,越来越多的人开始转向敏捷开发。各种敏捷开发技术并不新鲜,大多是在80 和90年代发展形成。但只是在最近这些年,程序员和(更重要的是)一些商业顾问,架构师,客户开始变得喜欢和拥抱敏捷开发。

进化中的需求

现在的一种普遍的认识是,在开始编码前,你不可能把所有的需求都写完备。这些需求的确定是一个逐渐发展进化的过程。使用短开发周期/springts,我们一步步的开发程序,使用多次迭代的方式完成从客户方得到的最新需求。这些都是基于一个进化的思想。就像生活中,我们总是通过一步步的改进来达到最好一样。

进化中的代码!

可是,这就完事了吗?如今大部分的程序员都认识到了需求必定是一步步的挖掘出来的。但他们却忘了自己的工作!?他们仍然认为他们的框架和架构在项目开始之初就定型了。同样,代码一旦写成,程序就完成了… 不是吗?

。以我的经验,所有好的程序都至少要写两遍。第一编是你过于仓促,不能很好的理解需求、实现需求。不错,当看到了某种业务模式,我们知道要提炼出方法,围绕着它实现业务职责。你最终写成的代码是非常好的,但,它不是优秀的。

在我们目前的项目中,几乎所有的重要功能模块都从头重写过数次。慢慢的但明显的,代码变得越来越好。一旦你对某段程序做了第三或第四次增补,或又找到了一个bug,你能感觉到这程序什么地方有异味。你开始躲避触碰这段程序,你为不需要在处理这段程序而高兴。当有了这样的感觉后我会怎么做?我会删了这些代码。

可是… 可是… 这样你就要完全从头开始了!?

你又错了! 当然,IDE里空了,代码全没了,也许一些测试程序会存留下来。但你却对你的代码应该做什么有了扎实的认识。你也知道以前这段代码是什么样的,你知道它以前的内伤和异味在哪里!有了这些认识,你能写出更好,甚至是非常优秀的代码!不错,我们也可以保留这些代码,使用一些重构措施…但你可能再也找不到这样好的从头开始、更好的编写它的机会了。

再次,就像生活中的所有事情:要让事情变的完美,你需要经过多次的进化迭代。对你的需求是这样,对你的架构和代码也是如此。

写两遍,就意味着两倍的时间吗?

当告诉人们我的观点是所有的程序都至少写两遍时,他们担心花费两倍的项目时间。但事实远非如此。下面是原因:

  1. 第二次写代码只是用去你初次写代码的很少一部分的时间。
  2. 重写之后,代码的质量会有明显的提高,可维护性,可扩展性都有改善,包括编程的速度。

祝你好运,坚持重新改进你的代码!

 

 

http://www.aqee.net/great-code-is-written-twice-or-more/

分享到:
评论

相关推荐

    好的程序需要你至少好好写两遍

    好的程序需要你至少好好写两遍!最近这些年,越来越多的人开始转向敏捷开发。各种敏捷开发技术并不新鲜,大多是在80和90年代发展形成。但只是在最近这些年,程序员和(更重要的是)一些商业顾问,架构师,客户开始变得...

    所有程序员都应该至少读上两遍的十篇论文

    标题中的“所有程序员都应该至少读上两遍的十篇论文”揭示了这是一份推荐给程序员的重要学术资源列表。这些论文涵盖了计算机科学和技术的多个关键领域,旨在深化开发者对编程本质的理解,提升他们的专业素养。 1. *...

    关于C的精粹包含至少200个C语言小程序

    038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序...

    高德API经纬度转地级市代码(含读取文件)

    本示例中的“高德API经纬度转地级市代码”是一个Java程序,用于解决此类问题。高德地图API提供了一个强大的服务,允许开发者通过经纬度坐标获取对应的城市、区县等行政区域信息。 首先,我们需要了解高德地图API。...

    Access2000 Resize窗体自适应程序access2000

    而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以...

    Access97 Resize窗体自适应程序access2000

    而当时找遍所有的资料,都找不到类似针对ACCESS的控件(VB的RESIZE控件在ACCESS中会出现一些奇怪的现象,主要是因为ACCESS窗体的特别结构),而当时我开发的一个项目需要同时适应800*600 和640*480 两种分辨率,所以...

    PLC可编程序控制器基础知识.doc

    CPU 是 PLC 的核心,起神经中枢的作用,每套 PLC 至少有一个 CPU,它按 PLC 的系统程序赋予的功能接收并存贮用户程序和数据,用扫描的方式采集由现场输入装置送来的状态或数据,并存入规定的寄存器中,同时,诊断...

    课程设计四:LED彩灯控制器设计.zip

    含有protues图和程序(全注释,连变量都注释) 1、至少10个发光管4种花样自动变换,循环往复。 2、彩灯花样变换的快慢节拍可以手动和自动方式控制,手动控制按钮按一次转换一次;自动控制方式每15秒变换一次,1分钟...

    图书城水池水箱清洗程序.docx

    - 清洁人员使用柠檬酸或类似消毒剂彻底清洗池壁和底部,至少三遍。 - 维修人员检查管道、阀门、浮球和水位控制电路,进行必要的维修。 - 清洗完毕后,排放污水,用消毒药水对池壁和底部进行消毒。 - 检查所有...

    Nehe的OpenGL教程电子书

    理解OpenGL如何工作非常重要,你可以在教程的末尾下载源程序,但我强烈建议你至少读一遍教程,然后再开始编程. 2.你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很...

    OPenGL编程书籍

    理解OpenGL如何工作非常重要,你可以在教程的末尾下载源程序,但我强烈建议你至少读一遍教程,然后再开始编程. 2.你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单...

    ACM 程序设计竞赛入门:第10讲 二分图.ppt

    【二分图】是图论中的一个重要概念,它是指图中的所有顶点可以被分成两个不相交的集合X和Y,且图中每条边连接的两个顶点分别属于不同的集合。这样的图被称为二分图,也叫两色图,因为我们可以用两种颜色对顶点进行...

    实验课学生成绩管理系统的程序代码

    根据给定的文件信息,我们可以总结出以下关于“实验课学生成绩管理系统的程序代码”的相关知识点: ### 1. 文件包含与宏定义 在该程序的开头部分,可以看到包含了多个标准库文件: - `#include "string.h"`:用于...

    两款定时提醒休息工具-IT人士必备

    最后重复一遍两个要点:每小时站立一小会,每天至少活动30分钟。就这么简单。除非体型超重,否则你不需要进行锻炼或者去健身房来抵消久坐带来的负面影响,只需要保证一整天有活动一下,你甚至可以不用放弃长时间的看...

    什么是黑盒测试和白盒测试的区别.pdf

    白盒测试主要是想对程序模块进行如下检查:对程序模块的所有独立的执行路径至少测试一遍。对所有的逻辑判定,取“ 真” 与取“ 假” 的两种情况都能至少测一遍。在循环的边界和运行的界限内执行循环体。测试内部数据...

    更衣室清洁标准操作程序.doc

    - 每天至少清洁两次,每周五下午进行深度清洁和消毒。 - 更衣柜和更鞋柜使用专用洁净抹布擦拭。 - 清洗洗手池并彻底冲洗。 - 拖地两遍,确保地面干净。 - 周五清洁包括全面擦拭、天花板刷扫、地面清洁和空气...

    微型计算机原理与应用课程设计电子音乐播放器

    设计要求利用 8254 作为音阶频率发生器,应先对至少两段音乐进行编码后存入音符表,并建立好音阶表,每段音符长度不能少于 60 个,每首连续播放 3 遍后,自动播放下一段音乐,几段音乐播完后,循环播放,直到有键盘...

    C++易学教材

    学习资料分享 刚入门,想很快掌握是不可能的,以我自己这两年的学习经验来看,刚入门学习一门计算机语言,教学书你至少要看三遍才能掌握的,第一遍看时可以不必太钻牛角尖,不懂的就跳过去,把难点标记出来。第二遍...

    面向对象——排序

    在IT领域,面向对象编程(Object...不同的排序算法在特定场景下具有优势,例如,插入排序在近似有序的数据上表现优秀,而快速排序通常在平均情况下具有较好的效率。因此,根据具体需求选择合适的排序算法是非常关键的。

    软件工程综合应用例题(题).doc

    8. **测试用例设计**:对于给定的伪码程序,要实现不同的覆盖标准,如语句覆盖(每个语句至少执行一次)、路径覆盖(所有可能路径)、边覆盖(每个逻辑边至少执行一次)、判定覆盖(每个逻辑判断的真假结果至少出现...

Global site tag (gtag.js) - Google Analytics