|
[em3] [em3] [em3]
Minlearn’s programming teaching book:
编程新手真言5th
Writen By Minlearn
Frequently Updated @ 请点击这里 : http://thousandd.appspot.com/
版本历史:
版本 详情 日期
Ver0 初步写出了本书的一个草稿《编程新手真言》 200803-04
Ver1 确定了最初的目录安排,及完成了前几章的开头部分.. 20090417
Ver2 拖拖拉拉,并潦草地填了300多页..途中书名几经改动 200904-08
Ver3.. 重整理了前100多页使之变得可读.并确定了最终的目录安排 20090810
Ver4: 改名为《计算机科学与编程中的抽象学》,,整合部分目录,,简化写作难度,并开始写本书第三部分《graphics》,确定了这章的目录安排,即讲解一个基于dx的引擎irrlicht和一个通用游戏逻辑库mpwg,这二个引擎揭示了图形编程和游戏编程中的关键技术 。 20091001
Ver5 重新改回原来名字《编程新手真言》 20100101
Tobecontiue: … …
敬语:
丛书里有少数文章是我很早不成熟的时候写的.为了不必要的澄清与反澄清,本人只推荐此套丛书作为参考书使用,如果您先前没能看到这条警告,请在不小心使用本丛书后去看医生.
另外,本丛书有一些部分和章节摘自网上,,我在行文中极力对他们的出处和作者进行了提及,感谢他们为丛书带来的一切,如有遗漏或错误,请告知我..
最后,如果你不是从thousandd.appspot.com上下载的本丛书,那么可能你得到的不是最新版本,请同样去看医生..
--版权声明--
本书及附书资源分别基于GNU Free Documentation License, Version 1.2 Or Any Later 和GNU FSF发布,你可以自由修改并发布本文档和使用附书资源,但不得当它用..
第一部分 书前
前 言
大师的禅语并非一无所指,一切只是你还没有拿到那个水晶球.而很多问题,仅仅只是没在语言上被道破过.
By Chenyi
眼前这本书充分体现了作者的所思、所想、所感,他用自己独特的眼光审视着计算机技术的世界,也用自己独特的思维逻辑对技术进行解读,并用自己特有的,呵呵,偶尔带有“四个逗号 = 一个逗号”这样的语言风格,进行着自己的诠释.创新是一种美,独立思考也是
学习是一件因人而异的事情,因为每个人的生活经历、教育背景、年龄、认知模型等等,都是不尽相同的,也就是每个人所处的“维度 ”不同,而作者有一种“建立更高层抽象的能力”,用一种特有的方法尝试着给大家建立一个学习计算机的、相对高层的构架,这样,可以在一定程度上突破个人的“维度”,使大家从与周围事物建立联系开始,一步一步的走向计算机的世界.不识庐山真面目,只缘身在此山中.确实的,在学习技术的过程中,横看成岭侧成峰,远近高低各不同,但是作者却尽力想让这高低或是远近都不同的山峰,能在我们面前呈现出一种规律、共性来,这是难能可贵的,因为这个架构的过程对思维的要求是比较高的:)
哲语有云,动身的时候到了,有的人去生,有的人去死,只有上帝知道,于是这个问题被回归到“ To Be ? Or Not To Be ”的问题,是生,是死,只有上帝知道.
但是,人类对真理的探索和对知识的追求,却从来没有因为“生死”的维度而停止过,是的,一颗崇尚真理、探寻真理的海洋之心,将从来不会因为泰坦尼克号的沉沉而消沉,它将永远绽放在人们的心中,激励着我们向更广阔、更深髓的世界,一路前行、风雨无阻:)
在这个意义上,鼓励作者的写作和思路,也是对我们自身追寻真理的一种鼓励、一种回路.是为一点小感想:)与作者分享!!
By Minlearn
对思想的认识和界定是重要的!!因为我们需要一个知识体系才能不致于困惑!!(而身处编程界,纷繁复杂的术语和概念足以让一个初学者却步)
我抓住了哪些转瞬就在我脑中消失的思想,,因为它们远比一切成书的东西都让我感到它的珍贵!而更玄的是,他们竟然真的能够被文字描述出来!!这整本书就是小说式的教学.它力求呈现出一个精致化了的术语集.以使初学者能真正理解至关重要的那些概念.
正如Chenyi所说,每个人都是某个维度上的人,有他自己的年龄和认知,具体到某个历史时刻,我们的人生阅历已然被格定,而这决定了你接受新事物的能力和眼界,人生在世,已经不可能脱离某种信念(也异或某种阻力和障碍)而活,当我们开始学习编程,我们永远都是用外行的眼光来看待它的,而当你占在巨人的肩膀上成为一个专家之后,你就能够用全局的眼光去看待曾经陌生的知识,你看问题的维度发生了质变,此时你不再是个学习者,而会开始审视你学过的东西并学会产生你自己的认知,但,那毕竟是要过的第二道槛,而初学者就是那些连第一道槛都难以过去的群体.
这其中最大的拦路虎就是对术语的理解,很多书并不切合初学者的实际,从他们的角度呈现一条清楚可见的理解路线,而只是一些大部头衍生下的反复抄袭品.
给你一个术语或道理,这个道理有什么用?没用,是的,因为要给你一个情景,一些台阶,你才能理解它,仅仅让你去学一个知识,而知识和众多其它知识之间相似而微有不同,如果不给出它被产生时的历史和它所处的架构 ,那么我们就会迅速迷惑,更遑论运用它,因为我们不是泛化主义者,形而上学者 ,我们需要一种与自身相联系点去理解它,我们只是生活的人,有自己的维度和局限,我们不是高高在上的学院派高手.
一个高手必定是与常人有不同的思想级深层的东西和他自己特有的体会,因为他也走过初学者才走过来的路经历过与所有人一样的迷惑,可是往往人们都忘了归纳那些至关重要的经验,那会是什么经验呢,那些是不会出现在市面上任何描述具体技术细节的书里的思想级的东西!!如果你苦于找不到那样的一本书,那么本书正是尝试记录那些秘诀的一本,本书展开的过程,正是为初学者呈现一条清楚的理解路线的过程 ,在这条路线中,所有的编程相关的概念都自然地围绕着“抽象”逐次展开,请紧记本书的意义重点在这里.
如果真的想当高手,请你不要错过这本书里任何一个字眼!!如果你是高手,这本书一定与你内心深处的某些想法偶合.
本书过后,再辅于其它教科书(比如本丛书的第二本和第三本书)你应该会具备编程的基于抽象能力和用C++,Python进行基本和高级的编程能力和编程理解能力.本书前半部分是对思想和认知的导论(第一部分),后半部分注重真实的代码控制能力的形成(第二部分尾).
书中错误再所难免,望不吝赐教!!
 别怀疑,这正是一本同时可作为入门和进阶级的书(更偏重入门)!然而真正的高手和真正的初学者都将从中有所得.
 你还在为学不懂大量术语而烦恼吗?如果你真有这种体会,那么你可能先要看这本书再看你正在看的C++,Python的书,因为你仅仅缺少一根主线, 而它是能让你少走很多弯路的拐棍
 对架构的学习才是真正的学习,知识也有它的架构,然而在这本书内有架构也有细节(高手固然知道细节,然而高手也有精神空洞,因为你还需要懂得一些细节之外的知识系统的东西)! 当满目的书摆在你面前,请相信,你只需要那么一本,仅仅能让你知道这一切是怎么回事的不致以迷惑的那本.《from programming to game programming》
