所在的位置: 软件工程 >> 基本信息 >> 如何看待Linus

如何看待Linus

採訪 Linus Torvalds 的問答整理

  • [3] 是否會閱讀其它操作系統實現的源代碼,來瞭解某個功能是怎麼實現的,或者純粹是為了娛樂或學習的目的?
  • Linus 表示他從不認為閱讀別人的代碼是瞭解某個想法的一種有用的方法,所以他從不會為了瞭解某個功能是如何實現的去閱讀代碼。他閱讀代碼通常是為了瞭解某個功能 為什麼不工作,這些代碼通常也不是別的操作系統的代碼。比如他閱讀 zlib 的代碼,是因為他想知道為什麼 git 在運行某些庫函數時耗了那麼長時間。
  • 通常他會通過閱讀某些書籍來瞭解某些知識。比如他通過閱讀 <The Design of the Unix Operating System> 來瞭解 Unix 是如何工作的,以及人人都知道的 <Operating Systems: Design and Implementation>。

其实我有我自己的一套路子,我也知道自己不是Linus,大牛说的话不一定是真理,也许只是个性流露,但他的话让我有所思:这年头,还是深深觉得看书比看代码更重要。以前代码看得多是为了弥补书看不懂的弱理解力,现在又回到书籍阅读的节奏上,哪怕是新项目也从相关手册和论文入手。代码接触多了,理解力得到提升,愈发觉得文字比编程语言才是交流思想的更好途径,另一方面自己愈发重视思想思维,至于实现则是信手拈来之事。

之所以提这个问题是因为我很有兴趣知道别人是怎么看这个问题的,纯属交流。

陈皓,酷壳:http://coolshell.cn/(芝兰生于…

Jeff Atwood说过这么一句话:“Code Tells You How, Comments Tell You Why”.

其实,Jeff这句话并不准确,另外,我把其扩展一下——

代 码 => What, How & Details
文档/书 => What, How & Why

可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计Why,是揣测,不准确,所以会有很多误解。而且,我们每个人都知道,Why 这个东西是让你一通百通的东西,也是让人醍醐灌顶的东西。(这也是楼主为什么喜欢看书的原因,我也是

但是,代码会告诉你细节,这是书和文档不能给你的,细节是魔鬼,细节决定成败,这样的话我们不但听过很多了,我们做技术的也应该体会过很多了。当然,我们也要承认,这些代码细节给人带来的快感毕竟不如知道Why后的快感大(至少对我是这样的)

书和文档是人对人说的话,代码是人对机器说的话

所以,

  1. 如果你想知道人为什么要这么搞,那么你应该去看书,看文档(就像Effective C++、Code Complete、Design Pattern、Thinking in Java等等这样的书)
  2. 如果你要知道让机器干了什么?那你应该看代码!(就像Linus去看zlib的代码来找性能问题)

因此,我认为都比较重要,关键看你的目的是什么了。

  • 如果,你想要了解一种思想,一种方法,一种原理,一种思路,一种经验,恐怕,读书和读文档会更有效率一些,因为其中应该会有作者的思路的描述。比如像Effective C++之类的书,里面有很多对不同用法和设计的推敲,像TCP/IP详解里面也会对TCP算法的好坏的比较……这些思维方式能让你对技术的把握力更强。光看代码很难达到这种级别。(现在你知道什么样的书是好书了吧 ;-))
  • 如果,你想了解的就是具体细节,比如:某协程的实现,某个模块的性能,某个算法的实现。那么,你还是要去读代码的。因为代码中会有更具体的处理(尤其是对于edge case或是一些代码技巧的东西)

另外,看看下面的几个现像,你可以自己比较一下:

  • 很多时候,我们去读代码,那是因为没有文档,或是文档写得太差。
  • 很多时候,你在google, stackoverflow, github过后,你会发现,你掌握的知识就是一块一块的碎片,即不系统,也不结构化,更别说融汇贯通了。你会觉得你需要好好地读一本书,系统地掌握知识,这种感觉你一定很强烈吧
  • 很多时候,在你去读别人代码的时候,你会因为基础知识或是原理不懂,或是你不知道为什么的情况下,你要么完全读不懂代码,要么就是会误解代码。(比如:如果你没有C语言和TCP原理的基础,你根本读不懂linux下TCP的相关代码的。我们因为误解代码用意而去修改代码造成的故障还少吗?)
  • 很多时候,看到一个算法时或是一个设计时,比如Paxos这样的,你是不是会有想去看一下这个算法的实现代码是什么样的?如何才能实现的好?(但是如果你没看过Paxos的算法思想,我不认为你光看代码实现,就能收获到Paxos的思想)
  • 很多时候,当你写代码的时候,你能感觉得到自己写的代码有点别扭,怎么写都别扭,这个时候,你也会有想去看别人的代码是怎么实现的冲动
  • …… ……

从代码中收获得大,还是从书中收获的大,不同的场景不同的目的下会有不同的答案。

这里,谈一谈人的学习过程吧,从学习的过程中,我们来分析一下看代码和看书这两个活动。

人对新事物的学习过程基本都是从“感性认识” 到 “理性认识”的。

  • 如果你是个新手,那应该多读代码,多动手写代码,因为你需要的是“感性认识”,这个时候“理性认识”对你来说你体会不到。一是因为,你没有切身的感受,告诉你Why你也体会不到,另一方面,这个阶段,你要的不是做漂亮,而是做出来。所以,在新手这个阶段,你会喜欢Github这样的东西
  • 如果你是个老手,那么你有多年的“感性认识”了,你的成长需要更多的“理性认识”,因为这个阶段,一方面,你会不满足于做出来,你会想去做更牛更漂亮的东西,另一方面,你知道的越多,你的问题也越多,你迫切地需要知道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 光盘和一个互联网帐户,你就已经拥有了把自己提升到任何级别的编程水平所需的全部工具。

共勉。

abadcafe

看代码就是比看书要慢, 这是显而易见的.

只是很多情况下你没有书可以看, 就只能看代码了.

buaawp,五棵松某科研院所WEB软件研发人员

我觉得应该理解为 "高手看别人写的代码那就是一坨屎啊"

李遥,A Programmer

  • 搞清楚某个非核心的API族是怎么用的(参数怎么构造、先后顺序)看别人的代码片段比自己去研究一遍节省时间。核心API族必须仔细研究,不能图省事一味参考别人
  • 算法类的主要看专门论述的书籍和论文。代码看不看不是很重要
  • 架构类的主要靠作实验、作性能测试。对瓶颈运用自己的智慧来解决(无论用什么办法,瓶颈解决了就是解决了)。基本上没有什么例子可以100%照搬,盲目照搬往往还会坏事。架构类也靠启发,读读杂志上的文章收获很大
  • 产品构思类的,主要看思想境界。这个也和代码无关



转载请注明:http://www.zjiaren.com/jbxx/jbxx/2.html

  • 上一篇文章:
  •   
  • 下一篇文章: