左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

98 | 高效学习:如何学习和阅读代码

陈皓 2018-09-06

读文档还是读代码

杰夫·阿特伍德(Jeff Atwood)说过这么一句话:“Code Tells You How, Comments Tell You Why”。我把其扩展一下:
代 码 => What, How & Details
文档 / 书 => What, How & Why
可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计 Why,是揣测,不准确,所以会有很多误解。而且,我们每个人都知道,Why 是能让人一通百通的东西,也是能让人醍醐灌顶的东西
但是,代码会告诉你细节,这是书和文档不能给你的。细节是魔鬼,细节决定成败。这样的话我们不但听过很多,我们做技术的也应该体会过很多。当然,我们也要承认,这些代码细节给人带来的快感毕竟不如知道 Why 后的快感大(至少对我是这样的)。
书和文档是人对人说的话,代码是人对机器说的话(注:代码中有一部份逻辑是控制流程的逻辑,不是业务逻辑)。所以:
如果你想知道人为什么要这么搞,那么应该去看书(像 Effective C++、Code Complete、Design Pattern、Thinking in Java 等),看文档
如果你要知道让机器干了什么?那你应该看代码!(就像 Linus 去看 zlib 的代码来找性能问题。)
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

  • 孙悟空
    耗子叔,可以推荐几个代码质量不错,适合精读的c/c++/java/go的开源项目么。
    2018-09-06
    27
  • metalmac.kyle
    Code Tells You How,Comments Tell You Why。 Brilliant!这总结太精妙了
    2018-09-06
    14
  • Aleck
    耗子叔,看了您前端、后端、机器学习等等讲了很多,就是没有讲移动的。
    您啥时候能讲一下移动的发展路径和知识树吗?然后自己也感觉未来移动的需求会趋向于饱和,请问耗子叔对移动的未来发展怎么看
    2018-09-06
    5
  • lovedebug
    读源码推荐opengrok,自己搭建一个server就行
    2018-09-06
    4
  • 极客不落🐒
    Source Insight 感觉有点上古神器的样子,当年在外企必备神器,怀念下。
    2018-09-10
    2
  • 刘鹏
    不知道Linus如果不幸离世,还有没有人看得懂Linux内核
    2018-09-06
    1
    2
  • 拯救地球好累
    文档和书籍有助于理解原理和思想,代码更有助于了解细节。
    阅读源代码并非是上来就硬钢代码,首先要补充相应的基础知识,明确软件功能并简单实践,阅读相应的文档说明。在进入细节前还应先把握代码整体的组织结构,再从接口抽象和模块粘合中把握基本要点,再弄清楚业务流转的流程(画图)。在看具体实现时应当区分业务逻辑和控制逻辑,正常代码和出错处理代码,正常逻辑和数据处理逻辑,核心算法与其他算法,软件内的实现与底层实现。区分这几种代码可以让我们更有效地抓住重点,删繁就简。最后,可以考虑运行时调试。
    2019-08-10
    1
  • 且听风吟
    这个方法很赞呀。最近正要看Java concurrent相关的源码,希望能啃下来。。。
    2018-09-06
    1
  • (╯‵□′)╯︵┻━┻
    看视频里的技术或代码展示分析感觉不错
    2019-11-17
  • 张健_Bamvor
    听完耗子哥这篇文章之后,发现自己模块的文档,有写的不够清楚的地方,主要没有讲清楚要做什么,当前做到什么程度,将来会怎么引进。
    2019-07-06
  • edisonhuang
    读代码和读文档,两者一个是抓住原理,掌握道,一个抓住细节,掌握术。在实践过程中的不同时刻,会需要不同的侧重。
    耗子哥读代码的经验在于,首先采用自顶向下的方式,先归类,然后了解软件功能,深入模块,运行跟踪,摸透细节。有好的代码跟踪工具会让整个过程事半功倍。
    2019-06-14
  • godtrue
    最近再读JDK源码,浩哥的方法正好用上
    2018-12-27
  • caohuan
    耗子哥 说的太到位了,我属于死磕物种,比如16年的项目交接的时候,项目的老人走了,没留下 任何文档,到我们做维护,需要修改功能或者做优化时,一般是瞎猜 如果运气好 秒解,有时候 很悲催 一周也搞不定,往往需要重新捋代码的业务,我们开发的项目也是以没有规范和文档为荣,后来业务需要调整,可之前的设计逻辑忘得差不多了,来回来去的 做了很多无用功,自己认识规范的重要性都有好大的代价,所以跟随 耗子哥 可以少走没必要的弯路。
    还有 觉得 我应该去找从未有过 的why的体验。
    2018-10-23
  • 薛璇
    这也意味着写应用程序时,规范的设计应该分几块去考虑,接口列表,粘合层,控制逻辑,错误处理,业务逻辑。
    2018-10-21
  • 青蛙爱吃土豆
    有什么代码质量比较好的java项目可以推荐下吗?
    2018-09-08
  • 锕杜
    耗子叔,到您这个水平是不是做什么业务都已经游刃有余?我个人非常好奇
    2018-09-06
  • 小薛薛
    放下急于求成,慢慢能体会到理解深挖一个个小知识点的酸爽了。 why就是舒服。
    2018-09-06
  • 袋鼠先生
    总结很到位
    2018-09-06
  • 太阳雪
    这期的内容感同身受,计算机本身就是个复杂的东西,如果没有技巧和方法就会迷路,您总结的非常好,如果更早的知道这些方法和指导,能提升很大的效率。
    2018-09-06
  • 太阳雪
    这期的内容感同身受,计算机本身就是个复杂的东西,如果没有技巧和方法就会迷路,您总结的非常好,如果更早的知道这些方法和指导,能提升很大的效率。
    2018-09-06
收起评论
20
返回
顶部