程序原本 PDF 文档
在本书中,作者采用反复置疑、层层递进的手法,从一些极其简单的现象或结果出发,为你揭示“程序是什么”这个简单而深刻的命题。本书将创建一个一致性的思维框架,并引领读者在这个框架之下,发现简单代码到系统结构之间不变的那些规则与本质。
本书既是追溯程序原本之书,也是走向设计师、架构师的入门之径。
序 1:程序里的世界...- 1 -
序 2:最后一层表象...- 5 -
关于本书...- 7 -
致谢...- 8 -
目录...- 1 -
引言:简单的本源...- 1 -
篇一:计算系统...- 3 -
第 1 章 数,以及对数据的性质的思考..- 4 -
1.1 算数与算术....-4 -
1.2 信息是有意义的数据...-5 -
1.3 我们要操作的数据是什么?...-5 -
1.4 可计算数据只有两类,分别面向交互型式和交互行为..-7 -
1.5 数据性质的基本子集:标识、值和确定性..-8 -
1.6 对数据与行为加以标识,是一个系统“可计算”的基本条件.-9 -
1.7 数据的确定性总是以其生存周期为背景的..-11 -
1.8 不确定性是对机器计算是否有价值的终极拷问..-11 -
第 2 章 逻辑...- 13 -
2.1 正确的“数”与正确的“算”,为什么不能得到正确的结果?.-13 -
2.2 正确逻辑:顺序、分支,与循环...-14 -
2.3 我们要记住:Dijkstra 说他只讨论了“顺序机器”上的正确的逻辑.-15 -
第 3 章 抽象...- 17 -
3.1 “程序设计的精华”...-17 -
3.2 理解了“=”号,就理解了“命令式”计算范式..-17 -
3.3 “函数式”计算范式的核心,正好是消除这个“=”号..-18 -
3.4 本质上相同的抽象系统,其解集的抽象本质上也是相同的.-19 -
篇二:语言及其面临的系统..- 21 -
第 4 章 语言...- 22 -
4.1 语言不能由外在形式来定义,是形式无关的..-22 -
4.2 什么叫“会编程”?...-23 -
4.3 语用限定:试图避免“计算的不确定性”带来的副作用..-25 -
4.4 绑定....-27 -
4.5 你真的理解这行代码吗?...-27 -
4.6 将“计算机程序设计”教成语言课,是本末倒置的..-31 -
第 5 章 从功能到系统..- 32 -
5.1 软件开发的规模...-32 -
5.2 结构化:四种等级的本质...-33 -
5.3 方向 1:计算要素的结构化...-35 -
5.4 方向 2:程序组织的结构化(从模块化到产品化)..-38 -
5.5 方向 2:程序组织的结构化(服务化与系统构建)..-42 -
5.6 面对规模问题,我们仍未能超越前人的思想:结构化..-45 -
篇三:程序设计的核心思想..- 49 -
第 6 章 数据结构:顺序存储..- 51 -
6.1 规划有限大的空间...-51 -
6.2 用有限大的区域来代表一个待运算的数据..-51 -
6.3 在更大的区域中表示完整含义...-54 -
6.4 “有一个起始地址的连续区域”思路下的两种数据类型..-55 -
6.5 关系型数据库与顺序表...-57 -
6.6 顺序存储的抽象本质:索引数组...-58 -
6.7 指针既是对顺序的结构化存储在运行期的补充,也是天堂与地狱通行证.-58 -
第 7 章 数据结构:散列存储..- 62 -
7.1 哪种情况下,做记号的法子才确保能行得通呢?..-62 -
7.2 欢迎来到“名/值”数据的世界...-63 -
7.3 解决第一个问题:名字组合的可能性是无穷的..-64 -
7.4 Key:对名字不可或缺的验证...-68 -
7.5 万法归一:索引数组是关联数组的特例..-70 -
第 8 章 执行体与它在执行过程中的环境..- 72 -
8.1 总有些知识是可以复制的,反之亦然..-72 -
8.2 船的原型与知识...-72 -
8.3 行船方法论...-73 -
8.4 数据(亦或知识)的生存周期...-74 -
8.5 关联数组可以维护一个计算过程所需的一切参考..-75 -
8.6 一门语言与一个程序的区别,仅在于参考环境的差异——后者被称为运行时环境
(Runtime)....-77 -
8.7 所谓操作系统,不过是参考环境更复杂的执行体而已..-78 -
第 9 章 语法树及其执行过程..- 83 -
9.1 概念笼子:十个或是更多...-83 -
9.2 从静态到动态...-84 -
9.3 在计算系统上的实现语言,其本质是:找到数据..-86 -
9.4 没有更多的技巧——排序,然后顺序执行..-89 -
第 10 章 对象系统:表达、使用与模式..- 94 -
10.1 抽象本质上的一致性...-94 -
10.2 继承和多态都是多余的概念...-96 -
10.3 对象是“属性包”:方法与事件可以视为属性的特例..-98 -
10.4 可见性同样也是多余的:它是对继承性的补充与展现.-101 -
10.5 更复杂的对象系统:从 GoF 模式来看“对象及其要素之间的关系”.-105 -
10.6 再论继承性...-111 -
10.7 数据是一种抽象,所以我们可以泛化从这种抽象中得到的结论.-115 -
篇四:应用开发基础..- 117 -
第 11 章 应用开发的背景与成因..- 119 -
11.1 问题的根源:非功能需求与非当前需求..-119 -
11.2 语言的内建机制剥离了面向计算机的功能需求..-119 -
11.3 寻找第一个有意义的功能,是探索用户需求的起点..-121 -
11.4 界面交互是功能性需求,但开发技术并非它的主要构成.-125 -
11.5 产品需求通常是非功能性的,但又是最上层的应用表现.-127 -
第 12 章 应用开发技术..- 129 -
12.1 应用开发语言同时存有两个发展方向:软件复用和工程化方法.-129 -
12.2 模块划分永远不存在最优方案...-129 -
12.3 模块化的精髓不在于外在形式的分离,而在于内在逻辑的延续.-130 -
12.4 “没有坏味道”的诀窍:如何更好地组织代码..-135 -
12.5 交付形式相关的组织方式...-138 -
第 13 章 开发视角下的工程问题..- 142 -
13.1 模型是一种沟通工具,这是它内在的“语言”本质特征.-142 -
13.2 原型是轻量级的试错,它并没有减少问题的总量,但改变了达到解的方式.-144 -
13.3 集成化工具需要有配套的生产过程和管理..-146 -
13.4 敏捷工程实践者其实代表了工具精良派的产业工人的声音.-149 -
13.5 业务模型与产品模型对实施的价值有限..-150 -
第 14 章 应用程序设计语言的复杂性..- 153 -
14.1 面向问题根源的两种求解思路:规则化与系统整合..-153 -
14.2 对应用与应用容器进行标准化,是类似集装箱的一体化解决方案.-154 -
14.3 模块化思维在产品交付组织形式上的延伸:插件机制.-157 -
14.4 应用程序设计语言:缺乏真正的“产品版本”观念的语言是不成熟的.-160 -
14.5 语言的进化方向——从“Hello World!”中可见的事实..-161 -
篇五:系统的基础部件..- 163 -
第 15 章 分布..- 164 -
15.1 系统应付规模问题只有两个总法则..-164 -
15.2 分布的两个基本特性:可拆分与可处理..-165 -
15.3 当依赖在时间维度下不可分解...-167 -
15.4 要么是数据的全集,要么是它的映像..-169 -
15.5 在结构化的思维框架下,函数拆分的可能求解..-170 -
15.6 分布成本与处理成本也是难于平衡的..-175 -
第 16 章 依赖..- 177 -
16.1 在逻辑/数据时序依赖之间转换的基本方法..-177 -
16.2 数据(x) 的全集= 数据(x') + 操作(x") + 状态(Sx)..-178 -
16.3 状态:含义与可操作性完全明确的数据(值)..-180 -
第 17 章 消息..- 182 -
17.1 函数的数据含义(返回值)只能表明 x'与 Sx 之一..-182 -
17.2 在函数式泛型下,函数=x'+x",而消息用于表明 Sx..-183 -
17.3 消息是剥离了所有数据性质的状态..-185 -
第 18 章 系统..- 189 -
18.1 天生支持完美分布的系统:煮鸡蛋..-189 -
18.2 把鸡蛋煮熟是不可能完成的任务..-189 -
18.3 我们事实上只能关注可控领域中的可控因素..-190 -
18.4 聚焦领域之于系统的主要需求:维护状态或接受消息.-191 -
篇六:系统的基本组织方法与原理..- 193 -
第 19 章 行为的组织及其抽象..- 194 -
19.1 领域间的交叉与交互才是系统规模问题的根源..-194 -
19.2 大型系统已经逐渐走入细分领域的时代..-195 -
19.3 服务与结点:“一组接口”在两种视角下的抽象概念..-197 -
第 20 章 领域间的组织..- 199 -
20.1 得到系统的基本方法是部署,而非开发..-199 -
20.2 数据的规格化要尽量远离具体的处理逻辑..-200 -
20.3 关系型数据库的原罪:序列关系+ 键关系..-203 -
20.4 NoSQL 代表了对“数据可变”的理解..-205 -
20.5 海量数据运算中公开的秘术:传递逻辑而不是传输数据.-207 -
20.6 以数据为中心:从会话中抽离状态..-208 -
20.7 以数据为中心:单点...-212 -
20.8 以数据为中心:数据结点——用数据映像替代数据全集.-214 -
20.9 面向数据结点的系统架构...-218 -
附一:“主要编程范式”及其语言特性关系..- 223 -
附二:继承与混合,略谈系统的构建方式..- 226 -
附三:像大师们一样思考——从“UML 何时死掉”谈起.- 229 -
附四:VCL 已死,RAD 已死..- 232 -
下载地址: https://www.wenjiangs.com/wp-content/uploads/2021/09/program-original.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论