面对 github 上边大量的框架源代码如何学习呢?

本贴最后更新于 1991 天前,其中的信息可能已经东海扬尘

现在要说学习资源网络上有太多,最为关键的就是 github 上边,个人不是只满足于能够使用上边的种种框架,而是想深入学习框架的源代码,各位大佬们你们都是怎么学习这些源代码的呢?git clone 下来然后从头开始阅读吗?我很迷茫

  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • 框架
    47 引用 • 346 回帖 • 1 关注
  • 代码
    459 引用 • 591 回帖 • 8 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6543 引用 • 29408 回帖 • 245 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Ahian

    给个建议:先从 latke 开始,然后 clone 到本地,使用 IDEA 打开,结合文档和 IDEA show diagram 捋清类的继承关系等 blablabla ,前提是你得先会用,知道有哪些方法。

  • imorta

    迷茫什么? 框架都是为了更方便开发者才出现的,如果现有资源使用非常方便还会出那么多框架吗?

    所以学好基础内容,多看看 JSDOM JS 权威

  • wuhongxu 1

    我一直依赖推荐的是以需求推动学习。以我学习 ioc、di 为例。首先是需求确定,为什么去学习他,有两个方向,一个是闲得发慌重复造轮子,一个是更好的在日常中去使用。接着先用用比较知名的框架,例如 spring 的 ioc,看看手感怎么样,想想它是如何实现的,翻翻官方文档,一般都有简单的实现原理,spring 的明确的提到了 beanFactory 之类的东西。接着,这个时候,如果你一股脑钻进去看源码,没有一定的经验,一定是不知所谓,茫然得一比,所以这个时候其一般鼓励先思考思考如何实现,先猜猜有些什么坑(比如我猜到了依赖会有循环问题,当然只猜对了一般,实际上只有 contructor 会有,而我猜的是所有情况下的注入都会有),然后想想自己怎么去实现它,没有把握就勤能补拙,动手去写一个,不要怕代码写的差,老实说,写得好也不会有人多看你一眼(笑)。人如果是菜鸟时期,又没有人教你,那么毫无疑问,勤能补拙,多动手,动手结合理论,就能够慢慢进入角色了,多看了几个框架,之后你就会慢慢积累一些套路经验,到那时,无论结构多么复杂的代码都能开始慢慢看懂了。我个人在 2018 最大的收获就是通过勤能补拙,进入了一个开始不那么依赖于动手也能看懂代码的阶段。

    个人理解

    2 回复
  • z18821751802

    acer 你好

  • wmatrix 1 1 赞同

    带着明确的问题去阅读源码。

    直接阅读 clone 下来的项目源码,真的会感觉很枯燥无趣,而且也很难坚持下来,至少我自己是这样。一般来说,我是在工作项目中有需要的时候,去 github 上面找一些知名能够满足需求的开源框架/库,先熟悉阅读他们的使用文档和 demo 示例,掌握框架的功能接口和总体设计思想,然后就接入移植到工作项目中去,边应用实现需求边进一步熟悉框架和库的设计接口细节。只要是应用到了项目中,随着需求的发展,总是会出现接口应用的一些问题的,甚至会出现接口内部的问题,这个时候再一步步地去深入阅读源码就很自然和明确了,而且是各个点击破,最终连成一片把源码给看完掌握的。

    我当时学习 live555 库的时候就是这样一步步阅读源码掌握下来的。总结起来就是:

    1. 从能够满足实际项目需求的框架出发
    2. 阅读框架的文档和框架的 Samples,运行示例,理解设计
    3. 使用框架的功能实现手头的需求,进一步掌握使用细节,这一点很重要,任何框架只有实际使用后才能了解细节
    4. 基于应用中的遇到的问题去阅读对应部分的框架源码,先只读能够帮助解决问题这一部分的,最终总会连通起来的。
    5. 然后就是不断重复第 4 步了,最后你就会突然发现,整个框架你已经阅读完了,而且是掌握的差不多了。

    学习贵在精不在多,鉴于重复造轮子的太多,掌握好最知名的一些框架和库就足矣。最重要的是要有耐心,这些框架都不是短时间开发出来的,自然也不要期望在很短的时间内读懂掌握,除非你自信你比框架的作者还更聪明。

  • 迷茫的根源 选择恐惧症

  • zonghua

    😳 发现论坛的发送来自什么设备的“via”功能是前端解析 UserAgent 生成的呀,那么你到底用的是什么 Linux 发行版呢。

    1 回复
  • wuhongxu 1 赞同

    我的笔记本现在用的 deepin,台式是 archlinux

请输入回帖内容 ...
EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 17 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 215 回帖 • 164 关注
  • 倾城之链
    23 引用 • 66 回帖 • 100 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 3 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 290 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 431 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 93 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 285 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 11 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 45 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 441 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 692 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 4 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 346 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1747 回帖 • 1 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 222 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 399 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 43 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 193 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 253 关注