好代码都是改出来的

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

不断进化的需求

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

不断进化的代码

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

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


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

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

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

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

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

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

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

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

时间: 2024-10-12 04:08:43

好代码都是改出来的的相关文章

谷歌为什么把上十亿行代码都放在一个仓库里

相对于一般公司,Google 使用了单一代码仓库,很多人不理解为什么这么做.本文作者是谷歌基础设施小组的工程师,他对这个问题进行了详细解读. 早期 Google 员工决定使用集中式源代码管理系统来管理代码库.这种方法已经在 Google 运行了 16 年以上,而今天绝大多数的 Google 软件仍然存储在一个共享的代码库中. 随着 Google 开发软件数量稳步增加,Google 代码库的规模也呈指数增长. 因此,用于管理代码库的技术也发生了显著变化. 本文概述了该代码库的规模,并详细介绍了 G

Mark一下, dp状态转移方程写对,但是写代码都错,poj 1651 poj 1179

dp题: 1.写状态转移方程; 2.考虑初始化边界,有意义的赋定值,还没计算的赋边界值: 3.怎么写代码自底向上计算最优值 今天做了几个基础dp,全部是dp方程写对但是初始化以及计算写错 先是poj 1651 其实就是个赤裸裸的矩阵连乘,dp方程很容易写出 dp[i][j]=min(dp[i][k]+dp[k+1][j]+r[i]*c[k]*c[j],dp[i][j]); 先贴两个个二逼的代码,mark下自己多么的二逼: 二逼一:在计算的时候使用了还没有算出来的值,模拟下就知道第一重循环里算dp

UVA 10603 Fill(正确代码虽然很搓,网上许多代码都不能AC)

在做用户查找时 因为要把查找的结果动态加载和显示,所以,那些html元素要由Ajax动态生成.用户打开查找界面时,有系统推荐的用户,而当用户按条件查找后,查找的结果动态加载和显示.所以考虑到用js来搞. 这个for循环就是移除已有的表单.然后根据Ajax请求过来的数据,动态生成新的表单对象.一定要注意j变量从大往小循环,否则,删除div元素后会引起serchResultLenth=serchResult.children.length;长度的变化(这个问题摸索了好久,才搞定,切记) for(va

Android的代码都得自己一个个敲一遍吗?

最近在Android学习中,碰到一个头疼的问题,众所周知Android是一个开发源代码的平台,网上有很多网友分享的关于各种例子的demo,比如扫描二维码,瀑布流等,对于前人已有的成果,我们应该怎么看待呢,直接copy修改到自己的项目里吗,还是自己要耐心的先理解,然后重新编写一遍?Android的代码都得自己一个个敲一遍吗?

一号旺铺小程序优点之产品迭代 好产品都是改出来的

一号旺铺小程序(http://www.yhwangpu.com/)最大的优点之一就是很容易做产品迭代,这对于创业者来讲是一个利好消息.      好的产品都是改出来的,话虽如此,在APP创业时代,迭代一款产品的精力和成本不亚于重新做一款产品.虽然在小程序时代之前,很多创业者打着精益创业的旗号做事情,但实际上很本没有能力做到精益创业要求的"敏捷开发.快速迭代"的要求.除了产品管理能力受限以外,更重要的原因是研发实力跟不上.如果试错周期过长,精益创业的打法反而会不利于产品的成长.小程序就不

appium+python解决每次运行代码都提示安装Unlock以及AppiumSetting的问题

appium+python解决每次运行代码都提示安装Unlock以及AppiumSetting的问题(部分安卓机型) 1.修改appium-android-driver\lib下的android-helpers.js文件 安装路径\appium-desktop\resources\app\node_modules\appium\node_modules\appium-android-driver\lib\android-helpers.js //await adb.install(unicode

新版Android代码分析,生成的代码都有什么用?

刚开始学习,新手,欢迎拍砖和鄙视. 直接入题,新版Android的主要代码分析: 1 package com.bslk.helloworld; 2 /*1.这里的导入包,会有报警告的地方,因为没有使用,已干掉了,其他不管,现在应该0Err0Warn*/ /*2.这是一些导入的包,具体的不解释,不纠结,不懂自己度娘,问了我会鄙视你的*/ 3 import android.support.v7.app.ActionBarActivity; 4 import android.support.v4.ap

在Linux中#!/usr/bin/python之后把后面的代码当成程序来执行。 但是在windows中用IDLE编程的话#后面的都是注释,之后的代码都被当成文本了。 该怎么样才能解决这个问题呢?

本文转自:http://bbs.csdn.net/topics/392027744?locationNum=6&fps=1 这种问题是大神不屑于解答,小白又完全不懂的问题... 同遇到这个问题,网上怎么都搜不到解决方案,自己研究了半天终于能用了 把我的解决方法发上来希望对以后学习python programming这本书的人有帮助吧 (很大一部分是自己的理解,有错误的地方希望有热心的大神批评指正..) Note:本人用的是win10系统,Linux下没有尝试过 想实现显示网页而不是代码,首先要在

结对编程-人和代码都长得好看系列

说实话,看本人队友的代码已有1年之余,也帮忙上刀山下火海不辞劳苦为她找BUG,有时找了n个小时就是因为把i达成了1,==打成了=,然而凭心而论此人代码武功高强,内力深厚,不仅人长得漂亮而且代码风格确实登得大雅之堂,括号该对称就对称,该缩进就缩进,除了注释略微不多让本人略感头疼外,一切都非常...真香. 队友采用C++编写,在dev上跑,说起代码,那是和本人一样好看,比如队友把代码分成几个模块,(在鄙人强烈建议下)将其变成了工程,整个工程由5个文件组成: main.cpp:除了实现的主函数文件 l