CSDN博客

img dot99

组合语言之艺术2

发表于2001/8/4 22:17:00  946人阅读

 第一章    观念正误

 第一节  电脑

一、前言

    电脑的到来,被喻为人类文化的第三波革命,由于它具有强大的资讯机能和弹性,正好弥补了人类记忆不足、反应迟钝、厌于重覆和受限于时空的缺点。遂在当今世事繁杂、变化多端的动态社会中,成为人类日常工作中有力的帮手。
    它之不同于人类其他的发明,是以机件的「硬体」结构,去执行可以随设计理念而改变的「软体」。这一来,机器便具有了灵活应用的弹性,只要有适合的软体,它就会忠实不渝地去处理各种繁琐的任务。
    在初,它的速度及容量很低,但已有足够的魅力,吸引了无数狂热的有心人士,为它尽智竭力,不断地改良更新。仅仅不过十余年,它已脱胎换骨,蔚为龙象。
    这是一个崭新的天地,凡是思路广、创意新,能将各种抽象观念整理成为有秩序、有条理的人,都能利用电脑的特种「语言」,发展成为实用而成功的「软件」。随着软件大量的应用,工作绩效显著增进。终于,它的地位奠定了,整个人类社会的变化加速发展,对它的依赖也逐日加深。
    在这种形势下,我们要想充份掌握电脑的发展方向,就必须澈底了解电脑的本质,再进一步分析探讨可行的、最理想的途径。由于它还在发展阶段,一定存在着许多缺陷,也正因为它并不够完美,所以更需要我们用心力去浇灌。
二、正名

    任何一个行业,其专业术语的正确性、优雅性,代表了从事该业人士的文化水准。或许有人认为文化水准不重要,那么还有什么更重要呢?「信、雅、达」不是一种装饰,术语是供学习、沟通及表达之用。因此,文化水准在另一个角度来说,相当于该行业从业人员所具有的常识及智力水平。
    有人称电脑为「电子计算机」,就其源起而言,Computer确是这种定义,因为当时的电脑,仅仅具备计算能力。但是微电脑(Micro Computer)问世后,其计算能力已由小型计算器(Calculator)所取代,其主要功能反而是逻辑推理、图形及影象处理等。
    当今是一个演进淘汰极为剧烈的时代,举凡新生事物,由产生到消失,由稚弱到茁壮,无不历历在目。原名计算机,现在已证明是当时观念的不足,我们应该将错就错吗?而且,趋势所及,它必将朝向人工智能发展,成为道地的「电子」脑。所以,我们认为应该及时更正,名之为「电脑」。
    此外,将Assembly Language 译为「汇编语言」,这是理解的错误,因为绝大多数的程式都需要「汇编」,而Assemble的本意正是「组合」。名不正,理解就会发生偏差,对功能的实际应用就难以发挥。
    最不可原谅的错误是因为国人好吃成性,硬把在现代科技界「假借」使用的 MENU 「清单、目录」,全部直译为「菜单」!我国文字原有的优越性荡然无存矣,我无法想像当智慧电脑天天面对「菜单」时,要从何理解!
    有把Program 「程式」当作「程序」,这也是对文字概念认识不够所致,「程式」是一种具有「程序」的「式子」,而「程序」只是行事先后的「过程及顺序」,读者不可不知。
    又「硬体、软体」分指固定及可变的物理性质,「硬件、软件」则为某一具体的物件;「套件、软件包」是可以出售的商品;「硬、软盘」指附属机器上之设备;「软碟」是可取用的磁碟。
    还有 CALL 被译为「访问」,似乎太拟人化了,它本来就是「调用」特定子程式,名正言顺,何不「调用」?Run 被译为「跑」,则过于「写实」。这些译名不禁令我想到,在十多年前,1台湾曾有人将Backspace 翻译为「后悔」,结果贻笑大方,传为趣事。
    其他此类疏误尚多,我认为电脑界必须谦虚一些,邀请文学界专家学者,或博采众见,以免被讥为不学无术。
    实际上,由于概念的应用日趋精密,文字本身也在不停地调整变化。以《庄子》逍遥游为例,在汉朝时作「消摇游」。后来,改成以「走」为部首,代表「动作及行为的状态」的「逍遥游」,显然比「消摇游」更为妥贴,于是沿用迄今。
    连哲学上都如此,为什么当今的高科技就做不到呢?