最后,如果说任何行为都是功利的,那么我写这本书的目的只为博你一笑.
感谢CCTV,感谢MTV,,噢,错了...
目 录
第一部分 书前 2
第二部分 Minly and Corely Learn Programming 10
导读 11
1.1. 什么是编程 11
1.1.1. 对编程部分(第二部分1,3,4章)的安排 19
1.1.2. 对问题部分(第二部分2,5章)的安排 27
1.2. 本部分用到的图例 35
第2章 冯氏系统与编程(面向系统的实现编程) 36
2.1. 机器系统 38
2.1.1. 图灵机与冯氏模型 38
2.1.2. CPU与内存地址 40
2.1.3. CPU的类型系统和指令系统 42
2.1.4. 指令系统 45
2.1.5. 对子系统和中断的支持 46
2.1.6. (*)对裸机的汇编编程 48
2.1.7. 编程中的(硬件)系统编程 55
2.2. 作为程序执行宿主的OS(上) 57
2.2.1. 保护模式 57
2.2.2. 软件系统的出现 59
2.2.3. OS Kernel与任务机制 62
2.3. 高级语言对于人的写法与表达逻辑的数据产生模式与代码产生模式: (系统实现语言C) 68
2.3.1. 编程的三种结构:运行模型与语言模型,设计模型 69
2.3.2. 冯氏开发中的数据与代码 : 从顺序确定的指令到结构化的语法代码与数据 73
2.3.3. 高级语言开发 74
2.3.4. 抽象与编译原理 78
2.3.5. 编译,编译语言与静态类型语言 95
2.3.6. C语言的名字修饰 98
2.3.7. (%%)语言的类型系统与表达式求值 100
2.3.8. 语句与过程 120
2.3.9. 过程,函数,过程范式与结构化 125
2.3.10. 形象理解C语言中的一些至关重要的二义性 127
2.3.11. C的观点:底层不需要直接代码抽象 129
2.3.12. C与C++是二种不同的语言 130
2.3.13. C可以用来表达应用吗? 132
2.4. 作为程序执行宿主的OS(下) 134
2.4.1. OS级的执行路径 134
2.4.2. 用户态与语言级的调试与systemerror 134
2.4.3. 其它OS子系统的职能 135
2.5. 算法与数据结构: 加进了对组织内存中的数据与对问题固有解法的编程 136
2.5.1. 算法+数据结构的本质 136
2.5.2. 数据类型和数据结构是二种不一样的东西 138
2.5.3. 用ADT来表达数据结构 139
2.5.4. 数据与数据属性 140
2.5.5. 函数增长与算法复杂性分析 142
2.5.6. 算法的设计模式 : 算法设计方法 143
2.5.7. 数据结构初步引象 143
2.5.8. 线性表,树与ordered 145
2.5.9. 树初步引象 151
2.5.10. 图 158
2.5.11. 真正的递归 158
2.5.12. 真正的散列表 160
2.5.13. 快速排序思想 161
第3章 系统实现与初级系统开发(以原始的,未经显式抽象和设计的方式) 162
3.1. Basic system programming 163
3.1.2. low level implentment 164
3.1.1. low level IO 170
3.1.2. low level shedule 170
3.2. 解决程序关于桌面系统模型的问题 175
3.2.1. 高级任务逻辑 177
3.2.2. IO与持久 177
3.2.3. 窗口系统与桌面环境 182
3.2.4. Internet上面的诸多协议Http,Ftp 195
3.3. (*)C的标准库与Gnu Libc 208
3.3.2. 为什么这章不写更多? C还善于用来作什么编程? 211
3.4. API与复用 212
3.4.1. 如何更好地解决可复用问题及其它问题 212
第4章 抽象了的运行系统和虚拟机上的抽象编程(面向程序员的抽象编程) 220
4.1.1. 再谈可复用 221
4.1.2. 什么是抽象,抽象是设计的一种高级形式 222
4.1.3. 语言之争 230
4.2. 整合了编译层与运行层的语言系统 : 虚拟机语言 258
4.2.1. (*)虚拟机的实现 259
4.2.2. (*)虚拟机是对OS执行功能的强化 259
4.2.3. Python Vm 261
4.3. (%%)抽象了的数据产生模式,代码产生模式 C++,Python) 273
4.3.1. 抽象了的过程控制抽象 : 基于对象编程 273
4.3.2. 抽象冯氏开发中的数据与代码 : 从平铺,过程的代码到预置,类化的对象代码(ADT&UDT编程:面向对象范式) 275
4.3.3. 抽象眼光看OO 278
4.3.4. Better C 288
4.3.5. C++的UDT语义 288
4.3.6. Py的OO实现 298
4.3.7. OO的缺点 299
4.3.8. Py语言系统的c/py api扩展层次 301
4.4. 设计 : 当编程考虑进与人有关的那些东西时 303
4.4.1. 大设计 305
4.4.2. 开发中的语言模型与对问题的设计形成的方案 308
4.4.3. 软件活动的特点 316
4.4.4. 什么是设计 318
第5章 超越平台与语言的编程(语言内和语言外对高阶设计手段与应用方案的支持) 332
5.1. 使用OO技术的方式 334
5.1.1. Pure OOA与OOD 334
5.1.2. 使用设计模式 : 加进了对应用进行固有OOA,OOD的编程(OOA,OOD Patterns) 334
5.1.3. (%%)设计模式问题与软件设计原则 340
5.1.4. 使用面向切面的方式 343
5.1.5. (%)使用C++的语言内模板的方式 : 参数化类型 344
5.1.6. 使用语言层的Interface : 抽象方法集 365
5.1.7. 使用独立语言的二进制级Interface的方式 : COM,IDL 366
5.2. 使用了语言和DSL为后台支撑应用的方式 :统一化应用方案,将编程逼到用户级的语义方式进行 371
5.2.1. 文本的语义:正规表达式 372
5.2.2. 文档的语义:元数据 372
5.2.3. 文本识别的统一语义 : 编译原理(前端) 374
5.3. 使用企业开发的方式 : 利用中间件技术淡化非业务逻辑 374
使用辅助手段与工具的方式 375
5.4. 使用统一软件开发过程的方式 : 设计与方法论 376
第6章 基于平台上的一般应用问题,脱离平台的一般应用问题的开发,以分布式为特征的企业应用问题(以加进了显式抽象和设计的方式) 379
6.1. (*)C++与库 379
6.1.2. 第三方的解决方案 T,MySQL,ACE 382
6.2. (*)不光是高级系统问题,还是通用应用问题(C++的第2层) 386
6.2.1. 为什么只写这些?C++还善于用来作什么编程? 387
6.3. 企业应用实现与开发(Java) 388
6.3.1. 什么是企业开发 389
6.3.2. 硬件程序,内核程序,桌面程序,以及什么是企业程序 390
6.3.3. SOA 392
6.3.4. 领域逻辑与框架 394
6.3.5. 构件 399
6.3.6. 企业开发与分布式计算 399
第三部分 Minly and Corely Learn Graphics Programming 400
导读 400
1.1. 什么是图形学及图形编程 400
1.1.2. 对图形学(第三部分2,3,4章)部分的安排 429
1.1.3. 对图形编程(第三部分5,6章)部分的安排 431
1.2. 本部分用到的图例 432
第2章 Modeling 433
2.2. 3D中的2D:平面,定位 434
2.2.1. 2d图像,图形,图元表示 434
2.2.2. 2D surface model 436
2.2.3. 2D UI 436
2.3. 3D中的数据准备(1)预生成为顶点的模型:空间与物体表现 436
2.3.1. 从数学上解释空间与空间内变动 436
2.3.2. 从计算几何上解释多边形 440
2.3.3. 从数学上解释插值与曲面 443
2.3.4. 复杂物体的建模 446
2.4. 4D中的数据准备(时间,轨迹,与动力模拟) 447
2.4.1. 从数学和物理上来解释动画与动力动画 448
2.4.2. 交互式3D :碰撞检测,反应 450
第3章 Appending Reality(Fix-Line Shading&Hybird Shading):Texturing,Lighting 451
3.1. (3D中的数据准备2)预生成为像素的图形 451
3.1.1. 从(线性)代数来解释贴图空间,贴图 453
3.2. (3D中的数据准备2)打光 453
3.2.1. 用物理来解释灯光 453
3.2.2. 虚拟全局灯光空间,照明与阴影 454
第4章 Fix-Line Rending与Hybrid Rendering 455
4.1. Rending前投数据(Highlevel Rendering) 455
4.1.1. 用数学来解释投影与流水线 456
4.1.2. 投影到屏幕 458
4.2. 渲染中动态投数据(lowlevel Rendering w/o DX Runtime) 459
4.2.1. GPU hardware与Real Time rending原理 460
4.3. (*)暂且使用D3D查看一下效果 460
第5章 设计一个图形引擎 460
5.1. 关于引擎的设计 461
5.1.1. 业界的抽象与设计 461
5.2. 一个教学上详细,技术点突出的设计: irrlicht源码系统 463
5.2.1. (#*)Math System 463
5.2.2. Basic RenderSys和rendering tech 488
5.2.3. Adding more:经过丰富化了的模型:加入了Mesh,Geoset化的层次model结构 581
5.2.4. 现在的Model 606
5.2.5. 加入SceneGraphc:架构级的抽象 607
5.2.6. Adv RenderSys和rendering tech:pass,deferred rendering(从这里开始全基于Scene manger) 663
5.2.7. 经过丰富化了的材质Texture,Matrial ----- 抽象着色器 665
5.2.8. 加入了用骨骼控制网格和插值矩阵的ActorScene :模场系统 667
5.2.9. 加入了Large CLOD Mesh ? Terrain Model的Model: StageScene :地场系统 711
5.2.10. 加入了粒子,公告板 ? : FXScene 723
5.2.11. 更多的物理与碰撞:把物理单元独立出来作为一个模块 737
5.2.12. (*)进一步丰富了的ActorScene数据库binxml pkg 745
5.3. 还可以怎么样抽象或设计 745
5.3.1. 仿现有产品,比如Blender的抽象与设计 745
5.3.2. 其它更多…… 745
5.3.3. 最后一点:图形引擎不是游戏引擎 748
第6章 Demo Products 748
6.1. Scene Editors 748
6.1.1. font editor 748
6.1.2. gui editor 748
6.1.3. matrial editor 748
6.1.4. model editor supporting (plug for 3dmax studio) 748
6.1.5. package editor 748
6.1.6. terrain editor 748
6.1.7. other editors...... 748
6.2. A Graphic direct based game 748
6.2.1. blp.cpp,blp.h 749
6.2.2. mdx.cpp,mdx.h 749
6.2.3. w3x.cpp,w3x.h 749
6.2.4. stormdll.cpp,stormdll.h 749
第四部分 Minly and Corely Learn Game Programming 749
导读 749
1.1. 什么是游戏及游戏编程 749
1.1.1. 什么是游戏及游戏编程 749
1.1.2. 对游戏编程(第四部分2,3章)部分的安排 750
1.2. 本部分用到的图例 751
第2章 设计一个游戏引擎 752
2.1. About Game Engine Design 752
2.1.1. 关于游戏 752
2.1.2. 还可以怎么样设计 753
2.2. 一个教学上详细,技术点突出的设计: a generic script-extendable Multiplayer world/Game System 754
2.2.1. (#*)DB System 754
2.2.2. Adding World Compents & World Logics 754
2.2.3. Adding AI Extending Interface ? for plugging in dymic script drivern ai logics 763
2.2.4. Adding Game & Game Systems 768
2.2.5. Adding Map Extending Interface ? for plugging in dymic scripting drivern map logics(or common game/gamesystem logics) 791
2.2.6. Engine Bindings(scripts extending interface from mpwg.dll) 815
2.2.7. scripting(1) : pyscripting level extends 815
2.2.8. (#*)Net System 1059
2.2.9. Generic Multiplayer Game 1059
第3章 Demo Products 1059
3.1. A mpwg based Console Game 1059
3.1.1. 关于blizzard war3 1059
3.1.2. xxx 1061
3.2. WorldEditor 1061
3.2.1. map editor 1062
3.2.2. team editor 1062
3.2.3. campine editor 1062
3.2.4. script editor(text editor like,non visual) 1062
3.3. Notwar3(only more scripting extends) 1062
3.3.1. scripting(2) : product level extends 1062
3.3.2. scripting(3) : map level scripting extends and advance visual Script Editor 1124
第五部分 书后 1125
附录,结语及建议 1125
1.1. 附录 1125
1.1.1. C,C++,Python学习为辅,图形开发为辅 : 关于本书初衷 1125
1.1.2. 本书涉及到的概念列表 1147
1.1.3. 分散在本书中的源码归类 1147
1.1.4. 更多一般性应用问题和一般性设计问题列举 1149
1.1.5. 参考书籍 1153
1.2. 结语与建议 1154
|
|