为什么你的代码如此难以理解

发表于:

无意间读了一篇博客《Why your code is so hard to understand》 恰好最近遇到这些问题,引起了一些思考和共鸣。作为工程师你是如何看待代码的好与坏?该文章中提到的几点我觉得特别有道理,如,过度复杂的心智模型(overly complex mental models),从语义模型到代码的糟糕转化(poor translation of semantic models into code)和隐晦的用法(obscured usage)等等。今天我结合自己的工作谈谈看法。

过度复杂的心智模型

说到模型,程序员最熟悉不过了,一个功能完成往往要经历很多个模型的建模,但是这里心智模型(mental model)估计大家很少遇到。简单的说就是根据已有的知识和经验产生对事物的主观认识,从而形成一个对事物运行发展的预测。通俗一点,你‘希望’事物如何发展,这个不是一个心智模型,但是你‘认为’事物将如何发展,这个就是你的心智模型。因此,拥有一个好的心智模型将会对事物的发展做出准确的判断。我们通常说‘眼光好’,‘有远见’,‘运筹帷幄之中,决胜千里之外’,就是形容心智模型比常人精确的人。详见百度百科解释。

对于我们编写代码心智模型是你对需求的第一认知,举例说明一下,例如我们需要实现一个用户登录功能,你最先想到的是什么?你第一反应就是输入用户名和密码,校验密码正确以后保存用户状态,没错,这就是你的心智模型。想过没有,对于一个第一次接触互联网的人来说他认为用户登录又该是什么样的呢?而为什么当你很开心的进入编码时,另外一个程序员会告诉你要限制用户密码输错的次数,同事密码不要明文存在数据库和日志中,而你完全没有想到这些?这些就是每一个人的心智模型不一样,导致的不一样的结果。

那么,怎样才能让我们的心智模型足够精准呢?

我认为两点很重要:

  1. 不断的完善自己的知识结构。我们看不到过苹果的抛物线,但是一个学习过牛顿定律的高中生很快就会在脑海中推断出抛物线形状。
  2. 着手实现之前多和身边的人讨论。这是一个自我修正很弥补的过程,站在众人的肩膀上或者三人行必有我师,无论你怎么说都行。

心智模型是我们实现某项事情的最先的一步,但是又会受到以往的经验和获得的信息的影响,所以我们要尽可能的让我们的心智模型更加精准,让我们变得更有远见,眼光更好。