三、应用

    电脑发展的初期,不论硬体、软体,都出于个人的意向,其功能完全根据发展者自我的认知而定。
    现在,电脑软、硬体的技术迅速成长,社会上对它的要求越来越高,尤其是软件的复杂程度,已非任何一个个人能够掌握。于是,个人英雄主义消逝了,集体合作、功能强大的各种软件纷纷出笼,电脑的应用普及到社会上各行各业。
    人的愿望是永远无法满足的,随着技术的日新月异,使用者开始期待着一种万能软件,能一举解决他们所有的需求。然而,电脑虽然是一种商品,其涉及的技术层次甚高,只有少数专家洞悉其中奥秘。在理论上,只要把所有已知的功能,溶汇在一个套件中,就叫做「整合软件」,再不断改进,必然可以符合人的需求。
    这种整合软件,对西方的功利社会而言,只是可望而不可及的理想。他们制作软件纯为了牟利,成本越低,上市越早越好。既然他们才是掌握技术的专家,而要达到敛财的目的,当然不想劳神费力,去为使用者考虑。
    设计软件的工具,称为「程式语言」,其种类甚多,最早用的是「机器码」,后来为了程式师使用方便,特在机器码与编程者之间建立了一个界面,此界面所用的字汇及语法,便是「组合语言」。
    由于技术发展之初,各种观念及认识尚不完整,一般程式师都嫌组合语言太琐碎,难学难用。故而又发展出一些比较容易应用的「高阶语言」。这种高阶语言制作的程式,在执行时不仅速度慢,又极占空间,使得容量有限的微电脑,常常被这种「高级」程式占满。
    虽然硬体逐年改进,而软体工作却也不断增加,如果采用高阶语言来制作,水涨船高之余,整合的理想仍旧遥遥无期。电脑界一直有种谬论,咸认记忆体的容量越来越大,所以程式空间并不重要。这是最不负责任的态度!记忆体的增加,正宜用来强化电脑的功能,怎能无故挥霍浪费?
    组合语言则没有这种问题,在严谨的制作方式下,不仅其程式空间小,执行效率高,且制作容易。这一次,我们仅用了百余个人月,170KB 的程式,完成了有视窗、文书、试算表、资料库、绘图、排版及通讯等功能的整合软件。
    更进一步,我们把这个整合软件的各个模组,继续发展成为“整合系统模组”,提供给各系统、软体公司,作第二次开发之用。由于利用现成模组可以节省程式制作的时间,藉着大量应用软件的开发,以提升电脑的功能。
    当然,各种电脑语言都有其优劣点,完全看设计者的理念及目的而定。原则上,其执行速度、占用的系统空间、在各个不同机种上的通用性、待处理资料的性质以及使用该语言需要的工作量等,都是必须详加考虑的因素。
    如果我们把眼光放在未来电脑的趋势上,人工智能必将是唯一的方向。要想微电脑具有人的智能,由于对空间速度的要求,只有借助组合语言始有可能。至于目前一些人工智能专用语言,则都是过渡时期的垃圾,毫无价值!
    不论从事任何工作,必须具有敏锐的眼光和判断力,等到人人都看到了,再行动手,则只有拚命追赶的份。组合语言正是一个崭新的领域,先把观念建立了,再下功夫钻研技术,将无往而不利。

四、美国市场的程式语言应用

    我手头唯一的资料,是美国 COMPUTER 杂志在1983年五月刊载于第65页的文章,讨论当时的 362种软件发展工具,存贮在一个「相关性资料库」中,并且对该资料库中工具的利用情况,一一分析。
    文中列举了34种程式语言,以及其他各种应用工具,兹将程式语言部份,抄录如后。
  ┌─────────┬──┬─────────┬──┐
  │  程  式  语  言  │数量│  程  式  语  言  │数量│
  ├─────────┼──┼─────────┼──┤
  │FORTRAN           │ 110│COBOL             │  41│
  │JOVIAL            │  15│Structured FORTRAN│  10│
  │Assembly          │   8│Basic             │   5│
  │CICS              │   4│Object Code Input │   4│
  │PL/1              │   3│IFTRAN            │   3│
  │SRTRAN            │   3│PASCAL            │   3│
  │Structured COBOL  │   3│ADA               │   3│
  │Compass           │   2│RATFOR            │   2│
  │LISP              │   2│C                 │   2│
  │DMATRAN           │   2│Memory Dump       │   2│
  │BAL               │   1│SMAL/80           │   1│
  │PCL               │   1│SCOBOL            │   1│
  │APL               │   1│HAL/S             │   1│
  │CHILL             │   1│ALGOL             │   1│
  │SNOBOL            │   1│JCVS              │   1│
  │CSL               │   1│MODULA            │   1│
  │MEFIA             │   1│CMS-2             │   1│
  └─────────┴──┴─────────┴──┘
    经过了七年的市场选择,C已是目前最主要的系统工具,PASCAL则取代了 COBOL成为商业软件的发展工具。BASIC 仍为学生及业余玩家的伴侣;只有组合语言,大约仍停留在原有的水准上。除了少数的系统程式,如IBM BIOS ( Basic Input  Output Services 基本中断服务程式) 以及 DOS (Disk Operating System 磁碟作业系统) 等外,使用者不多。
    这种现象导致了国人极大的偏见,咸认为美国观念、技术遥遥领先,他们对软件发展工具的选择,必然有独到的眼光。学校教学,系统公司应用,莫不亦步亦趋、拾人牙慧。
    美国是以商业为导向,利用逐年更新设备的手段,以加速产品的改进。所以,他们重视硬体的效率,以及程式写作的成本,但对程式语言本身的特性,并未受到应有的重视。
    不容讳言,目前我们在软体上,处于相当落后的地位。如果在这个关键的时刻,我们还看不清事实的真相,妄想东施效颦,其后果未卜可知。
    我认为,只有采用组合语言,大力开发各种应用程式,将最低档微电脑的性能提升到极致。这样,我们才能发挥人多势众的优点,提升高科技水准。

五、各种语言的性能比较

    为了具体了解各种常用电脑语言间性能之优劣,我们选用了五种为测试对象,下表即为测试所得之各种统计数据。表中以一为基数,效率高者,其数值相对增加。
    在附录一、二中,我们将各种测试的原程式、所采用的技巧、以及考虑的细节,分别列举,并一一说明。主要的目标是为了认识程式写作的技术,和追求效率的手段。
    我们测试的指标有二,一是针对各种程式语言本身的适用范围;一是程式语言之间的差异。根据对时、空效率的分析,我们发现,程式语言之间,有着极大的差异。就是使用同一语言,程式写作的技巧,也显著地有所不同。至于程式语言的适用范畴,则因取材有限,未能得出可靠的结论。
    我们选了两个题目,一是点阵图形处理,将一个 24X24点阵字形,左右、上下各放大一倍,以得到 48X48的字形。这种点阵处理,有很多高阶语言难以胜任,所以只好在常用的语言中,选了五种。另一是排序,一般语言都能处理,只是效率相去甚远。
