[译]程序员要学会读源代码

标签: | 发表时间:2014-01-26 03:44 | 作者:happydeer
出处:http://blog.csdn.net/happydeer

在“沟通”这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行让解释器或编译器不致于“呕吐”的软件代码要难得多。

这就是为什么——就软件开发而言——所有的文档大概都是很差劲的。而且,由于为人写作比为机器写作要困难得多,文档恐怕在可预见的将来还会继续差劲下去。对此,你基本上是无能为力的。

除了做一件事……


“卢克,学着去读源代码。”

译者注:卢克(Luke Skywalker)是电影《星球大战》中的一个角色,他来自塔图因星球,在发现了莉雅公主输入到机器人R2-D2中的求救信息后,他与绝地骑士欧比旺一起迎战邪恶的银河帝国,最终救出了公主。《星球大战》系列电影是由卢卡斯电影公司出品的科幻电影。卢卡斯电影公司首先于1977年推出了《星球大战》,之后又分别于1980年和1983年推出了《星球大战2》和《星球大战3》。之后又分别于1999年、2002年和2005年推出了3部《星球大战前传》系列。

JavaScript“始终带有源代码”是一股革命性的力量,这也是我提出“阿特伍德法则”的一个主要原因(我对这个法则至今仍然坚信不疑)。即使“查看源代码”(View Source)这个功能没有内嵌(但它完全应该有),你也应该要求查阅在你的软件之下的基础源代码的权限。 不管文档上面怎么说,源代码才是最终的事实,是你所能找到的最好的、最确定的、最新的“文档”。这个事实永远不会改变,所以你越早接受这个事实,你作为一名软件开发者的境况就会越好。

译者注:“阿特伍德定律”(Atwood’s Law)是作者自己提出的一个观点,内容是:任何可以用JavaScript来写的应用,最终都将用JavaScript来写。

我本来想针对这个问题好好地写一写,但是后来在Hacker News网站上发现Brandon Bloom已经写了一个很棒的帖子。我自愧不如。大家去认真读一下吧,因为他解释了阅读源代码的好处,以及在何种情况下你需要阅读源代码。

我大约在15岁的时候就开始在微软的平台上工作了,并且以此为业。我曾经作为一名软件开发员为微软在Visual Studio上面做集成工作。从我写下第一行Visual Basic代码后的十多年以来,我希望我可以再也不用和一个封闭的库去链接了。

使用软件和 开发软件是不一样的。当你使用大多数软件的基本功能时,一般不会出现什么问题,因为这条“老”路已经被人走过了很多遍。也许其他一些人碰到了问题,并且有足够多的人把这些问题反映出来,这样会促使核心开发人员修正这些问题。而当你在开发软件的时候,你是在做一些“新”东西。而且,把东西做出来可以有很多条“路”,你会碰到之前从来没有接触过的部分、到达早已腐蚀的角落、走到那些尚未完成的试验性质的代码路径。你会遇到一些边缘情况,它们的问题是已知的,但从来没有被真正地解决过(之前只是被绕开了)。

有些时候,文档是不完整的。有些时候,它干脆就是错误的。源代码是从来不会撒谎的。对于一名有经验的程序员来说,阅读源代码通常会更快些(尤其在你已经熟悉了软件包架构的情况下)……我现在和几个创业公司在一个中等规模的共享办公区域里一起工作。很多其他公司的首席技术官和工程师都时常跑到我们团队来寻求指导和建议。当他们带着有问题的软件过来的时候,我问他们的第一个问题就是:“嘿,你看过源代码了吗?”

我鼓励开发人员“git clone”他们依赖的所有源代码。起初,他们都有些害怕。“那个项目太大了。我永远也无法把问题找出来!”“我没那么聪明,看不懂那些代码。”“那些代码太难看了!简直惨不忍睹!”但是,你不必把那些代码翻个底朝天,而只需要跟着线索走。况且,如果你不能理解你所依赖的平台,你又怎么能驾驭你自己的软件呢?在大多数情况下,菜鸟程序员认为漂亮的,往往止于肤浅;而他们认为丑陋的,往往是骇客大师们所写的久经考验的产品级代码。现在,在经过了一两年之后,有几个开发人员专程过来找我,感谢我当初强迫他们在别人的代码里“潜水”或者“畅游”。他们现在的技能都比以前大有长进,而且他们还感叹:真不知道过去在没有别人源代码的时候是怎么把事情做好的……

