程序原本
13推荐 收藏
19.3K阅读

程序原本

周爱民 (作者)
“随书下载”中提供的epub版本支持.svg格式,在iBooks软件有最佳阅读体验。
在本书中,作者采用反复置疑、层层递进的手法,从一些极其简单的现象或结果出发,为你揭示“程序是什么”这个简单而深刻的命题。本书将创建一个一致性的思维框架,并引领读者在这个框架之下,发现简单代码到系统结构之间不变的那些规则与本质。
本书既是追溯程序原本之书,也是走向设计师、架构师的入门之径。

收藏本书能做什么?

有情况的时候会收到通知,比如电子书发布等。

PS:也会在图灵社区电报频道更新

电子书
¥0.00
格式
mobi   pdf   epub

出版信息

  • 书  名程序原本
  • 执行编辑关于本书的内容有任何问题,请联系 杨帆
  • 出版日期2017-06-19
  • 书  号EF019B
  • 印刷方式四色
  • 开  本16开
  • 出版状态上市销售
  • 原书名程序原本

本书特色

我曾经写过一本《动态函数式语言精髓》,并称之为我在最终结论面前的“最后一层表象”。而我所追寻的最终结论是关于什么的呢?那个问题从十余年前便困扰着我:作为一个程序员,我到底在做什么呢?换而言之,我一直在追问的问题其实就是:
什么是程序?
我曾经认为这个问题是有答案的,比如经典的“算法 + 数据结构 = 程序”。但是在多年之后我对这个答案有了怀疑。因为我看到,《结构程序设计》这本书根本上是在讨论另一个解,即“结构(算法(数据))”。然而即使如此,“结构化”本身,就是程序规模化的唯一求解吗?更深入地说,规模化是“计算的程序化”唯一的问题吗?
我认为不是。
本书从数据之于计算系统的意义谈起,回顾了我多年前所认识到的那一层(我曾自认为是最后一层)的表象——亦即是“语言”。而后,将所谓真正的问题推及对“程序”的认识和理解,再推及到所谓的“应用”与“系统”,并最终揭示这些表象之下的那个简单的事实:它们不过是“结构化”这一求解的引申。
又是一层表象。

从现在开始,原书(《大道至易》第一版)被分成了三本书,以电子书的形式由图灵出版公司发行。这些书采用了免费共享的授权(是的,你可以很自由地分发它),分别面向各自己的读者群体。它们不但在内容上独立清晰,而且在行文上各持风格,再也不受原书的影响——例如我恢复了所有章节、小节的标题,分别设计了它们的封面等等。
这三本书分别是:
《大道至易——实践者的思想》(第二版)
本书,约只有原第一版的1/4内容。面向软件工程相关角色。
《程序原本》
面向程序员、软件设计师。
《我的架构思想——基本模型、理论与原则》
面向架构师。

本电子书许可第三方(含个人)在对本作品不作任何修改(含水印、增页等形式)的前提下自由分发,并许可在保留有关版权和著作权信息的前提下分发作品的部分内容。不可印刷成纸质书籍或用于商业行为。

目录

