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

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

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

  • GitHub

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

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

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

    6554 引用 • 29428 回帖 • 246 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 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
我的世界,我的代码,我的逻辑。

推荐标签 标签

  • Vditor

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

    313 引用 • 1667 回帖 • 1 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 6 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 399 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    22 引用 • 31 回帖 • 3 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 405 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 7 关注
  • 创造

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

    173 引用 • 990 回帖
  • Maven

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

    185 引用 • 318 回帖 • 344 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 597 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 2 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 54 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 407 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    275 引用 • 682 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 3 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 685 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    492 引用 • 1383 回帖 • 375 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