┌─┬────┬────┬────┬────┬────┬────┐
│  │语言类别│执行速度│占用空间│制作时间│通用机种│应用限制│
├─┼────┼────┼────┼────┼────┼────┤
│  │Assembly│   1.0  │    1.0 │    2.1 │限于机种│  无限  │
│图├────┼────┼────┼────┼────┼────┤
│  │Turbo C │   7.2  │    3.2 │    1.4 │  不限  │  无限  │
│形├────┼────┼────┼────┼────┼────┤
│  │PASCAL  │   6.8  │    8.1 │    1.4 │  不限  │工商应用│
│处├────┼────┼────┼────┼────┼────┤
│  │FORTRAN │   8.0  │    6.9 │    1.0 │  不限  │科学计算│
│理├────┼────┼────┼────┼────┼────┤
│  │Basic   │ 720.0  │    8.1 │    1.0 │  不限  │  有限  │
├─┼────┼────┼────┼────┼────┼────┤
│  │Assembly│   1.0  │    1.0 │   10.0 │限于机种│  无限  │
│排├────┼────┼────┼────┼────┼────┤
│  │C       │   3.0  │    3.0 │    1.5 │  不限  │  无限  │
│序├────┼────┼────┼────┼────┼────┤
│  │PASCAL  │   6.0  │    6.0 │    2.0 │  不限  │一般应用│
│处├────┼────┼────┼────┼────┼────┤
│  │FORTRAN │   8.0  │    7.5 │    3.0 │  不限  │科学计算│
│理├────┼────┼────┼────┼────┼────┤
│  │Basic   │  10.0  │    8.0 │    1.0 │  不限  │  有限  │
└─┴────┴────┴────┴────┴────┴────┘
    由于个人写作能力,以及程式不同的特性,这种比较并无绝对的价值。不论从什么角度看,组合语言效能最佳,但制作时间较长,且限于机种,是其不利之处。据统计,C语言近年来有取代组合语言的趋势,尤其在系统设计上,由于硬体速度的改进,组合语言的边际效益已日渐减少。
    然而,从附录的程式测试中可以看出,只有组合语言的写作变化多、弹性大,能够精雕细琢,将程式的效率发挥得淋漓尽致。纯以技术的立场、以及成本的分析来看,真正有实用、推广的价值的软件,其初期的开发费用及时间等成本根本微不足道。
    硬体之速度及记忆空间每增进一倍,其产品之售价亦上涨一倍,故组合语言仍有其绝对的优势。至于通用性问题,以目前发展的趋势来看,机种日渐统一,故丝毫不足为虑。
    还有一点也常被忽视的,是程式的积累价值。效率不高、功能不强的程式,很容易就被扬弃掉。反之,则可以不断地重覆利用,甚至累积起来,成为日后软件继续发展的基石。像这样,程式的制作效率将会随着累积的程度而直线增加。当然,没有长远的眼光和妥善的规划,是难以竟功的。
    要发挥组合语言真正的效益,必须先澈底认识其特性及机能,并应用各种技巧,整理出一套法则,以便推广应用。这样虽然辛苦,但是,以未来社会对电脑的需求量,不论成本、效益,也不论硬体发展到什么程度,唯有组合语言才能使软体更上一层楼。

 第二节  组合语言

一、结构基础

    物质文明之有今天的成就,是因为人类掌握了物质的基本结构。物质的种类无穷,但是却都由基本元素交互组成,只要根据一定的法则,就能得到一定的结果。
    电脑技术虽然日新月异,应用软件的变化也无止无尽,而其基本因子却非常有限。各种微处理器的组合语言,正是电脑软体的基础结构,任何要通过软件以完成的动作,都是经由组合语言的指令群,逐步执行的。
    因为电脑结构复杂,各种任务分工极精,即使是一位资深的高级程式师,终其生也不过局限在若干固定的程式中钻研,很难以宏观的立场认知全貌。再加上市场需求的压力,局外人莫名其奥妙,局中人又忙得不可开交,所以还没有任何人能作出全盘的评估。
    组合语言首先成为被误解的牺牲者,包括应用它的系统工程师在内,都一致认为它「难学难用」,(中文也是一种组合形式的应用,其所组合者是人的概念。无独有偶,人们在不求甚解之余,都视之为畏途。)事实上大谬不然,现在是科学挂帅,而科学的精义就在于系统的分类和应用。问题是我们能不能归纳出一些学习、应用的法则,将组合的过程化繁为简,以符合各种应用范畴。

