分裂的代价

标签: Mac OS X 软件开发 软件开发 | 发表时间:2011-01-01 23:01 | 作者:Singularity Guancheng(冠诚)
出处:http://techsingular.net

舍弃旧代码是程序员经常面对的一种诱惑。不必说维护旧系统的人经常要面对,就是开发新功能新产品的人也时常如此 —— 因为你经常被建议要借鉴一个老产品的 code base ,而你本能地想拒绝而重新打造一个干净的系统。幸运的是,很早以前我已经开始相信舍弃这些东西是不对的,不应该重写任何不必重写的东西。当几次看到那些险些被舍弃的旧东西节省了大量工作之后,我更是坚信对那种看起来又老又旧的东西,应该留出一个星期的时间来仔细研究它是否有用。这一个星期可能会节省一个月的工作。

这个原则后来读到的很多文章里得到印证。但是我记得开始编程的时候完全不是这么想的。最近一个星期我仔细回顾了一下这个转变过程。

2005 年开始看 Linux kernel 的代码。我当时有一种稍稍自卑的感觉,感慨 Linux kernel 的代码为什么能把一切情况都考虑周全。比如一个 40 行左右的函数,让我来写最多只能写出十几行,而差的那 30 行处理的是很重要又不容易考虑到的情况。

当时看代码是用《 Understand the Linux Kernel, 3rd Edition 》做主线。书上讲的是 2.6.x 版本( x 是一个远小于 11 的数字)。而我参照的源代码是从网上下载的最新稳定版。从 2.6.1x 一直到 2.6.2x 更新了很多次。其间越来越多的看到书上的代码和最新代码的差异。跟随这些差异我开始阅读不同版本的 release notes ,以及针对特定修改的 mail list 讨论和 patch 注释。最后我意识到,书上的版本和最新版本之间的差异,往往就类似于上面提到的我能写出的十几行和实际的 40 多行的差异。为什么能把一切情况都考虑到?答案就是持之不懈地 Fix Bug 。

回想起来,尽管不够清晰,但这应该就是『绝不重写无必要重写的代码』这个想法产生的过程。没有人能把事情一次做对。旧的代码有很多错误,但是抛弃它们只是让已经犯过的错误有机会被重犯一次,加上新的错误。

另一方面,那些最后形成的代码,如果不比对《 Understanding the Linux Kernel, 3rd Edition 》上的旧版代码,似乎像是一次写就的。这是我最初的自卑的来源,也是很多初学者对编写代码的错觉。人们其实并不像最后结果体现的那样能一次就把事情做对,但是我们对错误的修正也没有必要直接体现错误本身。在循序渐进的过程中要把结果造就成一次就做对的面貌。如果你真的想回忆每个与之战斗过的错误,version control 才是怀念历史的地方。

已经有三年多没有碰过 Linux kernel 代码了。回顾起来,阅读它的代码让很多正确的想法第一次被植入到我头脑中。对于程序员来说,更多正确的有用的东西还是来自代码。

相关 [分裂] 推荐:

分裂的代价

- Guancheng(冠诚) - 技术奇异点
舍弃旧代码是程序员经常面对的一种诱惑. 不必说维护旧系统的人经常要面对,就是开发新功能新产品的人也时常如此 —— 因为你经常被建议要借鉴一个老产品的 code base ,而你本能地想拒绝而重新打造一个干净的系统. 幸运的是,很早以前我已经开始相信舍弃这些东西是不对的,不应该重写任何不必重写的东西.

“分裂”的 Android 再引争议

- - 爱范儿 · Beats of Bits
就在一周前,iOS 平台上的热门免费游戏 Temple Run 终于推出了 Android 版本. 三天之后,该游戏在 Google Play 上的下载量就突破了 100 万(在 iOS 平台上的成绩为七个月 4500 万下载量),评分达到了 4.3 分. 不过,被下载是一回事,可不可以在海量的 Android 机型中正常运行又是另一回事.

SOA与API的分裂和统一

- - 博客园_知识库
  英文原文: SOA and API Schism and Unification.   虽然API和SOA有着相似的商业和技术目标,许多API的支持者却坚持表示API与SOA几乎没什么关联,认为它们属于截然不同的方法. 他们经常宣扬务实的REST API和SOA之间有着巨大的差异. 分工限制了SOA服务和RESTful API无法干净利索地集成到一个统一的架构中.

