学习汇编的重要意义的讨论

转载 2012年03月30日 16:44:21
几日前,在一位仁兄的blog里看到如下一番话:其实我发现中国的教育还是有很大问题的,你们得让你们的学生认识到这门课的作用啊,有些师兄说到出去工作了才发现汇编的作用。
  我觉得值得庆幸的是这位仁兄在在校期间的学习中及时地意识到了汇编的重要性,并做出了正确的选择。然而这位仁兄提到的“老师没有让学生认识到汇编的重要性”和“有些师兄工作了才发现汇编的重要性”这些在计算机专业教育中存在的客观事实,再次让我心情沉重!
  为了让更多的计算机学习者意识汇编语言的重要性,我就抛砖引玉,发表一下对汇编语言的理解,希望能够让更多的计算机技术的学习者对汇编语言的作用有一个正确的认识。
1.汇编语言
  汇编语言是最接近于机器语言的编程语言。如果说机器语言是计算机操作的本质,那么汇编语言就是最最接近本质的语言。汇编语言操作直接面向硬件,所以,我们在使用汇编语言的时候,我们能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系和交互形成一个清晰的认识。这也是最能够锻炼编程者编程思维逻辑的,只有这样,学习者才能形成一个软、硬兼备的编程知识体系,这是任何高级语言都无法给予的!相对于繁复的高级语言,汇编语言指令集合更简约,指令操作更直接,从汇编开始学习更符合循序渐进的学习原理!所以,对于计算机技术初学者或者自学者,汇编语言重要性无可替代!
2.汇编语言之于高级语言
  不否认,在应用层面,高级语言占据了软件开发市场的绝大部分。也正是这种现象,误导了学习者,甚者是教育者!所以目前高校计算机专业的现状是:专业课程中C语言,C++,java等高级语言一应俱全,而毕业的学生却连简单的程序都不能编写。为什么?听不懂,学不会!这就是缺乏基础造成的!
汇编语言才是计算机技术的基础,而不是常说的C语言。之所以说汇编重要,其一个重要的原因就是,汇编语言能够让你更好的理解高级语言,尤其是高级语言中的C语言。汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址。指针的学习和应用中最头疼的就是在指针这个抽象的概念和实际的内存单元之间建立思维映射,而这些恰恰是我们在汇编语言学习中频繁做的一件平常事。另外,对于C语言中的数据类型、形参实参、函数调用、全局变量、局部变量等概念及操作,我们都可以用汇编语言中的一些操作相关联,把这些抽象的概念和过程,通过汇编语言形成一个具体的映像,深度剖析,这样我们才能真正的学会、学好C语言。
  有了汇编和C的基础,那些所谓的面向对象的语言学习起来就更为顺畅了!奉劝那些好高骛远的学习者,踏踏实实的从汇编开始吧,古云:磨刀不误砍柴工啊!   
3.汇编语言之于应用
  很多学习者放弃对于汇编语言的学习,是因为高级语言的开发更容易找到工作。这个理由也是我见到过的最现实的。但是,这里面明显存在着认识误区!
  首先,我们的学习是一个系统过程,我们的知识结构不是一个单一课程所能够建立的。所以,学习汇编的目的并不是非要用汇编去挣饭钱。因为汇编语言对于一个编程人员所应该具备的基本素质的培养和形成得意义是非常重大的!这在前文中已经分析了,不再赘述!
  其次,汇编本身也是很重要的应用技术。由于学习者,尤其是在校的学生,平时接触的最多的是纯软件的东西,所以,觉得五花八门的软件才是计算机技术应用的舞台。那么这些人最终会成为那位博主提到的那些工作后才意识到汇编的作用的“师兄”!汇编的操作由于跟硬件紧密相关,所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接,更有效率!我们现在的数码产品很多,而这些数码产品赖以生存的芯片,主板等,都包含了嵌入式程序,而这些程序中,汇编语言的使用是相当重要的!
  为了工作放弃汇编,得失自明啊!

很激动地写了上面这些,目的只有一个:让更多的学习者认识到汇编语言在计算机技术学习中的重要性!
==================================================================================