二、个人体验

    我个人对此感受极为深切,我原是个十足的外行,1978年第一次接触电脑,曾以不到两周的时间, 就学会电脑操作,并应用「培基语言」设计完成“仓颉输入”程式。当时我认为培基语言易学易用,是电脑上最好的工具。
    后来,我开始用培基语言设计“仓颉向量组字”程式,每秒可生成两个字,当时与我合作的宏□公司建议我采用组合语言,他们说组字程式速度要快,培基语言不能胜任。如改用组合语言,效率可提高十倍,由此开始了我与组合语言的不解之缘。1979年9月我们正式推出了由国人自行设计、具有完整的电脑功能、可运用数万中文字的“天龙中文电脑”。
    宏□公司动用了三位资深工程师,采用 Z80 MCZ系统,以六个月的时间完成了向量组字及系统程式,记忆空间占60KB,处理速度每秒约组成30字。
    这是我首次发现到组合语言的威力,深究之下,才理解到电脑的全部工作原理。简单说来,组合语言就是组合电脑所有功能的控制指令,利用它,就可以直接控制电脑。
    其他高阶语言,只是让人省事,用一些格式化的手续,把人的想法化为过程的指令,这种情形就相当于为了迁就开车的人,建了密如蛛网的高速公路。本来走路只要几分钟就可到达的地方,以车代步的结果,反而需要耗费半个小时。
    1980年,我决定自己动手,又重新设计了一套字数较多,字形较美观的组字程式。只用了三个月的时间,结果不仅记忆空间缩小了三分之一,速度也快了十倍,达到每秒 300字。这个产品,就是1苹果机上用的「汉卡」。
    1983年,再经分析,我发现以往写的程式很不精简,技术也不成熟。我坚信中文字形在电脑上的应用,将是中国文化存亡兴衰的根本因素,不仅值得投注自己的时间及精力,且也有此必要。所以我又抛掉了一切,重头设计,加入更多的变化参数,并根据人的辨识原理,设计成第三代至第五代等多种字形产生器。每一代之间,速度都明显地提高,功能也不断加强。在这样一再重覆的摸索中,尝试了各种可行的途径,充份认识了组合语言的特性及长处。
    由于组合语言灵活无比的特性,我发现它就如同画家的画笔一般,只为了牟利,可以用它画成各种廉价速成的商品;一旦投入自己的理想与心智,画笔就不再只是一枝笔,而成为人心与外界的界面,画出的作品立时升华成为艺术,进入一个更高的境界!
    1985年,我再次重新设计规划,采用人的智能原则,把人写字、认字的观念化为资料结构,程式只是用来阐释资料、控制电脑的界面。该字库的字形可做到无级次放大缩小,字体、字型皆能任意变化 (每字可以产生数亿种变形) 。而且除了现今各种字典已收的六万余字外,还可以组成完全符合中文规则的新字六百万个,足敷未来新时代新观念的发挥应用。
    不仅如此,组字速度又提高了,每秒可以组成 30*30的字形两千个!当然现在用的是15MHZ 80286 ,比以往的4.75 MHZ的Z80 已经快了近六倍。但是,改良后的新程式,其功能的增加,处理过程的繁杂性已远非当年可比。
    这些成果,用了很多特殊的资料结构技巧,不可能经由高阶语言来完成。既然用组合语言所制作的程式能一再大幅度地改进,这就说明了组合语言的弹性极大,效率相去千里。如不痛下苦功钻研,程式写完,能执行就算了事,又怎能领悟其中奥妙?
    所以,我并不认为组合语言祗是一种程式语言而已,它是一种创造艺术品的工具,它能赋与无知无觉的电子机器一种「生命」,由无知进而有知,由有知而生智慧。通过对组合语言的研究探索,我整理出一些规律,写成这本书,以便于理解及应用。但是,要真正将组合语言发展成为艺术,尚有待青年朋友们继续努力,在这个资讯时代,开拓出一片崭新的天地。
    无意义的音符能编成美妙的音乐,无规律的色彩可幻化为缤纷的世界,为什么电脑的机器指令,不能架构出资讯的理性天地?
    这就是艺术,作为艺术家,就必须奉献出自己的心血,以真、善、美为最高境界。
    要达到这种目的,就要认真的作好准备动作,再一步一步地追求下去。

三、利人与利己

    任何一种商业产品,当然是以利益为先,利己后而利人。如果是艺术品创造,则刚刚相反,唯有能忽视己利,沥血泣心地探索,虔诚狂热地奉献,才会迸发出人性的光辉,创造不朽的杰作。
    艺术家之伟大,在于此,人性之可贵,在于此。
    对组合程式语言,有人视为商品,将写作技巧当作专利,轻不示人。相信这也是迄今尚无一本像样的参考书籍之根本原因,我买了不少这类书,但书中除了指令介绍以及编程、侦错的手续外,完全没有技巧的说明,好像懂得指令就可以把程式写好一般。当我自己下了不少功夫,得到了一些心得,再回过头来看那些参考书,才发现连作者本人所举的例子,都是平铺直叙,毫无技巧可言。
    (更正,在序言中我曾提到有本最近出版的“禅-组合语言”,是唯一的例外,希望读者不要错过。)
    多年来,我一直想写本有关组合语言写作技巧的书,可惜都得不到机会。这次,为了实现「整合系统」革命性的计划,所有招收的工程师,一概从头训练。由于没有可用的教材,只好自己动手,于是初步有了讲义,再经修改,便成此书。
    我认为,既然组合语言是种艺术,我们不仅不应该藏私自珍,而且要相互探讨,交流切磋,以期发扬光大。
    不过,技术本身与利用该技术所创造的产品却不能混为一谈,产品是藉以谋生的工具,能够生存,大家才有研究发展的机会,也才能把成果贡献给社会。如果国人不尊重别人的产品权利,只是互相抄袭盗用,或能受惠于一时,但影响所及,人人贪图现成,不事发展,则观念停顿,技术落伍,其后果不堪设想。

 第三节  效率定律

