不要将时间浪费到编写完美代码上

【腾讯云】云上实验室:开发者零门槛,免费使用真机在线实验!>>>

一个系统的迭代开发可能持续运行5年至10年甚至是20年。相比之下,某行代码甚至某个设计的生命周期则要短很多,只有几个月或者几天,甚至当你为了解决一个问题迭代测试不同方案时它们的生命周期只有几分钟。

一些代码的确比其他代码更重要

通过研究代码随时间发生的变化,Michael Feathers发现了代码生命线。通常,每个系统都有许多一次写成不再修改的代码。但是,有一小部分代码,包括最重要最有用的代码,却被经常被修改,重构或者重写数次。

随着对一个系统或者一类问题或者一个架构方案的深入了解,你应该能够更加轻易的知道或者预测到哪些代码会不停的变化哪些代码不会,换句话说,就是哪些代码比较重要哪些代码不重要。

是否应该努力去写完美代码?

大家都知道,我们应该写干净的代码,保持代码的一致性、易读性,并且尽可能地简单。

但是一些人走了极端,尽自己的最大努力,去写尽可能优雅的、接近完美的代码,痴迷于重构斟酌代码的每一个细节。

但是,如果这些代码不是一次写成不再修改,反而是一直不断的变化,那么,努力去写完美代码或者努力进行完美的设计岂不是浪费时间?

“你不可能写出完美的代码。你难道为此倍受打击么?显然不该。应该将它作为一个生活中的公理,去拥抱它,庆祝它,因为完美的代码是不存在的。在计算机短暂的历史中,没有任何人曾经写出过哪怕一段完美无缺的代码。显然,你也不太可能成为第一个写出完美代码的人。除非你接受这个事实,否则你会一直浪费时间和精力去追逐一个不能实现的梦想!”——Andrew Hunt《程序员修炼之道:从初级到高级》

只写一次的代码首要不是美观和优雅,而是正确运行,而且易读易懂,因为在系统的整个生命周期中,这些代码虽然不再修改,但是可能需要阅读很多次。不一定非要紧凑,干净即可。在这些代码中,一定程度上的拷贝和粘贴等操作是可以接受的。这些代码不需要反复斟酌,除非你需要修改它,否则即使周围代码都在变,也不需要对这些代码重构。对于这些代码,没必要花费过多额外的时间。

对于那些一直需要修改的代码呢?苦苦思索代码的风格和最优雅的方案是在浪费时间,因为,这些代码可能在随后的几天或者几周就会被修改甚至重写。同样地,每次修改都痴迷于代码的重构,或者重构那些不需要修改的代码试图使其变得更好也是没有必要的。代码永远都可以变得更好,但是这不应该是最重要的方面。

真正重要的是代码是否实现了想要的功能?代码是否正确运行?是否有用?是否高效?能否处理错误和损坏的数据而不会崩溃,至少也要安全的失效?调试是否方便?修改起来是否简单且安全?这些不是美观的组成部分,而是实际中衡量代码是否正确的标准。

务实地进行编码和重构

精益开发的核心思想是:不要把时间浪费到不重要的事情上。应该用这个原则指导我们如何编写代码,如何重构代码,如何进行代码审查以及如何进行代码测试。

为了完成工作,只进行必要的代码重构,Martin Fowler称之为机会主义重构(或理解为清理,童子军规则)和有预备的重构。这足以使代码修改起来更加简单和安全。如果你不是在修改代码,代码看起来是什么样子,真的无关紧要。

在代码审查中只关注真正重要的部分,这些代码是否正确?是否是防御性的代码?是否安全?你能否理解它的思路?修改起来是否安全?

不要纠结于代码的风格(除非代码风格误导了你对代码的理解),把格式化代码的工作交给IDE。没有必要去争论这些代码能否“更加面向对象”。只要它有道理,至于是使用这用模式还是别的模式,并不重要。同样,至于你是否喜欢,也不重要,尽管你可以用更好的方式完成它,除非你是在教对平台或者语言不熟悉的新手,需要在代码审查中完成监督工作。

测试用例的编写很重要,需要覆盖到主要的执行路径和重要的异常情况。测试用例能够用最少的工作量给你尽可能多的信息和信心,具体是采用大而全的测试还是小而精的测试则无关紧要。至于是在写代码之前写测试用例还是在写代码之后写测试用例也不重要,只要测试用例有效即可。

不仅仅是关于代码

