QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

程序原本(七):像大师们一样思考

  • 2020-02-16
  • 本文字数:1566 字

    阅读完需:约 5 分钟

程序原本(七):像大师们一样思考

编者按:本文节选自周爱民著《程序原本》一书中的部分章节。


算盘用了几千年,谁问过“算盘为什么能算东西”?算珠、进位、栏,这些东西是不是基本的存储结构?用算盘的“我们”,是不是计算单元?珠算表是不是运算规则?那些珠子表达出来的“0~9”的排列,是不是输入输出的界面?


“我们+算盘”就是一个完整的计算系统。这样的计算系统的完整性,图灵用了一个假想加以说明。图灵不过是用一个假想描述了一个事实,而这个事实“看起来”能被机器实现。于是,我们的计算机时代就开始了。


图灵是否证明过“大笨象吃意大利面条为什么是一个完备的计算机系统”呢?不,最初等的问题,往往最难于证明。往往,他的证明过程,或应用过程,只是触发了一个想象。


对计算机根本问题的思考,许多会追溯到哲学思想层面。IOPD 和 PDIO 的问题、“算法 + 数据结构 = 程序”的问题等,就属于这一类。还有一些会追溯到人类行为学、语言学等层面,例如语言、语法、语义,以及像有没有语用这样的问题。大多数时候,真正推动计算机发展的,不是对具体问题的推理求解,而是对问题本身的抽象。在 Dijkstra 的叙述中,抽象更像是终极武器。按照 Brooks 的观点:


数据的表现形式(数据结构,抽象的结果之一)是编程的根本。


而按照 Dijkstra 的引述:


引用未解释过的名词阐述公理或定理和作用于未解析过的操作数的(命了名的)运算两者之间有着某种平行的相似性。


无论如何,我们“做一个计算机”,原始的目的不外两个:其一是“让它计算数学”,其二是“让它像人一样思考”。请注意,我的确是说“计算数学(即算数)”。数学是人类的理论学科,“怎么算”以及算的内容等,都是由我们自己设定的。而计算机的能力,只是计算“数学”这个它未知的对象而已。事实上,我们现在讲的“命令式”、“函数式”或“说明式”,只是我们为计算机设定的“最基础的运算方式”。在这个“运算系统”中,“数学”并不是最初设定的。


命令式如何计算,函数式如何计算……诸如此类的问题了解清楚了,我们对这类语言也就了解了。至于什么高阶函数(higher-order function)、克里化(Currying)、延续(Continuation)或发生-迭代器(Generator-Iterator)之类,那已经是具体语言的表象,而非“这一类语言”的本质。举例来说,JavaScript 1.5 还没有实现过“生成器对象”(Generator Object),但并没有人否认它是函数式语言。反过来说,“Generator Object”原本就不是函数式语言的必备要素。


LISP 表达了函数式语言的全部“必备要素”,然而 LISP 七个原子运算也只是针对 LIST 这个结构抽象来说的。对于一个“(顺序的)表”,这七个原子运算是必需的,而对于另一个“(关系的)表”就未必如此了。所以某些原子运算,也不必放在函数式的必备要素中。像 LUA 这样的函数式语言实现方法的出现,也证明了这一点。1


1 LISP 的基础数据结构是索引数组(表,LIST),而 LUA 的基础数据结构是关联数组(表,MAP)。


那么函数式还剩什么?


要真正理解函数式的秘密,是要一个语言一个语言地学习下去吗?是要一种运算法一种运算法地学习下去吗?我们听完人家说“延续”,于是就开始了解延续,而没有去追问延续为什么出现在函数式里面,或它是不是函数式的必备要素,又或是函数式运算系统的自身的“问题”。我们正是迷失于种种语言和概念的表象,而最终没能像大师一样去思考“计算机不过是大笨象吃意大利面条”这样的抽象层面的问题。


我们要改变的是思想,我们要增强的是能力。大多数人只是增强能力,而不改变思想。这就是我们大多数人不是大师的原因。


图书简介https://www.ituring.com.cn/book/2429



