深⼊dos编程_新⼿编程导论(⼀)
第⼀部分
前 ⾔
By Chenyi
眼前这本书充分体现了作者的所思、所想、所感,他⽤⾃⼰独特的眼光审视着计算机技术的世界,也⽤⾃⼰独特的思维逻辑对技术进⾏解读,并⽤⾃⼰特有的,呵呵,偶尔带有“四个逗号=⼀个逗号”这样的语⾔风格,进⾏着⾃⼰的诠释。创新是⼀种美,独⽴思考也是:)
学习是⼀件因⼈⽽异的事情,因为每个⼈的⽣活经历、教育背景、年龄、认知模型等等,都是不尽相同的,也就是每个⼈所处的“维度”不同,⽽作者有⼀种“建⽴更⾼层抽象的能⼒”,⽤⼀种特有的⽅法尝试着给⼤家建⽴⼀个学习计算机的、相对⾼层的构架,这样,可以在⼀定程度上突破个⼈的“维度”,使⼤家从与周围事物建⽴联系开始,⼀步⼀步的⾛向计算机的世界。不识庐⼭真⾯⽬,只缘⾝在此⼭中。确实的,在学习技术的过程中,横看成岭侧成峰,远近⾼低各不同,但是作者却尽⼒想让这⾼低或是远近都不同的⼭峰,能在我们⾯前呈现出⼀种规律、共性来,这是难能可贵的,因为这个架构的过程对思维的要求是⽐较⾼的:)
哲语有云,动⾝的时候到了,有的⼈去⽣,有的⼈,只有上帝知道,于是这个问题被回归到“ To Be ? Or Not To Be ”的问题,是⽣,是死,只有上帝知道。
但是,⼈类对真理的探索和对知识的追求,却从来没有因为“⽣死”的维度⽽停⽌过,是的,⼀颗崇尚真理、探寻真理的海洋之⼼,将从来不会因为泰坦尼克号的沉沉⽽消沉,它将永远绽放在⼈们的⼼中,激励着我们向更⼴阔、更深髓的世界,⼀路前⾏、风⾬⽆阻:)
在这个意义上,⿎励作者的写作和思路,也是对我们⾃⾝追寻真理的⼀种⿎励、⼀种回路。是为⼀点⼩感想:)与作者分享!!
By Minlearn
对思想的认识和界定是重要的!!因为我们需要⼀个知识体系才能不致于困惑!!(⽽⾝处编程界,纷繁复杂的术语和概念⾜以让⼀个初学者却步)
我抓住了哪些转瞬就在我脑中消失的思想,,因为它们远⽐⼀切成书的东西都让我感到它的珍贵!⽽更⽞的是,他们竟然真的能够被⽂字描述出来!!这整本书就是⼩说式的教学。它⼒求呈现出⼀个精致化了的术语集。以使初学者能真正理解⾄关重要的那些概念。
正如Chenyi所说,每个⼈都是某个维度上的⼈,有他⾃⼰的年龄和认知,具体到某个历史时刻,我们
的⼈⽣阅历已然被格定,⽽这决定了你接受新事物的能⼒和眼界,⼈⽣在世,已经不可能脱离某种信念(也异或某种阻⼒和障碍)⽽活,当我们开始学习编程,我们永远都是⽤外⾏的眼光去看待某样东西,⽽当你占在巨⼈的肩膀上成为⼀个专家之后,你就需要⽤全局的眼光去看待曾经陌⽣的知识,此时你不再是个学习者,⽽会批评产⽣你⾃⼰的认知,但那毕竟是要过的第⼆道槛,⽽初学者就是那些连第⼀道槛都难以过去的体。
这其中最⼤的拦路虎就是对术语的理解,很多书并不切合初学者的实际,从他们的⾓度呈现⼀条清楚可见的理解路线,⽽只是⼀些⼤部头衍⽣下的反复抄袭品。
给你⼀个术语或道理,这个道理有什么⽤?没⽤,是的,因为要给你⼀个情景,你才能理解它,仅仅让你去学⼀个知识,⽽知识和众多其它知识之间相似⽽微有不同,如果不给出它被产⽣时的历史和它所处的架构(这本书不但给你思想,⽽且给你对应的细节),那么我们就会迅速迷惑,更遑论运⽤它,因为我们不是泛化主义者,形⽽上学者(但是的确存在超前主义学说,只是为了创⽴⼀种学说,后来才慢慢与实践相结合),我们需要⼀种与⾃⾝相联系点去理解它,我们只是⽣活的⼈,我们不是⾼⾼在上的学院派⾼⼿。
⼀个⾼⼿必定是与常⼈有不同的思想级深层的东西和他⾃⼰特有的体会,因为他也⾛过初学者才⾛过来的路,可是往往⼈们都忘了归纳那些⾄关重要的经验,那会是什么经验呢,那些是不会出现在任何
描述具体技术细节的书⾥的思想级的东西,那么这本书尝试的正是记录那些秘诀,如果真的想当⾼⼿,请你不要错过这本书⾥任何⼀个字眼!!如果你是⾼⼿,这本书⼀定与你内⼼深处的某些想法偶合。
本书过后,再辅于其它教科书(⽐如你⼿头上的⼀本C++教材,本书后⾯列举了⼀些与本书能很好答配的推荐参考书)你应该会具备基本的编程能⼒和编程理解能⼒。本书前半部分是对思想和认知的导论,后半部分注定实践和技能能⼒的形成。
知识是事物之间的联系,那么实践就是强化或深⼊这些联系的⽅法,我常想,到底是什么重要,是认知还是技能,⼈们普遍认为实践应在任何情况下都⾼于认识,事实是:可能有技能但是没有认知,但却不可能有认知但没有技能,就拿学习英语来说吧,看英语报纸也是⼀种实践,因为它也能够加强你实际使⽤英语的能⼒,(我不是在模糊这⼆者之间的区别,我只是企图站在这⼆者之上求得⼀种更泛化的认识),实践不过更侧重动⼿能⼒⽽已民,⽽认知跟它并不⽭盾,知识的获得与能否运⽤知识本⾝⽆必然因果,拥有⾜够的知识,再加上泛型的思维,,你就会快速得以实践,⼀切都是⼀种格物致知的过程,只有格物⾄知,先格物,认识到了⼀定程序后就会产⽣对事物本质的认识,也可先认识事物本质再在指导下去发展技能,但是认知可以直接传递给你(⾄此只是⼀个你所能想象得到的浅层和⼤概,⽽且除⾮实践,这个⼤概形象你也不知道它到底是正确的还是错误的,更深层的你想象不到的抽象以及关于这些认识的正确性要求实践),相⽐之下⼀本书不可能传递很多实践的东西。本书前⼀部分正是⼒
求让初学者完成从认知到实践的有效过渡。
所以说实践和认知都是重要的,没有谁⽐谁更重要的说法,然⽽对于初学者来说浅层认知的重要性要⾼于实践,⼀开始就有⼀个好的思想和基础显然可以为未来的实践扫清障碍,这是因为学习是⼀个层次上升阶段,在拥有⼀定知识后,理解基于这些知识之上的更⾼层知识会很快,,即掌握了基础再加上⼀定勤奋的博物⼴识,知识量是⼏何级上升的,因此⼀种很好的学习⽅法是,学习应该先吞,(在⼀定知识量的前提下尽可量地博物⼴识,即使看不懂也要浏览完,以获得浅层的认知继续下⼀步学习),这是学习中⾃然⽽痛苦的过程。(不是提倡光谈和光看理论,⽽是把理论整理成⼀个架构也是⼀项重要的⼯作,不是不能直接把这个认知传递给你,⽽是需要再⼀个与你的结合点来让你认识它,因此它是⼀本同时讲解到认知与实践的书, 不是提倡导光谈理论,⽽是如果事先有理论的指导,那么学习中就会少⾛很多弯路,学习中最怕不能理解细节,更怕以为细节就是⼀切,所谓⼀叶屏⽬不见泰⼭,更有⼈把学习语⾔作为编程的终极⽬标,⽽如果事先有⼈给你指导,你就会少⾛很多弯路)
在学习⽅法上⾯,有⼀个问题是关于细节和思想的。
我们⿎励在实践基础上去学习,也提倡速成,但⼤多数⼈显然不会拥有正规的实践教育,我认为学习不应该提倡逐步深⼊,⼈的⽣命有限,染
启超在渡⽇的般上⼀夜之间学会⽇语,这就是说他掌握了思想,细节的东西永远是后来的,只要思想
是重要的,(了解⾜够多的细节才能泛思,,在学习编程中,除了⼀些对⾄关重要概念集的理解之外,,从来都不是⼤思想决定⼀切,⽽只是⼩细节,这就要求你作很多的实践)掌握了思想和基础后,每天写⼩程序,编程能⼒就会⽇渐提⾼,⽽当你写过和分析过很多程序之后,你就会具备⼀眼看出的本事,过程的最后你发现⾃⼰蛹变蝶飞了
学习应⾸先理解框架(这是泛读),然后是细节(这就是对某些内容的精读),就好像在⼀个⼤型应⽤中,编译跟解释并不会⾛⼆个极端⼀样(低层⽤编译码,⽽⾼层⽤脚本),学习往往是混合了这⼆个过程的过程,,,⽭盾和⽼⼦的不可绝对在这⾥起作⽤
所以说思想和基础永远是重要的(⼈⽉神话的作者固然精通很多细节,但是他写出来的却是⼀本思想书),,知识和思想⾃然是越多越好(泛读可以⽆限进⾏,花再多⼈年都⽆碍,⼈年是⼈⽉神话⾥⾯的概念),但是有⼀些知识不必深⼊(精读却需限于⾃⼰的开发领域),但⼀定要知其然
本书主体中的⼆部分就是认知和实践,思想和细节的结合,所以你要做的就是在认识的基础上作⼤量实践。这就是我在前⾔的后半部分推荐给你的看书⽅法。
如果说⼀些知识仅仅知其然就够了的话(仅仅是不致于迷惑和建⽴知识结构),那么有⼀些知识却是要精通的,因为不但要知其然⽽且要实际拿来应⽤
要成为某领域能实际胜任某份⼯作的程序员,就要做到精通四个“Idioms”(注意这是精通)
1. 你要⽤到的语⾔和IDE的“Idioms”(⼀门语⾔,⼀种开发库)---编程⾸先就是会⽤⼀门语⾔和它的库
2. 数据上的”Idioms”(数据结构-数据的内存模式,数据库-数据的外存模式)---编程第⼀个就是数据,想起DOS下的编程了吗,⼀是数据,⼆是代码
3. 设计上的”Idioms”(⾯向对象,设计模式)-----编程第⼆个就是代码或代码框架
4. 以上三条都是前提,那么这第四条就是最终的你要实际涉⼊的业务领域的”Idioms”---编程最终是为了为这个领域服务
以上四条是主⼲(最好按1-4的顺序精读),⽽其它的都是⽀节。⽐如⼯具的使⽤啊,XML啊,UML啊,XP⽅法啊,ANT部署发布知识啊等等
对于计算机专业来说,为什么也才那么⼏门课程(⾼数线代离散,编译原理,C与算法,Java),,因为这些学科是最重要的(真正掌握了这些基础,你会发现再多后⾯的技术⽤语及其背景都是⽀节),这就相当于前⾯提出的四个Idioms
对语⾔细节的学习和深刻理解永远都是学习编程的重头戏,但决不是⼀切,⽐如拿编程语⾔来说,只要越过语⾔的表达这⼀层,我们才能⽤语⾔表达和理解事物(语⾔跟你要说的话就像⽤C++语⾔去表达⼀个算法,⽅案领域跟应⽤领域的对应,就像穿鞋去上海, 穿上鞋只是开始,真正你要去的⽬标-上海
还远着呢),就像⼝才,⼀个好⼝才的⼈说话时绝对不会想到措词,因为语⾔已经成为⼀种意象,只要把⼀样东西思想化,才能超越这个东西⽽去想到别的东西⽽长⾜发展,⽐如⾯向对象,这本书将帮你解释为什么⾯向对象是⼀种科学的机制,解释的过后你甚⾄会觉得这是⼀种本来就该存在的很亲切的机制,只要超越了⾯向对象我们编程时,再加上⼀定设计模式,才能真正不会⼀动⼿编程就考虑什么是⾯向对象之类。。(⽽这些,好像都是⼀个⾼⼿所能做的事了。)。
编程时碰到的信息量永远是巨⼤的,有⽣之年我们不可能掌握这些信息的来龙去脉,对于程序员来说,提供⼀个关于它的编程参考⽂档可以说是掌握了此信息,因为这个⽂档就是这个信息的⼤概,实际上我们编程⼤部分情况下都只是⽤第三⽅的代码库来编程,这个信息⽤于编程所需的全部东西,对于编程来说只要掌握这些东西就⾏),换句话说,⼀些知识如果不能理解就得先放(这本书并不适合于赶考使⽤), 在这个信息的社会,⾄于信息,是撞事学事!⼀个程序员并不全知全能,它只提取和了解事物对于编程⽅⾯的信息。对于事物的逻辑认识,只能在对它的编程中不断掌握它,抽象是惯穿这本书的重要的思想,维度也是,我们是从学习编程的眼光来组织这本书的。也是站在初学者的⾓度来解释诸多概念及其关系的。
问题随之⽽来,既然存在这个界限,⼜如何突破,否则这就是⼀个空谈
web编程语言有哪些
多⾛弯路,学习是认识事物间联系的过程,⽽记忆或实践是加强这个联系的过程,,能够认识到事物
之间的联系,即便是⾃想的联系也可加深对事实的记忆(⼀个程序员有他⾃⼰的知识体系是重要的),这就是知识
⼀切东西,我们应该查本究源,深⼊其原⼦世界(任何⼀个术语都不会简单,有它⾃⼰产⽣的环境与其它知识的联系,但也正是因为这样,这也决定了它的有域性,任何知识只要放在它⾃⼰的领域内去理解才能更容易被理解),, 翻译过很多⽂章你就知道要措词,措词跟概念有关,⼆个稍微相差不⼤的措词都会让读者摸不头脑或让他们恍然⼤悟。
我们⾼中做到了英语的相似名词不同分析,本书也打算在⼀定程序上这样做(虽然计算机技术领域⼀个概念可以⾃成⼀书这种现实不允许我们这样做),咬⽂嚼字在这⾥起作⽤,,在某些情况下,它是⼀种好习惯!
然⽽千万不要⾛⼊另外⼀种极端, ,知识⽤词和技术⽤语没有⼀个标准,⽐如⽅法和函数指的是同⼀个东西
什么是线性(⼀次就是线性),什么是离散(离散了的量),这都是仁者见伍,智者见,但⼈们对此的理解都不会差到那⾥去,并且也不会影响后来的学习,这⾥有⼀个描述或形式的概念,相信⼤家都还记得初中学过的集合,是描述性概念,但集合其实还有⼀个形式概念,给定了形式就可以框死
⽽且,要知道,即使是《虚拟机的原理与设计》这本书的作者也会对别⼈书⾥的进程概念感到不解。
我注意到程员序考试中多了⼀项标准化,的确,知识的传达也需进⼊标准化时代了
最后,如果说任何⾏为都是功利的,那么我写这本书的⽬的只为博你⼀笑。
书中错误再所难免,望不吝赐教!!
别怀疑,这正是⼀本同时可作为⼊门和进阶级的书(更偏重⼊门)!然⽽真正的⾼⼿和真正的初学者都将从中有所得。
你还在为学不懂⼤量术语⽽烦恼吗?如果你真有这种体会,那么你可能先要看这本书再看你正在看的C++的书,因为你仅仅缺少⼀根主线, ⽽它是能让你少⾛很多弯路的拐棍
对架构的学习才是真正的学习,知识也有它的架构,然⽽在这本书内有架构也有细节(⾼⼿固然知道细节,然⽽⾼⼿也有精神空洞,因为你还
需要懂得⼀些细节之外的架构级的东西)!
NotWar3的从零到尾的实现,让你知道其实你⼀个⼈就可以做出类War3的游戏!!(本书作者也⾃称是⼀个菜鸟,但是这个程序的确是他⾃⼰写的)
任何语⾔都是有门槛的
C⽤最初级的封装了汇编的逻辑写应⽤,这也就是C代码看起来难的原因,如果你看过位操作(⽐如oopc实现的RTTI),看过⽤C表达的数据结构,就会发现,有时看出来样⼦普通的⼀堆语句,你根本不知道它想表达什么上下⽂逻辑(因为C代码本⾝跟现实问题⾛了⼆个极端,你看懂了代码却看不明⽩代码后⾯的东西,这是因为有设计在作梗,⽽C跟设计和现实问题⾛了⼆个极端),除⾮你真⼀开始就明⽩它想写什么(有⽂档的情况下),但Java这样的语⾔,能够整体上看起来是⼀个⼀个的类,显得意义明了,但实际上语⾔越接近应⽤问题反⽽代码看起来更复杂,,因为现实⽣活是很难的你根本做不到绝对靠近除⾮你为每⼀个问题写⼀个dsl(C表达的向系统问题接近和Java表达的向现实靠近各有各的难处,作为⼀门⼯业语⾔,要求它看起来便于程序员理解和复⽤,Java这⽅⾯是做得不错的⽽C肯定只是专家语⾔),⼀堆有机类有时反⽽难于让⼈看出它想表达什么,⽽且另外⼀⽅⾯,类⾥同也是函数,也是Java的语句逻辑⽽不是封装上的类逻辑,这些语句逻辑,同样⽤Java中的库来形成,Java的库是重新经过设过的,相⽐C语⾔,⽐如它规范了流的概念,Java的OO和规范的库是⼈们说Java⽐其它语⾔易的⼆个⽅⾯。。
但是虽然熟悉编程的⼈可以拿来⽤,但是对于没有编程经验的⼈来说,它照样跟C⼀样难。
因此JAVA的所谓易,是相对⽤过C的这样的熟悉编程者来说的。⾄少使⽤JAVA,我们照样得学好跟C⼀样的数据结构知识。。
看不懂⼀套源程序,主要是
1)你不知道普通的语句是体现什么样的数据结构
2)你不知道普通的语句是体现什么样的算法
3).........抽象惯⽤法
4)。。。。。如何向现实问题靠近抽象并设计的
5)现实问题的复杂性,跟语⾔逻辑的简单性,⾮dsl之间的⽭盾(语⾔从来被设计成通⽤的)..
因此要学好⼀门语⾔解决问题,不但要学精语⾔的语法和库,⽽且学习的重点还就在于:
数据结构和算法,现实问题,,抽象和设计。。。
什么是语⾔级和语⾔外要学习的(数据结构与代码结构)
设计最终要被体会到源程序,如果把设计作为整个软⼯过程,那么源程序是这个⼯程最好的结果最终证明,(参见《源程序就是设计》⼀⽂,你可以google得到它)
我认为这样的说法是对的,因为它综合了我在下⾯要谈到的1,2⼆个过程。(但因为它没有显式提到下⾯我列出的⼆个过程,所以我认为该⽂在⼀定程序上是⼀篇含糊其词的⽂章)
1是脱离了语⾔的那些映射,即⼈们通常说到的设计⼀词的意义(请参照我的《什么是设计》⼀⽂,这⾥的设计实际上是指⼤设计,指领域抽象,语⾔选择,这些东西,包括数据结构),2是结合了语⾔的实现映射。即⼈们通常说到的实现,不过⼈们通常把1作为架构师的⼯作,⽽把2作为程序员的⼯作⽽已。如果架构师的⼯作深⼊到类的类部,深⼊到详细设计,那么他实际上担当了⼀部分程序员的⼯作。但在⼈类的⼯作中,2是受1控制的,
这⾥⾯其实有⼀个代码抽象模式和数据抽象模式的区别。
类实际上是⼀种数据抽象,⽽不是⼀种数据结构,,因为它将代码抽象为⼀个⼀个的“数据模式”,即将C++这样的通⽤语⾔增加DSL词汇,让它成为DSL,可以表达class cat,class pig,猪猫,诸如这样的领域词汇,所以类是⼀种数据(把词汇抽象为语⾔的⼀级first class数据,即UDT,ADT这⾥⾯D的意义)抽象模式,也就是代码模式,⽽数据结构学是⼀种实现模式,⽽不是代码模式。
数据结构学与代码结构学的区别,是解决问题的问题和解决语⾔映射问题的区别,两者在不同抽象层次,这就是为什么数据结构可以⽤任何语⾔可以⽤基本流程实现也可以C++的类来实现,因为数据结构学跟它如何⽤⼀种代码结构来抽象是没有直接关联的,前者是如何解决问题的抽象(是⼀种脱离了语⾔的映射,即我在1中谈到的设计),后者是代码问题(如何⾯向⽤了类的可复⽤⽬的来进⾏对具体语⾔的映射,即我在2中谈到的实现)。
在编程的实现领域,从来最终都是过程编程即Core C的那些内核逻辑〔类体⾥⾯也是〕,所以,⽤了类,只是将⾯向过程抽象到了⼀个更好被复⽤的问题,并没有将如何实现这层抽象到程序员不需要理会,所以对于不懂C的⼈来说,即使它能很好理解OO,也做不了什么程序〔类只是将实现套了⼀壳,从⽽将⾯向对象层次的复⽤维持在这壳外,壳的⾥⾯却不⾏,照样是过程编程〕,OO的强⼤只是指它类外的那些代码抽象模式。OO提供的最本质的意义和作⽤有⼆,1,将C++这样的通⽤语⾔“在类层次”变成为DSL,2,正是因为1的作⽤在先,所以普通个⼈也可以开发复杂的软件系统。
也是C程序员的能⼒更多在前者(数据结构),⽽数据类型属于后者,设计模式,⾯向对象都是后者,是C++程序员或架构师的事。
对于2,即实现。跟具体语⾔有关。下⾯举C和C++为例。
遗憾的是,C++只是对C的增强⽽⾮替代,如果他离开了C,就只能有类的代码模式的复⽤能⼒,却⽆法保留C的强⼤⽽直接的实现能⼒(如果写数据结构这样的东西都要强制⽤到类,那么除⾮有必要为复⽤作⽬的,否则没有⽤C++的必要。),所以⼀个C++程序员(假设他⽤了OO来实现数据结构)既是⼀个实现者,也是⼀个设计者。因为它既抽象了如何能被解决的问题,⼜抽象了如何能被复⽤的代码。
程序员对于算法,数据结构,数学实现问题这些细节的实现问题把握最重要,⽽不仅仅是语⾔能⼒设计,代码抽象能⼒,如果有架构师的⼯作在先,C的程序员仅仅需要提供函数过程模块,(极度求接⼝
化和求极度模块化,设计是需求驱动的,接⼝是要提供的功能驱动的,都是不必要的那是架构师的⼯作)
什么是语⾔级要学习的
什么是编程要学的。⾸先给出⼀张图。图中描述了编程知识结构。
就学习⼀门语⾔⽐如C来说。
综观C语⾔的语句形式,就只有编译原理后期翻译的那些语句形式了,,仅仅从语句形式上来看是这样的。。
计算机能做的事,就是CPU的取指令,译指令,执⾏指令,从内存中取数,CPU⽤逻辑器和运算器运算,,中断处理例程,IO设备的功能,
这些是计算机能做的全部事情,由CPU统⼀控制,,因为这是所有硬件资源能做的事情。。计算机后来所有的软件逻辑包括OS的所有的功能都由它决定。。
由OS⽣成调⽤这些如上硬件资源的策略。。
template是C++的⼀种⾼级语⾔机制,它建⽴在C++的类型机制上提供范型,但是它的语法及其古怪,跟C++那些其它的普通语⾔机制⼗分不相同,(由于语⾔是由语法定义的,因此我们称,类型,表达式,控制语句形式,赋值语句,这样的东西为语⾔的要素,打开任何⼀门关于程序语⾔教学的⽂章,我们都可以发现这⼀点。。字符串,IO,异常,标准库,,数组,与Windows的接⼝,这样的东西是语⾔的⾼级话题,和⾼级功能,不是语法级规定的,,⽐如可能是库提供的)编程学习⽅法只要学习C语⾔,计算机系统知识,语⾔实现原理,⽹络原理这些系统知识,才能从⼀个⽐较⼤的侧⾯去看待现实问
题对于计算机的实现问题(也即编程问题),,只有这样,只有懂C,懂编译原理,懂计算机系统,懂⽹络,才能从⼀种⼤局的⾼度去看待并计划你的系统你的应⽤。。
  要学习编程,我觉得C语⾔是起码要学的,即使是以后学LUA,RUBY这样的⾼阶语⾔,最好的途径还是先学C.
