一般而言,一个系统能用5年、10年,甚至20年以上。但是某特定代码行以及某特定设计则往往比较短:当我们使用了不同的解决方法,其生命周期可能就只有几个月、几天,甚至是几秒种的时间。

有的代码就是比其他代码更重要

通过研究代码如何随时间变化,Michael Feathers确定了代码库的功率曲线。每个系统都有代码,通常而言里面的很多很多代码,一次写好之后就永远不会变了的。但是还是有少量的代码,包括最重要和最有用的代码,会被一遍又一遍地改动、重构甚至是重头开始重写。

随着你对系统、问题领域以及架构方法方面经验的增长,就更加容易知道和预测什么代码总是需要改动的,什么代码是永远不会变的:有的代码就是比其他代码更重要。

我们是否应该写完美代码?

我们知道,我们应该写干净的代码,一致的、易于理解的且越简单越好的代码。

有些人因此而走向了一个极端,强迫自己尽可能地编写美丽优雅趋于完美的代码,着魔于重构,可着劲儿折腾每一个细节。

有的代码只需要写一次,以后就再也不需要作任何变动。但有些代码则并非如此,试想,这些需要不断改变的代码,代码写得那么完美却在下一秒就立马被delete不就太过浪费了吗?而且也没有必要这么做。

“你不用去写所谓完美的软件。不是禁止你,只是真的没有这个必要。好好想想,接受这个话。你需要明白完美的软件其实是不存在的。计算机发展到今天还没有人写的软件是完美的。你也不要自以为是地想去做第一个。除非你能接受这个事实,否则你最终只会是在浪费时间和精力,如果你想追求这个不可能实现的梦想。”
——Andrew Hunt,《The Pragmatic Programmer: from Journeyman to Master》的作者

一次就能解决的代码也不需要美丽和优雅,只要保证是正确的、容易理解的即可——因为这些不变的代码可能以后还要被多次读取。也不必非要是干净和紧密的——只需要干净即可。复制和粘贴等快捷方式在这类代码上是被允许的,至少在一定程度上可以这么做。这些代码不需要再重构(除非你需要改变这些代码),即使它周围的其他的代码一直在变化中。总之一句话,这些代码不值得我们在它身上花费额外的时间。

至于那些一直在变化的代码?苦苦思索最优雅的解决方案纯粹是在浪费时间,因为这段代码很可能在几天或者几周后就会被改写,甚至重写。

所以我们要关注的重点是:这些代码是否如愿运行——是否正确、实用和高效?是否能处理异常数据而不崩溃?——或者至少是否能做到即使失败也不会出问题?是否容易调试?是否能简单安全地改变?这些实实在在的措施才是成功与失败之间的分水岭。

编码与重构要务实

精益开发的核心思想是:不要浪费时间去做那些不重要的事情,包括写代码、重构、代码审查以及代码测试等多个方面。

只需要重构真正需要的部分就足够了——这也被Martin Flower称之为是机会主义的重构和有准备的重构。

关于代码审查也只需要专注于重要部分。这些代码是否正确?是否安全?是否可以运行?

不要在意风格(除非风格本身妨碍了我们的理解)。让IDE做主,格式化的照顾就ok了。我们不必去讨论代码还能不能更OO,也不必一定要遵循某种样式,喜欢与否也没有关系,是否能用更好的方式解决也不重要——除非是你在教新手,并且需要做一些指导作为代码审查的一部分。

测试也要挑关键的来。测试要覆盖主要途径和重要的异常情况。无论是大型测试还是小而集中的测试,无论是写在代码之前还是之后,只要能起到作用就成。

这不仅仅是代码问题

软件开发总是在不断地更新迭代。哪怕现在看它的设计和代码是正确的,但是一段时间之后,它就会被要求改变或者直接被其他更好的所替代。

我们需要编写优良的代码:易于理解、正确以及安全。我们在重构和审查代码、编写有用的测试的同时也需要谨记:有些代码或者甚至是所有的这些代码,在不久的将来是要被抛弃的,或者永远也不会再被读取,或者再也不会被使用了。我们必须意识到,我们现在的一些工作将会成为无用功。做需要做的事情,仅此就够了。不要浪费时间去写所谓的完美代码。