在软件领域里,建筑师和工程师的概念从来都不适用,我们不是设计建造屹立数年或者数百年大桥或者摩天大楼,我们构建的是更加具有可塑性的、更加抽象的,同时生命周期也更加短暂的东西。软件之所以称为“软件”,就是因为编写代码就是为了修改。

“经过五年的使用和修改,很多情况下,一个成功的软件源码和最初的样子已经面目全非了,但是一个成功的建筑经过五年,基本没有任何变化。”——《可持续软件开发》

我们应该将代码视为工作的一个临时假象:

有时在重要的事情面前,我们陷入了对代码的迷恋。我们经常遭受这样的误解,在产出的产品中代码是最有价值的东西,尽管它实际上是对一个问题的理解,或者是对设计的一种实现甚至是顾客的反馈。——Dan Grover《编码与创造性破坏》

迭代开发教会我们不断的尝试和检查尝试的结果——是否解决了问题,如果没有解决问题,如何去改进?我们正在构建的软件是永远做不完的。尽管设计和编码是正确的,那也可能只是一时正确,一旦需求发生变化,就会被更加适合的设计和编码替代。

我们需要写好的代码:易懂,能够正确运行,有安全保障的代码。我们需要对它进行重构和代码审查,并且编写有效的测试用例。但是要记住,其中的一些代码或者全部代码可能很快就被丢掉,或者再也不会被读到甚至从来就不会被用到。我们需要意识到,我们的一部分工作可能要被浪费掉并且对此进行优化。只做哪些需要被完成的事情,不要浪费时间试图去编写完美代码。
【腾讯云】云上实验室:开发者零门槛,免费使用真机在线实验!>>>

一个系统的迭代开发可能持续运行5年至10年甚至是20年。相比之下,某行代码甚至某个设计的生命周期则要短很多,只有几个月或者几天,甚至当你为了解决一个问题迭代测试不同方案时它们的生命周期只有几分钟。

一些代码的确比其他代码更重要

通过研究代码随时间发生的变化,Michael Feathers发现了代码生命线。通常,每个系统都有许多一次写成不再修改的代码。但是,有一小部分代码,包括最重要最有用的代码,却被经常被修改,重构或者重写数次。

随着对一个系统或者一类问题或者一个架构方案的深入了解,你应该能够更加轻易的知道或者预测到哪些代码会不停的变化哪些代码不会,换句话说,就是哪些代码比较重要哪些代码不重要。

是否应该努力去写完美代码?

大家都知道,我们应该写干净的代码,保持代码的一致性、易读性,并且尽可能地简单。

但是一些人走了极端,尽自己的最大努力,去写尽可能优雅的、接近完美的代码,痴迷于重构斟酌代码的每一个细节。

但是,如果这些代码不是一次写成不再修改,反而是一直不断的变化,那么,努力去写完美代码或者努力进行完美的设计岂不是浪费时间?

“你不可能写出完美的代码。你难道为此倍受打击么?显然不该。应该将它作为一个生活中的公理,去拥抱它,庆祝它,因为完美的代码是不存在的。在计算机短暂的历史中,没有任何人曾经写出过哪怕一段完美无缺的代码。显然,你也不太可能成为第一个写出完美代码的人。除非你接受这个事实,否则你会一直浪费时间和精力去追逐一个不能实现的梦想!”——Andrew Hunt《程序员修炼之道:从初级到高级》

只写一次的代码首要不是美观和优雅,而是正确运行,而且易读易懂,因为在系统的整个生命周期中,这些代码虽然不再修改,但是可能需要阅读很多次。不一定非要紧凑,干净即可。在这些代码中,一定程度上的拷贝和粘贴等操作是可以接受的。这些代码不需要反复斟酌,除非你需要修改它,否则即使周围代码都在变,也不需要对这些代码重构。对于这些代码,没必要花费过多额外的时间。

对于那些一直需要修改的代码呢?苦苦思索代码的风格和最优雅的方案是在浪费时间,因为,这些代码可能在随后的几天或者几周就会被修改甚至重写。同样地,每次修改都痴迷于代码的重构,或者重构那些不需要修改的代码试图使其变得更好也是没有必要的。代码永远都可以变得更好,但是这不应该是最重要的方面。

真正重要的是代码是否实现了想要的功能?代码是否正确运行?是否有用?是否高效?能否处理错误和损坏的数据而不会崩溃,至少也要安全的失效?调试是否方便?修改起来是否简单且安全?这些不是美观的组成部分,而是实际中衡量代码是否正确的标准。

