创意电子

标题: 初学者如何阅读源码? [打印本页]

作者: HelloGitHub    时间: 2020-9-17 08:02
标题: 初学者如何阅读源码?
原文地址:How to read code – a primer
原文作者:technikhil
译者:newbiewang
校对者:陈元



                               
登录/注册后可看大图



我喜欢编程,它也是我的工作,而且我很高兴能够将大部分的时间都花在开发软件上。像很多步伐员一样,我既着迷但又困惑的是,我写的代码到底怎么样,以及如何写得更好。
多年来,我已经阅读了很多有关软件开发的文章和书籍。此中不乏有很多墨宝(书上的大概网上的)告诉你如何提高编程,并成为一个像忍者一样的受过专业训练的编程高手!这些发起大多有一些共性,此中之一就是阅读源码。然而相比于别的发起,阅读源码通常也就是简单的一句话来概括:找一些很棒的开源软件,或是任何你喜欢的软件,打开它们(或打印出来)然后阅读它们。虽然总的来说,这确实是个很好的发起,但纸上得来终觉浅,实际去实践的时间才发现问题多多。在这篇文章中,我会尝试给出一些阅读源码的实用发起,但在这之前,首先让我们枚举一下都有哪些问题。
对阅读源码的误解

别人一说阅读源码,给你的一般印象好像他们就像编程大师一样,可以单纯地坐在椅子上,然后像看小说一样读动手上的代码。好吧,我敢肯定,确实有一些精湛的步伐员,他们可以很享受地一边喝着咖啡、一边看着一堆雷同英语句子的神秘符号,并且还能够在脑海里构建整个类的层次和体系布局。显然这篇文章并不是给他们看的,它的受众是像我一样的,觉得盯着一堆源码看就比如看一些无聊没故意义的练习题的人。固然,有人会争辩说,可以从一个完整项目里一点一点地看单个类大概单个函数来学习,但在我看来,除非是最简单的问题,大多数软件内部都是相互依靠的。在不了解系统其余部分的情况下,通常不可能理解一个特定函数大概类背后的设计思想和原理。
下一个问题是从哪里得到可以读的源码(固然,在此之前,你得能够鉴别哪些源码值得一读)。优秀的软件很多,既有开源软件可以免费得到,也有闭源软件需要授权。开源仓库有譬如 Sourceforge GitHub 。如果你在软件开发公司工作,那么可以访问源代码库中的专有代码。第三种常见途径是软件开发书籍附带的步伐,大概作为教诲资源而提供的步伐( Minix 是典型的例子)。确实,众多的选项使我们难以决议,因此从茫茫代码世界中找出适合我们阅读的是一项困难而必不可少的任务。
另一个问题是步伐所用的编程语言,读他人的代码已经充足困难了,如果同时还需要去熟悉一门夹杂着奇葩语法的新语言,它所带来的负担,在我看来简直就是个会带来极大挫败感的灾难。以是你需要找到用你熟悉的语言所编写的代码。但如果你要看的代码是来自书本上或作为教诲资源所提供的,那懂不懂这门新语言并无关紧要,由于有导师可以表明上下文。倘若你明知山有虎方向虎山行,在没有书大概导师指引下,去阅读一门并不熟悉的编程语言,那我发起你至少需要学习,并到达可以写出自己的步伐的程度(Hello World 就不算了哈)。
前文有关上下文的问题使我想到了下一个问题,如果你不熟悉软件自己,弄清楚代码在做什么就困难得多。比方,如果你不是天天都在利用 Linux 并知晓 Linux 启动顺序,那么就很难在看一边 Linux 代码后弄清楚运行级别是什么。利用某个软件得到的经验、知识能够资助我们更好地阅读它的源码,这包罗常用的术语、软件的功能和特性,甚至包罗你碰到的各种错误自己。
理解源码

对我而言,我意识到 “阅读源码” 并不能准确描述我所从事的活动,用 “理解源码” 来表述会更符合。对我来说,坐在笔记本屏幕前(或打印成纸),只是单纯地读满屏的代码是非常困难的。我需要代码之外别的的东西,比如我喜欢翻一翻文档,玩一玩这个软件,单步运行代码甚至写测试代码去跑一跑,然后才能真正欣赏它。由于我会为此投入非常大的时间和精力,以是我必须要精挑细选,寻找我要 “阅读”(理解)的软件。
我的第一层过滤是通过编程语言举行筛选,对我来说,我只阅读由 C#、VB.NET、Python 和 Javascript 编写而成的步伐的代码(只管我也熟悉 C++、Ruby 和 F#,但我并不认为自己有程度来理解其他人的代码)。接下来是寻找我利用过的软件,这会让我有种已经上车的感觉,由于我知道代码的意图,以及它不能做的事情另有它的局限性(如果我充足熟悉的话)。天天都在利用的开源软件正是优秀的候选项(比如,我利用用 C# 编写的开源工具 Cruise Control.NET、NANT 和 NUnit)
碰巧我在一家软件产品公司(一家微软的公司)工作,以是我阅读的源码选择项之一是我们公司在源代码库中的代码。如果碰巧你也在一家软件公司工作,你可以查看其他的项目,甚至你动手项目的较早期版本。这样,除了可以得到更深层次的代码理解之外,你还可以很好地了解之前和之后都曾尝试过哪些东西。不过有一些警告需要留意:
寻找文档齐全的项目(这适用于开源以及专有代码)。我的意思是说,这样的文档应该突出总体设计,并说明代码背后的原理。如果只是简单田主动天生的 Java Doc 类型文档,则不能视之为我所描述的文档 :-)。此中一种寻找途径是利用为教诲而创造的软件(比方 Minix)。由于它们的目的是通过软件举行教学,因此通常会有非常清楚的文档记录下来,并且有大量资料表明代码背后的设计原理。
总结

那么,现在你已经确定了要阅读源码的软件并下载了它的源代码和文档,让我们一步步阅读并理解它:
“源码阅读”在我看来,不仅仅是阅读,它是一组独特的活动,共同资助人们理解代码。这好像比简单的 “阅读代码” 更令人生畏,但它值得付出努力。
现在,你可以更加轻松,快乐地“阅读源码”了吗?




欢迎光临 创意电子 (https://www.wxcydz.cc/) Powered by Discuz! X3.4