`

好的代码至少要修改两遍

阅读更多

近些年来,越来越多的人开始转向敏捷开发,而且这些敏捷开发的技术已不再新鲜,大多都是在 80 和 90 年代设计形成的。但是,最近几年,程序员,特别是一些商业顾问,架构师和客户开始喜欢上了敏捷开发。

不断进化的需求

现如今,有一个普遍的认识就是在你开始项目编程之前,你不可能写下所有的需求,这些需求的确定需要一个不断进化的过程。在较短的开发周期中,我们不断的完善程序,多次迭代从而满足客户提出的最新需求。这些都是基于进化的原则,就像我们的生活,你是一步一步的向前从而做得更好。

不断进化的代码

这就可以了吗?现在的大多数程序员都已经认识到了需求是不断进化和完善的。但还不够,他们依旧认为项目使用的框架和架构应该在项目开始的时候就确定了,而且代码一旦完成,就一切都 OK 了。

错。根据我的经验,所有优秀的代码都至少要写两遍。第一遍写代码时,你通常会很匆忙,不能很好的理解并实现需求。当然,如果你看过一些设计模式,知道一些方法,你最终的代码可能会写得不错,但它绝不是最优秀的。少写一些无谓的代码,多一些思考。

在我们现在的项目中,几乎所有重要的功能都要从零开始写,并且重复修改很多次。这虽然很慢,但确定的是写出的代码越来越好了。当你修改某一部分的代码已经三到四次,或又修补了这里的一个 bug,你就开始有点想躲避这部分代码,如果不再处理它你就会很高兴。当有了这样的想法后,你肯定会删了这些代码。那就又要一切从头开始了吗?

再一次错。确实,IDE 里空了,代码没了,或许只有一些测试程序还在。但是,你已经对你写的这些代码有了深刻的认识,你知道它是什么样的,你也知道它的问题出在哪。在此基础上,你现在可以写出更好,甚至是优秀的代码。当然了,我们也可以保留之前的代码,进行一些重构等等,但都不如从头开始,更好的做出它。

这和生活中的道理依然是一样的,要想把一件事做到极致,就要多次的重复和进化。你的需求是这样,你的代码和架构也要这样。

写两遍代码会花费两倍的时间?

当我告诉人们所有的程序都要至少写两遍时,他们担心这样会使完成整个项目的时间加倍。但事实不是这样的,我来告诉你原因:

1. 第二次写代码,只会花费你第一次写代码时的部分时间;

2. 重写之后的代码在质量上会有显著提高,而且维护性和可扩展性都会更好,你的编程速度也会越来越快。

所以,坚持重写你的代码,不断优化它吧!

 

http://www.techug.com/good-code-write-twice

分享到:
评论

相关推荐

    Tinyxml 源代码(VC6 & VS2005)

    同时要注意在一个西方编码的控制台上(至少我的Windows机器是这样),Print()或者printf()也无法正确地显示这个文件,这不关TinyXML的事——这只是操作系统的问题。TinyXML没有丢掉或者损坏数据,只是控制台无法显示...

    ①中国地面气候资料日值数据集(V3.0)处理软件(需要至少配备VS2019)②全国气象站点矢量数据

    处理软件:C#编写,现版本只能处理气温和降水量数据,处理结果为月/年平均数据或总量数据可供选择,上传资源为源代码,大佬可自行更改,如有其他数据处理需要请私信 全国气象站点矢量数据: 中国地面气候资料日值...

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

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

    Mindsware DataObjects & DynamicDataSheet Framework

    很是 麻烦,如果这样的基础表达到20张以上,这个基本资料维护的工作就需要至少 两三个人月来完成,而且更新、维护起来绝对是个噩梦。 本框架使用一个aspx的页面完成对一张数据库表的新增、修改、删除、查询、列表、 ...

    typescript-tutorial.pdf

    为了学习TypeScript,首先需要熟悉JavaScript基础,并至少阅读过一遍《JavaScript高级程序设计》。了解ES6的相关知识也很重要,推荐阅读《ECMAScript 6入门》。同时,对Node.js有一定的了解,能够使用npm安装和使用...

    acm比赛注意事项

    - **全面审题**:比赛初期应确保每道题目都至少阅读一遍,即使看起来较难也要坚持下去。 - **适时跟风**:比赛中后期可根据其他队伍的表现来选择题目,但要谨慎对待看似复杂的题目,有时可能只需要简单的技巧即可...

    使用python加PyQt5,利用QMediaPlayer写一个简易的音乐播放器(进度条拖动,音量改变,播放停止切换,歌曲列表)

    程序是使用pycharm平台来调试的,程序内容建立在python和pyqt5相关知识上的,需要有一些基础的知识,至少懂得如何打开python编辑器,如何安装python模块,如pyqt5等,如果下载后,尽量先将源代码调试一遍,...

    基于.net_的大数据量SQL_SERVER_系统_数据库和代码_优化方案

    ### 基于.NET的大数据量SQL SERVER系统数据库和代码优化方案 #### 一、引言 在.NET框架下开发的应用程序,特别是那些涉及到大量数据处理的系统,往往需要面对性能优化的问题。其中,数据库查询优化是提升整体系统...

    Mindsware动态数据对象平台v0.2版发布

    很是 麻烦,如果这样的基础表达到20张以上,这个基本资料维护的工作就需要至少 两三个人月来完成,而且更新、维护起来绝对是个噩梦。 本框架使用一个aspx的页面完成对一张数据库表的新增、修改、删除、查询、列表、 ...

    带验证的九宫格手势操作

    九宫格手势密码通常由一个3x3的矩阵组成,用户通过在这些方格之间画出一条连续的线,连接至少四个点来创建手势。这个手势可以是任意形状,但必须是连续的,且不能重复经过同一方格。系统会记录下用户的划线路径,将...

    c代码-测试指针变量排序

    首先,`main.c`文件很可能是该项目的核心代码,它包含了一个C程序,该程序可能定义了一个或多个函数,其中至少有一个用于对指针变量指向的数据进行排序。在C语言中,指针可以用来遍历数组,通过解引用操作访问和修改...

    Java基础学习04.pdf

    在Java编程语言中,循环是一种重要的控制流程结构,用于重复执行一段代码,直到满足特定条件为止。在Java基础学习中,循环分为几种类型,包括while循环、do-while循环和for循环,以及相关的控制语句如break和...

    FSUIPC-Java:这是一个Java API库,用于为使用FSUIPC接口的各种飞行模拟器开发应用程序。 该库通过在C ++包装器库中实现的一些本机代码工作,这些本机代码在Java和FSUIPC之间架起了桥梁。 包括32位和64位库

    好吧,我想,如果您至少要求任何中级飞行慢跑者,都会告诉您这是Pete和John Dowson开发的飞行模拟器(FSX,Prepar3D等)的必备附件。 Java是编程语言,SDK代表软件开发套件。 因此,使用FSUIPC Java SDK将所有这些...

    二十三种设计模式【PDF版】

    一个设计在最终完成之前常要被复用好几次,而且每一次都有所修改。 有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总是求助于以前使用过的非面向对象 技术。新手需要花费较长时间...

    OPenGL编程书籍

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

    Nehe的OpenGL教程电子书

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

    InfoBase 资料管理库

    2003.7.5 “OLE嵌入、URL捕获、UI、附件监听”(代码的实现) 搞定了richEdit 读取保存后开发增加高级功能,其后写完了插入OLE对象,URL文本捕获,插入图形……最后感觉差不多象个样子了,把主界面的图标,工具条...

    AD9833阅读笔记

    在进行软件编写时,开发者需要仔细阅读AD9833的数据手册(Datasheet),这是产品开发的基础,要至少阅读五遍以上以熟悉其功能和接口。 在软件开发过程中,首先要了解AD9833的通信方式,它通常使用SPI(Serial ...

    测试培训教材

    2.安装成功后,打开编制好的文件,选中所有要导入的需求记录,注意:只选数据. Export To Quality 3.点击“工具” Center 4.输入QC的URL地址 5.输入项目管理员的名称和密码 6.选择要导入需求的域和项目 7.选择第一...

Global site tag (gtag.js) - Google Analytics