作者简介

Alexander Stepanov于1967~1972年间在莫斯科国立大学学习数学,从1972年开始在苏联,1977年移民美国后在美国从事编程工作。他编写过操作系统、编程工具、编译器和各种库。他在程序设计基础方面的工作先后得到GE、Polytechnic、AT&T、惠普、Silicon Graphics的支持,2002年后是Adobe的支持。1995年因C++标准模板库的设计获Dr.Dobb的程序设计杰出贡献奖。
Paul McJones于1967~1971年间在加州大学伯克利分校学习工程数学。从1967年开始介入程序设计,涉足的领域包括操作系统、程序设计环境、事务处理系统以及企业和客户应用系统等。他先后在加州大学、IBM、Xerox、Tandem、DEC工作,2003年至今在Adobe公司。1982年他与合作者一起因其论文“The Recovery Manager of the System R Database Manager”获得ACM程序设计系统和语言论文奖。

《编程的本质》提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。
这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目标是提升你对编程的洞察力。要想从中大获裨益,你需要从头到尾认真学习:阅读代码,证明引理,完成练习。到结束之时,你将看到如何把这里讨论的演绎式方法应用到你的程序中,保证你做出的软件部件能一起工作,并表现出它们所应该表现的行为。
书中给出的算法和需求针对某些被操作的类型。有关这些描述的代码(也可以通过Web得到)采用C++的一个小子集书写,这样做是为了让所有有经验的程序员都能理解。这个小子集可以看做一种特殊语言,是由Sean Parent和Bjarne Stroustrup一起设计的。
无论你是一位软件开发者,还是其他以编程作为一项重要活动的专业人员,或者是一名在校的学生,你都会逐渐理解本书的经验丰富的作者多年来一直在教授和阐释的道理:数学对于编程是绝好的东西,理论对于实际是绝好的东西。

好书啊,就像看哲学一样。

第二章变换及其轨道,读了之后你就明白了链表找环算法和找环入口算法的原理;
第三章可结合运算,你能从中看出一些如何简化幂运算的算法思想;
第四章线性序,有不少关系运算的味道;
第六章迭代器,你能看到数组、链表、队列的影子;
第七章坐标结构,则是二叉树、图的影子;
第八章后继可变的坐标,是六七两章数据结构如何修改的抽象;
第九章拷贝,告诉你如何让memcpy()源地址和目的地址有重合时,依然能正确完成;
第十章重整,可以看作对数组整体操作的抽象,同时是任何排序算法的抽象;
第十一章划分和归并,可以看作是分治法的抽象;
第十二章复合对象,正如题名,对复合类型的抽象。

如果有函数式编程语言的学习经历,读起来会有更多收获。


目录

Preface ix
About the Authors xiii
1 Foundation 1
1.1 Categories of Ideas: Entity, Species, Genus 1
1.2 Values 2
1.3 Objects 4
1.4 rocedures6
1.5 Regular Types 6
1.6 Regular Procedures 8
1.7 Concepts 10
1.8 Conclusions14
2 TransformationsandTheirOrbits1 5
2.1 Transformations 15
2.2 Orbits 18
2.3 Collision Point 21
2.4 Measuring Orbit Sizes 27
2.5 Actions 28
2.6 Conclusions 29
3 Associative Operations 31
3.1 Associativity 31
3.2 Computing Powers 33
3.3 Program Transformations 35
3.4 Special-Case Procedures 39
3.5 Parameterizing Algorithms 42
3.6 Linear Recurrences 43
3.7 Accumulation Procedures 46
3.8 Conclusions 47
4 Linear Orderings 49
4.1 Classification of Relations 49
4.2 Total and Weak Orderings 51
4.3 Order Selection 52
4.4 Natural Total Ordering 61
4.5 Clusters of Derived Procedures 62
4.6 Extending Order-Selection Procedures 63
4.7 Conclusions 63
5 Ordered Algebraic Structures 65
5.1 Basic Algebraic Structures 65
5.2 Ordered Algebraic Structures 70
5.3 Remainder 71
5.4 Greatest Common Divisor 76
5.5 Generalizinggcd 79
5.6 Steingcd 81
5.7 Quotient 81
5.8 Quotient and Remainder for Negative Quantities 83
5.9 Concepts and Their Models 85
5.10 Computer Integer Types 87
5.11 Conclusions 88
6 Iterators 89
6.1 Readability 89
6.2 Iterators 90
6.3 Ranges 92
6.4 Readable Ranges 95
6.5IncreasingRanges 103
6.6 Forward Iterators 106
6.7 Indexed Iterators 110
6.8 Bidirectional Iterators 111
6.9 Random-Access Iterators 113
6.1 0Conclusions 114
7 Coordinate Structures 115
7.1 ifurcate Coordinates 115
7.2 Bidirectional Bifurcate Coordinates 119
7.3 Coordinate Structures 124
7.4 Isomorphism, Equivalence, and Ordering 124
7.5 Conclusions 131
8 Coordinates with Mutable Successors 133
8.1 Linked Iterators 133
8.2 Link Rearrangements 134
8.3 Applications of Link Rearrangements 140
8.4 Linked Bifurcate Coordinates 143
8.5 Conclusions148
9 Copying 149
9.1 Writability 149
9.2 Position-Based Copying 151
9.3 Predicate-Based Copying 157
9.4 Swapping Ranges 164
9.5 Conclusions 168
10 Rearrangements 169
10.1 Permutations 169
10.2 Rearrangements 172
10.3 Reverse Algorithms 174
10.4 Rotate Algorithms 178
10.5 Algorithm Selection 186
10.6 Conclusions 189
11 Partitionand Merging 191
11.1 Partition 191
11.2 Balanced Reduction 198
11.3 Merging 202
11.4 Conclusions 208
12 Composite Objects 209
12.1 Simple Composite Objects 209
12.2 Dynamic Sequences 216
12.3 Underlying Type 222
12.4 Conclusions 225
Afterword 227
Appendix A Mathematical Notation 231
Appendix B Programming Language 233
B.1 Language Definition 233
B.2 Macros and Trait Structures 240
Bibliography 243
Index 247

