日历

August 2009
M T W T F S S
    Sep »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

冒号课堂§1.3:语言选择

冒号课堂

第一课 开班导言(3)

1.3 语言选择——合适的就是好的

郑晖

摘要

简要回顾计算机语言


尺有所短,寸有所长

《楚辞》

!预览

  • 评判语言优劣,如同争论兵器高下,倘若撇开使用的主体和对象,皆为空泛之谈

  • 高级语言好比长兵器,威力强大却难免滞重,长于大型应用,可谓“一寸长,一寸强”;低级语言好比短兵器,轻便灵活却难免风险,长于底层应用,可谓“一寸短,一寸险”

  • 西门吹雪的西来一剑,那是C语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言

?提问

  • 语言好坏的标准是什么?

  • 计算机语言的发展经历了哪几个阶段?

  • 第四代语言和第五代语言与前三代语言相比,有什么不同?

  • 什么是低级语言和高级语言?各自的特点与应用范围是什么?

  • 为什么称C语言为中级语言?

:讲解

问号觉得自己的问题并未解决,追问:“这么多种语言,仅凭流行度就能分出主次优劣吗?”

“流行度当然不是唯一的指标。”冒号答道,“语言的主次优劣因人而异,答案在你们自己身上。还是刚才那句话,真正的老师就是你自己。”

期待的目光如风中之烛般开始黯淡。

冒号又道:“评书里名师授艺时,常常要徒弟自己挑选称手的兵器。威武的刀,灵活的枪,飘逸的剑,浑厚的棍,粗犷的斧,霸道的锤,诡异的鞭,无不谙合武者的个性。评判语言优劣,如同争论兵器高下,倘若撇开使用的主体和对象,皆为空泛之谈。”

句号若有所悟:“所以好的语言就是适合编程者和解决对象的语言。”

“非常正确!”冒号赞许道,“这就是问号同学要的答案。”

引号并不满足:“可我记得评书里经常描述高手的一句话¬:十八般兵器样样精通。”

冒号一笑:“兵器虽多,其理相通,高手精通多种兵器何足为奇?但如果让赵云使锤,李元霸使枪,武力恐怕还是要大打折扣吧?”

逗号依然困惑:“我们如何判断一种语言是否适合自己,是否适合解决对象呢?”

冒号看出大家共同的疑惑,不紧不慢地说:“要想从中选择,自然先得了解,不然怎知兵器称不称手、合不合用?现在进入正题,我们先对计算机语言作个简要的回顾。”

大伙均想,总算要挠着痒处了。

“计算机语言按其发展历程通常分为五代。”冒号说完,在黑板上写下——

第一代语言(1GL):机器语言

第二代语言(2GL):汇编语言——IA-32 Assembly,SPARC Assembly等

第三代语言(3GL):高级语言——Fortran,Pascal,C,Java,VB等

第四代语言(4GL):面向问题语言¬——SQL,SAS,SPSS等

第五代语言(5GL):人工智能语言——Prolog,Mercury,OPS5等

“谁能简要地谈谈这段历史?”冒号又开始踢回传球了。

“最新的两代语言我不是特别熟悉,就说一下前几代吧。” 一阵沉默后,引号终于毛遂自荐,“计算机语言是人用来指挥计算机的语言,而计算机只懂一种语言——由0和1组成的机器语言(machine language)。最初人们直接用这种语言下达指令,可它们实在太难记忆和阅读了,开发和维护起来既费时又易错,严重桎梏了程序员的生产力。后来人们发明了汇编语言(assembly language),用接近英语单词的助记码(mnemonic code)来代替0、1串,由助手——汇编器(assembler)将其转化为机器语言。这些助手很称职,但有两个缺点:一是毫无主见,基本上只会一一对应地翻译,程序员必须不厌其烦地交代每一个细节;二是不知变通,换种机器就傻眼了。于是人们陆续引进了各种高级语言(high-level programming language),同时启用更得力的助手——编译器(compiler)和解释器(interpreter)。这些助手除了能理解更简洁更抽象的高级语言外,还能因地制宜地对一些指令进行优化处理。程序员的劳动力得以极大的解放,生产效率得以大幅的提升。直到现在,高级语言还是最主要的开发语言,包括前面提到的十二种最流行的语言。”

