採訪 Linus Torvalds 的問答整理
- [3] 是否會閱讀其它操作系統實現的源代碼,來瞭解某個功能是怎麼實現的,或者純粹是為了娛樂或學習的目的?
- Linus 表示他從不認為閱讀別人的代碼是瞭解某個想法的一種有用的方法,所以他從不會為了瞭解某個功能是如何實現的去閱讀代碼。他閱讀代碼通常是為了瞭解某個功能 為什麼不工作,這些代碼通常也不是別的操作系統的代碼。比如他閱讀 zlib 的代碼,是因為他想知道為什麼 git 在運行某些庫函數時耗了那麼長時間。
- 通常他會通過閱讀某些書籍來瞭解某些知識。比如他通過閱讀 <The Design of the Unix Operating System> 來瞭解 Unix 是如何工作的,以及人人都知道的 <Operating Systems: Design and Implementation>。
其实我有我自己的一套路子,我也知道自己不是Linus,大牛说的话不一定是真理,也许只是个性流露,但他的话让我有所思:这年头,还是深深觉得看书比看代码更重要。以前代码看得多是为了弥补书看不懂的弱理解力,现在又回到书籍阅读的节奏上,哪怕是新项目也从相关手册和论文入手。代码接触多了,理解力得到提升,愈发觉得文字比编程语言才是交流思想的更好途径,另一方面自己愈发重视思想思维,至于实现则是信手拈来之事。
之所以提这个问题是因为我很有兴趣知道别人是怎么看这个问题的,纯属交流。
Jeff Atwood说过这么一句话:“Code Tells You How, Comments Tell You Why”.
其实,Jeff这句话并不准确,另外,我把其扩展一下——
代 码 => What, How & Details
文档/书 => What, How & Why
可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计Why,是揣测,不准确,所以会有很多误解。而且,我们每个人都知道,Why 这个东西是让你一通百通的东西,也是让人醍醐灌顶的东西。(这也是楼主为什么喜欢看书的原因,我也是)
但是,代码会告诉你细节,这是书和文档不能给你的,细节是魔鬼,细节决定成败,这样的话我们不但听过很多了,我们做技术的也应该体会过很多了。当然,我们也要承认,这些代码细节给人带来的快感毕竟不如知道Why后的快感大(至少对我是这样的)
书和文档是人对人说的话,代码是人对机器说的话。
所以,
因此,我认为都比较重要,关键看你的目的是什么了。
另外,看看下面的几个现像,你可以自己比较一下:
从代码中收获得大,还是从书中收获的大,不同的场景不同的目的下会有不同的答案。
这里,谈一谈人的学习过程吧,从学习的过程中,我们来分析一下看代码和看书这两个活动。
人对新事物的学习过程基本都是从“感性认识” 到 “理性认识”的。
然而,对于计算机行业这个技术创新超强技术繁多的行业来说,我们每个人都既是新手,也是老手。
(最后,谢谢楼主专门来微博上邀请我回答)
题主这个问题问得好啊,当年第一次看到Linus这句话,鸡冻了我好一阵子——劳资终于有借口不读代码了。但真是这样么?
1. Linus学编程和刚开始做Linux的时候,可以阅读的好代码非常少,传播途径和现在也无法相提并论。
2. Linus通过自己写代码取得了巨大成功,上千的高手参与进来,精力已经基本上被占满了。在他所耕耘的领域,他和他所管理的社区都是最顶级的工程师,没有太多可以参考的东西,可以说大多数同行写得比他们挫或顶多是差不多。也正因为他的地位和繁忙,他并没有动力去参与和学习一个新的领域。
总结一下上面说的:Linus很牛逼,一开始没得参考,现如今没必要参考。
但我等撸码屌丝真的就应该有样学样,拒绝阅读代码?这事情应该辩证的看,我不说你错或对,因为两个阵营从来都不缺大牛。轮子哥写GacLib就是个典型例子,他非常不爱读代码,很少参考别人的,他的作品也没什么可以很大块参考的先例,而且有足够的自信和水平自己撸。
但不管你是哪个阵营的,都要明白,不读代码和你读不懂代码完全是两个概念好吧。
你可以到微博问问章亦春为啥读Nginx源码,问问余锋为啥读lua前后花了4年(当然不是光读这个),问问改JVM的巨牛RednaxelaFX为啥连老赵在他面前都不黑Java。话说RednaxelaFX还分享过阅读代码的原则,有心的话自己搜去。
现在已经不是Linus那个时代了,锻炼自己撸的能力不是不可以,最好还是结合参考世界上最新的成果。这么多年技术的发展不去享受一些好处,参考一些经验,还是挺可惜的。
读书也很重要,但不得不说读书和读代码的收获是不可相互替代的。
如果你觉得没几个超级大牛帮你撑腰不够有自信,我帮你找几个喜欢读代码的大牛:
1. 比尔盖茨在编程大师访谈录一书中认为计算机科学不是最佳的编程学习方法,要读代码和反馈。
2. 去读Peter Norvig的用十年学习编程。
3. 去看Eric Raymond写的如何成为一名黑客。
4. 去看Richard Stallman的一个简短采访,优土鳖上的,他说过:学编程的最好的方法就是读一个大型的系统,解很多bug,添加很多特性,做很多这样的工作。他来中国访问的时候,又这样说过一次。
我个人不值一提,但在我有限的学习经历里,读代码给了我很多好处。有很多传统的工作,有些傻逼攥着一点经验累积的技术就拼命压榨你让你听话,否则就不教你任何新东西。举个例子,全聚德、大董等烤鸭店的厨师,还有很多五星级酒店的主厨,你拜他们为师,先让你端三年盘子,乖巧听话会来事儿教你个一招半式。其实他们那几下子真写成教程系统训练,达到接近的水平能用得了一年半载?不就烤个鸭子炒个菜么。除非跟寿司之神似的整天扯淡浪费时间。很多低端编程岗位也是这样的。
计算机行业就很不一样了,只要你有心,可以读到世界上最优秀的人写的代码。虽然他也不会手把手教你,但他并不对你保留什么。等你习惯了读代码并掌握了一定技巧和思维方式之后,会发现这真是跟十块钱一本如来神掌差不多。
不过人和人不一样,希望你能找到适合自己的路子。
最后给你复制两段John Carmack说过的话:
在信息时代,一切障碍都不复存在,所谓障碍都是主观上的。如果你想动手开发一项新的技术,你不需要几百万美元的资金,你只需要在冰箱里放满比萨和可乐,再有一台廉价的计算机和为之献身的决心
现今程序员的情况好多了-只要有一台便宜的二手电脑,一张 Linux 光盘和一个互联网帐户,你就已经拥有了把自己提升到任何级别的编程水平所需的全部工具。
共勉。
看代码就是比看书要慢, 这是显而易见的.
只是很多情况下你没有书可以看, 就只能看代码了.
我觉得应该理解为 "高手看别人写的代码那就是一坨屎啊"