学习编程必定最后要涉及到系统逻辑,那么是⾸先学习上述的计算机专业课程的知识,还是先学语⾔呢,,,,我觉得是先学语⾔,,因为理论的知识在没有实践的前担下很难掌握,,⽽⼀开始就学习语⾔(我这⾥只指C语⾔)是最好的办法,,,因为在学习的过程中,你需要⼀门语⾔来实践,,,验证各个⼩问题的语⾔实现,来掌握更多的知识计算机学⽣专业课程本质讲解RUBY跟C语⾔还是结合得蛮紧的,,RUBY在数据结构⽅⾯还是有C语⾔影⼦的,,⼈们说RUBY偏向于⼈,但是⼏乎所有的语⾔都脱离不了数据结构,,都脱离不了底层,,RUBY的OO只是指类的那⼀⽅⾯,,RUBY的IO,数据结构,跟其它语⾔是⼀样的,,,复杂,跟底层相关,,数据结构和底层有什么关系呢?内存地址是线性的啊,这就是数组,,我们的虚拟机是栈式机啊,,所以要堆栈,,我们的运⾏时把类对象分配到堆中,,,所以要堆,,这就是编程语⾔处理计算机,解释器本⾝的离散形式⽽导致的复杂性,,所有的语⾔包括RUBY都没有很好地⽤OO封装数据结构,STL是个例外,,但是⽆论理解OO的STL还是RUBY的数据结构,都是差不多要理解到底层,即数据结构的原理,每种数结的具体情况,,学习RUBY并不能让你省这个懒,,问题就出在这,,,要学好RUBY,C 的数据结构⽅⾯还是要下点功夫的,,任何⼀门语⾔,语⾔
库包括STL都没有⾃称它把数据结构简化到不需要明⽩任何具体数据结构的形式就可以拿它来进⾏编程的程度 ? 其实计算机专业学⽣的那些课,,数结,C,操统,都是⽆⽐珍贵的东西 ,,学校设⽴这些课⽽不是C++,不是RUBY,,是因为那些才是可以解释后来⼀切的底层 ,,⽽并⾮⼀种舍本未未的作法..
语⾔就是处理三个东西之间的关系,平台,语⾔,要解决的问题(解决什么问题⽤什么语⾔最好),其中,汇编基础:解释了硬件平台,即CPU中内置了控制内存的模块,因此要涉及到寄存器,内存地址等,操作系统课程,如果说汇编基础解释了解硬件平台,那么这就是解决的软件平台的问题,⽽离散数学,,就是⼀切离散形式,计算机和程序语⾔环境,和语⾔本⾝都是本质上⼀些离散形式,⽐如图灵机就是程序模型,是个离散东东,在编译原理中体现就更明显了,⽐如函数语⾔实际上就是⼀种⾼次⽅程的离散,编译原理的本质是什么呢,,,如果说硬件和操作系统都是解释了平台,那么编译原理就解释了程序本⾝的本质,那么C语⾔课程呢,,这解释了硬件编程的⼀些⽅⾯(C+⼤量汇编的形式⼴泛⽤于硬件编程,驱动开发),,⽽且,C 语⾔这门课程最最重要的意义还在于,它解释了⼀切后来的⾼级语⾔⽐如RUBY,⽐如JAVA,要学习到的跟底层相关的离散形式,,这是尤为珍贵的,⽐如进程,⽐如并发,⽐如异常,,⽐如数据结构,⽽数据结构中的"数据"⼆字永远是⼀个程序的中⼼因素,,从普通数值,字符串,数值到结构体到OO数据,体现了⼈们封装程序开发数据对象的复杂性的要求..⽽且这种发展是为了产⽣⼀种⼴泛深度的开发⽅法的,这导致了软⼯,JAVA就是这样⼀种好的语⾔.
应该如何从C的观点来看待你的编程语⾔⽐如RUBY跟操作系统之间的关系呢?⼀⽅⾯,C本⾝就是⼀门硬件编程语⾔和系统开发语⾔*(OS⼀般就⽤C来开发,很少⽤第三代语⾔⽐如C++,JAVA,RUBY),⽽且,C语⾔就是⼀切语⾔的基础,JAVA,RUBY都是⽤它写的 ,这导致了⼀些现实,,下⾯⼀⼀说来,C语⾔跟OS编写有关,是OS的直接宿主语⾔,,其它的⽐如RUBY,⽐如C++,⽐如JAVA,,是C的上层语⾔,学了C语⾔,,RUBY,JAVA,OO,都很简单 ⽽且C语⾔是系统编程语⾔,是底硬件编程语⾔(embed c),,,是使⽤最多的语⽅,opengl能⽤JAVA开发吗,,不能,那会慢得要死,⽽且根本也不⾏,,,驱动程序能⽤JAVA吗,,那简单是笑话,,只有WEB开发,,这些不需要很

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。