一、效率的定义

    在宇宙中,大至物种的演进、变化,小至个人的工作、运动等,都严格地遵守效率法则。
    效率的定义是:
    ┌─────────────────────────┐
    │F=E/t,即特定的能量在特定的时、空中所作的「功」。 │
    └─────────────────────────┘
    由上式 F = E/t 可知,特定的「能量」在特定的「时空」中所作的「功」,是一恒定值,既为恒定值,表示不可能有任何浪费。当能量不变时,时、空的延长往往会导致「功率」的不足,从另一个角度看,可以说是能量不够,效率低。
    对电脑而言,如果写作程式的「功率」能接近此一「恒定值」,而又具有长远的使用价值,则我们可以假定,这种程式的效率最高。
    由人类文明的演进,可以看出,因为技术日渐专业化,工作的难度不仅没有减低,反而更加复杂。这种藉着职业专家的投入,以节省一般应用者宝贵时间的方法,事实上可以说就是效率的追求。
    因为人的生命仅存在于有限的时间,所以其价值极高。每一个电脑程式,其最终目的都是为了服务大多数的使用者,制作程式者仅仅是少数人,其制作时间的长短,永远无法与大多数的使用者,在操作中所耗费的时间相提并论。
    此外,以写作程式为职业的人,一生中所需写作的程式,也一定有相当的数量。如果能重复应用写过的程式,将更缩短其写作时间。无论从哪一个角度,若要追求效率,组合语言应是唯一的选择。
    作为电脑的从业者,在职业良知上,理应禀着服务人类、追求效率为最高准则。

二、电脑的效率性

    电脑的发明,是人类追求效率最具代表性的成就。
    目前电脑的机能尚局限在资料处理以及自动控制上,人们利用电脑,所期望得到的效率不外乎下述六点。
    1,节省工作时间及工作成本。
    2,取代繁琐、重覆性高或具有危险性的作业。
    3,追求精密无误的资料、讯息。
    4,贮存或运算大量的数据或资料。
    5,远距离的通讯或遥控作业。
    6,自动化工业生产或一般性服务。
    然而,电脑发展方兴未艾,上述数点难以表达于万一。因此,我们有必要将人类所期望的效率整理归类,以作为分析判断的依据。

三、四大效率定律

    兹以人类社会中,有关作业过程、生产成本及应用价值等三方面,分别假设定律如下:

    定律一:
        在作业过程上,能以最少步骤产生最大功率者,效率最高。
    定律二:
        在生产成本上,时、空间及原料最节省者,其效率最高。
    定律三:
        在应用价值上,功能及成果能一再累积者,其效率最高。
    定律四:
        最佳的效率,是最符合实际需求的最大边际效应。

    电脑的应用,纯粹是为了追求工作效率,据此,硬体、软体的设计,都应严格遵守效率定律。可是事实却不然,由于电脑发展迄今,一直是「卖方市场」,美其名为「高科技」,内行人高利、高酬,外行人则唯恐后人,亦步亦趋。
    电脑界为了谋取近利,在软件设计的过程上,常采用最缺乏工作效率的高阶语言。但是由于高阶语言易于制作,生产成本低,只是苦了「无知无觉」的买者,为了追求效率往往要花费更多的代价,购买更昂贵的、更新型的硬体,以满足其效率的需要。
    有人说高阶语言制作的程式还有一个组合语言无法比拟的优点,就是很容易「转移」到其他的机种上。事实上,目前微电脑市场仅存两种机型:一为IBM PC系列及其兼容机,另一为MACINTACH ,而这两者所有的软件,不论采用哪一种语言,都无法轻易地「转移」!
    一般说来,任何一种新的微电脑上市,其执行速度及记忆容量每增加一倍,其价格亦成正比上升。是不是有必要非改进硬体,才能达到效率的要求呢?如果我们能澈底了解程式语言的特性,当会明确地认知怎样才具最大边际效益。
    这也是进化的基本法则之一,当电脑技术成熟之时,真正的效率才会受到重视。同理,在电脑应用效率达到最高点时,也就是电脑技术成熟的时机。我们如果能掌握这个原则,自不难看到长远的发展趋势,洞烛机先。

四、组合语言之效率

    根据定律一,组合语言之效率是不容置疑的,因为组合语言相当于电脑运行的「机器命令」,能直接产生「功率」。
    生产成本有多种意义,在此我们仅讨论其中两点:一是生产过程所需的时间,一是产品的直接成本。
    组合语言能以最小的空间,发挥最大的功能。显然,在等效的功能下,其成品所占空间最小,成本最低。但是对生产过程所需时间而言,组合语言就处于相当不利的地位。除非能有一种方法,可以改进组合语言制作的效率。
    这正是本书的主要目的:介绍一种方法,以提高组合语言之制作效率。
    我们的目标不仅在提高数倍的制作效率,并且还要证明,用一种特殊的手段,能将组合语言设计的「模组」,如同砌砖一般,建造出资讯的金字塔来。这样不仅能满足定律三,而且完全符合定律四的要求。
    最重要的,是这种效率的达成,在于利用人的「智力」。我认为在宇宙进化的过程中,到目前为止,「人智」就是最高效率的结晶。任何人若要追求效率,应自己先下手,与其坐待硬体的改进,不如充实程式写作的方法及技巧,至少,这些都操纵在自己的手里。

五、模组的效率

    模组并不是一个新观念,在人类文明发展史上,人一直致力于了解自己身处的宇宙。这种了解,实际上就是模组应用的观念,将宇宙大环境,分解成为人所能认知的小环境,进而将小环境再分解成为个人的经验素材。
    这样一层层地分解下去,便有了「概念、知识」。换句话说,概念及知识,就是一个个代表人类对客观认知的模组。
    基于模组的特性,人才能灵活地加以应用,因而产生了「人类文明」。同理,当电脑的软件,也演化为模组方式,进一步大量推广运用时,电脑文明的时代,即将到来。
    模组的效率是结构性效率的最高表现,在我们处身的宇宙中,无处没有结构,无一不受到结构的支配。有关模组规划、制作和应用,将在第四章第三节、模组观念中详加讨论。

 第四节  程式价值

