如果快速有效的读懂别人的代码?

阅读代码,是最真实的收获;
阅读文章,是自我意识的不断提升;
持续学习,才是程序员的人间正道!
这是一篇英语好文翻译。原文链接《How to quickly and effectively read other people’s code

如何快速有效的阅读别人的代码

作者:Alex Coleman | Learning, Web Development


就在前几天,一个STCer(自学成才的程序员)朋友问了我下面这个问题:

你会如何去理解别人的代码?我在阅读自己的代码的时候感觉非常舒服,但是无论何时当我尝试看别人写的东西的时候,我就会感觉非常迷茫。我知道这是不可避免的,尤其是在文档很少(或者根本没有),但是我现在没有任何策略。有什么可以立即见效的的小提示吗?

我喜欢这个问题,有以下几个原因:

  1. 我将介绍理解别人代码的方法将会帮助你:
    1)更好的理解自己的代码
    2)帮助您提高速度和轻松地理解您所接近的所有新代码块
  2. 它阐明了学习一项新技能的一个最重要的方面,比如编程:接触高数量、高质量的专业例子

这里有很多值得学习的地方,让我们开始吧。

什么是最好的方法去阅读别人的代码

我发现的最好的阅读别人代码的方式是以下几点:

找一个你知道这个代码在做的事情,并且从最后开始跟踪这个动作。

举例来说,你知道这段你正在看的代码,最后会生成一个带有一系列电影名称的文件。找到产生这个文件的具体的几行代码。

然后,倒退一步,并且找出它是如何在文件中放置信息的。

然后,再倒退一步,并且找到这个信息从哪里获取。

等等…

让我们称这些连接的代码片段为一个“动作链”

毫无疑问,使用这种方法将会导致你将不同位置的代码想成一个整体。这会给你带来对事物很强的洞察力,例如:

  • 代码体是如何被组织的(变量被定位在哪里?不同类型的方法被定位在哪里?等)
  • 这个人的编码风格
  • 写代码的人是如何思考编码和解决问题的(这是很难被描述的,但是找个比你去看例子更加直观)

[一个大的代码文件,很多你都不理解]

你应该看成:

[仍然是一个大的代码文件,但是你现在理解少数特定的部分]

就好像你待在一个漆黑的房间,然后,一次打开一盏灯,不同的灯在这个房间被打开,让这个房间的样貌的更多细节揭露。

使用“动作链”去逐渐理解一个之前从来没看过的代码块

冲洗并且重复

重复那个过程多次,你将会快速的增加越来越多的整个代码块的片段的你的理解。

随着你理解代码如何发挥他的功能,就像漆黑房间逐渐明亮,代码也会逐渐“明亮”。

这个工作的原因是,在所有情况下,代码的主体被设计是为了处理一个(或者更多)复杂的问题。所以你应该总是有这些“动作链”思想。

并且,你越能理解代码的不同部分是如何连接的,你就越能理解整个代码库,作为一个整体。

你看的(好)代码越多,阅读和理解所有的代码就会变得越容易,同样也会越快。

这也直接导致我喜欢这个问题的第二个原因:它强调了接触高数量、高质量的专业知识实例的重要性。

用编程的语言来说,“高质量的专业知识实例”=其他程序员写出来的好代码。

接触高数量、高质量的专业知识实例的重要性

Kathy Sierra,在她令人难以置信的深刻的新书,《Badass: Making Users Awesome》,中写道,接触高数量、高质量的专业知识实例是人们如果快速高效的学会新技能的两个重要的因素之一。(另一个是刻意练习)

你看(或者听)专业案例越多,你就会变得越好。你接触到的专家或专家工作的结果越少,你发展专业技能的可能性就越小。

让我们来看看第一个例子,很清楚地出现在每个人的脑海里:鸡性别鉴定。开玩笑。但事实上,它是这个概念的一个很好的展示。

从鸡的性别鉴定中学习(是的,你没有读错)

什么是鸡的性别鉴定?什么是在接触高数量、高质量的专业知识实例的过程中不得不做的?Kathy解释道:

“判断刚出生的小鸡的性别是总所周知的难,但是对于大量商业养鸡农村,越早将雌鸡从雄鸡中区分,就可以越早让这些雌鸡享受到为了生蛋的饲养方法。在1990年早期,日本人发明了一种特殊的方法来辨别鸡的性别和一些专家(可靠,准确的鸡的性别辨别者)。
好的,我们让这些专家教别人,可以吗?只有一个问题:当被问到,这个鸡的性别辨别专家不能准确地知道他们是怎么做的,’我就是知道这个鸡的性别‘”

所以他们是如何训练的呢?好的,假设你一个新的鸡的性别辨别者,你被放在一个装满小鸡的箱子前面。问题是:他们看起来确实一模一样,但是你仅仅被告知去抓一起起来,猜他的性别。就你而言,你的猜测完全是随机的。但是塞Sierra继续说道:

“在每个疯狂的、随机的、完全编造的猜测之后,鸡性别鉴定师会给你反馈。对,错,错,对。你仍然没有任何相关,专家是如何‘知道的’,但是你只是坚持下去,一遍又一遍。
最后,一些事情发生了。你开始得到比随机更好的分数。你变强了。随着时间的推移,强了更多。但是你不知道为什么。你所知道的所有,就是猜,但是现在一些‘神秘’的力量直到你的手去正确的箱子”

所有这些“魔法”是如何发挥作用的?Sierra把它带回家:

“ 在解除了足够多的反馈后,你的大脑(开始)探测模式和潜在结构,而你没有意识到。接触越多,你的大脑就会对感知进行微调,最终弄明白什么才是真正重要的。即使你无法解释,你的大脑也能更精细地区分并从噪音中分类信号。
知觉知识包括我们所认为的专家直觉。能够立即知道下一步棋该怎么走。或者这幅画是赝品。或者这房子会着火。或者代码有问题,即使你不能总是清楚地说明你是如何知道的。”

专家如何使用无意识知觉知识

这在编程中如何发挥

最重要的是,要知道编程的时间越长——因此看到的各种不同类型的代码示例越多——就越容易理解其他人的代码,做得就越快。

这是一个奇妙的自我循环:你读了更多的代码;你将获得更快更有效地理解它的能力;所以你可以读更多的代码;等等。

而且它还不止于此:你还将在自己的编码中看到巨大的积极收获。何以见得?

  1. 您将能够更快地理解在您自己的编程过程中不可避免地引用的代码示例和示例(例如:来自网络课程的东西;或来自StackOverflow帖子的片段)
  2. 你可以一眼就看懂你以前写的代码。(而且,不可避免的是,您将同时处理许多不同的代码片段,因此这种能力将带来巨大的回报。)

最终,这将转化为:

  1. 少停顿
  2. 多进步

这=更有趣,更令人愉快。赢了!
你最好相信…

后面就是广告了,就不翻译了。

参考文献

10 Techniques That Will Make You Understand Other People’s Code Better

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值