最近在学习一门纯函数式语言 Haskell ,看到以下见解:
Programming languages are ways of thinking and talking about problems. If you learn an idea in English, that doesn’t make you unable to express the idea in French, though it might be a little more clumsy, and some of the idioms may need to be translated.
大意是表达思想和语言是独立的,语言并不限制思想的表达,某些情况可能需要一些 翻译 。这段讨论没有否认理论上不同语言传递思想的能力,但不够考虑现实中语言既有环境、语言易用性和使用语言的成本:语言是有本身的语言环境、既有概念、构造其他 none-native 概念的成本。上述讨论提到不同语言的共性,没有提到语言的特性。
1. 既有概念
语言有其独特的语言环境,一种语言标识一种文化,文化积淀和概念积累构成了既有概念即语言特性部分。
2. 表达能力
苏格拉底说, 语言是思维的工具 。工具的功能可以理解为 Concept Shaping ,也可以理解为 Abstracting , Concept 包含已有的概念,和未来可能会塑造的新概念。 表达思想就是在塑造概念,将思想等同概念的话,表达就是在塑造。 一门语言的自由度高和已有 native 概念丰富,塑造新概念的速度将会更快;一门语言若自由度低和已有 native 概念不丰富,塑造新概念的速度将会更慢。 如果就 塑造新概念速度 理解为 表达能力 ,那么语言的表达能力取决于该语言环境当下的已有概念,和当下该语言的自由度。 对于编程语言和自然语言也是如此。
3. 表达成本
抽象速度也即表达能力,那么不同语言拥有不同的表达能力也就不言自明。 工程实践中,根据问题不同「选择合适的编程语言」需要考虑表达成本,可以说关键在于考虑语言的 native 概念和使用的自由度。