跳转至

编程语言

人与机器

人通过存储程序控制计算机解决可计算性问题。

"位 + 上下文" 是计算机表示与处理信息的底层逻辑—语言与机器的分际——机器语言。

引入助记符,通过查表(操作码表/符号表),将汇编语言翻译成机器语言,语言向人的一侧偏移——汇编语言。

指令集——语言与机器的规约。

由此,汇编语言 -> 高级语言,自举。

图灵与邱奇

图灵创造了图灵机,邱奇创造了 lambda 演算,两者都可以表达计算的方式——图灵机和 lambda 演算是逻辑等价的。

图灵机是计算机的发端,更有助于学习计算机组成原理,更偏向硬件。

lambda 演算是最小的通用的编程语言,更有助于学习编程原理,更偏向软件。

语法与语义

lambda 演算在语法和语义上是最小化且完备的。

lambda 演算引入的概念:表达式、变量(自由变量/约束变量)、函数、应用、alpha-转换、beta-规约。

算法描述

正如,语言是思维的物质外壳。

算法是问题的解决方案,程序是对算法的描述,编写程序的语言只是一个工具。

算法是具有思想性的,程序员选择合适的编程语言表达自己的思想。

糖衣语法

几乎所有的主流语言都是图灵完备的,而形式不一。

不同的语言都着一身不同的糖衣。

语法糖,让人感到快乐!Ruby 就是这样的编程语言,Elixir 也不错!

语言优势

先天优势

开发效率?运行效率?工程效率?

工作语言?个人语言?

原型应用?CPU 密集?IO 密集?

主流的编程语言都有着某种先天优势,如 Go、Rust。

生态优势

当一门编程语言有了一个杀手级应用时,围绕它的生态也正在形成。

组合创新要比原始创新更加省力。

社区优势

有人对地方,就有江湖。有技术人的地方,就有技术社区。

总有人,会挠自己的痒,利己利人。

语言学习

语言抽象

世界是物质的,物质是运动的,运动是有规律的,规律是可认知的,认知是可发展的。

语言是用来描述世界的!!!

由物质和运动,我们可以把握一系列抽象。

物质层面的语言抽象:操作数,数据结构,范畴……

运动层面的语言抽象:操作码,函数,映射……

编程范式

解题步骤:操作数 + 操作码,变量 + 函数,对象 + 消息,范畴 + 映射,……

由抽象层次体系,我们可以把握一系列编程范式:命令式编程、面向对象编程、函数式编程……

语言生态

面向文档!面向谷哥!面向社区!面向未来!

编程工具

面向文档编程,面向示例编程,面向项目编程。

Z 用语言

工作语言:JavaScript/Python/Ruby/Scala/Java/Bash/Lua/SQL

个人语言:Go/Lua/Bash

兴趣语言:Scheme/Elixir/Erlang/Haskell

思维模式

多范式编程语言的优势在于为开发者提供了不同的思维模式。

学习一门编程语言,相较语言特性而言,思维模式的价值更大。

应用领域

每一门编程语言都是有设计缺陷的,也就决定了它的应用领域。

认知工具

世界是物质的,物质是运动的,运动是有规律的,规律是可认知的,认知是可发展的。

世界 := 物质 + 运动,是思维的起点,也是语言的起点——语言是思维的物质外壳。

由此,编程语言表征了编程的思维方式。

人机交互

人用计算机解决可计算性问题的过程是人机交互的过程,是关联问题空间与解题空间到过程。

问题空间

解题空间

符号抽象


最后更新: September 10, 2023