📄 bianchenzhenyan.txt
字号:
对问题编程
对平台编程
数 据 模
(SQL,XML,OO 对CPU编程
(汇编)
对 OS 编程
( 消息,GUI,
并发)
对 网 络 编
(Sock,P2P,We
对虚拟机编
程
(DotNet,Java)
多媒
(DirectX,OpenG
其它具体问题…
问题域 方案域
多范型设计
可 复 用( 面向
对象与面向构
件)
其 它 范型( 面
向过程,基于对
象,STL,GP)
Gang Of Four
J2EE Core DPs
基石:领域数学(高数,离数,计算方法)
XP,RUP,部署,测试,
重构
编程新手真言 - GameRes.com 页码,5/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
前言
引用今何在在《九州羽传说》中的一句话“世界上的事就是这么简单,当你不说出来你永远都不会明白,
但当你说出来一切都显得那么简单!!
我抓住了哪些转瞬就在我脑中消失的思想,,,因为它们远比一切成书的东西都让我感到它的珍贵!而更
玄的是,他们竟然真的能够被文字描述出来!!这整本书就是小说式的教学
人生在世,我们的所见所闻也都那些,给你一个道理,,这个道理有什么用?没用,是的,因为要给你一
个情景,你才能运用它
仅仅让你去学一个知识,如果不给出它被产生时的历史和它所处的架构(这本书不但给你思想,而且给你对
应的细节),那么我们就会迅速迷惑,因为我们不是泛化主义者,形而上学者(但是的确存在超前主义学
说,只是为了创立一种学说,后来才慢慢与实践相结合),我们需要一种与自身相联系点去理解它,我们只
是生活的人,我们不是高高在于的学院高手。
倒干你杯子里的水,因为你见面临一场说教,这是一种很蠢的思想,人生在世,已经不可能脱离某种信念
而活,当我们开始学习编程,我们永远都是用外行的眼光去看待某样东西,当你占在巨人的肩膀上成为一
个专家之后,你就需要用全局的眼光去看待曾经陌生的知识,此时你不再是个学习者,而会批评产生你自
己的认知
一个高手必定是与常人有不同的思想级深层的东和他自己特有的体会,那是什么呢,那些不会出现在任何
描述具体技术的思想的东西,那么这本书就提供了高手的秘诀,如果真的想当高手,,,请你不要错过这
本书里任何一个字眼!!如果你是高手,这本书一定与你内心深处的某些想法偶合。
知识是事物之间的联系,那么实践就是强化或深入这些联系的方法
我常想,到底是什么重要,是认知还是技能,人们普遍认为实践应在任何情况下都高于认识,事实是:可
能有技能但是没有认知,但却不可能有认知但没有技能,只有格物至知,先格物,认识到了一定程序后就
会产生对事物本质的认识,也可先认识事物本质再在指导下去发展技能,,,但是认知可以直接传递给你(至此
只是一个你所能想象得到的浅层和大概,而且除非实践,这个大概形象你也不知道它到底是正确的还是错误
的,更深层的你想象不到的抽象以及关于这些认识的正确性要求实践),而实践不能被直接传达
看英语报纸也是实践,因为它也能够加强你实际使用英语的能力,
知识的获得与能否运用知识本身无必然因果,拥有足够的知识,再加上泛型的思维,,你就会快速得以实践
所以说实践和认知都是重要的,没有谁比谁更重要的说法,然而对于初学者来说浅层认知的重要性要高于实
践,一开始就有一个好的思想和基础显然可以为未来的实践扫清障碍(不是提倡光谈理论,而是把理论整理
成一个架构也是一项重要的工作,不是不能直接把这个认知传递给你,而是需要再找一个与你的结合点来
让你认识它,因此它是一本同时讲解到认知与实践的书, 不是提倡导光谈理论,而是如果事先有理论的指
导,那么学习中就会少走很多弯路,学习中最怕不能理解细节,更怕以为细节就是一切,所谓一叶屏目不
见泰山,更有人把学习语言作为编程的终极目标,而如果事先有人给你指导,你就会少走很多弯路)
因此,即便这个浅层的认知,也是无比重要的,因为学习是一个层次上升阶段,在拥有一定知识后,理解基
编程新手真言 - GameRes.com 页码,6/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
于这些知识之上的更高层知识会很快,, 即掌握了基础再加上一定勤奋的博物广识,知识量是几何级上升的,
因此一种很好的学习方法是,学习应该先吞,(在一定知识量的前提下尽可量地博物广识,即使看不懂也要
浏览完,以获得浅层的认知继续下一步学习),这是自然而痛苦的过程,(注意这只是泛读阶段,以建立一个知识
的框架)
我们鼓励在实践基础上去学习,也提倡速成,我认为学习不应该提倡逐步深入,人的生命有限,染启超在渡
日的般上一夜之间学会日语,这就是说他掌握了思想,细节的东西永远是后来的,只要思想是重要的
掌握了思想和基础后,每天写小程序,编程能力就会日渐提高,而当你写过和分析过很多程序之后,你就会
具备一眼看出的本事,过程的最后你发现自己蛹变蝶飞了
学习应首先理解框架(这是泛读),然后是细节(这就是对某些内容的精读),就好像在一个大型应用中,编译
跟解释并不会走二个极端一样(低层用编译码,而高层用脚本),学习往往是混合了这二个过程的过
程,,,矛盾和老子的不可绝对在这里起作用
所以说思想和基础永远是重要的(人月神话的作者固然精通很多细节,但是他写出来的却是一本思想
书),,知识和思想自然是越多越好(泛读可以无限进行,花再多人年都无碍,人年是人月神话里面的概念),
但是有一些知识不必深入(精读却需限于自己的开发领域),但一定要知其然
如果说一些知识仅仅知其然就够了的话(仅仅是不致于迷惑和建立知识结构),那么有一些知识却是要精通
的,因为不但要知其然而且要实际拿来应用
要成为某领域能实际胜任某份工作的程序员,就要做到精通四个“Idioms”(注意这是精通)
1. 你要用到的语言和IDE的“Idioms”(一门语言,一种开发库)---编程首先就是会用一门语言和它的库
2. 数据上的”Idioms”(数据结构-数据的内存模式,数据库-数据的外存模式)---编程第一个就是数据,想
起DOS下的编程了吗,一是数据,二是代码
3. 设计上的”Idioms”(面向对象,设计模式)-----编程第二个就是代码或代码框架
4. 以上三条都是前提,那么这第四条就是最终的你要实际涉入的业务领域的”Idioms”---编程最终是为
了为这个领域服务
以上四条是主干(最好按1-4的顺序精读),而其它的都是支节。比如工具的使用啊,XML啊,UML啊,XP
方法啊,ANT部署发布知识啊等等
对于计算机专业来说,为什么也才那么几门课程(高数线代离散,编译原理,C与算法,Java),,因为这些
学科是最重要的(真正掌握了这些基础,你会发现再多后面的技术用语及其背景都是支节),这就相当于前面
提出的四个Idioms
比如拿编程语言来说,只要越过语言的表达这一层,我们才能用语言表达和理解事物(语言跟你要说的话就
像用C++语言去表达一个算法,方案领域跟应用领域的对应),就像口才,一个好口才的人说话时绝对不会
想到措词,因为语言已经成为一种意象,只要把一样东西思想化,才能超越这个东西而去想到别的东西而长
足发展,比如面向对象,这本书将帮你解释为什么面向对象是一种科学的机制,解释的过后你甚至会觉得
这是一种本来就该存在的很亲切的机制,只要超越了面向对象我们编程时,再加上一定设计模式,才能真
正不会一动手编程就考虑什么是面向对象之类。。而这些,好像都是一个高手所能做的事了,)。
编程时碰到的信息量永远是巨大的,有生之年我们不可能掌握这些信息的来龙去脉,对于程序员来说,提
供一个关于它的编程参考文档可以说是掌握了此信息,因为这个文档就是这个信息的大概,实际上我们编
程大部分情况下都只是用第三方的代码库来编程,这个信息用于编程所需的全部东西,对于编程来说只要
编程新手真言 - GameRes.com 页码,7/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
掌握这些东西就行),换句话说,一些知识如果不能理解就得先放(以后总会弄懂它的吧?又不是为了应付临
时的考试!), 在这个信息的社会,至于信息,是撞事学事!一个程序员并不全知全能,它只提取和了解事
物对于编程方面的信息。对于事物的逻辑认识,只能在对它的编程中不断掌握它
问题随之而来,既然存在这个界限,又如何突破,否则这就是一个空谈
多走弯路,学习是认识事物间联系的过程,而记忆或实践是加强这个联系的过程,,能够认识到事物之间
的联系,即便是自想的联系也可加深对事实的记忆(一个程序员有他自己的知识体系是重要的),这就是知
识
一切东西,我们应该查本究源,深入其原子世界(任何一个术语都不会简单,有它自己产生的环境与其它知
识的联系,但也正是因为这样,这也决定了它的有域性,任何知识只要放在它自己的领域内去理解才能更
容易被理解),, 翻译过很多文章你就知道要措词,措词跟概念有关,二个稍微相差不大的措词都会让读者摸
不头脑或让他们恍然大悟。
我们高中做到了英语的相似名词不同分析,本书也打算在一定程序上这样做(虽然计算机技术领域一个概
念可以自成一书这种现实不允许我们这样做),咬文嚼字在这里起作用,,在某些情况下,它是一种好习
惯!
然而千万不要走入另外一种极端, ,知识用词和技术用语没有一个标准,比如方法和函数指的是同一个东西
什么是线性(一次就是线性),什么是离散(离散了的量),这都是仁者见伍,智者见,但人们对此的理解都不
会差到那里去,并且也不会影响后来的学习,这里有一个描述或形式的概念,相信大家都还记得初中学过的
集合,是描述性概念,但集合其实还有一个形式概念,给定了形式就可以框死
而且,要知道,即使是《虚拟机的原理与设计》这本书的作者也会对别人书里的进程概念感到不解。
我注意到程员序考试中多了一项标准化,的确,知识的传达也需进入标准化时代了
最后,如果说任何行为都是功利的,,那么我写这本书的目的只为博你一笑,,,
书中错误再所难免,望不吝赐教!!
阅读建议
1. 别怀疑,这正是一本同时可作为入门和进阶级的书!真正的高手和真正的初学者都将从中有所得.
2. 你还在为学不懂大量术语而烦恼吗?如果你真有这种体会,那么你可能先要看这本书再看你正在
看的C++的书,因为你仅仅缺少一根主线, 而它是能让你少走很多弯路的拐棍)
3. 对架构的学习才是真正的学习,知识也有它的架构,然而在这本书内有架构也有细节(高手固然知
道细节,然而高手也有精神空洞,因为你还需要懂得一些细节之外的架构级的东西)!
4. NotWar3的从零到尾的实现,让你知道其实你一个人就可以做出类War3的游戏!!(本书作者也
自称是一个菜鸟,但是这个程序的确是他自己写的)
本书的架构就是第一部分到第三部分都是独立的一章,既有知识架构,也有学习方法,技术细节的描述,
编程新手真言 - GameRes.com 页码,8/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
这三部分要为第四部分用到的细节都给出了详细解释。。(四部分都是独立且相互联系的)第二到第三部分
很多知识点的讲解都为了第四部分服务,比较侧重于游戏编程(兼顾了通用的编程知识),因为我们本书的
主要任务之一是产生一个游戏
第二部分 要懂得什么
1. (要懂得一点思想)《原语,抽象,组合》
2. (要懂得一点领域内的数学)《数学与算法》
3. (要懂得所处的环境)《硬件,平台,网络》
4. (要懂得方案域的常用原语)《面向对象与面向构件》
5. (要懂得待处理问题域的大概的编程原语,比如)《J2EE大领域学》
第2到第4讲的都是范型,第5讲的是问题
第三部分 要精通什么
1. (要精通所用的语言的语法语义)《C++与JAVA》
2. (要精通处理什么样的数据) 《数据结构与数据库》
3. (要精通写什么样的代码或框架) 《策略与设计》
4. (要懂得待处理问题域的编程原语,为第四部分作准备)《游戏编程与虚拟现实》
第1到第3讲的都是范型(1讲的是语言级的,2,3讲的都是非语言级的范型),第4讲的是问题
第四部分 一个综合的例子
这部分就是讲解如何用范型来解决问题
1.《设计----NotWar3框架开发过程》
2.《编码-----一个核心Demo的实现》
3.作业与重构
第二部分
原语,抽象与组合
大师的禅语并非无所指,一切都只是因为我们并没有拿到那个水晶球而已!!
思想本非也不该是高高在上的东西,只是我们没有勇气跟它平起平坐而已,而且求知的你只是缺少一个求
知渠道而已。
因为这三个思想实在太重要了而它们又独立于所有知识,更并且,它们不被任何其它书籍提到并组织,所
以在这专门作为一章来讲解:)
编程新手真言 - GameRes.com 页码,9/101
mhtml:file://F:\Cpp\编程新手真言.mht 2008-7-30
抽象,原语
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -