转载请注明出处,作者:罗立树
最近有人问我怎么学习源代码?怎么分析开源代码?的确在互联网行业中,采用了很多开放源代码,互联网的发展促进了开源代码的快速发展,在项目开发过程中,为了降低成本和提升项目的质量、开发效率等等,我们的思维形式往往就会考虑,这个系统实现是否有一些成熟的开源软件可以支持。正因为是开源的,质量其实也不能得到百分百的保证,有些问题可能本身开源的作者也没有遇到过或者没考虑周全,所以在拿过来用的时候也是存在风险的,另外我们通过源代码的分析阅读,掌握技术细节,这样就更加有利于我们今后线上的稳定,当然技术本身就是存在比较高的门槛的,能够熟练掌握,对于我们工作中有很多好处,这里不多说了。
很多人看源代码,一开始就一头扎进一堆代码中,然后跟着各个类文件或者代码流程,一点一点的跟踪,结果跟来跟去,把自己搞的越来越糊涂了,这种方式是不太高效的。
下面,根据我自己的一些经验,和大家分享一些阅读源代码的技巧。
1.阅读源代码前必须要有扎实的基础知识,没有扎实的基础知识,很难能够了解代码的实现细节。譬如阅读一个NIO框架必须要了解NIO的实现原理和细节,阅读Tomcat代码必须要知道JVM内存管理、Servlet标准、http协议、java类加载策略、线程池、网络IO等等知识。阅读Redis得掌握C语言编程、常用的数据结构、网络IO、系统内存管理、系统线程管理、libevent(知道redis为什么不用,和memcached做一些比较)等等,这里不一一列举了。所以即使不会,我们必须要在阅读源代码前做好准备,做好理论上的支持,没有理论的支持很多东西理解起来都是比较困难的。
2.先了解源代码都有哪些功能特性,在熟练使用的时候,再去深入挖掘。我们常说,知其然,再知道其所以然的一个过程。
3.先网上搜索一下相关开源框架的介绍,学习别人对该框架的评价和使用、分析等,分析出开源软件的设计思想,这是站在别人的基础上,牛顿说:站在巨人的肩膀上。
4.掌握软件工程,得学会软件设计的一些原则,什么依赖倒转原则、开闭原则、里氏代换原则等等,假如实现上采用面向对象的语言的话,还得学会设计模式,懂得变与不变分离的思想。
5.学会使用工具,精通debug技巧,先分析出各个子工程或者代码模块的依赖关系,然后将依赖关系理清楚,整理它的先后顺序和优先级,当我们把依赖关系弄明白了,自然入手也更加方便。
6.学会总体概括思维,理解好抽象,把握其总体架构,抓关键点,
譬如学习Spring源代码,那Spring的核心功能就是IOC和AOP,那基于IOC的实现来说,是BeanFactory,而BeanFactory是通过分层的模式来对不同的运行环境进行隔离的,IOC的支持是通过BeanDefinition来进行管理的,而Bean的配置通过命名空间的支持。而AOP来说,它的入口是AopProxy(实现方式有Cglib和AopProxy),一方面是通过AOP来实现事务,支持Aspectj的面向切面编程,基于Aop实现一些不通过非入侵性编码就可以实现的功能。
Spring的哲学就是面向接口的,相互之间的调用关系可以通过接口分析就可以明确。
7.多动手应用实践和测试,根据以上的总体了解,然后构建相应的应用场景,边实践边debug,因为在软件设计过程中,代码量是非常大的,不做试验很难知道它到底是怎么回事。
8.学会总结、归纳,对所学的知识进行系统化概括,然后不仅局限于当前技术,学会比较,将多个同类产品之间的优缺点比较一下,譬如:redis和memcached都有什么优缺点,各自的应用场景在哪里更加好一些。在什么样的场景更加适合。
9.学会以审视的眼光来看,开源代码不一定就是最好的,在一些特别重要的关键设计中,看看该代码是否存在缺陷,假如自己来设计的话,是否有改进的地方。
10.技术码农是一个很苦很累的活,一定要有兴趣,需要坚持的去做,没有兴趣的话学什么都想急于求成,这样在理解过程中是有所遗漏和不全的,要学会在技术上进行多交流、多分享,这样才能更多的了解自己哪里存在不足。
好了,做了这么多总结,在今后的时间中,我会给大家带来一些源代码方面的分析的分享,短期的目标是以下内容:
1.《Spring源代码解读》
2.《Struts2源代码解读》
3.《Redis源代码解读》
4.其它等。。。。。
关于源代码阅读的一些技巧,和学习的一些方法论,欢迎大家一起讨论,共同进步
分享到:
相关推荐
标题中的“很好的三方开源代码”指的是高质量的第三方开发的开源软件代码。在IT行业中,"三方"通常是指除了原始开发者(第一方)和用户(第二方)之外的其他开发者或组织。开源代码意味着这些代码是公开的,允许任何...
开源软件的核心理念是开放、协作和分享。通过开源,金山软件能够吸引全球的开发者参与项目,共同改进代码质量,增强软件的功能和稳定性。同时,开源也有助于提高软件的透明度,增加用户的信任度,推动整个行业的...
【标题】:“Objective-C 开源代码” 在编程领域,Objective-C 是一种面向对象的编程语言,主要用于苹果的 macOS 和 iOS ...通过阅读和实践,他们不仅可以学习到具体的编程技巧,还能加深对开源社区和版本控制的理解。
标题中的“新版Path的漂亮菜单按钮动画效果开源代码分享”提到了两个关键点:Path和菜单按钮的动画效果。Path在编程中通常指的是图形用户界面(GUI)中的路径或者绘图路径,它允许开发者创建复杂的形状和线条。而...
《RM2016步兵车开源代码:走进Robomaster机甲大赛的嵌入式世界》 在机器人技术领域,Robomaster机甲大赛一直备受瞩目,它为全球的科技爱好者提供了一个展示创新和技能的平台。2016年的大赛中,参赛团队公开了一项...
【标签】"开源代码"表明这些代码遵循开源协议,用户可以自由地查看、使用、修改和分享。"方便在公司能来论坛的兄弟们下"揭示了这个资源的另一个目标群体,即那些工作环境较为严格,无法访问某些外部服务的程序员,...
【描述】"在网上搜索到的mtk 3D特效,开源代码,感兴趣的可以一起学习借鉴下"提示我们,这个资源是开放源代码的,意味着开发者可以查看、学习、修改甚至分享这些代码。这为研究和开发基于 MediaTek 芯片的3D特效提供...
描述中的“希望能给大家一些帮助”暗示了这个开源代码库可能包含了易于理解的代码结构和注释,旨在帮助程序员,尤其是初学者,理解文本编辑器的基本工作原理,以及如何用特定的编程语言实现这些功能。 标签“记事本...
【学在南开源代码】是一款专为安卓用户设计的选课助手应用,它集成了丰富的功能,旨在优化学生的课程管理体验。通过对这款软件的源代码分析,我们可以深入了解其背后的开发技术和设计思路,这对于学习和研究安卓应用...
1. **架构设计**:通过阅读源码,我们可以了解该生成器的系统架构,包括模块划分、类与类之间的关系,以及如何组织代码来实现功能。这有助于我们学习优秀的软件设计原则和模式。 2. **算法与数据结构**:代码生成...
《图像处理开源代码——探索PhotoSphire的编程世界》 在数字时代,图像处理技术已经成为日常生活和工作中不可或缺的一部分。开源代码的普及使得更多的人能够深入理解这些技术,并参与到开发和创新的过程中。本文将...
1. **阅读源代码**:理解项目的架构设计,学习优秀代码的编写规范和技巧。 2. **运行项目**:在本地环境搭建项目,运行测试,了解其功能和工作原理。 3. **调试与修复问题**:发现并修复代码中的bug,提升代码质量...
《深入探索Silverlight 4:基于Win7网页版的开源代码实践》 Silverlight,作为微软推出的一种富互联网应用程序(RIA)平台,曾是Web开发领域的重要技术之一。特别是Silverlight 4版本,它在继承前代优势的同时,...
"github开源代码,仅供自己下载"这个标题暗示了这是一份从GitHub上获取的开源代码库,可能是为了个人学习、备份或者离线查看。GitHub是一个全球最大的开源软件托管平台,它不仅提供了版本控制功能,还允许开发者分享...
它的核心优势在于快速加载、低内存占用以及便捷的分享机制,使得用户可以轻松地在社交网络中发现和使用各类服务。 对于想要学习或基于太行精灵进行二次开发的开发者而言,以下是一些关键知识点: 1. **微信开发者...
【标题解析】:“卡通漫画风妈妈课堂技巧分享阅读小程序源码”这个标题揭示了我们要讨论的是一个具有卡通漫画风格的小程序源代码,主要用于妈妈们学习和分享育儿技巧。这个小程序可能包含互动性强、视觉吸引力高的...
8. **编码规范**:开源代码通常遵循一定的编码风格,这对新手来说是很好的学习资源,有助于形成良好的编码习惯。 9. **错误处理与日志记录**:了解如何优雅地处理错误并记录日志是提升软件健壮性的重要一环。 10. ...
本文将深入探讨YOLOv5的开源代码注释,以及如何通过这些注释进行深度学习的学习与实践。 首先,YOLOv5的源码结构清晰,注释详尽,这对于初学者理解和调试代码大有裨益。每个文件夹和模块的注释可以帮助我们了解代码...
开源代码是IT行业中一种重要的知识分享与协作方式,它促进了技术的快速发展和创新。"open-code:开源代码集合"是一个涵盖了多种编程语言和技术领域的项目,旨在为开发者提供丰富的学习资源和实践素材。在这个集合中,...