专栏首页闷骚的程序员阅读源码的意义与方法

阅读源码的意义与方法

思索了这两个问题良久,也去知乎找了一些相关话题的问答,但并没有标准答案。所以,我这里也只是记录一些我对此的看法,也许会随着 RTFSC 阅历的丰富而发生变化,我会记录更新于 https://github.com/mzlogin/rtfsc-android

意义

在我看来,阅读源码的意义在于学习优秀的「套路」。

这里的「套路」所指范围很广,大到架构设计,小到可取的命名风格,还有设计模式、实现某类功能使用到的数据结构和算法等等。所谓高手,其实就是能比大部分人更早更快地掌握套路并熟练运用之人。

埋头在自己的天地里耕芸固然也能逐渐进步和成长,但总会有时候会遇到一些场景,你苦思良久也无法做出良好的设计,总会有一些时候,纠结如何为一个变量命名让你停下飞速敲击的手指。这些令你为难的场景,先贤们也许早就遇到过,并且给出了优雅的解决方案。看优秀的源码的时候,将这样的场景与对应的方案收入囊中,或者仅仅在脑中留下一个印象也好,以便在需要的时候,你的武器库里总能掏出一把称手的家伙来。

一些方法

不应该这样

不应该漫无目的地随手拿起一分源码,试图去通读。这一方面会过目即忘无所收获,另一方面会枯燥得让你迅速从着手到放弃。学习的方式有很多种,阅读源码并不一定是最适合你当前的情况的。

应该这样

  1. 精心挑选要阅读的源码项目。 这最好是与你的编程语言、你的工作内容、你的兴趣所在相关的,这样才能更切实地感受到阅读源码给你带来的益处,更有动力继续。
  2. 如果你想学习的知识点有官方文档,先看文档再看源码。 直接从源码着手,搞清楚原理固然是好,但是源码有可能是难啃的,先熟悉官方提供给所有人看的文档,能较为平滑地对这方面的知识先有个大概的了解,然后再结合源码去深入。
  3. 提出具体的问题,然后带着问题到源码中找答案。 比如在使用 Toast 的过程中,你可能会想到一些问题:Toast.makeText(...).show() 时发生了什么?Toast 能不能在非 UI 线程调用?能不能自定义 Toast 布局?诸如此类。在源码中探寻完你想要的答案,你的目的也就达到了。
  4. 从一些共性层面入手。 大部分的程序里都会使用到的东西,比如线程模型、UI 组织结构、任务调度方式等等。针对某一个方面去了解,比漫无目的要有效率得多。
  5. 最好能够编译运行起来。 如果一份代码你只能看不能跑,那可能读到一些地方你只能猜这个地方的数据值和跳转结构是怎么样的,而很有可能你猜的是错的。但如果你能编译运行,那在需要的时候你可以修改,加日志等等来更好地观察和验证你的想法,得到正确的理解。
  6. 做一些笔记。 一方面是将你的学习成果保留下来,方便随时查阅,毕竟只凭脑子记忆是不靠谱的;另一方面在学习的过程中,也能帮助理解。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为绑定域名的 GitHub Pages 启用 HTTPS

    Update 2018/05/01: GitHub 官方已经支持自定义域名启用 HTTPS 了,见 https://blog.github.com/2018-0...

    mzlogin
  • Java 中的比较运算符

    这时 Android Studio 不高兴了,在 long 下面打上红色波浪线,然后提示小菜鸟:

    mzlogin
  • 可执行文件名中包含 install 或 setup

    在 Windows Vista+ 系统下,若 EXE 文件名中包含有「install」、「update」或「setup」等字样,可能出现如下问题:

    mzlogin
  • 头条面试官问我看过哪些源码,然后就没有然后了

    最近,我的一位朋友在找工作,已经拿到了美团、快手等公司的Offer,准备选择其中一家入职了。

    芋道源码
  • 学会阅读源码后,我觉得自己better了

    我有一个大学同学,名叫石磊,我在之前的文章里提到过几次,我们俩合作过很多项目。只要有他在,我就特别放心,因为几乎所有难搞的问题,到他这,都能够巧妙地化解。他给我...

    沉默王二
  • 如何阅读源码?

    阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码。

    武培轩
  • 直播源码对直播系统开发的重要性

    直播源码有多重要?可能关系到直播平台的稳定,能否正常运行等等,因为源码是一切的基础,虽然网上可以百度出很多免费的直播源码,但是这些源码能否直接用却是个大问题,为...

    布谷安妮
  • 你去看源码啊!问我干撒子哟?

    我记得很多年前,在很多次的开发过程中都会碰到各种各样的问题,然后去请教老司机,当然了老司机中也有年轻的司机和老油条,有人会细心跟你讲你所遇到的问题,有的会干脆直...

    风间影月
  • 一篇文章把本该属于你的源码天赋还给你

    "有人阅读过 mybatis 的源码吗 ?就看一个初始化过程就看的已经头晕眼花了,小伙伴们支支招吧!"

    技术zhai
  • 浅析技术写作中的思维误区

    我就是马云飞

扫码关注云+社区

领取腾讯云代金券