一、程式的种类

    因为目的不同,一般说来,程式可以分为以下四种。

  1,应用程式:
        凡专门提供给用户,作某种特殊应用的软件,皆称为用程式。通称「套装软件」( Application Package),即成套包装的软件。

  2,系统程式:
        即为系统所提供的「通用程式」,包括在 DOS环境下运行的「命令」(Command) 及「基本中断程式」等。这些程式都是支援系统硬体,供用户应用的工具。

  3,介面程式:
        介面意为「介」于多个「面」之间,凡电脑各系统、硬体与软体、软体与软体之间,皆可称之为介面。
        对程式师而言,写作程式需要「程式语言」的发展环境,所谓的介面程式,即为此类发展环境所必需者。
        此外诸如网络及通讯等,也可以称为介面程式。

  4,控制程式:
        利用程式控制机器运作者,此类程式完全依赖硬体独特的机能,专业性极强。

二、价值观念

    不论什么程式,都应该以「正确、精简、效率」为基本原则。但在目前,除了系统程式比较重视精简及效率外,其他的程式多半只重视正确性而已。
    人们往往以为只有硬体才具有价值,其实大谬不然。硬体的变化有限,软体则永无止境;硬体的价值容易衡量,软体却祗有行家才能判断其良窳。在商业利益挂帅的今天,所谓的「行家」,经常就是「既得利益者」。消费大众是盲目的,也是无辜的 ,行家为了自身的利益,很少愿意道破其中原委。
    此外还有另一层原因,硬体生产需要技术、材料、资金及设备环境,而软件则人人都可以随手盗用。对一个从事软件设计的程式师,尽管有心将工作做得尽善尽美,但一想到其呕心沥血发展出来的精品,很可能刹时之间就被不尊重软件价值的消费者偷抄盗卖,哪里还有兴致去精雕细琢?
    如果我们能先将软体的价值观建立起来,且人人尊重软体应有的价值,如此真正受惠的,将是广大的消费大众。否则,这样恶性循环下去,电脑只能靠硬体的改进,来达到效率的追求,软体不过是一种「速食」性的消费品,永远没有价值。
    以金额来看,硬体的市场边际价值远不如软体为高。因为硬体的生产成本高,用户每购买一台,就满足了基本需求。故此必须经常推陈出新,以资获利。当然,市场也有其平衡的法则,高利之下,竞争者多,过时的、效率低的硬体又因恐遭市场淘汰而大幅度的降价。
    从过去的经验中可以推出,硬体效率的改进,大约每年一次,而软体则完全建立在其「价值观」之上。如果值得,设计者愿意投入,软体可以在很短的周期中,或因观念的突破,或因工具的特性,功能及效率立即提高了十百倍!问题在于,连从事程式设计的程式师,对软体的认识都不够充分,所制作的软件尚无法满足使用者的需求,充其量只是速成品罢。故不论是程式师或使用者,对软件的价值观都难以建立。
    上述的工具是指「组合语言」,而观念则是将组合语言视作「艺术」。当然,这些只是理想,基于人性,理想永远只属于少数人。可是,少数人的理想经常会推动时代,为多数人谋取福利。

三、创造价值

    资讯时代方兴未艾,可以预期到只要有人类存在,电脑将是不可或缺的伴侣,永远伴着人类不断朝向超高效率的境地迈进。且不论硬体技术如何改进、变化,应用软体才是电脑生命的灵魂。一个有价值的软件,在千锤百炼之下,经过人智的洗礼,其意义绝不是物质报酬可以比拟的。
    再换一个角度来看,电脑的硬体技术日新月异,体积日趋轻巧。虽然记忆量也在不断增加,但是软件却刚刚相反,由于对高阶语言的依赖,程式占用系统的空间越来越大,以致于抵消了硬体演进所创造的价值。
    当然这都是软件工程师的责任,如果从事软件开发者,不立时觉悟,电脑将不过是「金玉其表,败絮其内」。同理,从事软件开发者,如果仅顾眼前的方便、急功近利,能抄就抄,能偷就偷,长此以往,电脑永远不能形成气候。
    因此,钻研软体的制作技术,创造软件的实用价值,才是资讯时代的主导方向。从这个角度上来看,组合语言所具备的效率优势,远较高阶语言容易制作的优点更有意义。
    对程式师而言,仅把程式当作一种工作,而不追求效率价值,则其技术及境界将止于此,其成就亦可想而知。唯有殚精竭虑,不断追求完美的人,无论观念和技术都将逐步提升,则在未来的资讯时代中,将会占有一席之地。

