新手问题 如何提高对代码的理解速度?

xiaoronglv · 2015年07月17日 · 最后由 winnie 回复于 2015年07月17日 · 3293 次阅读
  1. 去年的一个场景

    我和 Vincent 在一起看别人写的非常烂的代码,他的思维在各种 Context 中跳来跳去,居然能很快理解各种垃圾方法的意图。宛如预先加载了所有的代码到大脑中。

    我和他结对的时候,压根跟不上他的节奏。当时我全职做 Ruby 不到一年,把原因归结为「经验不足」。

  2. 今年的又一个场景

    今年我和吴坚结对去理解别人代码(这次不算烂),他看了 10 分钟的代码,就在各个文件的 Context 跳转自如。今年我也算是个中级程序员了,经验比较丰富了,依然不具备这种能力。

    所以这篇文章是一篇自言自语的反思,也特别期待你们的分享。

1. 如何提高对优质代码的理解速度?

优秀的代码总有通用的模式,如果我一直遵循 Ruby / Rails Best Practice,当看到别人严格的遵守 Best Practice 的代码时,心领神会。

假如工作中需要我写一个 Redis List 的封装类,在定义方法时肯定会使用 shift/unshift/pop/push 等数组常用的方法。当我看到别人已经写好的源码时,作者和我设计意图的重合让我先天的具备了在源码不同文件的 context 中跳转的能力。

不断的学习和训练各种优秀设计,会显著的加快对优质代码的理解速度,这一点我没有疑问。

2. 如何提高对烂代码的理解速度?

我在这方面做的很差,有以下几个原因:

2.1 对烂代码的厌恶感。

有时候花了几个小时看别人的烂代码,就会越看越生气,特别想把作者拖过来暴打一顿。

看到一个 200 行的 controller#action 时第一反应是「你把这个 action 当做万能方法吗?」;
看到一坨 sql 语句时的第一反应「你是个 Wordpress 程序员吗?」

这种厌恶感极其消耗心理能量。可厌恶有什么用呢,东家付工钱是为了让我干活,而不是来吐槽,问题终究还是需要人来解决。

既不想改变自己,又要摆脱这种负面情绪,如何做到呢?暂且的方案「通过看优质代码汲取能量,每天只花 2 个小时的时间看烂代码」。

2.2 偏见:业务逻辑无用

若一件事情对于我没有意义,就很难投入其中。去年对接电商的 CRM 时一开始十分烦躁,但是把看问题的角度提高到「这是我第一次写 API Wrapper Gem」时,就看到其中的意义,然后愿意付出大量的时间和热忱。

在接触一个项目时,潜意识里会把它分为:

1. General Knowledge,比如项目中有趣的 Gem、设计方式、权限管理、Elasticsearch、Newrelic、MySQL 索引等等。这些知识既有趣又可提高自己的实力,所以我会刻意去花时间记忆。

2. Project specific information,比如表的结构,字段含义,表之间的关系,订单处理流程。

对于 General Knowledge,我愿意花费大量的时间去训练,变成自己的长时记忆。对于 Project specific information,我则顺其自然,每次做任务时都重新 load 到短时记忆中。

在小项目中,这种方法游刃有余;但是在大项目中就完全不灵光了。项目太大,大脑无法完全 load 整个代码库,看代码时只能频繁的 IO 读取相应的模块,效率特别慢。所以我觉得有必要把大项目部分 Project specific information 内化成自己的长时记忆,以便降低自己大脑的 IO 次数,加快完成任务的速度,处理垃圾代码时也更游刃有余。

举个例子,如果 UML 熟烂于心,就不要频繁的查看各个 Model 了。

我的问题:假如以上个人问题都得到纠正,我对烂代码的理解力依然低于 Vincent 和 吴坚,只能归因给短时记忆差吗?


2015-07-17 14:15:14 update 请大家把讨论的焦点集中在:「如何提高自己阅读代码的速度」 :simley:

#1 楼 @xiaoronglv help me! 我在看自己以前写的代码的时候,也总是无法快速切换 context,更不要说其他人的代码了。我觉得应该是我的短期记忆和理解能力不行。

心态问题 1 不要抱怨代码写的烂 2 抛开杂念 3 保持冷静 4 一行一行,慢慢读

现在看一个写得超破的系统,每天都看得想死。然而为了赚钱还是得干啊

@xiaoronglv 代码跳来跳去本来是非常绕脑的... 所以有时候为了看懂一条流程,真得拿笔简单写下几个方法之间的跳转逻辑. 全靠在脑袋里面想,想过 6,7 个步骤后,前面的就忘了 - -||

其实项目中的代码乱是真实情况,没有足够的人力财力都会先追求业务,其次才是代码架构。(技术性公司情况会好一点,但你也无法控制代码 100% 如你所想的架构 "完美")

我对老板说:这像是一坨屎,哦,不,是一座屎山。

。。。感觉。。。动态语言 OOP。。。掺和的人多了就会变这样。。。

练重构到看到烂代码就兴奋的变态境界就行了

11 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号