你的代码或许漂亮,但我的代码能运行

转载 2012年03月24日 21:56:05

设计软件有两种方法:一种是简单到明显没有缺陷,另一种复杂到缺陷不那么明显。 —— 托尼·霍尔(1980年图灵奖获得者)

在开发过程中,我的口头禅是: Your code may be elegant, by mine f**king works。(你的代码或许很漂亮,但我的代码能运行!)我为此而常常受到质疑,也有人反驳我“你不会使用最优方法!”“你在逃避测试!” 为了避免一次又一次地重复解释,我决定阐述下我的观点,仁者见仁,智者见智。

首先,我认为“项目可能会延期,但是代码会更好或更容易维护或更简洁”这句话是有问题的。项目延期,就是未完成,不应该用代码质量会更高作为借口。如果客户要在圣诞节进行推广活动,但你在 12 月 29 号才完成项目,即使提供了史上最好的产品,也是毫无价值的。

其次,我们来谈谈“最优方法”这个问题,“最优”是否意味着要写出更易于维护的代码需要更长的时间呢?其实除了大家都知道的《101个最优方 法》以外,“最优”的标准是各种各样的。无论你对其进行怎样的定义,“最优方法”对所有程序员来说,应该是一种自然的编程标准。举个最简单的例子,经验丰 富的程序员会自然地将变量命名为:$a、$b、 $c等,也能正确地缩进代码行。说得再深入一点,有经验的开发者知道在什么时候、如何提高效率以使得项目能如期完成。虽然 “最优方法”的标准有很多,但这些标准不会令你因此而延长项目时间。这引出我将谈到的下一点——Over-engineering(过度设计,指设计出来 的系统比恰到好处要复杂臃肿的多,过度的封装、一堆继承、接口和无用的方法,以及超复杂的 xml 配置文件)。

像任何经验丰富的程序员一样,我了解那种想为每个项目搭建最好、最灵活、最耐用的系统的心态。但我也了解每个项目都有的商业限制:时间和资金。 大多数项目都有明确的截止日期和项目预算,开发者要有意识地去控制项目规模以按时达到目标。你没有任何理由花一周时间,来为一个 20 行的 table 表上的数据库查询设置“恰当的”缓存层。多了解实用案例,如果只是为了实现一个页面访客计数器的功能而构建支持多种同时响应请求的 XHR 框架,是不现实的。要有眼界,这是我最强调的一点,最好的程序员不是精通如何构建最棒的系统的人,而是了解系统不需要的是哪些功能的人。

另外,在软件开发领域,上市时间是商业驱动力,在 web 应用开发领域,由于其动态性,这点更为明显。当时间成为关键,“最优方法”就是最简单的解决方案。

最后,我们来讨论一下技术债务(指为了匆忙实现一个功能,破坏了现有的程序库,在实现的过程中污染了代码库的设计)。如果在开发过程中,你在某 个地方偷工减料了,那么就会产生无法解决的长期存在的技术债务,而且在之后的开发中,任何一个决定,都会受该债务的影响。事实上,在接手商业项目时,明白 何时、如何对代码进行简化的能力是很关键的,这也是区分老手和菜鸟的标准。解决技术债务的办法有很多,但应尽量做到不产生技术债务。同样地,过度设计也不 可避免地会产生技术债务。

通常人们在谈到技术债务的危险时,并没有包含商业影响。但其实技术债务与实际投资回报率是相对的,因为在许多情况下,早日上市更具成本效益。也 有种情况是技术债务与收益同时存在,那么你可以慢慢偿还债务,但这会延长你的项目时间,很可能当你解决完技术债务时,你也失去了市场机会。

作为软件开发人员,我们常常认为自己的工作就是开发软件,但其实这只是一种手段,我们的目的是令开发商达到他们的商业目标,你的代码也许很优雅很简洁,但如果不能达到目的,就丝毫没有意义。

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.

漂亮的代码,糟糕的行为——解决Java运行时的内存问题

我们的一个程序,假设名字为“Photo Pull”,主要解决以下问题: 从各种第三方来源上获取联系人照片将照片重新调整至所需的缩略图大小将结果发送到S3 看起来似乎这个程序能够理所当然的稳定运...

如何在Word中排出漂亮的代码

转载地址:http://blog.csdn.net/mangosnow/article/details/34830323 学数学和计算机,当然还是用LaTeX排版技术文章更方便。但有时候还是...

一行代码搞定漂亮的Android6.0权限申请界面

概述 随着Android6.0的普及,权限申请也变成了我们开发中必写的一段代码。比如sd卡权限、定位权限、拍照权限,这些几乎都是每个app必备的。而一般情况下我们都会在需要权限之前申请,然后各种...

Python新手写出漂亮的爬虫代码2——从json获取信息

Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬虫的东西了,如果正在读这篇博客的你看过我的另一篇《Python新手写出漂亮的爬虫代码1——从html获取信息》想必已经对一些写...

从HTML原型到jsp页面完美转型攻略(教你即使不会写代码也能弄出漂亮的网页)

大家都知道软件项目(web)开发之前都要先做原型设计,而我们使用的比较多的一款原型设计软件就是Axure rp了。在Axure rp上画原型不需要任何编码能力,而且生成的原型可以在浏览器上运行。除了没...

如何写出漂亮的代码 (转载)

要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码。   即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码...
  • yaomoon
  • yaomoon
  • 2014年04月16日 18:24
  • 1260

如何让CSDN博客里面的代码看起来更美观漂亮

不要切换到MarkDown编辑器,直接选择 void CClearDtc::ClearCode(const CString &strEcu) { adsMessageBox(STD_TEXT_INF...

如何写出漂亮的js代码

javascript代码和其他脚本语言一样,都要合理的组织好,不然到最后js代码也是比较乱的。  我把JS的组织分成了三个阶段,看看您现在属于哪个阶段。  初级阶段,JS代码从头顺序写到尾,过程化...

很漂亮的按钮css样式(没有用到图片,可直接拷贝代码使用)

对于程序员,有时候也需要对页面风格做些改动,整体的页面风格还是美工的工作。 按钮其实是程序员很常用的,如果美工没有设计好,那就自己设计吧。 在网上发现有乐于奉献的人共享了代码。效果很好,而且没有使...

android 一个很漂亮的控件ObservableScrollView(含片段代码和源码)

转自:http://www.eoeandroid.com/thread-577241-1-1.html 最近看到最美等应用里面有一个特效,自己上网查了下,写了个demo如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:你的代码或许漂亮,但我的代码能运行
举报原因:
原因补充:

(最多只允许输入30个字)