精神分裂症之最初的征兆

- shangxue - 译言-每日精品译文推荐
以下是一个预示精神分裂症产生苗头的种种迹象的列表. 这些线索来源于那些有精神病成员的家庭. 行为举止是在正常的反应控制范围之内. 然而,这些看似轻微 甚至模糊的迹象,在家人的严重这种迹象. 其实显而易见,他们意识到这些行为有些“反常”. 大家都发现了他们不合群,大多数人认为他“一直是个好人,从来不会惹是生非”.

为“分裂的”Android平台开发应用的一些建议

- - ITeye资讯频道
相比iOS有规律的软件版本和硬件升级, Android的碎片化加大了应用的开发和测试成本. 下面这张图就说明了Android的分化情况(截至10月1号):. 不过, 现在各种基于云端的应用测试技术也为开发者提供了新出路,这类技术可以让他们快速查看应用在各类硬件设备上的运行情况. 比如百度的Android4.1云测试服务,可为开发者提供几十种主流的移动终端设备及模拟器,而在刚刚过去的 PIE Demo Day上,国外一家提供类似的云测试服务的公司AppThwack则强调了问题的解决在于测试的自动化.

一个多重人格分裂症患者变身12个天才画家

- Patrick - 有意思吧
48岁的英国单身母亲Kim Noble 由于小时候受到过虐待,从小就患上了一种极罕见的“多重人格分裂症”,她身上最多时候曾经拥有20个不同的“人格”,后来渐渐减少并稳定在了12个左右. 2005年,Noble 听取一位艺术治疗师建议,开始学习绘画,因为绘画是一种让自己放松的方式. 做梦也没有想到,Noble 体内的12个“人格”竟然个个都是天才画家,而且每个“人格”的绘画风格都毫不相同,有的画风忧郁,有的画风明朗,有的擅长抽象画,甚至还有一个喜欢雕刻.

他们都是N重人格——我看过的人格分裂片子

- holic536 - 『初体验』Club招待所 – Mtime时光网
     有这么一些片子,他们中的主角往往细数着他们口中的故事,他们往往探寻着某些事件的真相,但当真正的真相浮出水面时,我们看到这一切的源头正是那些苦于追寻的人. 他们有的是双重人格,有的更是精分到N重,惊悚、恐怖、悬疑往往是这些片的典型类型.      列举一些山村贞子看过的人格分裂片,有欧美,有亚洲,有大众,有小众…….

开发者谈对Android平台分裂性看法及应对策略

- - 酷勤网-挖经验 [expanded by feedex.net]
如果询问手机游戏开发者认为Android平台存在麻烦的原因或者为何他们选择完全放弃这个平台,很可能有些人会立即将矛头指向该平台的分裂问题. Android开发者必须针对各种不同的设备来创建游戏,考虑不同的操作系统版本、屏幕大小、处理器速度和众多其他因素. Staircase 3近期分析了访问其《OpenSignalMaps》应用的Android设备数据,最终发现市场上存在近4000种不同的设备.

HTML5标准制定两大组织分裂:将出现两版本HTML5

- - TechWeb 今日焦点 RSS阅读
  国外媒体HTML5标准制定组织WHATWG与W3C因为理念上的差异而分裂. 这意味着以后将会有两个版本的HTML5:即”标准版”和”living”版(活标准).   随着新技术的加入,WHATWG宣布为HTML制作新的“living”标准. WHATWG认为W3C做法过于缓慢,W3C的这种缓慢的制定方式将会耗费更多的时间.

分裂与统一——移动操作系统与移动浏览器背道而驰

- zjzxzhang - 爱范儿 · Beats of Bits
by Jason Grigsby from O’Reilly Radar | Logout 译,转载请注明 ifanr.com 译文链接. Web 2.0 大会的一次小组讨论中,有人问有没有迹象表明移动操作系统市场的分裂现状会缓解. 一位讨论组成员给了个直截了当的回答:“不,分裂会更严重”. 移动操作系统和移动网络浏览器的行进轨迹差异之大令人吃惊.