译者注:git是一个在开源社区里广泛应用的源代码管理工具。git clone是一条命令,能把远程的源代码复制到本机。

当你运营一个公司的时候,如果你的软件出了故障,你的客户不会在乎是你的失误还是Linus的,或者是由Rails的开发人员造成的。他们只知道是你的软件出了问题。所有其他人的软件都成了你的软件,因为他们的错误都算到了你的头上。一旦有故障发生,你需要找出问题,并且把它修好。你需要在“应用链”的合适位置把它修复,以减少风险、维护成本以及周转时间。有时候,一个快速的权变措施是最好的;而在其他时候,你得重新编译你的代码。很多时候,你可以让其他人在上游把问题修复了;但是也有很多时候,你得自己动手解决。

译者注:Linus Torvalds(李纳斯·托瓦兹),是Linux核心的创作者,人称“Linux之父”。美国《时代》周刊对他的评价极高:“有些人生来就具有统率百万人的领袖风范;另一些人则是为写出颠覆世界的软件而生。唯一一个能同时做到这两者的人,就是托瓦兹。”甚至,在《时代》周刊根据读者投票评选出的20世纪100位最重要的人物中,李纳斯居然排到了第15位,而比尔·盖茨不过才是第17位。

译者注:Rails即指Ruby on rails,是一个构建在Ruby语言之上的Web应用程序框架。

  • 处理封闭软件的问题有两个选择:乞求他们的慷慨救援,或者采用变通方案。
  • 对于开源软件,如果他们的开发者不给力,建议像处理封闭软件的问题那样处理。
  • 老到一些的软件商家倾向于慢慢培养他们维护分支、补丁以及处理其他琐碎事务的能力。

真正的骇客世界里只有一个简单的事实:如果一个软件在我的机器上运行,那它就是我的软件。我对它负责。我必须把它弄明白。从源代码开始构建是一条必须遵循的原则,而且从不例外。我必须控制我的环境,我还要控制所有我依赖的东西。

没有人是为了好玩才去读别人的代码的。见鬼了,我甚至都不愿意读我自己的代码。想着你舒服地坐在皮椅上,穿着便装,端上一杯白兰地,阅读着别人的代码来度过一个美妙的夜晚——这个念头真是荒诞至极!

但是,我们需要能接触到源代码。我们必须阅读别人的代码,因为我们只有理解了那些代码之后才能把我们自己的事情做好。所以,卢克,请你不要害怕阅读源代码——不管它看起来有多么可怕,也不管它会把你带向何方,跟它去吧!

作者:happydeer 发表于2014-1-25 19:44:57 原文链接
阅读:535 评论:4 查看评论

相关 [程序员 源代码] 推荐:

[译]程序员要学会读源代码

- - 呦呦鹿鸣
在“沟通”这个复杂的领域里,写出能让人类领会并理解的连贯段落比敲出几行让解释器或编译器不致于“呕吐”的软件代码要难得多. 这就是为什么——就软件开发而言——所有的文档大概都是很差劲的. 而且,由于为人写作比为机器写作要困难得多,文档恐怕在可预见的将来还会继续差劲下去. 译者注:卢克(Luke Skywalker)是电影《星球大战》中的一个角色,他来自塔图因星球,在发现了莉雅公主输入到机器人R2-D2中的求救信息后,他与绝地骑士欧比旺一起迎战邪恶的银河帝国,最终救出了公主.

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

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

开源代码搜集

- friedvan - 增强视觉 | 计算机视觉 增强现实
很早就在导航栏上加了代码这一页,但是一直没有添加内容. 这两天抽空把之前用过,留意过的代码分类整理了一下. 各位如果在平时学习,工作中遇到过对你非常有帮助的代码,请到这个页面下留言,我会不定期整理汇总更新. Tags: open source, 代码, 新闻. zz Google Summer of Code 2011几个感兴趣的项目 (6).

学习dubbo源代码

- - Java - 编程语言 - ITeye博客
1、Dubbo与Spring的整合. Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用springbean一样进行服务暴露和调用了,完全看不到dubboapi的存在. 这是因为dubbo使用了spring提供的可扩展Schema自定义配置支持.

如何面试程序员?

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

程序员的本质

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

程序员人生之路

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

程序员装B指南

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

程序员收入报告

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