专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
码农翻身  ·  2月,软考彻底爆了!! ·  16 小时前  
OSC开源社区  ·  谈谈DeepSeek-R1满血版推理部署和优化 ·  2 天前  
程序猿  ·  字节跳动因代码抄袭,被判赔8266.8万元 ·  昨天  
程序员小灰  ·  DeepSeek俱乐部,最后一天优惠! ·  3 天前  
程序员的那些事  ·  游戏开发到一半,程序员突然坐牢去了... ·  4 天前  
51好读  ›  专栏  ›  码农翻身

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

码农翻身  · 公众号  · 程序员  · 2017-08-16 20:00

正文

刚工作的张大胖问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上半年文章精华







请到「今天看啥」查看全文


推荐文章
码农翻身  ·  2月,软考彻底爆了!!
16 小时前
OSC开源社区  ·  谈谈DeepSeek-R1满血版推理部署和优化
2 天前
程序员小灰  ·  DeepSeek俱乐部,最后一天优惠!
3 天前
程序员的那些事  ·  游戏开发到一半,程序员突然坐牢去了...
4 天前
谷歌开发者  ·  Android测试支持库1.0现已发布!
7 年前
德慧智  ·  四象与“修之身”
7 年前