编程语言

"programming language"

Posted by yueLng on 2018-02-11

语言特性

  • memory model
  • calling conventions
  • resource management gc
  • coordination
  • abstraction(让表达式或复合表达式可以通过捆绑的名字单独隔离出来做一个单独的个体使用)
  • types 类型系统 (基本表达式,数字与符号)
  • 计算能力(formula/expression 复合表达式,例如3+4)
  • 逻辑能力(顺序、分支与循环)
  • 一个计算过程的约定(命令式、函数式或其他计算范式)

将基本表达式与抽象结合,延伸出数据(data),将复合表达式和抽象结合,延伸出过程(process),将数据作为参数传入,延伸出将过程应用于数据,这里可以得到编程三大要素,数据、过程、过程应用于数据。复杂程序与简单程序的差别在于抽象层级的不同,抽象层级越高,程序的表达能力越强。

泛型编程(generic programming)

In the simplest definition, generic programming is a style of computer programming in which algorithm are written in terms of types to-be-specified-later that are then instantiated when needed for specific types provided as parameters. – From Wikipedia.

结构化(Structured)和非结构化编程

结构化编程的最大特征是使用子程序、代码块、for/while循环结构代替goto,现代程序大多是结构化的,相对于非结构化来说,代码易理解性和可维护性显著提高,非结构化程序语言包括 basic、COBOL、机器语言和汇编语言

命令式(Imperative)和声明式(Declarative)编程

几乎所有的编程语言都是命令式的,这更接近编译-执行的思维,代码会编译成相应的机器执行语句。而声明式编程不直接告诉机器要执行的步骤或流程,只是描述目标性质。xml、sql、HTML都是声明式的

命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。
声明式编程让我们去描述我们想要的是什么,让底层的软件/计算机/等去解决如何去实现它们。
声明式编程举例,Array.map reduce、 SQL

事件驱动(Event-driven)编程和基于线程(Thread-based)编程

thread-event
Functional Programming For The Rest of Us

函数式编程

  • 支持闭包和高阶函数。
  • 支持懒惰计算(lazy evaluation)。
  • 使用递归作为控制流程的机制。
  • 加强了引用透明性。
  • 没有副作用。

函数式编程与面向对象编程,区别在于数据抽象和过程抽象。现在大部分语言既有函数式编程思想又有面向对象编程思想

如何学习一门新的编程语言

  • 首先感性认识,花几个小时快速了解其纲领性的内容
  • 接着了解其历史(尤其是为什么诞生,怎么诞生的 了解一个技术起源和发展历程,能让你更深入地掌握和明晰技术的优劣,以及为什么会产生这种优劣)
  • 然后熟悉其 eco system,也就是周边的各种工具
  • 然后是 learning by practicing
  • 然后是与人切磋比武,GitHub,pull request(and code review)几乎是这个世界上可能最好的师傅带徒弟的方法,你涉猎越广,就会有越多的师傅
  • 接下来是对比印证。你已有的知识体系和你正在学的知识体系间是很好的参照物,通过相互对比,相互印证,对二者都会有更深刻的理解
  • 最后是传道授业解惑 —— learning by teaching。

书籍

《结构程序设计》

《Concepts, Techniques, and Models of Computer Programming》
主要的编程范型”及其语言特性关系(多图)
编程范型详解

the_principal_programming_parading
原图PDF

参考内容