当我们看一份代码的时候,到底看的是什么?

代码对应的问题以及解决方案:包括以下几个方面

  • 功能设计
  • 流程设计
  • 实现方式——系统模型,代码选型

代码首先是为了解决一个具体的问题,因此,当你决定看一份代码的时候,你的目的就是为了了解如果用计算机来解决一个具体的问题。所谓功能设计,就是从人脑的角度去理解一个具体的问题是如何被拆分和解决的。

流程设计是在功能设计的基础上,结合计算机本身的特点,比如内存管理,垃圾回收机制等,设计出来的符合性能和效率要求的具体流程。有些时候,对于一些流程的设计,光用人的逻辑去理解会觉得多次一举,但是如果同时要考虑尽可能让计算机的利用效率更高效,就会觉得理所当然。比如经典的CPU流水线设计。

代码选型是指为了达到某种目的(包括扩展性,易读性,可复用性等)而采用的语言层面的技术(比如通过定义接口来实现扩展性和实现功能部件之间的交互,通过使用某种语法糖简化代码的写法,通过定义基类来将抽象基础功能和提高可扩展性等等,这部分不同的语言不一样,这也是优秀的programmer和普通的programmer的区别,当我们遇到了那些我们“很难看懂”的优秀的代码,先好好想想别人这样实现是出于什么样的考虑,很多时候是作者为了达到某种“好处”而付出了很大的努力,而对于读者来说,同样应该需要花费更多的时间的精力才能读懂,否则你可能需要花费更多的时间花在“在一份可扩展性,易读性都极差的代码上开发”这个事情上)

在代码选型的考量上,如果不清楚作者的出发点,很容易导致“只见树木不见森林”,“手里拿着锤子看啥都是钉子”,或者换句话来说,任何的“高深”的技术都是为了解决问题而引入的,但也必定带来相应的复杂度,如果不是为了完成某种“复杂度”更高的任务,而又采用了“复杂度”高的解决方案,结果将是得不偿失,顾此失彼,作茧自缚。

那学习代码选型的意义在哪里?笔者可以想到的有以下几点

1、“修炼内功”

所谓的修炼内功,是指通过思考,学会那些“具有普遍意义的代码问题的解决方案和思路”。之所以是内功,是因为这些知识是“语言无差别的”,即它不是针对某一个类语言,而是针对问题的,无论何时你需要用某种语言去实现某种任务时,都有可能遇到一些“普遍”的问题,而这时候就是你的内功发力的时候了。

具体来说,可以从一份代码感受以下内容:

  • 代码风格,个人觉得一份好的代码会让人读起来如沐春风,每一行代码都很自然而然,不会让读者摸不着脑子。有兴趣的同学可以去看看Clean Code这本书(中文名为《代码整洁之道》)
  • 设计模式,虽然代码是为了解决不同的问题,但是在互联网多年的沉淀下,代码设计模式被优秀的programmer从纷繁复杂的问题中抽象出来,成为一位优秀的programmer必须知道和掌握的“内功”。如果说一份具体的代码是为了解决一个具体的问题,设计模式就是为了解决一类具体问题。一份非常简单的例子就是框架代码。相信绝大部分programmer都用过各种语言的框架代码,JS的Angular,Python的Flask,Twisted,Java的Spring boot,C++的Boost。如果掌握了背后的设计模式,很容易举一反三,触类旁通,快速上手一个框架,甚至是自己“造轮子”。有兴趣的同学,可以去看看Design Pattern这本书。

2、“修炼招式”

方法论和实践之间存在一个维度——熟练度——它是决定实践的结果的重要因素,当你很熟练编程之中的各种各样的问题并能熟练使用那些天生为了解决这些问题而存在的技术(例如各种语法糖,回调函数等等),你就能很优雅的解决他们。

最后的最后,纸上得来终觉浅,绝知此事要躬行,代码看得再多,如果没动手亲自写过,终究还是纸上谈兵。反过来说,如果只会埋头写代码,不会抬头看路,不会反思改进,终究还是在做“豆腐渣”工程。

发布了8 篇原创文章 · 获赞 9 · 访问量 2014

猜你喜欢

转载自blog.csdn.net/ganzr/article/details/87873368