查看原文
其他

开源代码啃不动,不如先定个小目标

2017-08-16 老刘 码农翻身

刚工作的张大胖问Bill : “大神, 阅读源码到底有嘛用? ”


Bill笑了: “老祖宗早就给我们总结好了,‘熟读唐诗三百首, 不会作诗也会吟’, 你想想,你刚学Java那会儿,不就是比葫芦画瓢,‘抄袭’着别人的源码成长起来的吗? ”


“啊,那也算源码吗? 都是小例子啊?”


“当然算了” Bill 说  “还有, 你刚开始工作的时候, 不都是先看看别人是怎么写的, 然后自己才能摸索着干活吗? ”


“ 是啊, 不过我们的项目代码之烂, 我看了第一遍, 永远不想看第二遍。 每次改bug我都痛苦不堪。”


“你们的项目代码惨不忍睹,你想提升自己的功力,阅读优秀的开源代码是不二法门, 这些代码中会展示优秀的设计和实践,还有很多编程的惯用法,你仔细阅读,认真思考,再想办法应用到工作的项目中, 对自己和项目都是极有好处的。


“听大神这么说,我已经迫不及待地要去读了。”


“别着急, 网上有很多怎么阅读开源代码的文章, 从哪里寻找源码, 用什么工具辅助阅读, 甚至怎么做笔记都讲了很多。 磨刀不误砍柴工, 你先看看这些文章,做个准备再开始吧。”


一周后。


张大胖垂头丧气地来找Bill 了: “大神, 这开源的代码简直是没法看!”


“为什么啊? 我不是让你看介绍代码的文章, 后来还专门推荐相关图书了吗?”


“ 是啊,人家说得头头是道,可是等到我自己把Spring代码下载下来, 开始阅读的时候就晕菜了!”。


“我应该给你说过一定要把它运行起来,不但要看静态的代码,还有观察动态的行为! 两者结合起来才能透彻的理解


张大胖说:“我运行了起来了啊, 但是这源代码实在是太多了,千头万绪, 我好不容易找到入口点, 很快就调到细节的坑里, 这函数一层调用一层, 都不知道调用了多少层, 花费了我一个下午, 我发现只看了一个微不足道的小功能, 这性价比实在是太低了,我是坚持不下去了。 ”


Bill 表示了深切的同情, 确实如此,很多知名的开源软件都发展了10年以上,期间有无数的牛人添砖加瓦,这才盖起一个个宏伟的高楼。  比如Hibernate, Spring 都有几十万,上百万行代码, 像Linux这样的巨无霸都是千万级别的了,你看得过来吗?


Bill意识到自己犯了一个错误,不应该让刚刚工作的,经验还不足的张大胖同学去啃这些大块头,相反应该让他先去读一些小而美的源码,逐渐适应,等到有经验了再去努力驾驭那些巨无霸。


不要想着一口吃个胖子, 既然看不了复杂的,先去看点简单的如何?  


Bill打定了主意:“大胖, 最新版的Spring 你不要再看了, 我给你推荐几个简单的源码JUnit 3.8.1,  Spring0.9 。”


“啊,这也太老古董了吧, 我要是和别人聊起来,人家还不笑死我?”


“我给你说啊, 其实一个开源软件它的核心思想是非常简单的, 比如Spring 就是AOP, IOC,比如JUnit就是让人轻松地写单元测试然后自动运行。 后期新版本的代码虽然复杂, 但都是基于这些核心概念的扩展。  这些代码虽然比较古老, 但麻雀虽小,五脏俱全, 特别是阅读难度极大降低, 从百万行级降到几万行,甚至几千行, 你能关注核心概念的实现,不会被枝枝蔓蔓迷住双眼。


“是吗, 代码量降了这么多, 这给了我一点信心啊, 但是这么古老的代码,质量怎么样?”


“这你放心, 源码虽然古老,但毕竟是大牛出品,质量依然是顶级的,绝对可以学到很多东西。”


“那我看完早期版本,再去看新版本不还是看不明白?” 张大胖还是对大块头儿恋恋不舍。


“由于核心思想是一脉相承的,你看完早期版本, 再去看比较新的版本,会有一种似曾相识的亲切感(当然前提是软件设计没有发生颠覆性变化),非常有利于后续阅读。”


“既然早期的代码简单,我看完以后是不是可以仿照着造个轮子?”


“没错,那样收获肯定更大。其实还有一点我特别想强调的是,你会拥有一次完整的开源代码的阅读体验,会觉得大牛写的代码也就这样啊,从而有信心继续阅读, 这样正反馈就建立起来了。


张大胖说:“好的,大神,你这么一说我又有信心了,先定个小目标,把JUnit3.8.1给搞定了!”


ps : JUnit3.x版本是使用设计模式的典范, 抛去UI部分,只有两千多行代码,你绝对值得拥有。 点击文末的阅读原文可以下载。

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身2016文章精华》或者《码农翻身2017上半年文章精华


有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577



码农翻身

用故事讲述技术

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存