前面十几篇,我们聊了过往很多技术变化的过程。谈的非常简略,为什么要花这么大的篇幅了解这些呢?
我们还是回到技术管理的目标上来。只要公司的业务在发展,技术系统就会不停的进行迭代,一个不断发展的系统就会变得越来越复杂和混乱。对技术管理来说,一个很大的目标就是控制系统的自然熵增,管理系统复杂度和可扩展性。所以,系统开发之前的设计就特别关键。
但是,系统到底怎么设计才算好呢?软件工程一定程度上并不是一门科学,更像一门手艺。他没有固定的公理定理。那我们怎么来做呢,我觉得我们可以从更大尺度、更大的视角去看技术的演进,从而找到一些规律,不断总结出一些方法论。
什么叫更大视角,就是去看不同的行业,不同的时间段,碰到的不同的问题,各自的解决方案,以及又是如何演进的。所有的新技术都不是凭空出现的,了解过去才能掌握现在。从一个更大的视角,我们就能得出一些基本的原则和方法论。
比如,我们前面十几篇所讲,从企业软件到互联网软件,从前端技术到后端技术、客户端技术、大数据技术等等各个方面。我们能观察到一些基本的规律。
首先第一点,深入理解你要解决的问题,是提出好方案的前提。从技术演变的过程中我们可以看到,即使是技术架构本身的演变,也是为了解决技术开发中碰到的问题的。所以,明确的知道要解决的问题是什么,非常关键。不要在架构设计的过程中迷失了目标,为了设计而设计。
第二点,在技术演变过程中沉淀下来的一些基本思维模型非常重要。比如面向对象的设计模式、分拆协作的思想等等。你会看到这些基本的套路,在各个技术方案、各个技术阶段都有体现,都是适用的。他是我们解决问题中非常基础的思维模型。
最后一点,我们可以看到,优秀的系统有一个共同的设计思路,就是把复杂问题简单化,拆解模块化,如此简单的事情重复做。
人的精力总是有限的,能够掌控的信息同样也是有限的。当我们面对一个复杂问题的时候,一个可行的方案是首先把问题进行拆分,然后逐个击破。同时,随着系统逐渐的演变,每次都坚持相同的设计原则,那就是分拆简化。最终,系统的功能虽然变得非常庞大和完善,但是架构却仍然保持简单、清晰、优美。
举个例子,比如硅谷钢铁侠埃隆马斯克,匪夷所思的提出了让人类可以移民火星的设想。这个设想太夸张了,对我们来说,几乎是不可能的。但是他通过简单的拆解,让事情变得可以操作。他是怎么做的呢?
首先把问题简单化,要把100万人送往火星,目前单程的花费就在100亿美金,这成本实在无法支付。那首先要解决的问题就是怎么尽可能的把花费降下来。怎么降低成本,沿着这个思路我们继续拆解。那就把从地球到火星的各个步骤分拆出来,逐个来看。
首先是从地球乘坐火箭到预定轨道,然后是漫长的航行到火星,最后是降落在火星。第一个步骤最大的成本是什么?因为火箭是一次性使用,因此他的成本最高,那可不可以多次复用呢?
你看通过这种逐步分拆的思路,把不可能变为了可能。目前,马斯克的SpaceX公司已经真的实现了火箭的多次复用。同时,他也在火星移民的其他几个难题上也采用了相同的思路。我们可以看到“把复杂问题简单化,简单的事情重复做”威力有多大。
总结一下,大尺度的深入研究各种技术解决方案的设计与演变,从中推导出自己的设计方法论,把复杂问题简单化,简单的事情重复做。在面对我们的业务问题的时候,才能有效的控制系统的复杂度和可扩展性。