对于楼主的义举本人十分佩服!所以,我也想说两句。
对于楼主提到的教育中存在的问题,我认为:
首先,作为一名计算机专业的教师,如果不能正确认识到汇编语言的基础性和重要性,一味的标榜高级语言,他越努力的教学也就是越兢兢业业的误导学习者。再者,学生没有认识到汇编的重要性,抛弃了基础,建造的宫殿在华丽,也是危如累卵,最终还是自己埋葬了自己。
如果想学好计算机编程技能,如果想做一名合格的编程人员,如果想在计算机编程之路走的更远,学习者只有,也必须从汇编语言开始,才能完整、完善的建立计算机编程知识体系!舍本逐末的做法,必然是丢西瓜捡芝麻!
不要等到绕了弯路之后返回原点的时候,再来叹息时间的蹉跎!
==================================================================================

唉!真是来晚了!要是早遇见楼主或楼上的高人们,何至于郁闷到现在啊!
做了两年的程序员了,越干心里越没底气,水平总是不见涨,看着新来的小兄弟们慢慢赶超自己,羞愧啊!反思了N天,终于明白了。原来是基础有问题啊!我晕!
前段时间想跳槽打打基础,找了一个做嵌入式的,因为本人认为C语言学的不错,结果,一笔试就傻了!C语言答的那叫一个烂,都没脸抬头了。而且令我当时很郁闷的就是,题目中还有一些外星文,后来才知道,原来是叫汇编语言。当初学专业的时候可没有见过这个东西。后来我开玩笑问笔试监考的GG(那个人是我网友),要是不会汇编,你们要不?那个GG说了一句很让我很是郁闷的话:不会汇编做什么嵌入式啊,除非你同意正常工资50%的月薪。原来自己就值那么个钱啊!
今天百度到这个网站,刚在blog里发完牢骚就看到了这个帖子!没想到做了楼主的一个活生生的反面教材!看我,看我,别都看我哟!我知错就改,从此就在这里“会编”到底了。
我的口号:一天不“会编”,我就天天来“汇编”!
楼主的话果真“醍醐灌顶”,毫不掺假!五体投地!
==================================================================================
汇编语言在计算机科学与技术学科中的地位本应是不言而喻的,但现在却成了昨日黄花,看来学计算机的真要反思了。作为一名计算机专业的学生或是从业者如果对汇编感到陌生的话,可以毫不夸张地说,他不是一名合格的专业学生或是从业者。
       回想起当初刚来大学时,也是听说计算机热门才报的这个专业,结果大一时让我大失所望,为什么呢?经过一年的蹉跎,让我明白了,计算机除了聊聊QQ还能干啥呢,怎么就成了热门专业了呢?这种状态又使我荒废了大二的上个学期,大二下个学期开了汇编语言(其实,主要专业课也是刚刚开始),刚开始也没进入状态,但我发现平时踢球的、打牌的朋友现在都在玩debug,还挺投入,就在此时我的计算机专业学习才开始,学完汇编,理解了计算机运行程序的原理,然后反过来发现对C语言的理解也不像以前那样一知半解了,对指针、变量、函数、结构体有了更通透的理解。随着专业课的深入学习(数据结构、操作系统、数据库等),我发现计算机不光能聊天,还能制作聊天工具、还能开发信息系统、还能对数据集合进行数据挖掘。。。
       回想起整个的学习过程,还是汇编语言把我带入了计算机的世界。
       如果你是一名计算机专业的学生,那么汇编语言是你的必修课,如果你是一名从业人员,对汇编的掌握也是必须的,如果你是一名想把计算机搞懂的爱好者,我只能说“汇编是你的最佳起点”。
==================================================================================
要是 要是偶的老师能在大学校园内把楼上诸位这些高论说透,让我早早认识到汇编语言的重要性,认识到学计算机该学什么,要是我的同学些能想martain 老兄的同学那样"浪子回头",我的大学生活兴许不会那么乏味。
要是早些来到汇编网,早点认识楼上诸位以及这里的良师益友,相信我的计算机学习不会走这么多弯路了,此刻也该成为一个真正的计算机从业者了。哎~  逝者如斯!
好了,不感叹了,既然做过的无法重来,选择的不能随便放弃,上了计算机这船,怎么着也得弄出点名堂。说别的没有,怪谁更无意义,总之我知道我该做什么了。闭关修炼~学汇编!