内容提要
序1:程序里的世界
序2:最后一层表象
关于本书
致谢
引言:简单的本源
篇一:计算系统
第1章 数,以及对数据的性质的思考
1.1 算数与算术
1.2 信息是有意义的数据
1.3 我们要操作的数据是什么?
1.4 可计算数据只有两类,分别面向交互型式和交互行为
1.5 数据性质的基本子集:标识、值和确定性
1.6 对数据与行为加以标识,是一个系统可计算的基本条件
1.7 数据的确定性总是以其生存周期为背景的
1.8 不确定性是对机器计算是否有价值的终极拷问
第2章 逻辑
2.1 正确的数与正确的算,为什么不能得到正确的结果?
2.2 正确逻辑:顺序、分支,与循环
2.3 我们要记住:Dijkstra说他只讨论了顺序机器上的正确的逻辑
第3章 抽象
3.1 程序设计的精华
3.2 理解了=号,就理解了命令式计算范式
3.3 函数式计算范式的核心,正好是消除这个=号
3.4 本质上相同的抽象系统,其解集的抽象本质上也是相同的
篇二:语言及其面临的系统
第4章 语言
4.1 语言不能由外在形式来定义,是形式无关的
4.2 什么叫会编程?
4.3 语用限定:试图避免计算的不确定性带来的副作用
4.4 绑定
4.5 你真的理解这行代码吗?
4.6 将计算机程序设计教成语言课,是本末倒置的
第5章 从功能到系统
5.1 软件开发的规模
5.2 结构化:四种等级的本质
5.3 方向1:计算要素的结构化
5.4 方向2:程序组织的结构化(从模块化到产品化)
5.5 方向2:程序组织的结构化(服务化与系统构建)
5.6 面对规模问题,我们仍未能超越前人的思想:结构化
篇三:程序设计的核心思想
第6章 数据结构:顺序存储
6.1 规划有限大的空间
6.2 用有限大的区域来代表一个待运算的数据
6.3 在更大的区域中表示完整含义
6.4 有一个起始地址的连续区域思路下的两种数据类型
6.5 关系型数据库与顺序表
6.6 顺序存储的抽象本质:索引数组
6.7 指针既是对顺序的结构化存储在运行期的补充,也是天堂与地狱通行证
第7章 数据结构:散列存储
7.1 哪种情况下,做记号的法子才确保能行得通呢?
7.2 欢迎来到名/值数据的世界
7.3 解决第一个问题:名字组合的可能性是无穷的
7.4 Key:对名字不可或缺的验证
7.5 万法归一:索引数组是关联数组的特例
第8章 执行体与它在执行过程中的环境
8.1 总有些知识是可以复制的,反之亦然
8.2 船的原型与知识
8.3 行船方法论
8.4 数据(亦或知识)的生存周期
8.5 关联数组可以维护一个计算过程所需的一切参考
8.6 一门语言与一个程序的区别,仅在于参考环境的差异——后者被称为运行时环境(Runtime)
8.7 所谓操作系统,不过是参考环境更复杂的执行体而已
第9章 语法树及其执行过程
9.1 概念笼子:十个或是更多
9.2 从静态到动态
9.3 在计算系统上的实现语言,其本质是:找到数据
9.4 没有更多的技巧——排序,然后顺序执行
第10章 对象系统:表达、使用与模式
10.1 抽象本质上的一致性
10.2 继承和多态都是多余的概念
10.3 对象是属性包:方法与事件可以视为属性的特例
10.4 可见性同样也是多余的:它是对继承性的补充与展现
10.5 更复杂的对象系统:从GoF模式来看对象及其要素之间的关系
10.6 再论继承性
10.7 数据是一种抽象,所以我们可以泛化从这种抽象中得到的结论
篇四:应用开发基础
第11章 应用开发的背景与成因
11.1 问题的根源:非功能需求与非当前需求
11.2 语言的内建机制剥离了面向计算机的功能需求
11.3 寻找第一个有意义的功能,是探索用户需求的起点
11.4 界面交互是功能性需求,但开发技术并非它的主要构成
11.5 产品需求通常是非功能性的,但又是最上层的应用表现
第12章 应用开发技术
12.1 应用开发语言同时存有两个发展方向:软件复用和工程化方法
12.2 模块划分永远不存在最优方案
12.3 模块化的精髓不在于外在形式的分离,而在于内在逻辑的延续
12.4 没有坏味道的诀窍:如何更好地组织代码
12.5 交付形式相关的组织方式
第13章 开发视角下的工程问题
13.1 模型是一种沟通工具,这是它内在的语言本质特征
13.2 原型是轻量级的试错,它并没有减少问题的总量,但改变了达到解的方式
13.3 集成化工具需要有配套的生产过程和管理
13.4 敏捷工程实践者其实代表了工具精良派的产业工人的声音
13.5 业务模型与产品模型对实施的价值有限
第14章 应用程序设计语言的复杂性
14.1 面向问题根源的两种求解思路:规则化与系统整合
14.2 对应用与应用容器进行标准化,是类似集装箱的一体化解决方案
14.3 模块化思维在产品交付组织形式上的延伸:插件机制
14.4 应用程序设计语言:缺乏真正的产品版本观念的语言是不成熟的
14.5 语言的进化方向——从Hello World!中可见的事实
篇五:系统的基础部件
第15章 分布
15.1 系统应付规模问题只有两个总法则
15.2 分布的两个基本特性:可拆分与可处理
15.3 当依赖在时间维度下不可分解
15.4 要么是数据的全集,要么是它的映像
15.5 在结构化的思维框架下,函数拆分的可能求解
15.6 分布成本与处理成本也是难于平衡的
第16章 依赖
16.1 在逻辑/数据时序依赖之间转换的基本方法
16.2 数据(x)的全集 = 数据(x’) + 操作(x“) + 状态(Sx)
16.3 状态:含义与可操作性完全明确的数据(值)
第17章 消息
17.1 函数的数据含义(返回值)只能表明x’与Sx之一
17.2 在函数式泛型下,函数=x’+x“,而消息用于表明Sx
17.3 消息是剥离了所有数据性质的状态
第18章 系统
18.1 天生支持完美分布的系统:煮鸡蛋
18.2 把鸡蛋煮熟是不可能完成的任务
18.3 我们事实上只能关注可控领域中的可控因素
18.4 聚焦领域之于系统的主要需求:维护状态或接受消息
篇六:系统的基本组织方法与原理
第19章 行为的组织及其抽象
19.1 领域间的交叉与交互才是系统规模问题的根源
19.2 大型系统已经逐渐走入细分领域的时代
19.3 服务与结点:一组接口在两种视角下的抽象概念
第20章 领域间的组织
20.1 得到系统的基本方法是部署,而非开发
20.2 数据的规格化要尽量远离具体的处理逻辑
20.3 关系型数据库的原罪:序列关系 + 键关系
20.4 NoSQL代表了对数据可变的理解
20.5 海量数据运算中公开的秘术:传递逻辑而不是传输数据
20.6 以数据为中心:从会话中抽离状态
20.7 以数据为中心:单点
20.8 以数据为中心:数据结点——用数据映像替代数据全集
20.9 面向数据结点的系统架构
附一:主要编程范式及其语言特性关系
附二:继承与混合,略谈系统的构建方式
附三:像大师们一样思考——从UML何时死掉谈起
附四:VCL已死,RAD已死
  • 周爱民老师的书都是经典,绝对是多年的经验沉淀出来的果实,很期待这本书! 非常感谢爱民老师的无私分享!
    felix_yan  发表于 2017-07-04 10:44:47
    推荐
  • 感谢爱民老师无私奉献~真心好书。收获良多
    nailu0  发表于 2017-11-16 17:39:57
    推荐
  • 非常棒,作者是真懂了编程的本质啊.不过,如果你学习过离散数学,自动机理论,编译原理,编程语言理论的话,再来读,就会感触更深
    lawkingchina  发表于 2018-03-24 21:49:20
    推荐
  • 从业十几年,读了作者的书,真是感觉遇到了真懂的人.国内大部分程序员,还有多数所谓的专家,架构师,真是垃圾.中国工业界的环境堪忧
    lawkingchina  发表于 2018-03-24 21:51:07
    推荐
  • 这书的目录都不能点,是什么个情况。。
    Storm  发表于 2019-03-05 14:10:20
    推荐
    • 本书无法在线阅读,您可以下载阅读,格式有:mobi pdf epub

      杨帆  发表于 2019-03-06 09:49:32
  • 很想了解一下这本书
    木子水  发表于 2019-06-16 11:14:50
    推荐