四、追求价值

    那么,究竟应该如何去追求最高的价值呢?我们不妨从几个不同的角度来分析。

  1,程式价值的定义:
        前面说过,组合语言是一种艺术工具,用组合语言所写的程式则是艺术品。而艺术品的价值是很难加以衡量。可是,程式又是一种工具,对工具而言,它是客观存在,必然具有客观的价值。
        因此,我们可以站在客观的立场,将用组合语言所制作的程式、以及其应有的价值,分门别类予以定义。在此我们不考虑其他程式语言所制作的软件,并不表示这些价值定义不适用,而是认为这种比较不公平。因为以下的定义,都是根据组合语言的特性而考虑的。

    1-1 成本价值=目标1×目标2/成本
            「成本价值」是一种人人都知其然而不知其所以然的观念,是指以某一固定成本,在目标1与2两者之间,根据效率定义,何者价值高,即为其成本之代价。
            在现实世界里,人所从事的工作,有抽象的精神或心理代价,也有金钱或物质代价,甚至两者兼而有之。不论如何,也不论成本为何,其价值高者,经常是人所追求的目标。在这种基础上投入的成本,其价值的高低,将视人所追求的目标而定。
            由于「理想」很有可能只是某种特殊的目标或影响,其利益经常远大于经济上的获利。因此,要提高成本价值,绝非仅仅降低成本而已,而是如何提高其影响力。
            再若经济上的获利高于理想,以现实的角度而来看,人不可能轻易放弃利益,而去追求价值不足的「理想」。
            在这种理论下,人的发展方向,是从事理想的追寻抑或物质利益的满足,端视理想与获利两者,对个人的成本价值而定。同理,人工作的方式及对工作的要求,亦因成本价值而有所取舍。
            采用组合语言制作程式,就是明显的成本价值观念。因为组合语言的效率高,追求效率的实现就是一种理想,为此,投下时间及各种难以估计的成本,对那些有能力牟利者说来,当然是不值得。可是在不知「阿堵物」为何者,除了理想的追求,还待何为?
            以上面的公式来看,降低成本仍可提高其价值,获利的增加亦然,这是必然的,即所谓的「附加价值」。关键在于如果「理想」的价值低于获利,自然而然,其目标将转移为获利。反之,为了牟利,也可能在发现了理想价值后而改途转向。
            附带的产生了一个话题,若矢志追求理想的人又想兼顾金钱利益,一旦金钱利益的成本价值超过了理想时,根据前述理论,此人随时可能变节。至少,在我个人的见闻中,还没有例外的。

    1-2 功能价值
        绝对价值=采用后效益/未采用前效益
        相对价值=各软件间绝对价值比
            任何软件,如果没有实用的功能,就不可能有真正的价值。至于软件的功能价值如何测定,多多少少要看使用者的主观条件而定。
            在这里,我们提出一个简单的方法,先要知道在采用软件的前后,是否真具有效益?这种效益,是绝对的,没有大、小的比较。
            然而,如果一个软件没有效益,就不可能成为商品。所以,任何软件的功能价值,应该是比较性的,在类似软件中,取其绝对价值之比值即可。

    1-3 效率价值=程式功能价值/占用空间×执行时间
            效率是可以精确衡量的,只要得到前述的功能价值,其它诸如程式占用的系统空间、执行所需要的时间等参数,都可以透过测试得到。
            当程式的功能价值极高时,相对的看来,其空间及速度的影响不大,但这种程式迄今尚未诞生。尤其是目前电脑硬体的机能还在启蒙阶段,一般说来,现有的软件占有的空间太大,而且速度太慢,故效率不高。正当这个关头,软件所扮演的角色,可以说是举足轻重,效率自然不能忽视了。
            由于软件界还没有注意到这一点,有识之士可以想见,只要能掌握住效率价值,就可以出人头地。

    1-4 累进价值=效率价值×使用频率×软件生命期
            硬体是消耗品,用到一定的时限后,就失去了再利用的价值。而软体则永远没有损耗,除非应用观念的改变,其实用的价值如常。
            不仅如此,应用观念虽然会改变,只要软件是由模组结合而成,其中的共用模组永远不变。略作适当的修改,或再增加功能后,又面貌一新。
            这种共用模组就具有累进价值,也就是说,用模组方式制作的软件,只要分割适当,就应具有累进价值。凡是有累进价值的程式,其边际效益最高。因此品质的要求也相对加高。如上面公式所表示的,累进价值等于该程式本身的效率,以及在不断累积使用下频率和生命期的乘积。只有基于组合语言的高效率,才可能产生这种价值。
        在资讯时代,程式师必须认识软件的重要性及其所具有的价值,才能充份发挥。
  2,程式师应有的态度:
    自动自发,谦虚学习,掌握重点,认真负责,追求完美

        写程式完全是脑力活动,除非是行家,程式师是否真是在工作,别人很难从外表上看出来。同时,如果程式师不是自动自发,对工作无热忱,甚至心存歧见,则不可能把程式写好。
          自动自发是指发自内心的原动力,且不论是基于名、利、个人成就感或是好奇、赌气、逞强,只要有了这种动力,问题没解决,就会形成悬疑,不断地萦绕脑际,难以休息,直到解决为止。
        但是,人的智力相去甚远,经验亦各自不同。姑不论个人的才智,在解决问题时,集思广益,虚怀若谷,必然是最有效、最正确的态度。
        问题在于,越是执著、好强,或者自卑自傲的人,其自我观念越重。遇事即采惯性行事,而且坚持不变,这种人不可能谦虚,更无法学习。
        就像艺术家一样,不参考他人的作品,不学习新的技巧及观念,固步自封,则难成大师。如果程式师不能谦虚学习,不随着时代的变化成长,创作出来的程式,其价值可想而知的。
        天下英才比比皆是,然而出类拔萃的人却不多。究其因,在学习、思考时,当是原则重于细节,然而在执行的过程中,却是细节重于原则。此外,事物变化的组合无穷无尽,主事者必须能针对目标,随时根据实际状况,逐步处理。
        在各种状况中,如若程式师不能掌握当前的重点,则凡事皆如有千头万绪,难以下手。事实上,从成事败事的观点来看,人只有两种,有能力者,是把复杂的事简化;无能力者,经常把简单的事变得复杂无比。而这种能力的差异,就在于能否掌握当前的重点。
        观念清楚了,就看当事人是否能认真负责,坚持贯彻到底。人间世事成败,完全基于这种态度。不认真,工作时草草了事,不可能有好的成绩;不负责更糟,没有问题也会产生问题,发生问题后,更是无人解决;若参与工作的人多,彼此推卸责任,这样做人处世必将失败,程式制作亦然。
        所谓认真负责,具体说来,即是在事先要彻底了解该做什么?要做什么?以及如何去做?工作时要考虑怎样做最有效率?每一步骤会产生什么结果?而工作完成后要彻底检查,目标是否已达成?能否再加以改进?
        最后,是对程式的品质及技巧的完美性,应锲而不舍地追求。一般人常把完美当作不必要的奢侈,其实不然,完美是一种永远无法达到的理想。重要的观点是,人只有在追求完美的过程中,才能不断地进步、升华。一个人若没有理想,就与动物无异,一个程式师若没有理想,套句爱因斯坦的名言,不过是只「训练有素」的小狗罢了。
        态度来自习惯,习惯则来自于学习及锻练,有志向上者,应该自我要求,努力学习。等到锻练久了,习惯成自然,有了良好的态度,终有成为大师的一天。

  3,软件开发的原则:
    分工合作,量材施用,慎重计划,严格执行,市场导向

        此处所说的软件开发,是指具有相当规模的程式,需要多数人员共同工作者。人多固然力量大,但是人与人的相处和沟通,问题也特别多。若处理得好,力量是正值,反之,则为负值。不仅彼此的力量相互抵消,有时还有不良的后果。
        软件开发,应该有一个主事的重心人物,如果要谈民主,不妨去搞政治。负责人首先要对工作内容详加分判,然后根据性质分配工作。分配时应注意工作量、时间要求、个人特性及相互的配合等因素,责任要划清,交待要明确,俾能集中众人力量,分工合作。
        成事在人,如果用对了人,则成功在望。每个人都有其独特的个性、能力及态度,适合于不同性质的工作和方法。所以应事先了解每个程式师的个性、能力及缺点,再行分配适合的工作。
        不仅分配工作时要度量才干,管理时亦然,人不是机器,不可能绝对适应同一种工作方式。但是,若每个人以他自己适应的方式工作,对整体而言,又有步骤不一、难以相互配合的弊病。
        比较理想的解决方式,是对参与工作的人员,施以再教育,使之习惯于一种统一的方式,藉着训练的过程,也可增进对每个工作人员的认识了解。
        再就是工作计划,将工作分成几个阶段,并配合人员的分工及设备器材的条件,逐步实施之。
        工作计划相当于建筑蓝图,一旦确定了就难以修改。一个完整周详的计划,应包括了工作目标,人员分配,时间进度,执行细则,沟通方式,解决问题的程序等。
        有了计划,还要有监督执行的专责人员。这种人才必须有足够的经验,对全部计划能了解透彻,有敏锐的判断力,并敢于担当。工作时执行要严格,待人要宽厚,处理事务要果断。
        最后一项原则,才是真正的成败关键,那就是,产品要以市场需求为导向。不能符合使用者需求的产品,一定「没有用」,没有用的产品,则不具备任何价值。
        要测试产品是否「有用」,其实很简单,以程式师为例,如果自己都不愿采用,显然是用处不大。有人会说,程式师又不是使用者,在没有必要时,再好的产品都不肯用。这话并不尽然,人喜爱美好的、尤其是与自我有关的事物。如果程式真有用,制作的程式师一定会想尽方法去    玩赏、测试,而且乐此不疲。
        同理,程式师只有当自己不断的试用后,才会发现实际应用上,所可能面临的问题。而当问题解决以后,用得方便,有了实际效益,市场才有可能接受。

  4,工作环境的建立:

    环境安静,资料齐全,消息流通,压力合宜

        从事软件工作的人,可以说就是一个艺术家,艺术需要注入心智,需要个人无保留地投入。在这种情形下,环境相当重要,必须事先安排妥当。
        环境的物质条件并不重要,但是安静、卫生,却关系着艺术家心理及生理上的平衡。喧哗、吵闹会令人心烦意乱,难以专心。对艺术家而言,不能专心,就毫无创造佳作的可能性。当然,若只把软体发展视作生产线上的生产工作,那就不在话下了。
        程式是运用资料、处理资料的工具,写程式最怕的是资料不全,因为缺乏一点必须具备的资料,而使得整个计划受阻,是最可惜的事。同时,程式本身也是一种广义的资料,尤其是一些软件开发所必须的工具,都应事先准备齐全。
        由于电脑发展日新月异,新观念、技术层出不穷,资料永远难以收集完整。所以消息的流通性非常重要,在一个闭塞的环境里,埋头苦干的结果往往会落在别人的后面而尚不自觉。更何况世界各国从事电脑工作者多不胜数,他山之石可以攻错,消息的流通常可使软件工作者节省大量的心力。
        最后是工作的压力,为了效率,压力要大;但站在人的立场,不论身、心,实在是经不住长期或太大的压力。所以,如何求取一个合宜的折衷点,是不容忽视的。
        以我的经验,一般人受年龄、经验、动机及意志力等的影响,承受压力的能力,不一而同。大概说来,年轻、初学者,在适当的动机下,能够承担长达三至五年、持续性的重大压力;有经验、年龄稍长,除非有极强的动机,再加上坚定的意志,才能维持下去。
        软件开发需要劳心劳力,艺术创作则更需要坚持执著的毅力,技术有方法、有步骤,一定可以实现。艺术则要有观念、有创意,加上心智的投注。两者融合,观念由大处着眼,技术由细部着手,是则,理想终将成为事实。

 

0 0

相关博文

我的热门文章

img
取 消
img