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

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

阅读源代码有许多益处。你会发现新的架构(construct)和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护。 但是也有一个不好的地方,那就是阅读源代码太困难了。每当我看到一个新的代码库(code base)时,这种让人眩晕的感觉就充斥了我的大脑。我的内心告诉我压根不想趟眼前这趟浑水。

这是(希望是)正常的反应。当我们的大脑接触过多的新东西,就会产生排斥。造物主赋予我们的这台强大的模式匹配机器根本找不到规律。所有的抽象(abstraction)都是之前没见过的,类的名称也毫无印象。程序又到底是从什么地方开始执行的? 对此,我能给出的一般性建议如下:1. 寻找并建立自己能够理解的初步基础,通常就是主要的入口点(main entry point)。2. 从这个基础开始,逐步探索主要功能。3. 记录下自己的见闻。 从头开始 窍门就是给自己一个起点。我是这样做的。我通过-h选项运行程序,并调用help命令。之后我复制其中一条help文档字符串,以此为检索词搜索一遍代码库,找到这个帮助文档所在地方。通常情况下,调用help命令之后你会发现离程序的主入口点很近了。 辨明轮廓 找到主入口点之后,我会运行几个文档中提供的示例。然后,我会试着追踪主要的代码块,大致了解下每个部分是如何连接起来的。 我会问自己,是否存在一个管理程序,负责调用一堆帮助函数和类?是不是有一些类是平级关系,相互之间轮流交换控制权?是不是有一个程序逐步执行的主任务队列? 了解全局有助于你理清小细节。如果你没有理解程序的主流程就闷头读下去,那你很可能会被细枝末节搞得焦头烂额。 勤做笔记 我习惯直接在代码中做笔记。做笔记的时候,我会使用特殊的注释符(例如,使用#=>,而非常用的#),这样可以将我自己的笔记与原作者注释区分开来。 如果碰到巧妙的技巧、不易理解的流程、编程架构(construct)的漂亮使用方式或者是其他任何你想牢记的内容,务必要做笔记。如果你读不下去了,你也可以做个记录,提醒自己之后要回去再读看不懂的部分。 通过写下你的思绪,你实际上是在把那块代码变成你自己写的。慢慢地,你就会开始在工作中自然地用上新掌握的那些架构(construct)。 融汇贯通 学习编程,是一个反复读代码和写代码的持续过程。只要你愿意接触不同的风格、代码,最终你会形成自己的独特视角和思维。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2015-12-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

微信“小程序云”(云开发)简介与初体验

在7月10日的微信公开课第七季上,微信小程序团队预告了小程序云的到来。目前官方已经公测:地址 。现在名为“小程序·云开发”。本文笔者将从一个开发者的角度去介绍及...

8.7K41
来自专栏GA小站

IOS APP跟踪归因的挑战

首先,我们要明确APP用户可以从哪些媒介获取,一个是WAP投放,一个In-app投放,对于国内用户来说,还有一个短信、

1642
来自专栏做全栈攻城狮

做全栈攻城狮-安卓开发教程目录

1.程序员带你学习安卓开发,十天快速入门-安卓学习必要性:http://www.toutiao.com/i6319356348286894594/

1256
来自专栏申龙斌的程序人生

搞定GTD - 掌控流程之三:组织整理

在明确意义那一步,只能去掉没有意义的项目和事情,在这一步才是GTD最复杂和最核心的流程,有人将第二步和第三步合在一起。对于OmniFocus来说,经过这个步骤后...

3289
来自专栏IT大咖说

如何玩转Android物联网开发,这些必须知道

内容来源:2018 年 6 月 28 日,中移物联网 Android开发高级工程师程磊在“droidcon上海2018安卓技术大会”进行《当安卓遇到物联网》演讲...

2K2
来自专栏blackheart的专栏

[解读REST] 3.基于网络应用的架构

链接上文[解读REST] 2.REST用来干什么的?,上文中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格)。本篇来介绍一组自洽的术语,...

2179
来自专栏服务端技术杂谈

一个众人眼中“牛B”的项目是怎样越做越烂的

最近在维护一个项目,接手之前好多运营同学说:“这个可是个牛B的项目,已经运行10来年了,基本满足了我们的运营需求,但是随着业务的调整,运营力度的加大,未来这个项...

3167
来自专栏HBStream流媒体与音视频技术

DirectShow捕获+mencoder+ffmpeg+sox 打造小巧的音视频制作、加工软件

3687
来自专栏我是攻城师

20件程序员必须知道的事

3657
来自专栏腾讯Bugly的专栏

Ops Debug ~ 分析和处理 Node Server 问题

导语 背景是最近做了一个CSIG大讲堂的分享,总结和梳理了这两年多来在Nodejs 相关学习的知识和思考,关于“调试工具” 和 “Node Server 后台...

1783

扫码关注云+社区

领取腾讯云代金券