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



本文章转载自“码农翻身”的微信公众号4B3思考者日记网-束洋洋个人博客

文章作者刘欣 工作15年的前IBM架构师

刚工作的张大胖问Bill : “大神, 阅读源码到底有嘛用? 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

“啊,那也算源码吗? 都是小例子啊?”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“当然算了”Bill 说“还有,你刚开始工作的时候, 不都是先看看别人是怎么写的, 然后自己才能摸索着干活吗? ”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“ 是啊, 不过我们的项目代码之烂, 我看了第一遍, 永远不想看第二遍。 每次改bug我都痛苦不堪。”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

“听大神这么说,我已经迫不及待地要去读了。”4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

一周后。4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

张大胖垂头丧气地来找Bill 了: “大神, 这开源的代码简直是没法看!”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“为什么啊? 我不是让你看介绍代码的文章, 后来还专门推荐相关图书了吗?”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“ 是啊,人家说得头头是道,可是等到我自己把Spring代码下载下来, 开始阅读的时候就晕菜了!”。4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“我应该给你说过一定要把它运行起来,不但要看静态的代码,还有观察动态的行为! 两者结合起来才能透彻的理解4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

不要想着一口吃个胖子, 既然看不了复杂的,先去看点简单的如何?  4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

Bill打定了主意:“大胖, 最新版的Spring 你不要再看了, 我给你推荐几个简单的源码JUnit 3.8.1,  Spring0.9 。”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“啊,这也太老古董了吧, 我要是和别人聊起来,人家还不笑死我?”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

“是吗, 代码量降了这么多, 这给了我一点信心啊, 但是这么古老的代码,质量怎么样?”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“这你放心, 源码虽然古老,但毕竟是大牛出品,质量依然是顶级的,绝对可以学到很多东西。4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

“那我看完早期版本,再去看新版本不还是看不明白?” 张大胖还是对大块头儿恋恋不舍。4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

“既然早期的代码简单,我看完以后是不是可以仿照着造个轮子4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

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

 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

张大胖说:“好的,大神,你这么一说我又有信心了,先定个小目标,把JUnit3.8.1给搞定了!”4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

PS  JUnit3.x版本是使用设计模式的典范, 抛去UI部分,只有两千多行代码,你绝对值得拥有。4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

 4B3思考者日记网-束洋洋个人博客

 

(转载本站文章请注明作者和出处 思考者日记网|束洋洋个人博客 ,请勿用于任何商业用途)

『访问 思考者日记网404页面 寻找遗失儿童』

告知
  •     本站90%以上文章均属原创,部分转载已加上原作者出处。 如需转载本站文章请您务必保留本站出处!
  •     打广告评论者请自重,请为广大网友提供一个健康干净的网络空间。
  • 感谢主机屋提供网站空间;
  • 感谢万网阿里云提供域名解析;
  • 感谢EmpireCMS提供CMS系统;
  • 感谢bootstrap展示本站前端页面;
  • 感谢Glyphicons Halflings提供字体;
  • 感谢大家一直以来对本站的喜爱,感谢大家!
近期文章 建议与反馈