务实地进行编码和重构

精益开发的核心思想是:不要把时间浪费到不重要的事情上。应该用这个原则指导我们如何编写代码,如何重构代码,如何进行代码审查以及如何进行代码测试。

为了完成工作,只进行必要的代码重构,Martin Fowler称之为机会主义重构(或理解为清理,童子军规则)和有预备的重构。这足以使代码修改起来更加简单和安全。如果你不是在修改代码,代码看起来是什么样子,真的无关紧要。

在代码审查中只关注真正重要的部分,这些代码是否正确?是否是防御性的代码?是否安全?你能否理解它的思路?修改起来是否安全?

不要纠结于代码的风格(除非代码风格误导了你对代码的理解),把格式化代码的工作交给IDE。没有必要去争论这些代码能否“更加面向对象”。只要它有道理,至于是使用这用模式还是别的模式,并不重要。同样,至于你是否喜欢,也不重要,尽管你可以用更好的方式完成它,除非你是在教对平台或者语言不熟悉的新手,需要在代码审查中完成监督工作。

测试用例的编写很重要,需要覆盖到主要的执行路径和重要的异常情况。测试用例能够用最少的工作量给你尽可能多的信息和信心,具体是采用大而全的测试还是小而精的测试则无关紧要。至于是在写代码之前写测试用例还是在写代码之后写测试用例也不重要,只要测试用例有效即可。

不仅仅是关于代码

在软件领域里,建筑师和工程师的概念从来都不适用,我们不是设计建造屹立数年或者数百年大桥或者摩天大楼,我们构建的是更加具有可塑性的、更加抽象的,同时生命周期也更加短暂的东西。软件之所以称为“软件”,就是因为编写代码就是为了修改。

“经过五年的使用和修改,很多情况下,一个成功的软件源码和最初的样子已经面目全非了,但是一个成功的建筑经过五年,基本没有任何变化。”——《可持续软件开发》

我们应该将代码视为工作的一个临时假象:

有时在重要的事情面前,我们陷入了对代码的迷恋。我们经常遭受这样的误解,在产出的产品中代码是最有价值的东西,尽管它实际上是对一个问题的理解,或者是对设计的一种实现甚至是顾客的反馈。——Dan Grover《编码与创造性破坏》

迭代开发教会我们不断的尝试和检查尝试的结果——是否解决了问题,如果没有解决问题,如何去改进?我们正在构建的软件是永远做不完的。尽管设计和编码是正确的,那也可能只是一时正确,一旦需求发生变化,就会被更加适合的设计和编码替代。

我们需要写好的代码:易懂,能够正确运行,有安全保障的代码。我们需要对它进行重构和代码审查,并且编写有效的测试用例。但是要记住,其中的一些代码或者全部代码可能很快就被丢掉,或者再也不会被读到甚至从来就不会被用到。我们需要意识到,我们的一部分工作可能要被浪费掉并且对此进行优化。只做哪些需要被完成的事情,不要浪费时间试图去编写完美代码。

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2025-01-23 23:03:18

不要将时间浪费到编写完美代码上的相关文章

不要浪费时间写完美代码

一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间. 代码重要性区分 随着对代码是如何改变的研究,致力于代码修改艺术的人发现了一个代码库的规律曲线.每个系统都有很多从未改变的代码.但是也有小部分非常重要且有用的代码一次又一次的改变,经过了多次重构和重写. 当你对一个系统,问题域,或者架构方法越来越熟悉的时候,就更容易发现和预测哪些代码会经常修改,哪些代码不会被修改,即区分重要代码

不要浪费时间去写所谓的完美代码

一般而言,一个系统能用 5 年.10 年,甚至 20 年以上.但是某特定代码行以及某特定设计则往往比较短:当我们使用了不同的解决方法,其生命周期可能就只有几个月.几天,甚至是几秒种的时间. 有的代码就是比其他代码更重要 通过研究代码如何随时间变化,Michael Feathers 确定了代码库的功率曲线.每个系统都有代码,通常而言里面的很多很多代码,一次写好之后就永远不会变了的.但是还是有少量的代码,包括最重要和最有用的代码,会被一遍又一遍地改动.重构甚至是重头开始重写. 随着你对系统.问题领域

