题目有三问,我就先一一回答。 因此,全文目录如下: 程序员阅读源码往往出自于:迷茫! 你做了很多项目,写了很多代码,但是总感觉自己缺点什么,不知道自己的项目涉及的是否得当,不知道自己的代码书写的是否合理。这时,你会感觉到迷茫,这种迷茫会促使你去阅读代码。 有一段时间,我觉着我非要阅读开源项目的源码不可。 那时,我已经在公司负责设计和开发了许多系统。如果连大学时带领大家开发和维护学校网站也算上的话,我已经进行软件开发整整十个年头了。在这十个年头里,我对自己设计和开发的系统都很有信心。但却有一个疑惑一直在我心头萦绕:我不知道,我的架构和世界最优良架构之间的差距到底有多大。 阅读开源项目的源码能给我答案。 许多优秀的开源项目历经数千开发者的数万次提交,被数亿用户使用。这些项目从可扩展性、可靠性、可用性等各个角度考量,都是十分优良的。通过阅读这些项目的源码能让我找到自己在软件设计和开发上的不足。 于是我开始了我的源码阅读计划。 在阅读源码的过程中,我看过不少资料。但很多资料对于源码中简单的部分讲解的细致入微;而对复杂的部分则避而不谈或含糊其辞。 在阅读源码的过程中,我也走过了不少弯路。经常在一个难点中挣扎很久不得前进。 当然,阅读源码也让我收获颇丰。它不仅让我知道了自己的设计与优良设计之间的差距,还让我学到了许多的架构技巧、编程知识。在源码阅读的过程我也总结出了许多的经验和方法。 这时我才发现,阅读源码的意义所在。 总有人问:该如何提高编程技术? 这实际上内嵌了一个假设,就是说编程技术是一项十分特殊的技术,神乎其神。 其实,编程没有什么特殊的,它是科学技术->技术->工程技术中的一个小的类别。 明白了这一点,如何提升编程能力便变得显而易见了。因为,关于学习科学和技术,我们经历过十几二十年的训练。而且,这一训练是极有成效的(相比于国外的一些欢乐的训练方法,这里仅作提及,不展开争论)。 这时你可以回顾自己学习某一门课时,在什么时候有突飞猛进的感觉。 主要有两个阶段: 而其他的一些复习阶段、熟练阶段,则进步较小。常常许久感觉不到什么进步。 反映到编程上,也是一样的。一个人编程能力突飞猛进的阶段主要有两个: 所以,程序员进行了大量的编程作业,却没法收集到足够的反馈。这就像写完了作业,考完了试,但是没人老师给你批改,也没人告诉你正确答案。那你是很难进步的,因为你不知道自己做的对不对! 于是只能在莽撞的试错中前进,这就是成长缓慢的原因。 然而,各种原因,例如教会徒弟饿死师傅等,外加码农领域本来就是年轻更吃香,年老被裁员,所以,想获得前人的反馈难上加难。 但是,有一种反馈是存在的,或者,有一种标准答案可以被你拿来作为反馈。这种答案极为标准,比你周围大神写出的代码还要优秀! 对的,我说的是开源项目的源码。 优秀开源项目的源码经过了几千人的上万次修改,极为经典。这是极好的标准答案,就和课后习题的标准答案一样。 你要用这些优秀的开源源码作为答案去校准自己写的代码: 当你阅读源码时,你会不自觉地和自己的代码对比。在这个过程中,你就进步了。 好了,除了学习基本编程知识、环境外,另一个让自己编程能力突飞猛进的途径你已经知道了——阅读和学习优秀开源源码。 阅读源码其实很难。 当我们阅读一份源码时,需要面对的困难通常有: 所以很多人即使知道阅读源码的好处,也坚持不下来。就因为以上困难难以克服。 而阅读源码的难,是正常的。 从时间维度上看,每一个优秀的工程项目都经历了从雏形到成熟的曲折演化过程。而整个过程都会被映射到一个时间点上,肯定很难。 于是有人提出了阅读源码时,从第一次提交开始阅读的主意。我要说一下,这是错误的! 这是一种纸上谈兵式的错误,提出这种方法的人肯定没怎么读过源码。事实上,我也有过这种想法,然后在实践中很快被抛弃了。 如果一个项目只经过了几次提交,这种方法获取可行。而一个优秀的通常有几千上万次提交,将这几千上万次提交都读完,工作量要比把当前最新版本的代码读完难的多得多!因为其时间维度的复杂度比空间维度复杂度大得多了。 我用下面的图片展示了项目发展的过程,一个项目从版本1到版本n,逐渐完善。版本1一般是最简单最基础的,但是,要想从版本1读起,一直读到版本n,可能要阅读几千个版本。难度极大,远不如直接去读版本n。 还有,许多项目的第一次提交并不是只有几行代码的init项目,往往第一次提交就是几百个类。而且,初期的代码组织还比较混乱。毕竟,作者也不知道该项目能火,往往比较随意。 更别说,历史提交中还夹杂很多的Bug、回退、依赖包升级等等。想要把每次Bug、回退、依赖包升级所产生的历史背景都搞清楚,这几乎是不可能的任务。 每一个优秀的工程项目都凝聚了众多开发者的缜密思维逻辑,而这些逻辑都被投射到了平面的代码上。这使得阅读源码的过程成了逆推开发者思维逻辑的过程,显然,逆推是很难的。 不过,这方面的困难真有解决方案:详细了解开源项目的功能,然后自己琢磨该如何实现。 这样,就将逆推的过程转化为了正向推导+验证的过程,这样就相对简单了。 但无论如何,阅读源码总不会太简单。于是有人说读懂源码比编写源码更为困难,想必也是有一定道理的。 阅读源码推荐按照下面的步骤进行: 一般情况下,一个项目的源码要在3~4个月左右读完。否则,可能读到后面的,已经忘记前面的功能了。 当然越快越好,但考虑到我猿们还要加班,时间太短了不太现实。 有人说读懂源码比编写源码更为困难,不无道理。而源码阅读和软件开发一样,是一个非常综合的能力,没有一个万全之法。但有很多不错的方法。 例如一些常用的方法: 还有很多方法,不再一一介绍。因为没有实在的源码案例,光介绍显得很浮。 如果大家真的决定阅读源码,开始提升自己架构能力和编程能力的新阶段,可以阅读《通用源码阅读指导书——MyBatis源码详解》。 是一本以MyBatis源码为材料,详细介绍源码阅读相关方法和技巧的源码阅读指导书籍。 该书以实际开源项目MyBatis为例,详细介绍了源码阅读的经验和方法。在源码阅读中,透彻分析了相关的背景知识、组织方式、逻辑结构、实现细节。在本书的讲解中,不漏过每一个类,不跳过每一个难点,做到深浅一致。并对这些源码阅读方法进行了进一步的总结整理。 因为我是这本书的作者,自夸的话不多说了。 而且,事实上,这本书的销售情况已经十分火爆了。 甚至,这本书还被台湾地区购买了版权,繁体版也开始发售了。因为台湾地区市场很小,出版社很容易亏本。因此,凡是台湾地区购买版权的书籍一般都是受到多方肯定的。 不过繁体版卖的也确实贵,我算了下,折合人民币200+。 阅读源码会使你有很大的提升,但是这个过程也确实需要你沉下心来慢慢进行。 编程的进步之道就是: 多学,多练,但千万别忘了对答案! 最后,用书籍前言中的一句话结尾。 我是高级软件架构师易哥。 欢迎关注我,我会偶尔分享软件架构和编程方面的知识。1. 程序员阅读源码是一种什么心态?
2. 源码对编程意义何在?
3. 如何才能更好阅读代码?
3.1 时间维度带来的困难
3.2 空间维度的困难
4. 阅读源码的步骤
5. 阅读源码的方法
程序员阅读源码是一种什么心态?源码对编程意义何在?如何才能更好阅读代码?
原文链接:https://www.w1ym.com/83123/,转载请注明出处~~~
评论0