不要浪费时间去写所谓的完美代码相关推荐

  1. 程序员该如何去写自己的简历-代码而成的简历

    首先,声明这是写给程序员看的,而不是码农.其次,如果你不幸是码农那么请成为程序员.最后,码农和程序员是有区别的,程序员应该是有思想的手工艺人,在这个机械高度生产化的世界里,人口众多的手工行业就是程序员 ...

  2. 这些情况,去面试就是浪费时间!

    对正在找工作的人来说,虽然时刻都希望能接到面试邀约,但是,有求职经验的人都知道,有一些面试其实没有必要去参加,即便参加了也是浪费时间. 前程无忧论坛(bbs.51job.com)对这类情况展开调查,按 ...

  3. 写过25W行代码,3个操作系统:我如何做架构设计,来降低代码复杂度?

    来源| 美团技术团队 作者| 政华,顺谱,陶鑫 导读:本文是作者阅读John Ousterhout的<A Philosophy of Software Design>之后,结合自己的工作经 ...

  4. 程序员如何写出优雅的代码?

    作者 | 老峰 责编 | 郭芮 一直以来,关于"代码规范"的话题都备受关注,业界甚至有很多流传甚广的段子不断调侃之.既然代码规范能引起这么大的共鸣,那么今天我们谈谈一个程序员的自我 ...

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

     不要将时间浪费到编写完美代码上 不要将时间浪费到编写完美代码上,原因就在于一个系统的迭代开发可能持续运行5年至10年甚至是20年,而某行代码甚至某个设计的生命周期则要短很多,只有几个月或者几天. ...

  6. 侯宁:不该捞的别去捞 踏空不是浪费时间

    最近,偶然间在网上看到了一则寓言故事:<骆驼与北斗星>.文章不长,但内容丰富,讲得很有趣,很有哲理,也很有启发.尤其是在股市博弈中,许多人.许多机构都会在现实中扮演故事里的不同角色.因为在 ...

  7. 不要用充实的借口去浪费时间

    本文并非原创,发现很不错,就和大家一块分享: 原文地址:http://www.nowamagic.net/librarys/eight/posts/2471 有没有发现身边的人在变得越来越忙? 坐在车 ...

  8. 漫画 | 自动化的测试没啥用,别浪费时间写了!

    张大胖的工作告一段落,准备摸鱼休息一下,没想到刚好被路过的经理发现 经理非常生气 张大胖很无奈,只好去补自动化的测试用例 测试用例花费了张大胖很长时间. 张大胖觉得很不爽,决定去龙穴寺请教编程大师. ...

  9. 职场与生活 八条原则 让你不再浪费时间和提高效率

    Heidi Roizen女士一度是硅谷人人争相学习的典范.她曾创办自己的公司并管理了14年之久.后来,她担任苹果公司主管开发者关系的高级副总裁.现在,她是DFJ Venture的一位风投家,她还在斯坦 ...

  10. 一份诚恳的互联网找工作总结和感想(附:怎样花两年时间去面试一个人)

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11683589. 声明:版权所有,转载请注明出处,谢谢 ...

最新文章

  1. 洛谷 P1309 瑞士轮
  2. Nand分区及nand erase简解
  3. php extract 变量覆盖,extract变量覆盖
  4. Python丨为什么你学不好设计模式?
  5. 数据结构7.3_图的遍历
  6. unity许可证不可用_不可思议之梦蝶从PC版移植到Nintendo Switch经验分享(上)
  7. Spring+Hessian搭建远程方法调用
  8. Linux中的df命令
  9. axure实现复选框全选_表格设置一键全选按钮,这样的打√方式,只需要三步搞定...
  10. linux网络子系统分析
  11. linux下文件系统swap交换分区及dd命令详解(3)
  12. python代码混淆加密
  13. laravel 框架命令
  14. 台式计算机组装注意事项,如何组装台式机 组装台式机配置注意事项【详解】...
  15. 学计算机方面该怎样保养眼睛,电脑一族如何保护眼睛
  16. Rstudio shiny rmarkdown tidyverse 相关网页
  17. golang http服务的graceful问题
  18. 裁判文书App(2020最新版) 逆向过程分析
  19. 交换机短路_交换机端口短路 导致上网不正常
  20. 1分钟了解什么是枚举/以及枚举的使用

热门文章

  1. MFC网络通信程序设计——网络聊天室
  2. C语言队列单链表实现(通俗易懂),可直接使用
  3. 如何在远程会议的时候静音吃薯片?微软团队用AI去除视频噪声
  4. 帆软报表Tomcat 发布部署
  5. linux系统视屏录像_在Linux上的点击,弹出和故障排除录像
  6. 中国建筑抗震设计规范反应谱v2.0(2012a)运行环境
  7. 使用jrtplib库收发视频流
  8. linux下编译jrtplib和jthread,Linux下编译jrtplib和jthread(转)
  9. 顶级黑客整理的588本编程电子书,整整46个G,你想学的都有
  10. VC法则:互联网行业仅前三名可成功