啊  突然有个想法,怎么才能有更多知道汇编重要性的教师出现,怎么才会出现那些球不踢了,网络游戏不玩了,qq不聊了专心趴在键盘上编程序的计算机学习者出现呢?  假如现在的校园讲台上站的是这种教师,座位上坐的是这样的同学,那是不是就“校园将不校园”了??
==================================================================================

我相信每个当初报考计算机专业的学生没有一个不想学好计算机知识的。当他们进入大学后开始以专业的心学习计算机技术的时候,每个人我相信都有学好计算机技术的态度和信心。对于计算机专业的大学生而言,计算机技术在大学阶段其实是一个开始。之前如果学过什么word之类的办公软件,我可以说,那根本就不是计算机技术,只是计算机应用软件。所以,计算机专业的学生大学其实处于一个计算机技术的启蒙阶段。在这个启蒙阶段,最重要的就是入门。当大家都满怀信心的去学习那些被各大高校都当作计算机入门教材的C语言的时候,发现太多的“不明白”,比如说,刚开始就是#include 和printf(“hello world”),而且被很正式的告知,这就是第一个C语言程序。想必楼上的仁兄也是从这个开始的吧。那您就没有过疑问?#include是干嘛的,为什么?printf怎么就在屏幕上打印了字符了呢?高深?!非也!就是拿棍子砸你!而老师就跟你说了:“include是引入头文件,printf是在屏幕上打印字符!”然后某些人就得死记硬背,认为这就是计算机规定的。就这样,一天记,一天背,而信心呢?一天天消磨!就因为他想不明白为什么,一个问号一个问号的累积,最终否定了自己,失去了学习的心态。这就是楼主话里面说的“写不出简单程序,绝不是没有学汇编的原因”。从最直接的角度来说,确实不是汇编的原因,是因为学生失去了学习的心态。这一点应该是仁兄说的那个原因吧。咱继续往下说。
    失去了学习的心态和信心,是造成一个学习者无法学好计算机技术的一个直接原因。那么,我们要是想解决这个问题,给学习者建立学习信息,引导正确的学习心态,是不是应该就会让那些抱着理想来求学的学习者能够更好的完成学习目标呢!所以,我们考虑的重点就在如何建立学习者的信心和学习的正确态度。
    其实,按照学习者来学习的目的我们很容易就能给他们维持和巩固他们的学习热情和学习信心。就是给他们最好的入门教育,不要在他们满怀期待的进门的时候就绊他们一个大跟斗。所以,对于教育者就应该明白怎样的入门才能更好的引导学习者。对于教育者传授知识当然离不开课程。所以,我们的解决问题的焦点就明晰了,就是要确定一门最好的入门课程。我们都经历过小学,知道,入门教育的知识结构要简约,直接,而且具备极强的原理性!这三者应该是相当重要的。简约,能够使学习范围更明确;直接,能够使学习感受更加强烈;原理性,能够使学习成果更具广泛性。纵观计算机各个课程,C语言被大多数教育这认为是最简单的计算机语言了,真的如此么?他们就没有看到他们的教材上那醒目的几个大字“C语言高级编程”!我觉得这就是在抽他们自己的嘴巴!都明明是高级语言了,还敢说是入门的!学生不会,郁闷,失去学习心态,他们还埋怨学生素质差,没有学习进取心!脸怎么这么大!!
    我们再回头看看,到底什么语言是最简约,最直接,最具原理性的呢?汇编语言?非也!是计算机语言,语言范围不过0,1,够简约!代表高低脉冲,够直接!而且计算机就认识这0,1码,只要会了,至少图灵理论的计算机应该都没问题了,原理性绝对更牛!那他当入门课程?这次不用抽嘴巴了,直接上板砖算了!那是计算机语言,你是计算机么?不是吧。所以我们没有必要再去拿着0,1码在那念经了!我们既然不能学习这最简约,最直接,最具原理性的机器语言,那应该是什么呢?!俗话说,退而求其次!我们是人,具有创造性,所以,我们就定义了一个和计算机的机器语言最接近的亲戚--汇编语言。对于汇编语言跟计算机之间的关系,我就赘述了,楼上的可以去看本网的学习宣言,比我说的清楚。
   我相信,如果你说的那些因为没有学习心态直接导致没有学习好编程技术的人,当初如果他们的教育者选对了正确的入门课程的话,我想至少还会有很大一部分完成自己入学时的梦想的。(当然不排除就是混日子的,那样的人别说学习汇编了,本来就没有学习之心,不在我讨论范围)
    学习心态的丧失是导致学习者放弃学习的直接原因,而没有很好的进行入门教育是导致学习者学习心态丧失的重要原因。这才是我那句话中包含的具体意思!
