SICP 读前言
人类的活动大抵是离不开规划(program)的.
这要求, 首先心中有数, 其次执行有力.
若将规划编为一组供由计算机执行的离散符号, 可谓编程(我的理解).
易得:
-
程序设计是一种心智活动.
-
程序是一种媒介
To take advantage of the unsurpassed flexibility of this medium requires tremendous skill‑technical, intellectual, and esthetic.
- Marvin Minsky
程序设计中牵涉到的3类对象: 人脑/程序集合/计算机.
人脑抽象模型, 直到一个 metastable place, 模型实现为程序, 程序被计算机执行.
人脑对模型的认知会加深至下一个 metastable place, 程序集合更趋近于模型的本质, 计算机也更接近问题的精确解.
在这个认知过程中, 程序集合的演变不比模型认知变更那般简单, 它被多次付诸编写, 定型.
这个过程Alan J.称之为: Invent and fit; have fits and reinvent!
我们希望程序正确.
这需要:
- 人脑对模型的认知正确
- 程序集合是模型的正确实现
- 计算机可以正确执行程序.
以前两点最难得以保证.
我们根据数十年的经验, 总结出了使大程序中的一个小部分总是正确的 standard program structures, 谓之 idioms.
它们是被正确认知, 被正确实现, 被正确执行, 可以通过谓词演算, 通过逻辑方法, 做出形式化的, 可接受的, 正确性的论证.
idioms是抽象的, 普适的, 所以:
它适于参与未知程序的构造, 成为大型程序系统的一小部分.
程序员应该追求好的算法和惯用法, 对程序设计的审美观有很好的感觉, 有能力控制程序集合的正确性和复杂性.
程序员专注于真正的问题: 需要计算什么, 如何分解问题, 如何组合这些部分. (坊间流传c系关注机器, lisp系关注计算, 此话不假).
事实上, 这些技巧也是所有工程设计所通用的.
感谢先驱们(已经都在天国了):
-
Lisp 祖师爷 John McCarthy
-
Lambda 神算子师徒 Alanzo Church, J. Barkley Rosser
-
将λ演算引入程序设计江湖, 提出闭包, 语法糖, 越位语法(Python徒子徒孙们请叩首): Peter John Landin
-
Recursion Prophet: Stephen Cole Kleene
-
组合子 Haskell Brooks Curry
衍生阅读:
WHY PROGRAMMING IS A GOOD MEDIUM FOR EXPRESSING POORLY UNDERSTOOD AND SLOPPILYFORMULATED IDEAS