刚工作的张大胖问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部分,只有两千多行代码,你绝对值得拥有。

转自https://mp.weixin.qq.com/s/gGsvugdq2SfCIQ-KQIKI8Q

开源代码啃不动,不如先定个小目标相关推荐

  1. 【先定一个小目标】数据挖掘学习进度总结

    1 数据可视化 pandas df.head() 看前几行 df.value_counts() 看总体分布 df.info()/df.describe() 看缺失值.整体情况 df.plot(kind ...

  2. 先定一个小目标,自己封装个ajax

    你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...

  3. 2019,先定个小目标

    说来惭愧自己一直没有写文章定目标这些一类的习惯,只是偶尔会想起应该办这件事了自己就会去做,然而坚持不了多久就放弃了.别人问我我的目标是什么或者我想要什么的时候,我也一概不知道,不知道自己到底在追求什么 ...

  4. Java学习|先定一个小目标比如让行为聚焦

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载.​ 如果你想达成一个结果,而且保持效率和质量,就必须让自己行为聚焦到一点 ...

  5. 【科技百咖】人大金仓:先定一个小目标,比如做中国No.1的数据库

    自身的强大内力才是制胜一切的关键 自中美贸易摩擦开始,国内就悄然兴起了一股「王牌热」,大家纷纷在各个角度寻找中国制胜美国的各种「王牌」.但在人大金仓总裁杜胜的心中,真正的王牌还是「内力」,自身的强大内 ...

  6. 关于“先定一个小目标,比如挣它一个亿”

    王健林有一次在采访里说过这句话"先定一个小目标,比如挣它一个亿" 这句话的确挺有意思,起初我只是把它当作段子来看的. 最近在学习python,我发现学习的这个过程,也需要有明确的目 ...

  7. 先定个小目标, 使用C# 开发的千万级应用

    话说昨天的港股发生了一件大事,腾讯成为亚洲市值最高的公司,在这历史性的一刻,作为在鹅厂工作的C# 程序员,也应该让世人了解下C# 并不是那么没有市场.在鹅厂,代码构成中60%以上是C++, C#也有1 ...

  8. 先定一个小目标:10天自学C语言编程,教你如何改变一生

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  9. CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...

    点击我爱计算机视觉标星,更快获取CVML新技术 CV君汇总了过去一周计算机视觉领域新出的开源代码,涉及到图像质量评价.图像去雾.图像修复.医学图像分割.目标检测.人脸对齐.度量学习等,其中有多篇来自C ...

  10. 吴云坤:先定一个小目标,让网络安全具有智能

    前言 忽如一夜春风来!本周有一个王健林的采访视频刷爆了朋友圈,无独有偶,他谈小目标的话音还未落,同一天360网神集团总裁吴云坤,也定了一个小目标,一个能达到的小目标:"让网络安全具有智能&q ...

最新文章

  1. MPB:中科院城环所杨军组-​​水体浮游植物采集与鉴定
  2. 报告:下一代技术革命“AI”来袭
  3. 两个变量交换值 和按位异或的理解
  4. TF-A代码阅读: 双系统切换时是如何保存寄存器的(cpu_context介绍)
  5. Illegal access: this web application instance has been stopped already
  6. 【机器学习】逻辑回归特征的离散化与交叉
  7. android工程引入unity,Unity导出Android Studio工程
  8. (转)Cobbler无人值守批量安装Linux系统
  9. 大数据计算引擎:impala对比hive
  10. 1185 城市名排序
  11. Spark(Shuffle)
  12. 计算机图形学(二)——画一个三角形1.0
  13. 极力推荐收藏的几个高清免费图片素材网站
  14. onclick,click和onfocus,change区别
  15. 2021年最新Android面试点梳理,成功入职腾讯
  16. Qt 常用控件样式表及遇到的问题
  17. 高通Android平台开发
  18. C#: 实现幻数判断的完整源代码
  19. exclusive 和 lock
  20. 饿了不能吃的11种食品

热门文章

  1. python全角数字_用Python转换一些常见全角字符为半角
  2. 阿里云视频转码转码模板
  3. 解决this.$set()不更新问题
  4. 点击元素弹出弹框后,背景不能滚动,关闭弹窗时,恢复滚动,背景元素位置保持不变
  5. 手机号字典生成神器——让天下没有难用的手机号字典
  6. 罗翔+围城+杨绛+原生家庭+亲密关系
  7. 变速箱电控信号模拟箱
  8. 2023 留言PHP开源源码v3.5 有后台
  9. chatgpt赋能python:用Python编写查询姓名程序的指南
  10. 3 函数的增长概念(中英对照)