[译]程序员要懂得“大道至简”

标签: | 发表时间:2014-01-27 21:11 | 作者:happydeer
出处:http://blog.csdn.net/happydeer

原文作者:Jeff Atwood

作者在Twitter上发的一条短讯:

“你永远都有简化的空间。”

11:29 AM – 2012-5-21

Rich Skrenta在“Code is our enemy”(代码是我们的敌人)一文中是这么说的:

代码不是什么好东西。代码会随着时间的推移慢慢腐烂。代码需要周期性的维护。代码里还藏有bug。新增功能意味着旧的代码需要被修改。你的代码越多,bug能藏身的地方就越多,迁出(check out)或者编译的时间也就越长,新员工理解你的系统所需要的时间也就越长。如果你不得不进行代码重构,那么你需要调整的地方还有更多。

代码是工程师制造出来的。如果要写更多的代码,那就需要更多的工程师。众多工程师之间有n 2的沟通成本。他们在扩展功能时加进系统的所有代码,也将增加整个系统的成本。你应该尽一切可能去提高每个程序员在代码表现力方面的能力,以使用更少的代码来完成同样的事情(甚至可能做得更好)。你雇用的程序员越少,组织沟通成本也就越低。

Rich在这里给出了一些线索,但是真正的问题不在代码。代码就像一个新生婴儿,在被带到这个世界来的时候,它是无辜而无可非议的。代码不是我们的敌人。你想看看真正的敌人吗?去照一照镜子吧。那里就是“你”的问题。就在那里!


作为一个软件开发者,你就是你自己最大的敌人。你越早认识到这点,你的境况就会越好。

我知道你抱有极大的善意。大家都一样。我们是软件开发者;我们热爱编码。那就是我们每天的工作。给我们一些强力胶带、一个简易衣架,再加上一小撮代码,我们总能解决任何问题。但是,Will Shipley却认为,我们应该控制住这种写上一大堆代码的自然倾向:

作为程序员,我们的任务是要意识到,我们所做的每个决定都是一个折中——这就是编码的本质。要想成为程序设计大师,那就要理解这些折中的本质,并且在我们编写的任何代码中都善加处置。

在编码过程中,你可以从很多维度去评价你的代码:

  • 代码简洁度
  • 功能的完整性
  • 执行速度
  • 编码所花费的时间
  • 健壮性
  • 灵活性

记住,这些维度相互之间都是对立的。你可以花上3天时间写一个非常美观而迅捷的程序,这样你在两个维度上获得了提高,但是因为你花了3天的时间,所以在“编码所花费的时间”这个维度上就落后了很多。

那么,在什么时候这样做才是值得的呢?我们该如何做这些决定呢?其实,答案非常合乎情理,也很简单,但就是从来没有人好好遵从:从简洁开始,然后依据测试的结果按需提升其他的维度。

对此我非常赞同!我曾在“ Code Smaller”一文中劝诫开发者们编写更小的代码。我给出的建议其实异曲同工。但不要走极端!我并不想挑起一场“reductio ad absurdum”竞赛:我们用尽书上所有的聪明技巧,让代码能够塞进更小的物理空间。 我想要的是一个实用而明智的策略,以缩减一个程序员在想要了解程序的工作原理时所须阅读的代码量。我这里有个很小的例子,以进一步说明我想表达的意思:

译者注:reductioad absurdum意指反证法,是拉丁语中的“转化为不可能”。反证法(又称归谬法、背理法)是一种论证方式,它首先假设某命题不成立(即在原命题的条件下,结论不成立),然后推理出明显矛盾的结果,从而下结论说原假设不成立,原命题得证。

if(s==String.Empty)   

if(s==””)

对我而言,后面的那个显然更好一些,因为它更为简洁。然而,我几乎可以断定,一定会有开发人员跳出来与我争辩,可能还要“血战到底”,因为他们深信这个啰嗦的String.Empty对编译器来说更为友好(真是莫名其妙!)。说得我好像在乎这个一样。好像真有人在乎这个一样!

对于绝大多数软件开发者而言,承认这个事实是很痛苦的,因为他们是那么地热爱代码。但是,最好的代码就是完全没有代码(所谓“大道至简”)。每一行你欣然带到这个世界来的新代码都需要被调试,需要被其他开发者阅读和理解,并且被维护和支持。每当你需要新写代码的时候,你都应该很不情愿、但又迫不得已,因为你已经证明其他所有的方法都无济于事。之所以有人说“代码是我们的敌人”,正是因为我们当中的很多程序员写了太多太多的糟糕代码。然而,如果你不得不写代码,你也须 从简洁开始

如果你热爱编码——而且爱得情真意切——那你就应该惜墨如金。

作者:happydeer 发表于2014-1-27 13:11:21 原文链接
阅读:243 评论:1 查看评论

相关 [程序员 懂得 大道] 推荐:

[译]程序员要懂得“大道至简”

- - 呦呦鹿鸣
原文作者:Jeff Atwood. 作者在Twitter上发的一条短讯:. Rich Skrenta在“Code is our enemy”(代码是我们的敌人)一文中是这么说的:. 新增功能意味着旧的代码需要被修改. 你的代码越多,bug能藏身的地方就越多,迁出(check out)或者编译的时间也就越长,新员工理解你的系统所需要的时间也就越长.

程序员,你真的懂得收发电子邮件吗?

- - 博客园_首页
在几年以前,相信不少朋友都听说过,马云同志创办阿里巴巴的时候,还不会发邮件. 也不知道在阿里巴巴上市之后,他学会收发邮件了没有. 我是曾经从内心里“瞧不起”过,至少认为在这一点上我比他强很多. 后来我才发现,我未必懂得收发邮件. 除了我,还有很多的码农也根本不懂得收发邮件,更不懂得Email里面的工作原理.

普通程序员、文艺程序员、2B程序员

- 可可 - 宇宙的心弦
希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

程序员的本质

- Allen - 译言-电脑/网络/数码科技
来源What do programmers really do?.   很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员. 另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题. 甚至不少程序员对他们是做什么的都没有清晰的概念.   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:.

程序员人生之路

- myartings - 博客园-首页原创精华区
   程序员人生之路(强烈推荐,分析的透彻. ),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的.    相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心. 在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人.

程序员装B指南

- Qing-Run - 博客园-首页原创精华区
1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好. 一个用来查资料,一个用来写代码. 总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善. 沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子.

程序员收入报告

- diaoxsh - cnBeta.COM
最近,波兰的程序员Chris(也叫KreCi)公布了他的第十四期程序员收入报告. 数据显示,上月是目前为止他收入最多的一个月. Chris的收入并不是指他的工资或薪水,Chris是一个自由职业者. 他的收入也不是来自个人承包软件工程的收入,他更像是一个果农,种了优良的果树,只要不断的给这些果树施肥浇水,这些果树会给他带来源源不断的财富.

程序员的利器-SourceInsight

- Alex - 博客园-首页原创精华区
作为程序员,大部分时间是在已有的代码上代码工作. 要对已有的代码进行调整,首先就要搞清楚当前代码中蕴含的逻辑关系. 所以常常有程序员调侃说花了大半天时间看代码,最后写代码的时间只有几分钟. 所以,对已有代码的分析质量将影响(甚至会决定)最终代码修改的质量. SourceInsight在代码分析上给予程序员极大的帮助.