架构师之路004

编程语言的出现,诞生了软件工程师(也叫做程序员)这样一个职业,而汇编语言则可以看做是软件工程师这个分工出现的标志。

通过编程语言,软件工程师和计算机可以进行交互,表达自己的思想。但是,如果我们把掌握编程语言看做是软件工程师的专业技能,其实又低估了编程语言带来的革命性变化。

编程语言在信息科技发展中的位置,如同人类文明中语言所在的位置。而编程语言写出来的软件(及其源代码),如同人类文明中不断被传承下来的图书典籍。

软件是活的书籍,有两个方面的理解

  • 表达方式的多样性
  • 对技术的现场还原

编程范式的进化

  • 过程式 过程式就是以一条条命令的方式,让计算机按我们的意愿来执行 过程式编程最核心的两个概念是结构体和过程。通过结构体对数据进行组合,可以构建出任意复杂的自定义数据结构。通过过程可以抽象出任意复杂的自定义指令,复用以前的成果,简化意图的表达
  • 函数式编程 本质上是过程式编程的一种约束,核心主张是变量不可变,函数尽可能没有副作用。在过程式编程中 数组是一个最常规的数据结构,但是在函数式编程中变量不可变,对某个下标的数组元素的修改,就需要复制整个数组,非常低效。在FP当中,需要通过一种复杂的平衡二叉树来实现一个使用界面(接口)上和过程式语言数组一致的“数组”
  • 面向对象编程 引入了对象(类)和对象方法(类成员函数) 主张尽可能把方式(其实就是过程) 归纳到合适的对象(类)上 不主张全局函数(过程) 面向对象的核心思想是引入契约 基于对象这样一个概念对代码的使用界面进行抽象和封装

两个优点

  • 清晰的使用界面
  • 信息的封装

  • 面向对象还有一个至关重要的概念是接口 通过接口 优雅实现过程式编程当中很费劲才能做到的一个能力: 多态

引入继承的概念 虽然带来了编码上的便捷性 但是带来了不必要的心智负担 本来复合对象的唯一构造方法是组合 现在多了一个选择 继承

GO语言的设计 是放弃了继承 全面强化组合

官方宣称是面向连接的语言 面向连接就是朴素的组合思想 研究连接 就是研究人与人如何组合 研究代码之间怎么组合

消息传递是多核背景下流行起来的一种编程思想 尽可能用消息传递来取代共享内存 从而尽可能避免显式的锁 降低编程负担

不只是提供了语言内建的消息传递机制 还因为消息传递是类型安全的 大大降低了犯错的机会

  • 版本
  • 文档生成
  • 单元测试

语言对架构的影响是什么??

  • 选择某种语言无关的接口表示
  • 选择团队开发时采用的语言来描述接口

  • 决策之一是开发效率

  • 其二是后期的维护