相关阅读


程序原本(一):应用开发基础


程序原本(二):应用开发技术


程序原本(三):开发视角下的工程问题


程序原本(四):系统的基础部件


程序原本(五):海量数据运算中公开的秘术


程序原本(六):继承与混合,略谈系 统的构建方式


2020-02-16 14:001848

评论

发布
暂无评论
发现更多内容

FastApi-06-请求体-3

Python研究所

FastApi 8月日更

云计算以及云计算周边词概念简单介绍-行云管家

行云管家

云计算 服务器 云服务

Github首次开放,一天遭狂转 50w 次!阿里内部不外传的 100 万字 Java 面试手册!

Java 程序员 架构 面试 计算机

一周信创舆情观察(7.26~8.1)

统小信uos

阿里首席官珍藏,SpringCloud精通日记,血汗全在这了

Java~~~

Java 面试 微服务 Spring Cloud 架构师

使用PyTorch构建神经网络模型进行手写识别

Shirakawa

神经网络 机器学习 深度学习 PyTorch 手写识别

一个算法“拿下”两个榜单!爱奇艺ICCV 2021论文提出人手三维重建新方法

爱奇艺技术产品团队

vr 论文 ICCV2021 高精度三维重建

番外1. OpenCV 图像处理之图片加载与视频加载

梦想橡皮擦

8月日更

Python RPC 不会?不妨看看这篇文章

星安果

Python RPC RPC架构

拍乐云创始人赵加雨:沉浸式音视频加持数智化未来世界

拍乐云Pano

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java~~~

Java 面试 微服务 多线程 架构师

摘下手机赛场的夏季“金牌”,荣耀的“飞人之路”

脑极体

Spark 架构剖析:一个任务是怎么运行的

程序员赤小豆

大数据 spark 架构

一个弱鸡管理者如何带领一支牛逼的队伍?

弱鸡管理者

安全 技术人 创新 技术人应知的创新思维模型 管理经验

Ipfs未来价值怎么样?Ipfs值得投资吗?

区块链 分布式存储 IPFS fil IPFS未来价值

为什么拥抱能源的数字未来意味着在云上全力以赴

九河云安全

现有市值管理机器人|交Y机器人系统源码搭建

Geek_23f0c3

做市机器人 去中心化市值管理机器人

贝壳找房基于StarRocks构建全新统一的极速OLAP平台实践

StarRocks

数据库 数据分析 OLAP StarRocks

镜像是什么意思?分类有哪些?

行云管家

网络安全 镜像 堡垒机 云厂商

资深大牛带你了解源码!最新Android面试题整理

欢喜学安卓

android 程序员 面试 移动开发

从关门“振动”说起,在这部剧本杀综艺里,爱奇艺隐藏了多少技术“小心机”

爱奇艺技术产品团队

综艺节目 互动视频技术 爱奇艺

字节跳动Android面试:2021Android大厂面试知识分享

欢喜学安卓

android 程序员 面试 移动开发

写作7堂课——【1.框架式写作】

LeifChen

框架 结构化思维 写作技巧 8月日更

最全总结 | 聊聊 Python 数据处理全家桶(存储过程篇)

星安果

Python 数据库

开放搜索电商行业模版驱动业务增长实践

阿里云大数据AI技术

5 分钟,快速入门 Python JWT 接口认证

星安果

Python JWT

维护数据隐私和增强竞争优势的秘密

九河云安全

中台的前世今生

涛哥 数字产品和业务架构

企业架构 中台架构 中台的由来

华为大神珍藏版:SpringBoot全优笔记,面面俱到太全了

Java~~~

Java 面试 微服务 Spring Boot 架构师

【共识专栏】Quorum机制与PBFT

趣链科技

区块链 共识机制 PBFT 共识算法

Linux内核分析学习路线总结(内核人员必看)

Linux服务器开发

操作系统 Linux内核 内核源码 内核开发 驱动开发

程序原本(七):像大师们一样思考_文化 & 方法_周爱民_InfoQ精选文章