如何高效学习 GitHub 项目源代码

问:你为什么还没有女朋友

笑死,我在 GitHub 根本不需要女朋友!

1、

之前,小帅b给你分享了一个 GitHub 插件:Sourcegraph,可以使用它在浏览器中直接查看 GitHub 中的源代码:

现在不需要安装插件那么麻烦,你只需要在仓库地址中,在 github 后面加个 1s,就可以直接查看源码了:

这是个人开发者做的,不久前官方也做了个类似的,你可以在仓库地址中的 「com」改为 「dev」,也可以看到类似的效果:

更舒服的操作是,你直接在 Github 项目仓库页面中,在键盘按一下「.」,它会自动把项目重定向 github.dev 去,直接用 vs code 的方式查看源码,一步到位:

2、

通过在线查看 GitHub 源码的方式比较适合参考代码风格、具体方法的逻辑实现,但如果是要学习 GitHub 中的某个项目,最好还是要 clone 到本地,然后在本地上把项目运行起来,完完全全使用一波,在这个过程中你会找到自己的疑问。

有些项目需要搭建好环境,安装各种依赖的框架才能跑得起来,仅凭这一点就阻碍了不少人进入下一步学习。clone 的时候动力满满,项目跑不起来直接劝退自己,然后玩游戏看视频去了。

我想他们并不是真的想学,或者说不是他们真的刚需,所以动力不足。想想你刚入职一家新的公司时,你需要在短时间内熟悉了解工作的项目,如果项目复杂一些,你会慌的一批,但你一定会想方设法,各种搜寻,把环境搭建来,让项目运行起来,然后熟悉各种流程。

所以你想学习一个新的项目的时候,不妨把它想得「严重」一点,想想学会后自己的价值有所提升的成就感。

3、

当你把功能都操作一遍之后,你会找到侧重点,比如有些功能是你觉得非常简单的,那么这部分你可以不用太关心,但你一定会发现有些是你不会的,有些是你会的但是你想知道它是如何实现的。

反正,跑起来并操作所有功能之后,你会得到:

1,疑问?(不知道功能如何实现)

2,好奇!(知道如何实现但想知道作者和自己的不同之处)

有了好奇和疑问,这满满的「刚需」,这动力会驱使你想要去学习其中的代码。

4、

一行一行代码仔细看嘛?

也许可以,但我觉得先大致看一下项目代码结构,然后使用 debug 的方式更有效,python 有 pdb,各种编辑器也有 debug 工具,比如 Pychram:

因为你已经有自己的侧重点,在你有疑问或者想知道如何实现的地方,打一个「断点」,然后一边运行一遍看结果,你会非常清晰其中的逻辑。

4.1

举一个简单的例子,比如我看到了一个 2048 小游戏的项目:

我想知道,当我按下方向键之后,数字叠加是如何实现的,新的随机数是如何产生的?那么就可以在「点击事件」下打一个断点:

这时候你通过 debug 的方式把项目运行起来:

然后按一下方向键就会定位到当前执行到断点处的代码。

接着就可以使用「step into」或者「setp over」执行接下来的每一步操作。

需要看函数具体调用就可以 step into,需要直接看执行后的下一行就可以 step over。

4.2

这样可以在你想关注的地方,知道代码的每一步都做了什么,比如这里的 2048,就是通过二维数组实现的:

通过一步一步执行,很快你会发现,每次都会不断随机一个空位,然后赋值一个 2:

如何实现数字叠加更新的呢?一样,在关键处打个断点,你会发现主要实现逻辑在这里:

每个方法你都可以 step into 进去,最后你会发现,这里的实现是重新排序数组,然后判断相邻的非空数据是否相等,有就进行 「*=2」:

我演示的这个项目地址:https://github.com/yangshun/2048-python

这样,通过你的每一步执行,你能很清晰的看到作者是如何思考的,你也从中得到了解惑。

如何搜到适合你的项目?看我之前写的:几个 GitHub 高级搜索技巧,这就分享给你。

5、

当然,你在 debug 的过程中,肯定没我刚刚演示的那样顺利,你会遇到一些问题,比如:

有些逻辑实现看不懂

有些算法看不懂

甚至有些语法都看不懂

....

别叹气,这时候你应该感到开心,因为这正是你的「学习机会」,你只是暂时还不知道它们,而现在,你已经「知道自己不知道什么东西」了,所以耐下心来,一直重复 debug 很多遍那些「自己不会的关键地方」,每一步都要去想。

实在想不出来?可以去项目的 Issues 中翻一翻,再者,可以使用搜索引擎搜索的嘛,倘若很久还是搞不懂(概率很小),那就直接找到作者,给他发个大红包,虚心请教人家。

帅言帅语:方法总比困难多!