==================================================================================
在博客中看到了一些工作的师兄在重新反攻汇编,感叹汇编的重要,后悔当初没好好学。我相信他们的话是亲身体会而说出的。不管学生写不出简单程序是否是因为没学好汇编,我相信,汇编是基础课程,学好汇编,学习其它高级语言会更容易,更扎实。
==================================================================================

在水木上跟一个大学的网友讨论汇编的重要性的部分记录。放在这里,虽然讨论的不是很深入,但是能代表一部分人的想法。我认为汇编是我们深入学习计算机时第一把钥匙。它能把你带入真正的计算机世界中去。

wo(我)   ta(网友)

ta: 这个很难学吗?
wo: 很多学计算机的同学都没有意识到汇编语言的重要性
    愿意听到大家对于汇编语言的看法
ta: 主要是应用面不广
    高校教材太老,应该教64位汇编
wo: 充分获得底层编程的体验,深刻理解机器运行程序的机理。这是学习汇编语言的目的。
ta: laf
    老16位汇编有啥好学的?简直是浪费时间啊
    我写过虚拟机,虽然没JRE那么复杂,但理解它运行还是够了
    要理解原理,上计算机组成原理课做几个微程序更清晰更底层
wo: 没有对底层编程的深刻体验,能否“做几个微程序”?
    组成原理是一门计算机的专业基础课,我相信大家都学过。
    你思考过汇编语言在计算机课程体系中的作用?(这样未免有点不够全面,对于汇编语言来说)
    学习中的过河拆桥,会给后来者很大的误解的。
ta: 汇编语言的作用学计算机的应该都知道
    但是,理论还是要和实践 结合的
    至少我觉得16位的汇编已经不适合现实的需求了
    教学也要与时俱进的
    就像我们当年学的pascal,虽然在课程体系中很有用,但是,实际应用中有人用么
wo: 在学习知识的过程中才能学到能力,当你拥有解决问题的能力的时候,什么新知识都可以快速掌握,去解决相应的问题。
    我认为学习目的是最重要的,16位汇编过不过时要和学习汇编语言的目的相适应。
==================================================================================

汇编语言重要我从两个方面说一下:
1 汇编语言所处的知识体系.学习计算机知识,学习的是计算机整套的系统知识,当然这其中包括的内容就多了:数据结构,操作系统,微机原理,编译原理,各种高级语言,甚至更高层次的应用....如此众多的知识对于一个初次接触计算机的学习者来说深奥,茫然.这就需要一个好的教学体系与之对应,让学生能更好的理解计算机知识.而这套教学体系的开启项就应该是汇编语言.原因在于汇编语言本身的特性决定的:充分接触硬件,理解计算机运行原理,可以操作计算机得到更多的感性理解,为以后学习高级语言打下好的基础,最根本的就是让学习者知道计算机到底是什么东西,抹去计算机学习者对计算机神秘,深奥的感觉,同时增加学习者的信心.此外汇编语言本身是很简单的,不需要太多的准备知识.因此汇编语言作为学习者的入门学科是正确的
2 就汇编本身而言.它的特性不必再提,它的优点不必再说.单说它对学习者的影响,汇编让学习者彻底的认识了计算机,并熟悉了计算机的脾气秉性,让学习者可以从计算机角度思考问题,并从计算机角度把现实的问题解决,这是很重要的,这样会培养出学习者很好的思维习惯,对以后的计算机学习是大有好处的.大量的汇编编程练习,给学习者带来了耐心,自信心,认真的态度.这可是很好的东西哟
如此
===============================================================================


