五千年(敝帚自珍)

主题:【原创】程序员的入门语言 -- 代码ABC

共:💬27 🌺51
分页树展主题 · 全看首页 上页
/ 2
下页 末页
  • 家园 【原创】程序员的入门语言

    程序员需要知道什么?

    作为程序员必须掌握的最基础的知识是什么?在做了十几年程序员后回头看这个问题,我发现最基础的知识既不是某种语言的语法,也不是算法。而是计算机的工作原理。因为程序员的工作是指挥计算机按照他(她)的想法干活。不了解计算机的脾气是无法有效的指挥的。计算机非常"笨"而且"懒",必须使用排列好的指令序列(程序)去"踢"它,"踢"一下它才动一下,不小心把它"踢"进了死胡同,它是不会自动转出来的。这给程序员带来了无穷的烦恼,程序员必须为计算机预先考虑各种意外情况,并设计好应变的措施,只要有一种情况没有预计到,总有一天你的计算机就会可悲地失败。

    计算机的工作原理将详细的告诉程序员计算机各种弱点和优点,你将清楚计算机在各种死胡同面前的反应。工作原理不但告诉你计算机会怎样做,还告诉你计算机为什么会这样。

    那么了解计算机工作原理的最佳途径是什么呢?

    汇编语言

    对了,就是汇编语言!

    现在的程序员实在是太舒服了,在十几前,即 80年代初期,程序员开发工具(语言)只有几种,而且十分原始,如果想写点有意思的程序,比如图形界面的游戏,就必须深入了解计算机的结构,通过汇编语言来完成。屏幕上的图形需要一个点一个点地描。虽然辛苦,但是这样一来计算机在程序员面前就像透明了一样,甚至在梦中我可以见到 CPU内部数不清的电子开关在我程序的指挥下不停地开合(那时计算机也不快)。计算机一点都不神秘。

    当你使用汇编语言的时候,计算机就成了一个玻璃瓶,你可以看到计算机所有的内部结构,你将很快明白什么是赋值,什么是循环、什么是判断、什么是子程序、什么是函数。当然二进制就更是家常便饭了。有人可能会说这些概念在任何高级语言都有而且更容易理解。在这里我引用一段《 C++参考手册》中的一段话:"一个对象是一片存储区域,左值是引用一个对象的表达式",(所谓左值值的是赋值号左边的东西),这是对赋值语句和变量一个极为抽象的解释,但也是一个最简单的解释,如此晦涩的语言,对于许多只是用高级语言的程序员来说是十分难懂的。即使是 C程序员也需要消化半天。但是对于汇编程序员来说只要看到"左值"的解释就什么都明白了。再举一个例子:大家可能在入门的时候为 I=I+1这样的表达式迷惑过。但是汇编就经常使用有限的几个寄存器自加自减。另外,编译和连接的概念就不是所有语言都有的。

    现代的高级语言,即使是向 C/C++这些相对低级的语言都使用了各种库程序对程序员隐藏了许多计算机的细节。也就是计算机被"封装"了,在很大程度上程序员不需要考虑普通功能的实现细节,恐怕即使是科班出身的程序员也只有在学习算法课程的时候才写过排序代码了。这种情况下程序员面对的不是真正的计算机,而是各大软件公司为大家安排好的虚拟机而已。程序员不需要去记汇编的语法,取而代之的是必须记住新语言的语法,开发环境的使用规则,编译开关、连接开关等等。同样都是记忆,但是只知其然,而不知其所以然。掌握汇编的程序员在接触这些工具的时候则不需要死记硬背,因为开发环境也是程序,不这样还能怎样呢?

    我提倡程序员的入门语言使用汇编语言,有人可能会说汇编语言很难,其实这是误解。想象一下,一个对计算机没有多少认识的初学者,任何语言的语法都不会有很大差别,而且汇编码都十分简短,比起某些高级语言长单词的语句来说要容易记忆,尤其是英语都没学好的中小学生更是如此。二进制可能会有点困难,不过相信能够记住九九表的学生会很容易记住二进制的加减乘除的。

    现在使用汇编入门的实际困难是现在的 CPU已经十分复杂了,多了许多新概念,如内存保护,进程切换等。不过这对理解操作系统和多线程编程十分有用。又有多少程序员真正理解了线程和线程同步呢?

    以后的道路

    我声明,我不是使用汇编打天下的程序员。实际上我有 15年没有碰过汇编了。但是汇编的确为我打下了坚实的程序基础,并教会了我(或者是迫使我)学会了许多编程技巧,并使我了解代码风格的重要性。

    汇编是学习计算机工作原理的好工具,也是学习编程的好工具,但我认为汇编不是一个写程序的好工具。在掌握了基础知识后,再学习一个使用的语言和掌握一个方便的开发工具是必要的。可以说一旦掌握了汇编,你就已经入门的,以后的道路可以自由选择,也可以自由更改。

    关键词(Tags): #编程#汇编语言

    本帖一共被 1 帖 引用 (帖内工具实现)
    • 家园 刚开始学单片机的时候,用的就是汇编,感觉相当简明

      后来改用C来编单片机,反而不适应了.

    • 家园 呵呵,想当初我高二开始自学汇编

      当时学的是6052的汇编,没有Apple机,只能用Apple的兼容机。学校机房里的两台Apple可是宝贝一样,我们这种小卒只能用用兼容机,叫什么名都忘了,还是用磁带备份程序。

      就这样,开始学Motorala 6052的汇编,拿了一本书,啃了一个寒假。总算把什么绝对寻址、相对寻址、间接寻址搞清楚了。寒假结束后,回到学校,我的第一个汇编程序就是一段播放音乐的程序,在老师的帮助下好不容易调通。

      后来汇编用的最多的是在大学时写杀病毒的程序。

      想起来是那么遥远。。。

    • 家园 学汇编最大的好处是搞破解,嘎嘎
    • 家园 现在的计算机专业在校生,不学汇编了吧?

      那如何学计算机原理这一课?

      想当初,玩TP80系列单板机,区区数K的内存空间内完成的工控任务,在现在的工控机中,就得动辄数十M。

    • 家园 理解计算机工作的最好方法就是用单板机或者单片机

      例如当年Z80,用机器码写上一段东西,运行一下。然后就明白了怎么鼓捣这几个存储器和CPU.

    • 家园 想起在学校上《计算机组成》的时候,

      整学期就一个作业,用74系列逻辑芯片搭一个可以完成4位二进制加法的2位CPU。

      受益匪浅啊。

      • 家园 我也拼过

        我们当时学组成原理的时候拼过不少东西。最复杂的好像是个拨开关的加法器,拨一下开关把一个数打到存储器里面,再拨一下再来一个,然后拨另一个开关执行加法和输出结果。全部都是自己设计逻辑然后画卡诺图然后在板子上面插线。

        然后又有个数字电路实验课,我们组拼了个用7位半数码管显示的数字频率计,原理就是周期,采样,计数。发了60多个74系列,用了50多个,最后导线都盖了好几层。。。现在后悔当时没有照个照片。

        • 家园 实验是在面包板上做的,

          那线插的,一层一层又一层,红的绿的蓝的黄的黑的白的,还有一种黄绿相间的是零线。

          那时候的穷学生,哪里有相机啊,就是借到了,都是跟着MM屁股后面转悠,谁去拍这东西啊。连拍带冲印一块多钱一张呢。

    • 家园 写的真好,谢宝

      刚学汇编的时候,个人感觉,除了语法要十分熟悉外,思路要清晰,否则蹦着、指着自己就糊涂了。锻炼人啊

      恭喜:你意外获得【通宝】一枚

      鲜花已经成功送出。

      此次送花为【有效送花赞扬,涨乐善、声望】

    • 家园 这个必须要赞,可惜ASM门槛略高

      还是要赞~~ 回头再看就觉得有道理~~~

      本想送花!可惜经验值不够了~~~

    • 家园 汇编是个好东西

      一般是Computer Architecture里常用的,不过挺有意思,写些AD/DA程序,从示波器上看看自己写的程序产生的五花八门的波挺好玩儿的。

    • 家园 MIT的入门语言是scheme,一种lisp的方言,国内大学当年

      用Pascal和C的比较多。

分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河