程序原本 PDF 文档 - PDF 电子书

程序原本 PDF 文档

发布于 2021-09-13 字数 7139 浏览 762 评论 0

程序原本 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技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

目前还没有任何评论,快来抢沙发吧!

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

2414 文章
28 评论
64867 人气
更多

推荐作者

qq_81h7fk

文章 0 评论 0

Aik

文章 0 评论 0

爱上歆随懿恫

文章 0 评论 0

qq_rvKjBH

文章 0 评论 0