从《如何高效阅读》到如何阅读代码

?《如何高效学习》是一本主张通过整体性学习的方法来提高学习效率的书。书中结合信息的几种不同类型(随意的、观点的、过程的、具体的、抽象的),从信息的获取、理解、拓展、纠错和应用这几个逐步深入的层次,提出了如何高效学习的假说,指出了不少具有实用价值的方法,例如快速阅读、笔记流、比喻内化、图表、纠错和项目应用等。

刚看这本书的时候,我是一口气大约在一个多小时快读完的,记了十几条笔记。后面两天都回头来翻一番书后的总结和自己的笔记,每次都有些新的感想。这里尤其想整理的是:这本书给自己在阅读代码方面的几点启迪。

整体性学习与理解业务逻辑

在《如何高效学习》这本书中,整体性学习是指遵循书中建议的信息获取、理解、拓展、纠错和应用的具体步骤,以达到对信息的内化、融会贯通和灵活应用的方法。其实这里的信息不仅仅可以指书本上的信息,还可以是某个软件项目上的信息:它包括用户需求、业务流程、系统设计和软件实现。不对这些全面的获取和深入的理解,不可能理解了后面的系统设计,更别提软件实现了。笔者最近学习一个分布式存储系统的时候,就在这里走了弯路。我当时在对系统的整体模块有了大概的了解之后,就开始看模块介绍文档,然后马上开始话费大量时间阅读代码。最后花了一两周时间,对系统整体的业务的理解仍然少得可怜,并且看过的模块里面仍然有很多怎么也看不懂的代码。现在想来,正确的做法应该是先了解整个系统的功能、特点和接口,然后深入学习去理解它的主要业务操作的原理和流程,代码的阅读应该放在最后。

比喻、类比和关联

比喻这种方法受到《如何高效学习》的强烈推崇,因为它能够深入浅出地描述问题、说透问题。而类比则是建立横向联系的必经之路,它能够把所学习的知识和其他已知的关联起来,这是一个加深理解和记忆的过程。比如当时学习分布式存储系统的时候,对复制组放置的逻辑一直模糊,直到最近细读ceph, 读到里面介绍PG和OSD的关系的时候,才彻底清晰起来。而这一环节,其实在之前做某款文件系统的时候有接触过的,单就是没有和分布式里面的存储资源的划分和分配关联起来。而之所以没有本能地关联起来,根本还是在于对于一个存储系统的几个关键功能、模块的理解还没有内化。

结构、模型和高速公路

《如何高效学习》这本书中提出了关于学习的“结构”、“模型”和“高速公路”的三个概念,分别用来比喻已建立紧密联系的一系列知识、简化了的并且做了快照之后的结构以及结构和结构之间的联系。落实到存储系统方面,它的“结构”不外乎包括前端接入、逻辑地址映射、物理地址映射、后端写入四个部分,实现地址映射的“模型”则主要包括hash、索引,后端写入的模型通常是一部非阻塞IO模型。而连接存储系统和分布式的“高速公路”就是支持一致性协议的和业务无关的接口库。

勤于应用和熟能生巧

高效学习中最关键的步骤就是:将所学的知识用到实际中去。因为如果你能发现知识在你生活中的价值,知识就与你产生了紧密的联系。想想大学的那些布尔代数、离散数学、线性代数和微积分,它们可怜地在你的记忆里蒙上了一层厚厚的灰尘,以至于你都快认不出它们了。写一个算法,里面的全排序是否是必需,优先级队列是不是就够了?另外,算法的正确性如何证明?这些好像听起来有些困难。根本原因还是你没有把它们真正用起来过。以自己为例,不知道看了多少遍《深入理解Linux内核》,却很少用到在最近的工作当中去。而我们对C/C++/Java/Python等则一目了然,只因为它简单么?每次想到这些问题,才感觉到自己在日常工作中的深入思考之少!

不过言归正传,还是先回到阅读代码方面的“应用”。在这里,业务逻辑相当于“原理”,而代码的实现则相当于“应用”,所以理解了原理,迅速找到相应代码的实现能加深对系统的理解,而修改相应的代码乃至重构才是熟悉代码的不二法门。

读书笔记和代码笔记

《高效学习》这本书建议随身带上一个小本子和笔,便于随时记录信息中的关键、难点、重点,而非信息的主要内容。代码阅读也是如此,目的不是归纳出流程,而是理解逻辑。因此,同样也可以随时记录看不懂模块的所在层次、功能、关键逻辑和重要函数。特别需要针对不懂的函数和功能,确定到底是算法不懂,还是业务不懂。如果是算法,回去搞明白相应模块的算法原理;如果是业务,退一步从上层看看之前的业务逻辑的理解是否有偏差。

原文地址:http://blog.51cto.com/xiamachao/2115736

时间: 2024-11-01 21:02:24

从《如何高效阅读》到如何阅读代码的相关文章

怎么学习阅读大型项目的代码

第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳动或产生厌恶情绪. 5.请将从开放源码软件中得到的益处看作是一项贷款, 尽可能地寻找各种方式来回报开放源码社团. 6.多数情况下,

如何阅读大型项目的代码?

本文转载自:http://blog.csdn.net/jk110333/article/details/7563718 Technorati 标签: 源码阅读 -------------------------------我是分割线的开始------------------------------------------ ++++++++++++++++++++ 第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时,

如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚

摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读文档.查看源码,然后又很快忘记.始终不能融汇贯通.本文主要基于Spring Cache扩展为例,介绍如何进行高效的源码阅读. SpringCache的介绍 为什么以Spring Cache为例呢,原因有两个 Spring框架是web开发最常用的框架,值得开发者去阅读代码,吸收思想 缓存是企业级应用开

从阅读Discuz的核心代码并给出注释的经历分析程序员该如何阅读代码?

本文标签:   程序员 php Discuz的核心代码 框架 深度学习框架 阅读优秀的代码,是技术水平成长的最佳途径.记得每个进来的新人,我都做过阅读优秀代码的要求,但几乎都只能坚持很少一段时间而已. 前晚大家还在开玩笑的讨论,都是因为看了前人的一些写法,才学会了一些乱七八糟的花招. 晚上我又开始重新阅读Discuz的核心代码,花了1h多的时间,才完成一个core文件的注释. 注释后的代码: <?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * Th

如何阅读他人的程序代码

近日,在互联网上游荡,偶然发现一篇曾经的文章,是关于如何阅读他人程序代码的,阅后颇为受益,于是乎重新整理了一下格式,将此文转载如下: 如何阅读他人的程序代码 文/王建兴   作者简介: 王建兴,清华大学资讯工程系的博士研究生,研究兴趣包括计算机网络.点对点网络.分布式网络管理.以及行动式代理人,专长则是Internet应用系统的开发.曾参与过的开发项目性质十分广泛而且不同,从ERP.PC Game到P2P网络电话都在他的涉猎范围之内. 一.读懂程序代码,使心法皆为我所用 程序代码是别人写的,只有

如何阅读公司的项目代码

看到ITFriend中有些小伙伴刚进入公司,面对大量的项目代码,往往手足无措,有点慌,我说下我的经历. 声明:我从事的是C++开发工作,阅读的代码都是基于客户端/服务器的,以下谈的是C++项目代码的阅读方法多些 希望懂java的小伙伴分享下java公司项目代码的阅读方法,小弟感激不尽. 编译代码把项目跑起来  代码到手以后,先尝试着编译一下,无非就是库的配置,库路径的配置,缺少某个文件,或者头文件包含路径不正确,一般公司给你的代码都可以编译成功,windows平台下一般使用vs工具来编译,集成调

如何阅读修改别人的代码?

如何阅读别人的代码? 读代码的时间总是比写代码的时间更长 维护升级老代码或者同事突然离职交接, 读代码是必不可少的过程. 不夸张的说,可能没有人觉的读代码比写代码轻松. 但这又是工作中不得不面对的场景. 如果已有代码可以运行,那便跑起来看看 看看需求,知道这段代码干了什么事情,如果能够理解业务就更好了 看看数据库表结构.结合需求 一定会有数据,运行时候的数据对比数据库的数据更容易理解逻辑 看看已有的设计文档.更业务逻辑对应 根据功能分类一个一个的读代码吧 如何在已有基础上进行再次开发? 再次开发

教你阅读Python开源项目代码

为什么要阅读开源代码 阅读 Python 开源项目代码主要有如下三个原因: 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法,只能去翻源码. 对某些项目或者方向非常感兴趣,希望深入. 学习遇到瓶颈需要汲取开源项目的经验和用法来做提高.注意:很多人学Python过程中会遇到各种烦恼问题没有人帮答疑.为此小编建了个Python全栈免费答疑交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿

7款Linux下阅读PDF的阅读器。

5款Linux下阅读PDF的阅读器.1. Mupdf:link 2. Adobe Reader:link 3. Foxit Reader:link 4.Evince:link 5. Okular:link(基于KDE) 6. zathura Zathura 是一款新的 PDF 查看器 ,它相当轻巧,界面简约(与 Apvlv 很相似),且可以定制(如按键绑定.默认窗口大小等 ).除了 PDF 查看器所具有的一般功能之外,Zathura 还包括搜索.表单编辑.可点击链接.导出图像等其他功能.和 Li

《如何为阅读一本书》阅读ing(一)

<如何阅读一本书>起源于我看过的一部电影<Quiz Show>,电影的主角范伦多就是本书的第二版两位作者之一,他是一个极其聪明的家伙,有关他的传奇,可以通过<Quiz Show>来了解一下! 仰慕这本书好久了,前天,这本书终于到了我的手里!爱不释手! 以前有过粗略的读过电子版的一部分,但是我觉得,像这样的好作品,实用性如此高的作品,应该买下来珍藏才对! 今天阅读了一百来页,就大致说说自己的收获! 阅读要有主动性,长期以来,我们的阅读都是被动的,导致阅读的效率是极其低下的