编程语言的出现,诞生了软件工程师(也叫做程序员)这样一个职业,而汇编语言则可以看做是软件工程师这个分工出现的标志。
通过编程语言,软件工程师和计算机可以进行交互,表达自己的思想。但是,如果我们把掌握编程语言看做是软件工程师的专业技能,其实又低估了编程语言带来的革命性变化。
编程语言在信息科技发展中的位置,如同人类文明中语言所在的位置。而编程语言写出来的软件(及其源代码),如同人类文明中不断被传承下来的图书典籍。
软件是活的书籍,有两个方面的理解
- 表达方式的多样性
- 对技术的现场还原
编程范式的进化
- 过程式 过程式就是以一条条命令的方式,让计算机按我们的意愿来执行 过程式编程最核心的两个概念是结构体和过程。通过结构体对数据进行组合,可以构建出任意复杂的自定义数据结构。通过过程可以抽象出任意复杂的自定义指令,复用以前的成果,简化意图的表达
- 函数式编程 本质上是过程式编程的一种约束,核心主张是变量不可变,函数尽可能没有副作用。在过程式编程中 数组是一个最常规的数据结构,但是在函数式编程中变量不可变,对某个下标的数组元素的修改,就需要复制整个数组,非常低效。在FP当中,需要通过一种复杂的平衡二叉树来实现一个使用界面(接口)上和过程式语言数组一致的“数组”
- 面向对象编程 引入了对象(类)和对象方法(类成员函数) 主张尽可能把方式(其实就是过程) 归纳到合适的对象(类)上 不主张全局函数(过程) 面向对象的核心思想是引入契约 基于对象这样一个概念对代码的使用界面进行抽象和封装
两个优点
- 清晰的使用界面
信息的封装
面向对象还有一个至关重要的概念是接口 通过接口 优雅实现过程式编程当中很费劲才能做到的一个能力: 多态
引入继承的概念 虽然带来了编码上的便捷性 但是带来了不必要的心智负担 本来复合对象的唯一构造方法是组合 现在多了一个选择 继承
GO语言的设计 是放弃了继承 全面强化组合
官方宣称是面向连接的语言 面向连接就是朴素的组合思想 研究连接 就是研究人与人如何组合 研究代码之间怎么组合
消息传递是多核背景下流行起来的一种编程思想 尽可能用消息传递来取代共享内存 从而尽可能避免显式的锁 降低编程负担
不只是提供了语言内建的消息传递机制 还因为消息传递是类型安全的 大大降低了犯错的机会
- 包
- 版本
- 文档生成
- 单元测试
语言对架构的影响是什么??
- 选择某种语言无关的接口表示
选择团队开发时采用的语言来描述接口
决策之一是开发效率
- 其二是后期的维护