开源程序怎么用

核心提示工作几年的程序员同学,有了一定的项目经验,对于编程也有了自己的理解,但他们偶尔也会感到困惑,不知道接下来该如何提升自己。在笔者看来:"这个阶段的程序员最需要的是提升自身编程能力和视野高度,而学习开源项目是最有效的方法之一"。这篇文章,笔者聊

做了几年程序员的同学,有了一些项目经验,也有了自己对编程的理解,但是有时候很迷茫,不知道接下来该如何提升自己。

在作者看来,“程序员现阶段最需要的是提高自己的编程能力和视野,学习开源项目是最有效的方法之一”。

在这篇文章中,作者谈谈自己学习开源项目的经验,希望对你有所帮助。

1 学会使用

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

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

从GIthub下载源代码后,需要重点关注像快速入门、入门、示例这样的文档,这些文档告诉初学者如何使用项目。

如果需要部署项目,请参考项目文档,并尝试在独立的环境中从头开始部署项目。

有些项目还会提供一个完美的范例项目。里面有现成的例子。您可以尝试根据文档运行介绍性示例。

如果介绍性示例运行顺利,对于项目初学者来说是一个好的开始。如果操作出现异常,不要慌张,可以在项目中查找FAQ文档,或者搜索有问题的关键词,查询相关解决方案。

成功运行项目中的第一个基本示例后,您可以尝试运行更复杂的功能示例。

建议作者创建单个项目,用功能实例完善整个项目。随着这个项目越来越满,证明你掌握的更多了。在学习的过程中,将学习心得记录在笔记中,便于后续回溯。

2 阅读源码

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

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

查阅项目的架构设计文档,梳理整个项目的骨架,绘制流程图或UML图,加深对项目的理解。

当我们知道了整个项目的骨架后,就可以选择自己感兴趣的模块来阅读了。比如你对网络通信感兴趣,就去看看网络层的代码,深入到实现细节,比如它用的什么库,采用的什么设计模式,为什么要这么做。如果可以,调试详细代码。

在阅读源代码时,注意单元测试并尝试运行它们。基本上,一个好的单元测试会清楚地描述代码的功能和边界。

作者系统阅读源代码是在2014年。当时RocketMQ 3.0刚刚开源,我对消息队列极其感兴趣,非常想知道Netty这个网络编程框架是怎么用的。

所以要从RocketMQ网络通信模块remoting开始学习。因为源代码中有完善的测试用例,所以首先要运行单元测试,学习网络编码模型。

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

▍ 1.客户端的编程模型

RocketMQ客户端网络通信有以下三种方式:

单向:单向传输

同步:同步呼叫

回调:异步回调

很多技术思想是相通的。下图显示了sofa-bolt支持的调用类型,sofa-bolt是ants的一个开源通信组件。

蚂蚁通讯框架Bolt调用类型

▍二世。服务器处理器模式

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

void registerProcessor;

学习完网络框架Remoting,再结合Broker模块学习RocketMQ存储模型,这样就可以对RocketMQ有一个相对清晰的认识。

3 知行合一

大学刚毕业的时候,看了李开复老师的一本书。书中有一句话让我印象深刻:“我听而忘,我看而记,我做而懂”。

中国古代哲学家荀子也说过,“不闻其味,则不闻其味;闻之,不见;见之,不可不知;知之,不可为也;”就学习而言,它停止了。"

在学习源代码的过程中,夯实知识点的关键是动手练习,并保证练习后有输出产品,即知行合一。

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

▍ 1.源代码中的知识点应用到项目中。

开源项目中有大量优秀的实践,可以将编码技巧、设计思想和优秀的源代码引入到商业项目中。

2014年,鳄龙的优惠券计算服务遇到了性能瓶颈,作者负责重建这个系统。看了RocketMQ源代码,我了解到了线程池使用的本质:线程池隔离,各司其职。

因此,作者首先对业务场景进行了梳理,根据任务类型绑定不同的线程池,以方便扩展和暴露并发的配置参数。在重构这个系统的过程中,还引入了RocketMQ来创建线程工具类代码。

改造后,不仅系统性能提高了5倍,作者的自信心也大大提高,对技术的理解也更加深入。

▍第二,造轮子

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

2016年,哈丁-JDBC成为开源。下图是哈丁-JDBC当时的建筑设计:

当时作者对数据库和表的划分很着迷。与此同时,我的脑海中出现了许多问题,例如如何封装jdbc接口,如何实现SQL解析,以及如何聚合多个片段的结果。

所以参考sharding的源码——JDBC,作者模仿了一个子数据库和子表组件。

经过这次模仿,作者深入实践了客户端模式数据库和表的原理,积累了自己的技术储备。

4 参与开源

“开源的概念之一是鼓励不同的人一起工作”。——Linux之父Linus Torvalds 2016年2月做了一个TED演讲《Linux背后的思想》。

在《教授鼓励学生参与开源项目的五个理由》一文中,提到了以下五个理由:

无限的学问

专业交流

外部机会

对计算机科学有更深的理解

玩

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

直接参与开源项目的开发。

参考开源项目的社区竞争

修复开源项目中的错误

开源项目文档

参与开源项目的测试和演示编写。

参与开源项目的推广

参与一个开源项目,与许多同样聪明的工程师合作,实现你头脑中所有奇妙的想法,这是一件非常美妙的事情。

5 写到最后

亲爱的程序员朋友,当你不知道选择哪个开源项目开始学习的时候,希望你能站在当下,行动起来。现在的技术团队使用的开源组件正是你学习的方向。

行动起来,你会成为更好的自己。走吧。


如果我的文章对你有帮助,请帮我点赞,阅读,转发。你的支持将激励我输出更高质量的文章。非常感谢!

 
友情链接
鄂ICP备19019357号-22