聊聊如何学习开源项目

这篇具有很好参考价值的文章主要介绍了聊聊如何学习开源项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

工作几年的程序员同学,有了一定的项目经验,对于编程也有了自己的理解,但他们偶尔也会感到困惑,不知道接下来该如何提升自己。

在笔者看来:“这个阶段的程序员最需要的是提升自身编程能力和视野高度,而学习开源项目是最有效的方法之一”。

这篇文章,笔者聊聊自己的学习开源项目的心得,希望对你有所帮助。

1 学会使用

首先,我们需要学习如何使用开源项目

Github 是全球最大的在线软件源代码托管服务平台,很多开源项目都托管在他上面。

在 GIthub 下载源码后,需要重点关注类似 Quick Start,Getting started ,Example 之类的文档,这些文档告诉初学者如何使用项目。

假如项目需要部署,参考项目文档,在独立的环境中,尝试从零开始,动手部署该项目。

某些项目也会提供完善的 example 工程·,里面有现成的例子,可以尝试按照文档介绍运行入门例子。

如果入门例子运行顺利 ,对于项目初学者来讲是一个很好的开始。若运行中出现异常,也不必慌张,寻找项目中 FAQ 文档,或者搜索出现问题的关键字(比如异常信息),查询相关的解决方案。

成功运行了项目中第一个基础例子之后,可以尝试运行更复杂的功能例子。

笔者建议单独创建一个工程,一个一个功能例子完善整个项目。当这个项目越来越充盈,也就证明你掌握得越多。在学习过程中,将学习的心得记录在笔记中,便于后续回溯。

2 阅读源码

阅读源码是深入理解开源项目最重要的一步

阅读源码之前,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。构建成功后,尝试运行该项目。

查看该项目的架构设计文档,梳理出整个项目的骨架,可以画流程图或者 UML 图,加深对项目的理解。

当我们了解到整个项目的骨架后,可以挑选感兴趣的模块来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,DEBUG 细节代码。

阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。

笔者体系化的阅读源码是在2014年。彼时,RocketMQ 3.0 刚开源不久,笔者对消息队列极其感兴趣,同时也迫切想了解网络编程框架 Netty 到底是如何使用的。

于是,先从 RocketMQ 网络通讯模块 remoting 开始学习,因为源码中有完善的测试用例,先运行单元测试,学习网络编码模型。

在学习网络编程的过程中,笔者有两点思维突破:

▍一、客户端的编程模型

RocketMQ 客户端网络通讯有如下三种方式:

  • oneway : 单向发送
  • sync :同步调用
  • callback :异步回调

很多技术的思想是相通的,下图是蚂蚁开源的通讯组件 sofa-bolt 支持的调用类型。

聊聊如何学习开源项目蚂蚁通讯框架Bolt调用类型

▍二、服务端处理器模式

RocketMQ 服务端通讯使用经典的 Reactor 模式 ,服务端注册不同的业务处理器,而各个业务处理器可以绑定不同的线程池。

void registerProcessor(
      final int requestCode, 
      final NettyRequestProcessor processor,
      final ExecutorService executor);

聊聊如何学习开源项目


学完网络框架 Remoting 之后,然后结合 Broker 模块,学习 RocketMQ 存储模型,通过这种方式就可以对 RocketMQ 有了一个相对清晰的认识。

3 知行合一

笔者大学刚毕业的时候,读李开复老师的书,书中有一句话,我印象深刻:“I Hear and I Forget, I See and I Remember, I Do and I Understand ” 。

中国古代哲学家荀子也说过:“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行之而止矣”。

学习源码的过程中,将知识点夯实的关键要诀是动手实践,并保证实践之后有输出产物,也就是知行合一

笔者总结了两点经验,供大家参考。

▍一、源码中的知识点应用到项目中

开源项目中有非常多的优秀实践 ,可以将代码中的编码技巧,设计思想,优秀源码引进到业务项目里。

2014年,艺龙的优惠券计算服务遇到性能瓶颈,笔者负责重构这个系统。在阅读 RocketMQ 源码后,学习到了线程池使用精髓:线程池隔离,各司其职

于是,笔者先梳理出业务场景,根据任务类型,绑定不同的线程池,为了便于扩展同时对外暴露并发度的配置参数。在重构这个系统的过程中,还引入 RocketMQ 创建线程工具类代码 。

重构之后,不仅系统的性能提升了5倍,而且笔者的自信心也大大提升,对技术的理解也更加深刻。

▍ 二、造轮子

当我们学习了一个开源项目,我们可以参考开源源码仿写一个。仿写的过程就是查漏补缺的过程,也能完善自己的知识体系。

2016年,sharding-jdbc 开源了,下图是当时 sharding-jdbc 的架构设计图:

聊聊如何学习开源项目

笔者当时对分库分表着迷,同时脑海里有很多疑问,比如如何封装 jdbc 的接口,如何实现 SQL 解析 ,如何将多个分片的结果聚合等。

于是,笔者参考 sharding-jdbc 的源码,仿写了一个分库分表组件。

聊聊如何学习开源项目

经过这次仿写,笔者深入实践了 client 模式分库分表的原理,并积累了自己的技术储备。

4 参与开源

“开源理念之一就是非常鼓励不同的人一起合作”。——Linux 之父 Linus Torvalds 2016 年 2 月 TED 演讲《The mind behind Linux (opens new window)》

在《教授鼓励学生参与开源项目的 5 个理由》这篇文章里,提到了如下五点理由:

  1. 无边界的学习
  2. 专业的交流
  3. 外在的机会
  4. 更深入的理解计算机科学

