如何去阅读并学习一些优秀的开源框架的源码

10个你能参与并学习的Java开源项目 - ImportNew
如果你正在寻找有趣的 Java 项目想参与和贡献,那么请继续阅读这篇文章。这篇博文是 Java 画廊(Java Gallery)中的一部分,在Java画廊栏目下我介绍了一些有趣的Java项目给我们的读者。成为 Java 开发团队中的一员并编写大量代码是一件很棒的事情。
在学校里我们也许没有机会接触到真正的开发环境。在企业里我们可能做不了最喜欢的项目。在这种情况下,让我们加入可以带给我们欢乐和兴趣的开源项目吧。
有很多备受关注的初创开源项目,下面列出十个项目是我觉得非常有趣的,涉及到的学习范围也很广。其中有些还在早期阶段,这对我们来说更好。看一看这些项目,选择一个你喜欢的,然后给它的领导者发一封邮件并参加到开发中去。
– 策略类的游戏 – Java 服务端和 Android 客户端。
– 运行于浏览器中的小线虫的神经力学模型,其模拟后端都是用 Java 写的。
– Reddit API 的Java 包装器。
– 用于绘制数据的超轻量 Java 库。
– 用于创建游戏的开源框架。
– 开源的乒乓类游戏。
– Java 实现的比特币协议。
– Strava API 的 Java 包装器。
– 基于 Java 的文字冒险游戏。
– 能方便地从 Youtube 和其他来源的流建立庞大的播放列表和视频转换。
享受编程和学习的快乐吧!
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:
,博客:)
Hi,请到伯乐在线的小组发帖提问,支持微信登录。链接是: http://group.jobbole....
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2017 ImportNew如何去阅读并学习一些优秀的开源框架的源码? - 知乎5659被浏览89546分享邀请回答5添加评论分享收藏感谢收起如何阅读框架源代码 - 简书
如何阅读框架源代码
为了解决一些特定问题,我们常常需要去阅读一些框架的源代码(例如为了写一个自定义的webpack插件,我们需要阅读webpack的源代码),或者有时候我们只是单纯的想学习一下优秀框架的设计方法(想必很多前端的同学们都去读过jquery的源码)。好的技巧能让我们的阅读工作更加顺畅,甚至事半功倍
了解框架的设计思想
这一步尤为关键,我们看不懂源码(或者看起来举步维艰),并不是因为不懂某一句语法,而是不明白作者的思路。举一个简单的例子:
//这个方法可以获得point2顶角的弧度值
function getAngle(point1, point2, point3) {
var bb = (point2.y - point1.y)*(point2.y - point1.y) + (point2.x - point1.x)*(point2.x - point1.x);
var aa = (point3.y - point1.y)*(point3.y - point1.y) + (point3.x - point1.x)*(point3.x - point1.x);
var cc = (point3.y - point2.y)*(point3.y - point2.y) + (point3.x - point2.x)*(point3.x - point2.x);
var cosa = (bb + cc - aa)/(2*Math.sqrt(bb)*Math.sqrt(cc));
return Math.acos(cosa);
getAngle方法接收三个坐标参数,可以计算出point2顶角的弧度值,如果不告诉你这使用了运用三角形的余弦定理,恐怕你看半天也看不出来这是怎么算出来的
那么我们可以通过什么渠道去了解框架的设计思想:
到框架的官网看文档,开源的框架,甭管详不详细,这肯定是第一手权威资料
到网上搜别人的分析总结,大多数情况下,都会有大神已经研究过了,站在巨人的肩膀上,能省不少事
另外,设计思想是整个框架层面的,对于每一个实现细节,又会使用不少设计模式,例如单例模式、代理模式、工厂模式等等,这就需要平时的积累了。有一定代码量的积累之后,建议阅读一些设计模式类的书籍,对自己的代码设计,以及阅读别人的源码,都很有益处。
先摸清主脉络
了解了代码的设计思想的另外一个作用就是,我们可以先摸清框架代码的主脉络,暂时忽略一些细节。例如webpack使用了Tapable的插件架构,我们只需要知道Tapable的使用方式,而不需要去搞清楚Tapable是怎么实现的。也就是说,有些模块,我们一开始只需要知道它是干什么的,把它当做一个黑盒子,有必要的时候再去阅读。
具体的做法:
找到框架入口,循着入口去读
遇到分支,判断可否略过?
+是否关键?否:略过
+是否复杂?是:略过,回头再来收拾它
+是否功能明确?是:略过,必要的时候再来阅读
了解了框架的设计思想,如果你还带着一个确定的目标去阅读,也能提高阅读的效率。例如,为了去实现一个处理多个html模板的webpack插件(),我找了一个类似的框架,然后对插件涉及到的部分,具体的到webpack源码中去重点阅读。
搭建调试环境,打印调试信息
在阅读的过程中,我们常常会遇到部分代码让人摸不着头脑、百思不得其解的情况,老是卡在这种问题上,容易让人心生退却。此时最好的办法就是,将调试环境搭建起来,试着去修改某一行代码,或者增加几行打印信息,灵感自来。
技巧的使用也是要建立在过硬的基础上的,这唯有平时多写多读了~~
欢迎关注,共同学习,有问题请评论或发简信,如果你觉得文章对你有所帮助,请不要吝惜你的喜欢,当然,给我打赏我也不会客气的~~
更多精彩,邀您关注:
雕虫非小计,鱼目可混珠如何去阅读并学习一些优秀的开源框架的源码? - 知乎5659被浏览89546分享邀请回答1添加评论分享收藏感谢收起

我要回帖

 

随机推荐