对于计算机技术的学习,根据本人经历以及看到、听到的其他业内同仁的声音,总结如下观点,拿来献丑。以示对楼主的支持!
计算机技术的学习应该分为两种类型:
1.创造性学习。
2.临摹式学习。
    所谓创造性学习是指学习的整个过程,以知识的原理性为主线进行学习活动。通过原理性学习的积累,使学习者掌握分析问题和解决问题的基本方法,能够使学习者自行构建符合原理的解决问题的方式方法,从而使学习者能够独立的运用知识点,以点及面,在潜意识中形成一个自发、自主,自我创造的行为方式。这种学习方式需要系统的学习体系,也需要更多的学习空间和时间。这种学习积累是一种有目的性的“质”式积累,从一个知识形态到达一个更高的知识形态要容易实现一点。所以,这个学习模式应该更适合以培育高能力社会人才的高校专业课程的学习。

    所谓的临摹式学习是指学习的过程更为注重的是进行技术的拷贝式学习,也就是我们常说的“依葫芦画瓢”式学习。学习者通过参考、分析、临摹完成一个技术点的学习。对于学习者,尤其是初学者来说,这种学习方式回避了某些技术知识所包含的深层原理,所以,学习者学要花费比分析更多的时间在记忆和巩固记忆的临摹过程。这种方式的学习积累是一中经验式的“量”积累,要想达到知识形态的跃迁,需要的比较长的时间和更多的知识积累。但是,这种学习方式能够使学习者较快的掌握应用技能,所以比较适合以择业为目的职业教育或者培训教育。

    从以上两方面我们就能够理解,以北大青鸟为首的IT培训机构为何从不开设汇编语言、数据结构、编译原理、计算机组成甚至操作系统这些重要的计算机课程了。对于他们来说,学员尽快择业才是教育目的。所以,他们采取的是第二种学习方式。这很正常,因为这是商业化教育。而我们发现,被人们认作是中国人才教育的摇篮的高校,也在慢慢的向第二种方式倾斜。这就不正常了!为了学校和个人的业绩,为了就业而去以就业为目进行择业教育,这是当今高校计算机教育的懦弱和不负责!如果将来高校的计算机教育终点走向了择业,那么,高校和培训机构还有什么区别,而那些优秀的年青人不都埋葬在了你这象牙塔内!
     
    我认为,既然做,就要做好。如果我们刚开始进入学习阶段,没有择业压力,我们必须要进行第一种学习的教育。而在计算机教育中,汇编语言显然是比那些java,C++更应该处于学习开始阶段的,甚至是比C语言更应该提前学习。我们要保证我们从一开始就不要带着问好走路。wdm提到,不要一开始我们就得死死记住printf这样的知识,那是第二种学习方式才会做的。
   当然,有些人确实面临择业的选择,这是另一个学习阶段。这个阶段的学习者确实应该采用第二种学习方式,快速掌握某些应用技术点,以便就业,不能饿着肚皮进行创造性学习,否则我们能否看到明天的太阳还是个未知数。但是,有一点应该明白,人是需要有创造力的。所以,当你吃饱了,你应该回头在去进行创造性的学习积累。不能被自己欺骗,拿着一个馒头就不管以后了。《无间道》里面琛哥说过:“出来混,迟早要还的!”计算机学习的过程也是这样!
    汇编语言就像你脚上的鞋子,没有鞋子的时候你也能跑,但是当你跑的双脚鲜血直流的时候再回头来穿鞋,那你的痛苦就不仅仅是浪费时间了,还有你经历的疼痛。我希望每个在学和在业的人,如果你还想在自己的路上做的更好,走的更远,你是不是应该低头看一看,自己的脚上是不是穿着那双鞋子呢!
==============================================================================
出来混,迟早是要学汇编语言的!
==============================================================================

看了几位大哥的帖子,我觉得讨论这个问题(学习汇编的重要意义)不在于确定谁对谁错,关键是要找到一个几近最合理的方法,使得计算机的学习能够事半功倍,解决下面的问题:

