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

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

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

  • GitHub

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

    209 引用 • 2031 回帖
  • 框架
    47 引用 • 348 回帖 • 1 关注
  • 代码
    467 引用 • 631 回帖 • 9 关注
  • Q&A

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

    8128 引用 • 37051 回帖 • 160 关注

相关帖子

欢迎来到这里!

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

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

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

    个人理解

    2 回复
  • 其他回帖
  • wuhongxu 1 赞同

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

  • wmatrix 1 1 赞同

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

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

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

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

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

  • z18821751802

    acer 你好

  • 查看全部回帖
EvilCodes
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 431 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    352 引用 • 1815 回帖 • 1 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 73 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖 • 1 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 212 关注
  • JWT

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

    20 引用 • 15 回帖 • 2 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 2 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 1 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    153 引用 • 3783 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 339 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 22 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    75 引用 • 1737 回帖 • 3 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖 • 1 关注
  • sts
    2 引用 • 2 回帖 • 195 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 638 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 474 关注