引号发言甫毕,冒号立即献上溢美之词:“精彩!精当!一气呵成!看看,你还怀疑自己不够格作老师吗?”

一种晕眩感向引号袭来。

冒号继续引号的讲述:“从机器语言到汇编语言、再到高级语言的演变,堪比从徒步行走到乘自行车、再到乘汽车的变革,越来越省时、省力、省心。循此方向,第四代语言更专注业务逻辑和问题领域。程序员主要负责分析和描述问题,不再花大量时间去考虑具体的算法和逻辑。事实上,最初提出第四代语言的概念,就是希望非专业程序员都能做应用开发。”

逗号心下一惊:“那我等岂不是要失业了?”

冒号宽慰道:“倒不用太担心。正如引号所说的,语言越来越高级,背后靠的是越来越能干的助手。这些助手本身就是软件,还是需要专业程序员开发的。更何况,这种理想的全面实现依然任重而道远。”

问号百思莫解:“第四代语言到第五代语言的发展路线似乎不够清晰,在逻辑上如何解释呢?”

冒号作出解答:“第四代语言虽然足够强大,但过于局限某些特定领域,基本上属于领域特定语言[1](Domain Specific Language,简称DSL),而不是我们所熟悉的通用编程语言(General-Purpose Programming Language,简称GPPL)。专门用于数据库操作的SQL、用于统计分析的SAS和SPSS、用于科学计算的Mathematica都是典型的第四代语言。然而一个系统往往横跨多个领域,如果每个领域使用不同的语言,并且不同领域的语言在概念和方法上也不统一,必然会给集成和整合带来的困难。第五代语言在保持第三代语言的通用性的前提下,继承了第四代语言的优点,即重在目标而非过程、重在描述而非实现。如果把这种优点用在汽车上,那么下一代的交通工具也许是无人驾驶的智能汽车。只要输入目的地,它会自动通过GPS寻找最佳路径,自动根据路况变速转向,一直驶到终点。”

叹号身形微颤:“坐这种车我可不放心。”

冒号一撇嘴:“这当然只是一种假想。同样地,第五代语言号称人工智能语言,虽然雄心勃勃,试图让机器理解人类的自然语言,并且具备人类的思维能力,但目前看来这一目标还显得遥不可及。”

句号很赞同:“是啊,超级计算机虽然可以战胜国际象棋的世界冠军,但在围棋上弱智得很。”

冒号提纲挈领:“也有人简单地将前两代语言统称为低级语言,其他的统称为高级语言。语言从低级到高级,离机器语言更远,离人类语言更近,因而更易读写、调试和维护,安全性、通用性和可移植性更强,开发效率更高,更加抽象和宏观;但同时运行速度和效率下降,用法和功能上局限性更大。如果拿兵器作比,高级语言好比长兵器,威力强大却难免滞重,长于大型应用,可谓‘一寸长,一寸强’;低级语言好比短兵器,轻便灵活却难免风险,长于底层应用,可谓‘一寸短,一寸险’。”

大伙心里话,敢情来这儿不是学编程,是学武术的。

叹号说道:“我看还是高级语言好,现在谁还学低级语言啊?”

冒号纠正道:“低级语言并不低级,只是随着高级语言的出现,计算机硬件性能的提高,渐渐有些边缘化了。虽然几乎没有人再用机器语言编程了,汇编语言仍有其用武之地。常见的有:包括嵌入式系统在内的系统开发,如操作系统、编译器、驱动程序、无线通讯、DSP、PDA、GPS等;其他对资源、性能、速度和效率极为敏感的软件开发;以信息安全、软件维护与破解等为目的的逆向工程等等。即使你不打算从事系统开发,也不想作红客、黑客或骇客,掌握汇编语言对你深入了解计算机内部运行机制、调试软件和改进程序中某些关键代码的算法也是有帮助的。”

