学习技术的一般流程

熟悉一个技术点,就是熟悉这个技术点的api和原理。所以说会用api又知道api背后的机制,才能说懂得了这个技术点。

一般我们学习技术也是这个过程,先看怎么用,再研究原理。

这是做技术的第一个层次:熟悉某个技术。

系统设计的流程

就算熟悉所有技术,不代表具备做架构甚至系统设计的能力,因为两者是不同的维度。在二维世界里再努力,也达不到三维世界。

熟悉技术是自下而上的归纳&总结,而系统设计是自上而下的演绎&设计。

系统设计的误区

误区一:对系统的表象进行架构&设计

一般dev开发代码使用的是“形象思维”。因为作为业务开发,业务系统都被拆分成小模块,而模块内的开发,又有非常多的框架简化开发工作。这让开发变得非常直观,而不需要对业务、架构、代码深度建模。

当面对系统设计场景时,如果使用业务开发的思维,往往会出现代码设计不能反映系统的本质。

误区二:认为架构就是设计

没有对系统或者对领域有深入的理解,就去做架构,不管架构自身设计的素质如何,都很大可能用正确的架构回答了错误的问题,出现架构无法支持系统的问题。

误区三:认为上层业务代码架构设计与纯技术架构设计是不同的

认为不同领域业务系统比如电商、信息流与下层的技术领域比如操作系统、编译器、数据库等,是不同的系统设计领域,需要不同的系统设计技术。

这是只看到了他们不同的地方,而没有把握到两者共同的本质。

系统设计的方法论

系统设计首先要把握系统的本质,然后从本质中抽象出概念,用架构去实现概念,最后才是编码。

所以系统设计的流程是:把握本质 → 抽象概念 → 架构设计 → 编码实现。

把握本质

如何把握系统的本质?

理论上:哲学是把握本质的学科,所以首先要有哲学思维和哲学方法,用哲学的思维&方法去把握系统的本质。

实践上:对系统进行分析与综合。分析即拆解系统,梳理流程、价值、结构、关系、机制等,综合在分析的基础上不断提炼系统的内核、本质。

架构、设计为什么要把握本质?

本质是稳定的,本质是精炼的;表象是易变的、复杂的。

基于本质的设计才是稳定的、简洁的、功能强大的、灵活的。

基于表象的设计的系统,其稳定性、功能、复杂度、演进难度、可维护性可想而知。

抽象概念

概念是系统的精炼设计。系统是有机整体,所以抽象系统的概念体系,就要求概念的完整性、一致性。

如何提升概念能力?

  • 学习不同的概念:IO、进程、window、人货场等,提升概念抽象能力。
  • 参考书:领域驱动设计、人月神话

架构设计

学习架构就是学习架构史。从时间线上去理解不同的架构的适用场景,这样就能选择适合的架构。

编码实现

使用各种设计原则、设计模式、OO、函数式等

总结

不管上层的业务系统还是下层的纯技术系统,两部分中的系统都归属到一个领域方向。我们最重要的沉淀是领域理解

所以我认为,不管任何职能,自上而下的做事思路是:把握领域本质,形成概念,用概念去指导产品设计、技术设计与实现、带领业务等。