三年工作经验和月薪16k的java程序员应该如何学习框架源码?

640?wx_fmt=jpeg


不管对于哪个段位的程序员来说,读源码都是一件好处颇多的事情,特别于初学者而言,这能迅速的吸纳优秀框架精华代码营养,迅速成长。不巧的是,晦涩难懂的源码,很容易让人心生怯意。今天分享一下读源码的方法。


一、了解框架解决了什么问题


这不光对读源码有帮助,对整个学习都很有帮助。思考一个问题:你学习 Vue\React 的原因,除了它们如日中天,再不学习都不好意思找工作了,还掺杂了一些它们的某些优秀特性能给我带来某些好处的思考么?

 

新潮的框架,开发者需要而且也应该去了解,相比之前的技术体系,这个框架到底解决了什么问题,优势在哪,怀着目的去学习才不至于迷茫。例如 Vue\React 最大的优点是什么呢?组件化吧,带着框架是如何解决这个问题的疑问去学习,定能事半功倍。


 
 

二、了解框架的设计思想


我们看不懂源码(或者看起来举步维艰),并不是因为不懂某一句语法,而是不明白作者的思路。举一个简单的例子:

 

1 //这个方法可以获得point2顶角的弧度值2    function getAngle(point1, point2, point3) {3        var bb = (point2.y - point1.y)*(point2.y - point1.y) + (point2.x - point1.x)*(point2.x - point1.x);4        var aa = (point3.y - point1.y)*(point3.y - point1.y) + (point3.x - point1.x)*(point3.x - point1.x);5        var cc = (point3.y - point2.y)*(point3.y - point2.y) + (point3.x - point2.x)*(point3.x - point2.x);6        var cosa = (bb + cc - aa)/(2*Math.sqrt(bb)*Math.sqrt(cc));7        return Math.acos(cosa);8    }//这个方法可以获得point2顶角的弧度值
2    function getAngle(point1, point2, point3{
3        var bb = (point2.y - point1.y)*(point2.y - point1.y) + (point2.x - point1.x)*(point2.x - point1.x);
4        var aa = (point3.y - point1.y)*(point3.y - point1.y) + (point3.x - point1.x)*(point3.x - point1.x);
5        var cc = (point3.y - point2.y)*(point3.y - point2.y) + (point3.x - point2.x)*(point3.x - point2.x);
6        var cosa = (bb + cc - aa)/(2*Math.sqrt(bb)*Math.sqrt(cc));
7        return Math.acos(cosa);
8    }


(左右滑动查看完整代码)


getAngle方法接收三个坐标参数,可以计算出 point2 顶角的弧度值,如果不告诉你这使用了运用三角形的余弦定理,恐怕你看半天也看不出来这是怎么算出来的。

 

了解框架的设计思想的方法:

 

  • 到框架的官网看文档。开源的框架,甭管详不详细,这肯定是第一手权威资料


  • 到网上搜别人的分析总结(源码分析也不会少),大多数情况下,都会有大神已经研究过了,站在巨人的肩膀上,能省不少事


另外,设计思想是整个框架层面的,对于每一个实现细节,又会使用不少设计模式,例如函数式编程(Js 中最为常用)、单例模式、代理模式、工厂模式等等,这就需要平时的积累了。有一定代码量的积累之后,建议阅读一些设计模式类的书籍,对自己的代码设计,以及阅读别人的源码,都很有益处。


三、搭建调试环境,摸清执行主脉络


细分到每个模块,要对模块功能有个整体的把握,如何去做到这个“把握”?除了官方文档和网上查阅的资料,最好的办法就是写一个简单的 Demo,搭建好测试环境,增加一些调试信息,自然能理清除框架的生命周期中,每一步需要调用那个模块(对于目录结构很清晰的优秀框架,有时候也可以凭直觉猜测,打印日志确认)

 

四、分清主次


框架源码就是一颗枝繁叶茂的参天大树,而你要做的事情是从根部往上爬。树要这么多分支,时间又是这么昂贵,阅读的策略很重要。我们的阅读路径,要以主要流程为主(也就是树的主驱赶,这样才能尽可能快的到达顶点),对于一些细枝末节,再这之后再来慢慢啃(或者有必要的时候)。


例如,要去阅读 Vue 的源码,有个目录是解析模板,生成语法树 AST 从而最终生成 Render Function 的, 其实这一步最关键的是这个 Render Function 的生成结果,对于如何去解析模板、生成语法树,可以先放一放,回头需要的时候再回头看。否则你很容易卡死在某个点上出不来,从而产生放弃的念头

 

五、坚持不放弃


技术策略得当,遇到棘手过不去的问题也很正常,这时考验的就是毅力了,继续调试、搜索资料、或者找个大神来问一问都行,只要不放弃就好。

 

六、学会向他人求助


无论你的自学能力有多强,无论你是P4还是P7,总会有遇到困难的时候。普通人遇到瓶颈只能自己默默的去一次次冲击,如果冲击成功还好,是另一片天地;倘若冲击失败,轻则灰心丧气迷失一阵子,重则一蹶不振。


如果有人领路呢?看过小说的都知道,冲关的时候如果有人指导,借鉴前人的经验,可以少走很多弯路。人生不过数十载,何不把时间节省出来去多学点东西,多做点有意义的事情。


为了帮大家尽快的提升自己,更有效率的进阶,我精心准备了框架源码系列资料,希望能帮你早日突破自己!


640?wx_fmt=png

扫一扫二维码,立即进阶java架构师

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值