编程的七条心法

开篇

本文源自码农翻身的漫画程序员必须要小心的7个潜规则,看了之后很受启发所以在此做笔记总结。

一、上帝的规矩:局部性原理

  1. 时间局部性
    访问了一个内存地址后,过不了多久还会在此访问
  2. 空间局部性
    一个内存位置被访问了附近的位置很快也会访问到
    在系统不同层级进行交互的时候,交互次数和效率往往是负相关的,也就是说交互越多效率越低。所以如何减少交互,使一次交互更加有效率呢?上面的两个局部性在大多数时候能够发挥很好地作用。

二、飞机如何和驴车合作:缓存

为什么需要缓存呢?
本质原因是速度的不匹配。
拿计算机硬件来举例:CPU-内存-硬盘-网络。
这四者最快的为CPU,最慢的为网络,如果按照水桶原理来行事的话,前者会因为速度原因被后者拖累,前者的性能优势会被整个系统的短板束缚无法释放生产力。
为了解放生产力缓存成了一个无事不应的老好人,上面的例子就成了这样:
CPU-缓存-内存-缓存-硬盘-缓存-网络。
当然缓存也不是随便使用的,怎样使用才能更有效率呢?上面的局部性原理就是一种解决方案。

三、抛弃细节:抽象

抽象是计算机科学中最为重要的概念之一。
当我们遇到复杂问题的时候,抽象是非常重要的武器。
像Linux系统万物皆文件,面向对象语言的万物皆对象都是抽象的例子。
比如在面对看上去错综复杂的问题时,我们可以先分离出许多不同种类的事物,找出它们的共同点,基于这些共同点来进行抽象。本来不同种类事物之间的复杂关系变成相同抽象之间的重复关联,这样会极大的降低复杂性。
(不过有些时候抽象似乎看起来使事物变得更复杂了,比如红黑树对于2-3树的抽象,但仔细分析的话会发现红黑树把原来3种类型的节点变成了只有一种类型的节点,再以单一类型的节点为根基建立对应规则,如果从源头上看抽象后是更加简单了的)

四、我只想和邻居说话:分层

分层其实也是抽象的一种,它通过分层把复杂的,可能变化的东西隔离开来,某一层只能访问它的直接上层和下层,不能跨层访问。
分层的好处是隔离变化,在接口不变的情况下,某一层的变化只会局限于本层次内。
即使是接口变化,以仅仅会影响调用方。
分层往往能把一个流程切分成几个小段,每一段都有自己负责的部分,这样职责更加清晰,原来繁重的工作通过明确的分工能够更加轻松的完成。

五、我怕等不及:异步调用

当你的程序需要等待一个长时间的操作而被阻塞无所事事时,异步调用就派上用场了。
异步调用简单就是说:我等不及你了,先去做别的事情,你做完了之后告诉我一声。

六、大事化小小事化了:分治

狭义的分而治之:讲一个规模比较大的问题分解为多个规模较小的子问题,这些子问题互相独立且与原问题性质相同。求出子问题的解,最后组合起来就可得到原问题的解。
由于子问题和原问题性质相同,所以很多时候可以用递归。
如果把分而治之泛化一下,到软件设计领域,就可以认为是把一个大问题逐步分解的过程。

七、我想独立变化:正交

正交本来是数学上的术语,有严格的数学定义,简单起见可以用坐标系来类比。
扩展到软件领域,就是要在设计中吧软件分解成互不影响,可以独立变化的接口或者类。
这样软件的变化只会局限到一个维度,系统修改起来就不会牵一发而动全身。
不同的维度从原点出发,在原点组合,为原点服务。

猜你喜欢

转载自blog.csdn.net/litterfrog/article/details/111613819