|
板凳
楼主 |
发表于 2011-10-22 11:47:31
|
只看该作者
就学习一门语言比如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开发,,这些不需要很实时的I/O,这些架在逻辑上的逻辑(TCP,HTTP,WWW,SOAP一层一层而来)不需要很强的反应,,才可以用JAVA,而且JAVA编程统一,OO复用强,,是软工理想语言, 一句话,C扩展RUBY简单,而RUBY调用C却需要BIND,,一句话,编程三个平台,1硬件,裸机,,用C好,,2配有OS的桌面,用C好,,用OO的C++也可,,,3,WEB,用JAVA好,用OO好
C语言一般用来作底层编程,比如那些靠近硬件层的,选用普通的C语言(C语言标准)可以在WINDOWS平台上开发控制底层的编程,而且还存在嵌入式C语言用来开发各种硬件编程,驱动,BSP(主板支持驱序),比如一些智能手机的操作系统开发等,其实C语言开发也就是一种范式,一种编程习惯,它是过程式命令编程范式的代表,世界上用得最大的编程语言不是JAVA,不是RUBY,不是VB,而是C,因为C用来作系统编程时,它可以提供较快的运行速度,接近底层的更好控制,实现C语言的编译器是一种将C语言代码直接编译成本地码的工具,不存在任何逻辑中间层次或解释程序(比如虚拟机)因此运行速度很快 而且,C语言提供的指针等,直接与硬件内存地址啊,这些东西挂钩,而且系统本身大都用C语言开发,比如WINDOWS,这就在你要开发的应用程序和宿主环境中提供了统一性,你可以更好控制和调用系统DLL,不必作语言之间的BIND,而且C语言不必涉及到OO(因为OO主要是面对人的)而C语言更多地是机器因素,它要求人用机器的思维方式来编程,这句话本身也就说明C语言是靠近机器的,因此它适合用来作系统编程,而RUBY等OO语言用来作面向程序员的高级脚本编程,所谓脚本语言,就是相对系统编程语言来说的,系统编程语言提供了强大的底层编程能力,而RUBY等脚本语言提供了调用这些系统功能的高级应用层的开发..
无论如何,一个程序员是要天天学习新知识的,如果不能快速接受(也即你的基础知识跟不上来),那么基本上你会很累 大学只是学习这个基础知识的阶段,你最好把编译原理,离散数学,汇编程序设计,操作系统,C语言,这些基础弄得滚瓜烂熟,,并积累一些具体的开发经验,,等出了社会之后,你会发现社会上的编程知识跟你在大学学习的东西差了去了,这个时候你的这些基础知识就发挥了很重要的作用,你需要这些基础来理解软件开发中的大学问,新思想,比如设计模式,AOP,OOP,DP,DSL,STL,UML,LAMP,REST,COM,J2EE, 总之钻进去了,也就是一种乐趣..好自为止,
用C++开发要学到什么程度
鉴于这样的话题太有争执性,本文只给出一个参考意见。 |
|