那么程序员如何参与开源呢 ?参与开源有很多种方式,最常见的有如下几种:

  1. 直接参与开源项目的开发
  2. 参考开源项目的社区比赛
  3. 修复开源项目中的 Bug
  4. 开源项目文档编写
  5. 参与开源项目的测试和 Demo 编写工作
  6. 参与开源项目推广

参与一个开源项目,并与许许多多同样聪明的工程师协作,把脑海中的奇思妙想一一实现,那是多么美好的事情。

5 写到最后

亲爱的程序员朋友,当你不知道选择哪一个开源项目开始学习时,希望你**立足当下,**当前技术团队使用的开源组件,正是你学习的方向文章来源地址https://www.toymoban.com/news/detail-412963.html

到了这里,关于聊聊如何学习开源项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么我不推荐学Python去找工作?为什么只会Python很难找到工作?在职程序员聊聊Python岗位的一些情况

    有很多小伙伴私信和我交流的时候 就说就他说他想学Python 想问问我的意见 不得不说 就是拍子现在应该是是目前 比较热门的一个种语言 这个确实是 但是热门呢 他就不一定意味着一定好找工作 我自己也很喜欢Python 在我心里呢 我是把Python 当做这一种辅助语言来使用 因为有时

    2024年02月03日
    浏览(64)
  • 聊聊程序员那些【越早知道越好】的道理或者建议-程序员如何提升自己

    比如好好学习ide的使用和快捷键 ,以及一些常用的命令。 写一个实体类:Alt+Insert,shift+ ↓ ↓ ↓(或者ctrl+a全选) ,回车 把代码封装成方法:Ctrl + Alt + M 代码格式化:Ctrl + Alt + L 删除无用的导包:ctrl+alt+o 构建项目:ctrl+f9 … 比如 mybatis generate lombok 比如引入自动化工具,

    2023年04月24日
    浏览(71)
  • 如何让java程序员生涯更顺利?我聊聊提升技术水平的五个方面

    第一点,很多程序员在毕业前几年趁年轻的时候在互联网公司多干几年。存够了首付以后,就去二线城市,选择去国企、银行或者考公务员,离开一线互联网公司。这是绝大多数人的选择,也是一个很普遍的选择,因为大多数人都是普通人,不是每个人都能成为很牛逼的架构

    2024年02月03日
    浏览(54)
  • GPT-Pilot:第一个真正的AI程序员,已开源24.7k星星,替代95%的程序员工作!

      ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 ​ ​  发布在https://it.weoknow.com 项目简介 GPT Pilot是Pythagora推出的一款核心技术产品,旨在提供第一个真正的AI开发者助手。它不仅仅是代码自动完

    2024年04月17日
    浏览(43)
  • 开源项目九死一生,但很多程序员坚持开源??

    大家好,欢迎来到停止重构的频道。 本期我们讨论一个开放问题。 为什么流行的开源项目只是凤毛麟角 ,且很多有名的开源项目都是背靠大公司的。 但是,为什么还有很多个人开发者愿意开源项目 呢? 欢迎大家把自己的想法或开源项目发在评论区,或者给一些想要开源项

    2024年02月03日
    浏览(47)
  • 程序员如何使用chatgpt提高工作效率

    公众号对话chatgpt 网页在线对话 ● 拥有一个 OpenAI 账号(需要梯子)。 ● 账号申请访问地址:https://platform.openai.com/。 ● ChatGPT 对话地址:https://chat.openai.com/chat。 API接入 ● 需要一个 API key(依赖于 OpenAI 账号)。 ● 普通的 HTTP 请求即可接入,参考文档:https://platform.opena

    2024年02月08日
    浏览(62)
  • 【程序员】工作中,如何提升自己的编程能力?

    在工作中,我们大部分的时间都是在阅读代码,阅读别人的代码也是我们工作中的一部分,真正花在写代码上的时间其实并不多。 我们应该都有这样的体会,那就是刚入职一家新公司,需要维护公司的一些项目代码,这个时候相信有的小伙伴们就很痛苦了,因为每个人写代码

    2024年02月10日
    浏览(73)
  • 半路出家自学当程序员这一年的经历,大家一起共勉

    2022年3月7日,我来到了上海。那是一个寒冷的夜晚。虽然因为提前找到了工作,心里还是比较踏实的。当时是我的牛马兄弟来接的我,然后我们住在了一起。这才使得我当时月薪4,000的人能够在上海得以生存。 来到上海没多久就出现了疫情,当时真的挺惨的。基本上一直是被

    2023年04月18日
    浏览(56)
  • 有个码龄10年的程序员跟我说:“他编程从来不用鼠标

    例如下图的开发者工具,然后给快捷方式起一个缩写的名字(自己要记住), 接下来把这个快捷方式复制到 C:/Windows 目录中,就可以使用 Windows+R 输入刚才的快捷方式名称缩写进行快速访问。 本步骤也可通过设置环境变量实现,需求大的时,可以学习一下进行设置。 如果还

    2024年04月26日
    浏览(38)
  • Python程序员如何写简历容易找到好工作?分享4个制作简历的细节

    在写简历时,你需要注意很多细节,因为简历是展示你个人能力和经验的关键。在本次前端简历写作法文章中,我们分享了一些写简历的技巧和要点,以帮助你写出一份优秀的简历。我们将进一步探讨一些你不应该在简历中写的东西,以及你应该如何避免一些常见的错误。

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包