Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


成为一名更好的程序员:如何阅读源代码

2015-11-28 10:15    评论: 5 收藏: 7 分享: 1    

阅读源代码有许多益处。你会发现新的架构construct和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护。

但是也有一个不好的地方,那就是阅读源代码太困难了。每当我看到一个新的代码库code base时,这种让人眩晕的感觉就充斥了我的大脑。我的内心告诉我压根不想趟眼前这趟浑水。

这是(希望是)正常的反应。当我们的大脑接触过多的新东西,就会产生排斥。造物主赋予我们的这台强大的模式匹配机器根本找不到规律。所有的抽象abstraction都是之前没见过的,类的名称也毫无印象。程序又到底是从什么地方开始执行的?

对此,我能给出的一般性建议如下:1. 寻找并建立自己能够理解的初步基础,通常就是主要的入口点main entry point。2. 从这个基础开始,逐步探索主要功能。3. 记录下自己的见闻。

从头开始

窍门就是给自己一个起点。我是这样做的。我通过-h选项运行程序,并调用help命令。之后我复制其中一条help文档字符串,以此为检索词搜索一遍代码库,找到这个帮助文档所在地方。通常情况下,调用help命令之后你会发现离程序的主入口点很近了。

辨明轮廓

找到主入口点之后,我会运行几个文档中提供的示例。然后,我会试着追踪主要的代码块,大致了解下每个部分是如何连接起来的。

我会问自己,是否存在一个管理程序,负责调用一堆帮助函数和类?是不是有一些类是平级关系,相互之间轮流交换控制权?是不是有一个程序逐步执行的主任务队列?

了解全局有助于你理清小细节。如果你没有理解程序的主流程就闷头读下去,那你很可能会被细枝末节搞得焦头烂额。

勤做笔记

我习惯直接在代码中做笔记。做笔记的时候,我会使用特殊的注释符(例如,使用#=>,而非常用的#),这样可以将我自己的笔记与原作者注释区分开来。

如果碰到巧妙的技巧、不易理解的流程、编程架构construct的漂亮使用方式或者是其他任何你想牢记的内容,务必要做笔记。如果你读不下去了,你也可以做个记录,提醒自己之后要回去再读看不懂的部分。

通过写下你的思绪,你实际上是在把那块代码变成你自己写的。慢慢地,你就会开始在工作中自然地用上新掌握的那些架构construct

融汇贯通

学习编程,是一个反复读代码和写代码的持续过程。只要你愿意接触不同的风格、代码,最终你会形成自己的独特视角和思维。

发表评论


最新评论

我也要发表评论

来自广东广州的 Firefox 42.0|Fedora 用户 2015-12-2 23:15
谷歌未来可能会将安卓系统变成本机代码,这样速度就会和苹果的ios比美. java虚拟机可能被抛弃.  oracle公司的java出路是生产java cpu, 这样java字节码就变成本纪代码, 这个可比X86的代码小的多. 很奇怪这么多年他们没有向这个方向发展. ARM以前有java能运行就java字节码,可惜放弃了. 否则, 也是全球震撼的事情. 如果java CPU出现, 那么全世界的程序员高兴至极. java应用编程容易. 那是全世界的解释语言大多会消失.
1 回复
来自广东广州的 Firefox 42.0|Fedora 用户 2015-12-2 23:07
源代码容易读懂, 最难的是程序使用的算法,这个真难懂. 比如字体显示用的字节码解释器, 里面生成曲线字体用的三次方,四次方曲线算法. 字体的好和坏全靠这个. 可惜国内搞的不好. simsun这个丑陋的字体伴随我们几十年了. 直到谷歌,adobe常州华文, 贡献了思源字体. 解决了中日韩台港三国两区字体重大问题. 谷歌将统一全球文字显示. 这个让中国政府恼火,恨呀,又没办法.
2 回复
龙牙 [Chrome 45.0|Windows 8] 2015-12-1 19:16
好记性不如烂笔头
2 回复
linux [Chrome 46.0|Mac 10.11] 2015-11-30 11:27
1
堕落小生 [Opera 33.0|Windows XP] 发表于 2015-11-30 09:37 的评论:
我想吐槽一下网站的导航跟模块划分,去哪里吐槽啊
可以去论坛的站务去反馈意见。
回复
堕落小生 [Opera 33.0|Windows XP] 2015-11-30 09:37
我想吐槽一下网站的导航跟模块划分,去哪里吐槽啊
回复

热点评论

来自广东广州的 Firefox 42.0|Fedora 用户 2015-12-2 23:07
源代码容易读懂, 最难的是程序使用的算法,这个真难懂. 比如字体显示用的字节码解释器, 里面生成曲线字体用的三次方,四次方曲线算法. 字体的好和坏全靠这个. 可惜国内搞的不好. simsun这个丑陋的字体伴随我们几十年了. 直到谷歌,adobe常州华文, 贡献了思源字体. 解决了中日韩台港三国两区字体重大问题. 谷歌将统一全球文字显示. 这个让中国政府恼火,恨呀,又没办法.
2
龙牙 [Chrome 45.0|Windows 8] 2015-12-1 19:16
好记性不如烂笔头
2
来自广东广州的 Firefox 42.0|Fedora 用户 2015-12-2 23:15
谷歌未来可能会将安卓系统变成本机代码,这样速度就会和苹果的ios比美. java虚拟机可能被抛弃.  oracle公司的java出路是生产java cpu, 这样java字节码就变成本纪代码, 这个可比X86的代码小的多. 很奇怪这么多年他们没有向这个方向发展. ARM以前有java能运行就java字节码,可惜放弃了. 否则, 也是全球震撼的事情. 如果java CPU出现, 那么全世界的程序员高兴至极. java应用编程容易. 那是全世界的解释语言大多会消失.
1
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。