直到某个时刻,你一定学会了「自己不知道的东西」,接下来还没完,可以在原有的项目框架中,按照你刚学会的「新知」,添加一个相关的功能,自己独立去实现它,相信这时候对你来说简单许多。

为什么要多做这一步,因为这是「根本」,我们是为了使用,而不是仅仅为了「懂」。

通过这样进一步的的行动,其实是一次很好的总结。也许在这过程你会发现你并没有真正的理解呢。(别问我怎么知道的,哭)

反正如此这般折腾一番之后,你会发现意外的惊喜,比如:

发现了比自己更好的实现方式

发现了自己从来没使用过的库

发现了新的特性

发现自己变得更帅了(这点我深有体会)

....

更爽的是,折腾完之后,让子弹飞一会,因为它会在你的脑子里生成新的「节点」,它很大概率在你未来的某个业务会被关联到,直接用得上!

6、

OK,以上就是小帅b给你分享的一点经验,当然,我知道大部分人看了也不会行动,毕竟很多人关注了我公众号然后就让它躺在列表中,也有的是点进来之后,随便划一下就退出,然后还总是抱怨:要是我xxx也不至于xxx。

我更希望以上的内容能给你带来一点参考,你可以慢慢地去执行,然后在过程中找到适合自己的「方法论」,去体验其中的乐趣,扎实的成长。

像你这种认真看完了,三连了,还去默默执行的,咋能一样呢?

我们下回见,peace!

(0)

相关推荐

  • SAP Cloud for Customer Cloud(C4C)Application Studio里的代码调试

    和其他IDE使用方式一样,首先在需要设置断点的代码行数前面双击,设置断点: 使用菜单Debug->Start Debugging,切换成调试模式: 看到Show output from:Debu ...

  • Pycharm debug调试:命令行交互式/变量观察watch/evaluate

    Debug断点调试是在开发过程中常用的功能,能清楚看到代码运行的过程,有利于代码问题跟踪. 就不用去每次都是去print或者logger容易弄脏代码 观察当前所有变量值 Found out the o ...

  • 程序调试

    简介 本篇讲解在Idea中如何进行Debug. 程序调试 什么是程序Debug? Debug是程序开发人员必备的调试程序技能. 在企业中程序开发和程序调试的比例为1:1.5,是必须要掌握的技能. De ...

  • 通过做项目高效学习

    小时候,我不喜欢学习,父母通过恐吓(比如不读书找不到媳妇),或者物质奖励(看完一本书给几毛钱买零食)的方式刺激读书学习. 但我对机械很好奇,大人修理机器会兴致勃勃看半天,玩零件还经常把手搞的乌黑.和所 ...

  • GitHub项目推荐|基于强化学习的自动化剪枝模型

    今天为大家介绍一个GitHub上最新开源的一个基于强化学习的自动化剪枝模型,本模型在图像识别的实验证明了能够有效减少计算量,同时还能提高模型的精度.项目地址:https://github.com/fr ...

  • 上线数天获2400星,这个GitHub项目帮你从头开始学习数据科学

    机器之心报道 作者:魔王.陈萍 从头开始学习数据科学的免费资源. 如何入门数据科学? 这个 GitHub 项目提供了一份免费学习资源,既包括超详细的学习路线图,又涵盖多个免费线上课程.大量数据科学项目 ...

  • 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目

    开源框架背景 现如今开源生态非常完善,深度学习相关的开源框架众多,光是为人熟知的就有caffe,tensorflow,pytorch/caffe2,keras,mxnet,paddldpaddle,t ...

  • 【学习・求职必备】可谓是相当Awesomes了,这些综述类的github项目你不可错过!

    为了给各位即将步入职场或者在奋力加入职场的深度学习方向的朋友们助力,我们开通了快速学习与求职专题板块,给大家持续传授相关经验. 言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 作者 ...

  • 不懂高效学习法,孩子读书死记硬背

    说起"死记硬背"这四个字,可能是很多家长和孩子头痛的问题.但凡事的存在都有两面性:如果从行为主义学习理论的角度看,死记硬背,也可以说是机械记忆,是一种十分有效的学习方式.如果你了解 ...

  • 高效学习1(高效能训练营)

    高效学习1(高效能训练营)

  • 思维导图 | ​​​​​​​​​​如何高效学习?

    △ 是新朋友吗?记得先点笔记侠关注我哦- △点击图片查看大图 *思维导图是用国产软件XMind做的哦~笔记侠有一个神秘的组织,里面的人都研究怎么做思维导图,好奇请加小师妹. 摘要: 学习焦虑让很多人的 ...

  • 让大脑高效学习六个秘诀

    在脑科学的定义里,学习并不仅仅局限于特定的场景.知识和行为. 当大脑神经元受到外界刺激而重新进行连结.组合,形成新的回路,最终让我们的行为发生变化时,这就是学习. 例如女孩子给自己打扮,或者销售员思考 ...