程序员提高之源代码阅读篇

简介: 前言最近刚换了新工作,正在熟悉公司环境,因此博客更新有所耽误,那么本篇也是选自入职部门分享的主题,从今年5月份开始,我也在阅读 Spring 的源码,参考网络上的内容以及本人学习的一些经验,总结出本篇。

前言


最近刚换了新工作,正在熟悉公司环境,因此博客更新有所耽误,那么本篇也是选自入职部门分享的主题,从今年5月份开始,我也在阅读 Spring 的源码,参考网络上的内容以及本人学习的一些经验,总结出本篇。


为什么要阅读源代码?


作为一名程序员,我们每天都在和源代码打交道,做开发的时候我们也要写代码,那么为什么要阅读别人的源代码呢?不阅读可以吗?多数程序员愿意写代码而不愿意阅读他人的代码,这是因为写代码是个人思想的表达,而读代码则是尝试理解他人,相对于写代码,显然读别人的代码更为费事费力。


1. 吊打面试官


试想这么一种场景,你现在正在面试,面试官向你发出源码相关的问题,你表示不太了解,面试官直接就让你回去等通知了。如果发生了这种情况岂不是很尴尬,为了在面试时能够吊打面试官,拿到高薪水,必要的源码阅读还是必不可少的。(下面图片中的小仓鼠来自公众号程序员小灰,在此加以借用)


2. 解决实际问题


工作中,经常会有一些我们预料不到的问题发生,为了解决问题,我们不得不阅读其他同事或开源框架的源码,如果能够提前了解,显然能够加快解决问题的速度。


3. 提升编程能力


对于程序员多年的编程生涯中,一般在前期刚入门时进步较快,而后期由于已经熟悉了开发常用的技术很容易停步不前。都说面试造火箭,入职拧螺丝,如果刚好做的功能仅仅通过CRUD实现,进步就更慢了。这个时候只能通过学习他人优秀的代码来提高自己。


我的项目经验很丰富,任务都能圆满完成,为什么同事还在吐槽我的代码?

我和技术大牛的差距在哪里?

有没有大多数人都能接受的编码规范?

如何使我的代码可读性更强?

如何使我的代码更易维护?

上面的问题都能从源码阅读中找到答案。


4. 个人兴趣爱好


对于一些技术牛人来说,技术是其生活的一部分,这些人喜欢阅读优秀的开源框架。


阅读源代码能有哪些收获?


1. 深入理解项目实现原理


使用了很多年的第三方框架,如后端的 Spring、前端的 Vue、React,你是否有很多问号,它们怎么实现的?它们怎么简化开发工作的?


2. 发现自己的知识盲区


高质量的开源框架一般具有相同的编码规范、使用的都是最基础的语言特性,架构设计一般都比较优秀,并且包含着设计模式的最佳实践。阅读这些开源框架,能发现自己很多不知道的内容。


3. 零碎的知识点整合


优秀的框架中包含开发中使用到的大量零碎的知识点,框架将其进行整合,从而形成有机的整体。从这些框架中我们的知识点也能形成一个整体,从而形成自己的技术栈。


4. 学习优秀的设计


优秀的开源框架对模块化的把握极其优秀,蕴含着一些编程原则、设计模式等。


阅读什么样的源代码?


1. 语言自身类库的源代码


编程语言一般会提供自己的类库,将一些常用功能进行封装。这些类库都由大师进行实现。


2. 公司内部项目的源代码


加入项目组时,多数情况下不会直接开发新的项目,而是接手已有的项目,这时候需要阅读源码来深入理解业务。

公司内部对常用的功能封装了一些框架,希望了解其内部实现,这时候也需要阅读源码。


3. 优秀的开源框架源代码


优秀的开源框架具有大量优秀的贡献者,经过成千上万项目的考验。阅读优秀的开源框架源码犹如和大师在面对面交流。


如何阅读源代码?


阅读源代码不能拿到源代码后直接就读,遵循一定的方式能够大大提高我们的效率。


这里总结了两个原则。


由表及里,先跳出来看全景,再钻进去看本质。

有目的的阅读,抓住主线,切勿陷入不重要的细节。

按照阅读顺序可分为读前、读中、读后。


读前


前提:熟悉项目使用的编程语言基础知识、设计模式等所需的必备技能。

背景:项目解决了什么问题?为什么会被提出来?

功能模块划分

公司内部项目可先通过前端页面、APP、接口文档、设计文档等了解。

了解开源项目功能

通过官网了解,可阅读快速开始、参考文档、详情文档、FAQ 等。

通过博客、微信推文、视频课程等方式了解。

lDE: Idea、VS Code、Android Studio、X Code 等,了解其提供的功能,有哪些快捷键。

源码下载

直接 clone

fork 后 clone,建议使用这种方式,对源码添加注释后可提交到 git 保存。

调低日志等级,先让项目跑起来,使之具备调试条件。


读中


找到切入点,如 HTTP 接口、测试用例等

结合源码解读的文章或视频

自底向上,逐个击破。先阅读不依赖其他模块或依赖其他模块的较少的模块

了解功能实现

打断点,查看调用栈

自顶向下,根据需要了解的粒度决定展开的层次

认识类

程序 = 算法 + 数据结构

阅读类上的注释

查看类中的主要方法

查看类的继承关系,关注接口中的方法

认识成员变量

阅读成员变量的注释

查看成员变量在哪个地方使用

认识方法

阅读方法上的注释

查看方法的调用关系


读后


多思考多总结

为什么使用这样的数据结构?有没有更合适的方式?如果让我做,我会怎么做?

在哪些场景下使用了哪些设计模式?

总结源码阅读笔记

输入并输出,加深印象,提高学习效率。

坚持

滴水穿石,持之以恒,量变引起质变。


目录
相关文章
|
7月前
|
NoSQL Java 程序员
写给迷茫的java程序员朋友!
写给迷茫的java程序员朋友!
|
安全 Java 开发工具
开发者眼中的JAVA 最晦涩的知识点
后端开发的开发者想必都知道,Java是一门广泛应用于企业级应用程序开发的编程语言,它的简洁性和可移植性使得它成为了许多开发者的首选。尽管Java具有很多易于理解和使用的特性,但在这门语言的深入学习过程中,也存在一些晦涩的知识点,这些知识点可能需要更多的时间和经验才能完全理解,那么本文就来简单聊聊开发者眼中最晦涩的Java知识点是什么?
94 2
开发者眼中的JAVA 最晦涩的知识点
|
开发框架 中间件 .NET
自学C#,要懂得善用MSDN
自学C#,要懂得善用MSDN
83 0
|
SQL 人工智能 Java
程序员:你见过哪些要命的奇葩代码?
程序员:你见过哪些要命的奇葩代码?
124 0
|
设计模式 网络协议 前端开发
proxyee源代码阅读
优雅的代理源代码阅读比较
215 0
proxyee源代码阅读
|
存储 Java
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏3)
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
290 0
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏3)
|
Java 索引
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏2)
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
130 0
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏2)
|
网络协议 Java Scala
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏1)
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
130 0
学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏1)
|
存储 Java 测试技术
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(2)
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
135 0
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(2)
|
Java
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(6)
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
120 0
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(6)