计算机专业的学生学习过程中整天浑浑噩噩,不知所往,毕业后除了肉身可能有变化,其他的都“毫发无损”,不能够找到满意的工作,不能够胜任所在之position。

可能说得有点笼统或些许过分,但是其中无际的悲愤难耐焚心之情还是请各位体会。

而这个帖子所要讨论的其实远远深重于这个帖子的主题,我们所要讨论的是怎样解决计算机教育、学习和研究的问题。

对于这个问题,解决的方法可能有很多种,我们可以“从娃娃抓起”,可以“硬件低级语言软件高级语言两手抓,两手都要硬”,可以“集中师资力量,先让一部分人学会,然后先会带后会,最终达到共同会的伟大目标”,and so on.

但是,我觉得令人欢欣鼓舞的是这个网站和很多网友(大多是计算机教授者学习者研究者从业者等等)达成了要学好汇编语言的共识。

个人认为:计算机的教授学习研究过程中汇编语言的教授学习研究应该是关键的一环,是具有重大历史突破性意义的,要把汇编语言的教授学习研究重视起来,我们甚至可以先不教授学习研究其他语言,让这些高级事物给汇编语言让路,因为汇编语言的教授学习研究能够使学习研究者从一开始就最大限度的理解计算机硬件和软件系统互为依托、共同协助的设计原则和工作机理(简称原理,哈哈,个人认为);因为汇编语言的教授学习研究能够从本质上解开所有计算机语言的层层迷雾,当然还有神秘面纱,为即将到来的其他相对高级的语言的教授学习研究打下一个结结实实在在的基础;因为汇编语言的教授学习研究并没有世人所称道的那样“难懂天书枯燥乏味不可理喻过期老套不学无碍”,相反,如果找到了合理的教授学习研究方法并且能够坚持不懈,教授学习研究好精通不在话下易如反掌小菜一碟,自然以后其他课程理论的教授学习研究也能够受其恩荫,流水自如。

还有一点,我觉得中国的计算机教授学习研究者还在这里讨论着——汇编语言学习的重要意义——不失为一种讽刺。

计算机是什么、计算机是如何工作的?这些不首先弄明白,就老想着学习什么新技术、什么高级,体现的是什么?
我觉得某种程度上体现了中国计算机教育学习研究者急于事功投机取巧不按套路出牌的整体劣根性。

=================================================================================

相关文章推荐

学习汇编的重要意义!!

几日前,在一位仁兄的blog里看到如下一番话:其实我发现中国的教育还是有很大问题的,你们得让你们的学生认识到这门课的作用啊,有些师兄说到出去工作了才发现汇编的作用。    我觉得值得庆幸的是这位仁兄...

学习汇编的重要意义

文章转载于《汇编语言》论坛http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=free&kind=1220&qkSg=2&qID=10793&re...

学习汇编的重要意义!!

学习汇编的重要意义!! (转帖) 转帖, 汇编, 学习   几日前,在一位仁兄的blog里看到如下一番话:其实我发现中国的教育还是有很大问题的,你们得让你们的学生认识到这门...

[ipad]评论:新一代iPad在企业中应用的四个重要意义

原文链接:http://digi.it.sohu.com/20120308/n337060742.shtml 【赛迪网讯】3月8日消息,据国外媒体报道,苹果周三发布了新一代iPad平板电脑。Busi...

打包工具,对质量控制与回溯的重要意义

今年的主要工作之一就是自动打包工具。 虽然是一个小工具,但意义

扩展阅读 数学对编程的重要意义 C语言计算1,2,3,...,100的总和

题目:计算1+2+3+...+99+100的和 第一种方法,使用for循环,简单清晰明了         代码: #include int main() { int i = ...

个性化在当代生活中的重要意义 优秀DM设计欣赏

在墙缝间的植物,虽然没有肥沃的土壤,但它依然顽强生存,依然能够成为在风中摇曳的小树、小草。广告行业有人将DM喻为夹缝中的小草,意志坚强。有着“长翅膀的销售人员”美誉的DM,近年来,似乎真的插上“翅膀”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)