第一章 Foundations

编程的本质,是数学,是函数。针对现实世界的问题,我们首先要建立模型,界定标准,定义属性和行为。

然后呢,让这些模型对象实体动起来,于是计算机世界就有了生命。这跟大自然造物还真是一个道理。

谁能道透宇宙自然之奥秘呢?

老子道德经有云:道可道,非常道。名可名,非常名。也就是说,这个宇宙之道,不可道也!

編程的本質:编程也应像其他科学和工程领域一样基于坚实的数学基础相关推荐

  1. java web编程技术上机实验_JavaWeb編程技术实验指导书.doc

    JavaWeb編程技术实验指导书 <Java Web编程技术> 实 验 指 导 书 沈泽刚 编写 2010年3月 目 录 实验一 简单的Servlet与JSP1 实验二 HTTP请求对象3 ...

  2. linux多线程编程和linux 2.6下的nptl,Linux多線程編程和Linux 2.6下的NPTL

    這幾天由於工作需要,琢磨了一下Linux下的多線程的相關資料.Linux下最常用的多線程支持庫為Pthread庫,它是glibc庫的組成部分.但是關於Pthread的說明文檔非常缺乏,特別是對POSI ...

  3. [轉載]Google C++編程風格指南(四):智能指針和其他C++特性

    [轉載]Google C++編程風格指南(四):智能指針和其他C++特性 @ 複雜的人生,複雜的自己. :: 痞客邦 PIXNET :: [轉載]Google C++編程風格指南(四):智能指針和其他 ...

  4. Linux下的多线程編程

    Linux下的多線程編程 本文出自:http://www.china-pub.com 引言 線程(thread)技術早在60年代就被提出,但真正應用多線程到操作系統中去,是在80年代中期,solari ...

  5. java实现鼠标宏编程_我應該如何編程高級java遊戲中的鼠標/鍵輸入?

    我是一名自學成才的程序員,所以我不知道正確的做事方式.我製作了諸如小行星和蛇之類的簡單遊戲,但在這些遊戲中,您可以輕鬆修改鍵事件功能中的變量.這裏是我在我的簡單的小行星遊戲做到了:我應該如何編程高級j ...

  6. java中break,continue,標籤實現goto效果(編程思想)

    goto 編程語言中一開始就有goto關鍵詞了.事實上,goto起源於彙編語言的進程控制:"若條件A成立,則調到這裏:否則跳到那裏". goto語句時在源碼級別上的跳轉,這導致了其 ...

  7. 童程童美机器人编程上海虹口校区_呼市童程童美少儿编程学习中心

    呼市童程童美少儿编程学习中心,学习少儿编程就选童程童美,童程童美专注3-18岁少儿编程教育.历时多年,形成了以创意启蒙课程.人工智能编程.智能机器人编程.信息学奥赛编程等课程为核心的一站式编程教育平台 ...

  8. 浙江新增python课程_今年9月起 浙江八年級新增Python編程課程

    一線教師:學生學起來不難,難的是老師要會教 今年9月的新學期,浙江三到九年級資訊技術課將替換新教材.消息一齣,引起浙江學生家長的關注. 其中最大的變化是,八年級將新增Python課程內容.新高一資訊技 ...

  9. python中国官网-中蟒 (中文 Python) 編程語言網站 chinesepython

    1. 什么是中蟒 ? 中蟒可以算是 Python 編程語言的一個中文翻譯版. 不過除了用戶信息, 中蟒還翻譯了 Python 的保留字, 內建函數, 類別定義等等. 也就是說, 在一般情況下, 你可以 ...

最新文章

  1. 为何要fork()两次来避免产生僵尸进程?
  2. 基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
  3. python程序的输入输出(acm的几个小程序)
  4. 我去,还在这样读写 excel 这也太低效了吧,好办法来了
  5. Item03. 设计模式 Item04. STL
  6. 扫地机器人从“玩具”到“工具”,科沃斯、云鲸们要如何扫开屏障?
  7. Maven构建java项目
  8. create a new JSON model with url will trigger SAP UI5 AJAX
  9. Serializing Lua objects into Lua Code
  10. POJ2352-Stars【树状数组】
  11. 如何往eclipse中导入maven项目
  12. springboot项目如何不依赖spring-boot-parent
  13. 特斯拉11月份售出52859辆国产汽车 同比增长145%
  14. 方格取数 (Standard IO)
  15. 使用UE去除复制文本中的空格、换行符和TAB
  16. greenplum定期清理日志脚本-分割线后更新简单方法
  17. DSP 6678的中断系统
  18. bootstrap4.0图标使用_Bootstrap 图标字体 Font Awesome 4.0 发布
  19. javascript中(function(){})($)与$(function)的区别
  20. 记一次失败的 ThoughtWorks 面试经历

热门文章

  1. 短视频SDK,直播SDK,美颜SDK_提供开放API接口
  2. 各种科学计算软件科普
  3. VC做了个仿千千静听的播放器
  4. 淘宝客api接入步骤详解
  5. Java NIO SocketChannel读
  6. the cluster is down
  7. TypeScript高级类型-Partial、Required、Pick、Omit、Readonly
  8. NET是什么????
  9. F-02 创建财务凭证BAPI
  10. 2022创新中国企业家论坛暨天心集团六周年年会成功举行