引号提出:“好像有些书上把C语言称为中级语言。”

冒号答道:“这是因为C兼具高级语言和低级语言的特征。一方面它提供了高层抽象和可移植性,使程序员更多地专注问题逻辑而不是机器逻辑;另一方面它也提供诸如指针、位字段(bitfield)等工具进行底层操作,甚至可直接内嵌汇编代码。C语言既简洁灵活又高效强大,是迄今为止最具影响力的语言。几乎所有的操作系统和大多数高级语言都用它来实现,C家族的语言C、C++、Java、C#、D、Objective C等占据主流语言的半壁江山。如果再拿兵器作比,C语言就是一把剑,轻灵飘逸、锐利快捷。一名武将无论擅用什么兵器,往往都会腰悬宝剑。不会C的程序员正如不会使剑的武将,无论如何都是一种缺憾。相比之下,汇编语言就像小刀匕首,而机器语言则近乎赤手空拳了。”

句号灵光一闪:“我明白了——西门吹雪的西来一剑,那是C语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言。”

大家会心地笑了。

逗号冷不防冒出一句:“我会跆拳道哦!”

句号一乐:“哈哈,等你打赢了陆小凤,就封你为机器语言。”

冒号也笑言:“这位是古龙的粉丝吧?武侠小说里的侠客多轻功高绝且喜单打独斗,故使用轻、短兵器居多;而历史小说里的战将多骑马进行大规模作战,故除了佩剑外,使用重、长兵器居多。这就是前面提到的,中低级语言更适合中小型或底层应用,高级语言更适合大型应用。”

众人活跃起来,开始议论纷纷。冒号放耳听去,净是些古龙金庸、三国水浒里的人物情节,暗想:通俗小说到底比计算机编程更吸引人啊。

,插语

  1. 领域特定语言,简称DSL。它区别于通用语言,一般用于特定的问题领域,多属于第四代语言。比如SQL是专门针对数据库的语言,LaTeX是专门用于排版的语言,正则表达式(regular expression)是专门处理字符匹配的语言。

。总结

  • 评判语言优劣,不能离开使用语言的主体和对象。好的语言就是适合编程者和解决对象的语言。

  • 计算机语言按其发展历程分为五代,依次为:机器语言、汇编语言、高级语言、面向问题语言和人工智能语言。通常,前两代统称为低级语言,后面的统称为高级语言。

  • 第四代语言和第五代语言与前三代语言最大的不同在于:重目标轻过程、重描述轻实现。

  • C兼具高级语言和低级语言的特征,因此也被称为中级语言。

  • 计算机语言从低级发展到高级,渐渐远离机器,靠近人类,以牺牲部分性能和效率为代价,换来更高的开发效率和可维护性。中低级语言更适合中小型或底层应用,高级语言更适合大型应用。

Be Sociable, Share!
分享/保存
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒) (已有1人评分,平均分为:5.00 / 5)

5 comments to 冒号课堂§1.3:语言选择

  • 人工智能语言已经真正实现了吗?

  • 王正杰

    应该如何系统地学一中语言,或者说系统地学编程与软件开发?

    • hui

      找一本好书边学习边动手。如果觉得这个答案很笼统,那是因为问题很笼统。事实上,如果有足够的能力,应当有自己的学习方法;如果没有,不必涉足软件开发这一行。

  • Anonymous

    我個人覺得每種語言的背后 都有它所帶的知識面
    精通十八般武器 絕對不是只有語言的語法 而是它所代表的領域知識

    而知識是堆疊而上的或者說是揉搓而成 一塊塊疊或者一塊塊滲 哪種好 ? 也不一定
    但有件事是肯定的 那就是堅持到最后的 肯定能學到更多 不是最多喔 是更多 (與自己相比)

    以上個人淺見 大家覺得如何 ?

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

This blog is kept spam free by WP-SpamFree.