编写PHP代码总结

  1- 编写模块化代码  良好的PHP代码应该是模块化代码.PHP的面向对象的编程功能是一些特别强大的工 具,可以把你的应用程序分解成函数或方法.你应该尽可能多的从你的应用程序的服务器端分开前端的HTML/CSS/JavaScript代码.你也可以在 任何PHP框架上遵循MVC(模型-视图-控制器)模式.  2- 代码编写规范 良好的PHP代码应该有一套完整的代码编写规范.通过对变量和函数的命名,统一的方法访问数据库和对错误的处理,以及同样的代码缩进方式等来达到编程规范,这样可以使你的代码更具

PHP实例说明编写PHP代码的5个好习惯

5个PHP编程的好习惯 有些人问,优秀程序员和大牛有什么区别,大概有10到20种吧.因为大牛有很好的编程习惯和丰富的经验,所以他们非常的高效.如果不好的编程习惯出现在你的代码里,你的代码效率就会降低.本文阐述一些好的编程习惯,他们可以让你成为更好的程序员. 这些习惯能让你的代码在高效运行的同时提高可维护性.你写代码的时候,可能大部分时间都浪费在维护上了,程序的维护代价很高.培养良好的编程习惯,如模块化设计,可以让你的代码可读性更好,从而容易维护. 代码中的问题往往伴随着不良的编程习惯,而且后者会

解析使用C++编写无错代码的方法技巧_C 语言

编写无错代码的最好方法是把防止错误放在第一位. 1.while语句后面的空语句问题? while语句是一个循环语句,有时候需要空语句有时不需要空语句.为了避免出现误用用语句我们规定在while使用空语句的时候才用下列方式:while(*pchTo++ = *pchFrom)    NULL;使用NULL的好处在于编译程序不会为NULL语句产生任务的代码,因为NULL只是个常量.2.使用lint来查出编译程序漏掉的错误3.如果有单元测试,就进行单元测试4.既要维护程序的交付版本,又要维护程序的调试

优质编写网页代码 有利于搜索引擎

网页代码的编写是否简洁和具有逻辑性也是评估搜索引擎优化工作的一个重要指标.       一.遵循WEB标准       建议广大网页设计师遵循国际互联网标准组织(W3C)所推荐的WEB标准来编写网页源码,而不是继续沿用传统的TABLE表格布局方式来制作网页.       Web标准是一些规范的集合,是由W3C和其他的标准化组织共同制定的,用它来创建和解释网页的基本内容.这些规范是专门为了那些在网上发布的可向后兼容的文档所设计的,使其能够被大多数人所访问.       遵循WEB标准来编写网页,可

从Dash iOS开源说起,不要过于追求完美代码

(Dash iOS源码截图) 前段时间知名的苹果平台文档工具Dash作者开源了它的iOS版本,这是Dash被突然从App Store下架,双方扯皮,直到现在的后续结果.对于这件事情我们不多做评价,不过开源是人们乐于见到的.Dash iOS版本开源后,获得了一些开发者的赞美,但没想到的是,它的代码引起了一些争议. 在以往开发者的印象里,开源意味着展示自己,意味着对代码有追求,Dash可以说粉碎了这个看法.但就像图拉鼎所说,代码写得如何,并不妨碍它在商业上的成功. 你对追求完美代码有什么看法呢? 我

多些时间能少写些代码

导读:作者陈皓在微博上说过这样一段话:"聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30%–50%的时间是在忙碌着编码,调试和测试.聪明的老板也会让团队这样做.而愚蠢的老板,愚蠢的程序员会拿出来100%-150%的时间来忙着赶进度,返工,重构,fix大量的bug-所以,越差的团队一般会越忙,而且还忙不完."文中作者就此观点进行阐述. 文章内容如下: 在现在这个浮躁的时期,再加上敏捷咨询师们念的歪经,他们让人感觉上就像是软件产品是可以在很短的时间内高质量的

【COCOS2D-X(2.X) 游戏开发系列之二】COCOS2DX最新2.X版本跨平台整合NDK+XCODE,XCODE编写&编译代码,ANDROID导入打包运行即可!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2dx-v2-0/962.html 前段时间有事情不在北京也很少上网所以一直没有更新博客,那么今天Himi向大家分享一下最新cocos2dx 2.0.1版本整合Xcode 编译运行Android的博文: 首先Himi使用的引擎版本是cocos2dx 2.0: 主要特点: 使用opengl es2.0支持CocosBuilder集成了