组合语言之艺术
第四节 程序价值

一、程序的种类
    因为目的不同,一般说来,程序可以分为以下四种。
  1,应用程序:
      凡专门提供给用户,作某种特殊应用的软件,皆称为用程序。通称「套装软件」
( Application Package),即成套包装的软件。
  2,系统程序:
      即为系统所提供的「通用程序」,包括在 DOS环境下运行的「命令」(Command)
 及「基本中断程序」等。这些程序都是支持系统硬件,供用户应用的工具。
  3,界面程序:
      界面意为「介」于多个「面」之间,凡计算机各系统、硬件与软件、软件与软
件之间,皆可称之为界面。
      对程序员而言,写作程序需要「程序语言」的发展环境,所谓的界面程序,即
为此类发展环境所必需者。
      此外诸如网络及通讯等,也可以称为界面程序。
  4,控制程序:
      利用程控机器运作者,此类程序完全依赖硬件独特的机能,专业性极强。
二、价值观念
    不论什么程序,都应该以「正确、精简、效率」为基本原则。但在目前,除了系统
程序比较重视精简及效率外,其它的程序多半只重视正确性而已。
    人们往往以为只有硬件才具有价值,其实大谬不然。硬件的变化有限,软件则永无
止境;硬件的价值容易衡量,软件却只有行家才能判断其良窳。在商业利益挂帅的今天,
所谓的「行家」,经常就是「既得利益者」。消费大众是盲目的,也是无辜的,行家为
了自身的利益,很少愿意道破其中原委。
    此外还有另一层原因,硬件生产需要技术、材料、资金及设备环境,而软件则人人
都可以随手盗用。对一个从事软件设计的程序员,尽管有心将工作做得尽善尽美,但一
想到其呕心沥血发展出来的精品,很可能剎时之间就被不尊重软件价值的消费者偷抄盗
卖,哪里还有兴致去精雕细琢?
    如果我们能先将软件的价值观建立起来,且人人尊重软件应有的价值,如此真正受
惠的,将是广大的消费大众。否则,这样恶性循环下去,计算机只能靠硬件的改进,来
达到效率的追求,软件不过是一种「快餐」性的消费品,永远没有价值。
    以金额来看,硬件的市场边际价值远不如软件为高。因为硬件的生产成本高,用户
每购买一台,就满足了基本需求。故此必须经常推陈出新,以资获利。当然,市场也有
其平衡的法则,高利之下,竞争者多,过时的、效率低的硬件又因恐遭市场淘汰而大幅
度的降价。
    从过去的经验中可以推出,硬件效率的改进,大约每年一次,而软件则完全建立在
其「价值观」之上。如果值得,设计者愿意投入,软件可以在很短的周期中,或因观念
的突破,或因工具的特性,功能及效率立即提高了十百倍!问题在于,连从事程序设计
的程序员,对软件的认识都不够充分,所制作的软件尚无法满足使用者的需求,充其量
只是速成品罢。故不论是程序员或使用者,对软件的价值观都难以建立。
    上述的工具是指「汇编语言」,而观念则是将汇编语言视作「艺术」。当然,这些
只是理想,基于人性,理想永远只属于少数人。可是,少数人的理想经常会推动时代,
为多数人谋取福利。
三、创造价值
    信息时代方兴未艾,可以预期到只要有人类存在,计算机将是不可或缺的伴侣,永
远伴着人类不断朝向超高效率的境地迈进。且不论硬件技术如何改进、变化,应用软件
才是计算机生命的灵魂。一个有价值的软件,在千锤百炼之下,经过人智的洗礼,其意
义绝不是物质报酬可以比拟的。
    再换一个角度来看,计算机的硬件技术日新月异,体积日趋轻巧。虽然记忆量也在
不断增加,但是软件却刚刚相反,由于对高级语言的依赖,程序占用系统的空间越来越
大,以致于抵消了硬件演进所创造的价值。
    当然这都是软件工程师的责任,如果从事软件开发者,不立时觉悟,计算机将不过
是「金玉其表,败絮其内」。同理,从事软件开发者,如果仅顾眼前的方便、急功近利,
能抄就抄,能偷就偷,长此以往,计算机永远不能形成气候。
    因此,钻研软件的制作技术,创造软件的实用价值,才是信息时代的主导方向。从
这个角度上来看,汇编语言所具备的效率优势,远较高级语言容易制作的优点更有意义。
    对程序员而言,仅把程序当作一种工作,而不追求效率价值,则其技术及境界将止
于此,其成就亦可想而知。唯有殚精竭虑,不断追求完美的人,无论观念和技术都将逐
步提升,则在未来的信息时代中,将会占有一席之地。
四、追求价值
    那么,究竟应该如何去追求最高的价值呢?我们不妨从几个不同的角度来分析。
  1,程序价值的定义:
      前面说过,汇编语言是一种艺术工具,用汇编语言所写的程序则是艺术品。而
艺术品的价值是很难加以衡量。可是,程序又是一种工具,对工具而言,它是客观存在,
必然具有客观的价值。
      因此,我们可以站在客观的立场,将用汇编语言所制作的程序、以及其应有的
价值,分门别类予以定义。在此我们不考虑其它程序语言所制作的软件,并不表示这些
价值定义不适用,而是认为这种比较不公平。因为以下的定义,都是根据汇编语言的特
性而考虑的。
    1-1 成本价值=目标1×目标2/成本
        「成本价值」是一种人人都知其然而不知其所以然的观念,是指以某一固
定成本,在目标1与2两者之间,根据效率定义,何者价值高,即为其成本之代价。
        在现实世界里,人所从事的工作,有抽象的精神或心理代价,也有金钱或
物质代价,甚至两者兼而有之。不论如何,也不论成本为何,其价值高者,经常是人所
追求的目标。在这种基础上投入的成本,其价值的高低,将视人所追求的目标而定。
        由于「理想」很有可能只是某种特殊的目标或影响,其利益经常远大于经
济上的获利。因此,要提高成本价值,绝非仅仅降低成本而已,而是如何提高其影响力。
        再若经济上的获利高于理想,以现实的角度而来看,人不可能轻易放弃利
益,而去追求价值不足的「理想」。
        在这种理论下,人的发展方向,是从事理想的追寻抑或物质利益的满足,
端视理想与获利两者,对个人的成本价值而定。同理,人工作的方式及对工作的要求,
亦因成本价值而有所取舍。
        采用汇编语言制作程序,就是明显的成本价值观念。因为汇编语言的效率
高,追求效率的实现就是一种理想,为此,投下时间及各种难以估计的成本,对那些有
能力牟利者说来,当然是不值得。可是在不知「阿堵物」为何者,除了理想的追求,还
待何为?
        以上面的公式来看,降低成本仍可提高其价值,获利的增加亦然,这是必
然的,即所谓的「附加价值」。关键在于如果「理想」的价值低于获利,自然而然,其
目标将转移为获利。反之,为了牟利,也可能在发现了理想价值后而改途转向。
        附带的产生了一个话题,若矢志追求理想的人又想兼顾金钱利益,一旦金
钱利益的成本价值超过了理想时,根据前述理论,此人随时可能变节。至少,在我个人
的见闻中,还没有例外的。
    1-2 功能价值
      绝对价值=采用后效益/未采用前效益
      相对价值=各软件间绝对价值比
        任何软件,如果没有实用的功能,就不可能有真正的价值。至于软件的功
能价值如何测定,多多少少要看使用者的主观条件而定。
        在这里,我们提出一个简单的方法,先要知道在采用软件的前后,是否真
具有效益?这种效益,是绝对的,没有大、小的比较。
        然而,如果一个软件没有效益,就不可能成为商品。所以,任何软件的功
能价值,应该是比较性的,在类似软件中,取其绝对价值之比值即可。
    1-3 效率价值=程序功能价值/占用空间×执行时间
        效率是可以精确衡量的,只要得到前述的功能价值,其它诸如程序占用的
系统空间、执行所需要的时间等参数,都可以透过测试得到。
        当程序的功能价值极高时,相对的看来,其空间及速度的影响不大,但这
种程序迄今尚未诞生。尤其是目前计算机硬件的机能还在启蒙阶段,一般说来,现有的
软件占有的空间太大,而且速度太慢,故效率不高。正当这个关头,软件所扮演的角色,
可以说是举足轻重,效率自然不能忽视了。
        由于软件界还没有注意到这一点,有识之士可以想见,只要能掌握住效率
价值,就可以出人头地。
    1-4 累进价值=效率价值×使用频率×软件生命期
        硬件是消耗品,用到一定的时限后,就失去了再利用的价值。而软件则永
远没有损耗,除非应用观念的改变,其实用的价值如常。
        不仅如此,应用观念虽然会改变,只要软件是由模块结合而成,其中的共
享模块永远不变。略作适当的修改,或再增加功能后,又面貌一新。
        这种共享模块就具有累进价值,也就是说,用模块方式制作的软件,只要
分割适当,就应具有累进价值。凡是有累进价值的程序,其边际效益最高。因此品质的
要求也相对加高。如上面公式所表示的,累进价值等于该程序本身的效率,以及在不断
累积使用下频率和生命期的乘积。只有基于汇编语言的高效率,才可能产生这种价值。
      在信息时代,程序员必须认识软件的重要性及其所具有的价值,才能充份发挥。
  2,程序员应有的态度:
    自动自发,谦虚学习,掌握重点,认真负责,追求完美
      写程序完全是脑力活动,除非是行家,程序员是否真是在工作,别人很难从外
表上看出来。同时,如果程序员不是自动自发,对工作无热忱,甚至心存歧见,则不可
能把程序写好。
       自动自发是指发自内心的原动力,且不论是基于名、利、个人成就感或是好
奇、赌气、逞强,只要有了这种动力,问题没解决,就会形成悬疑,不断地萦绕脑际,
难以休息,直到解决为止。
      但是,人的智力相去甚远,经验亦各自不同。姑不论个人的才智,在解决问题
时,集思广益,虚怀若谷,必然是最有效、最正确的态度。
      问题在于,越是执着、好强,或者自卑自傲的人,其自我观念越重。遇事即采
惯性行事,而且坚持不变,这种人不可能谦虚,更无法学习。
      就像艺术家一样,不参考他人的作品,不学习新的技巧及观念,固步自封,则
难成大师。如果程序员不能谦虚学习,不随着时代的变化成长,创作出来的程序,其价
值可想而知的。
      天下英才比比皆是,然而出类拔萃的人却不多。究其因,在学习、思考时,当
是原则重于细节,然而在执行的过程中,却是细节重于原则。此外,事物变化的组合无
穷无尽,主事者必须能针对目标,随时根据实际状况,逐步处理。
      在各种状况中,如若程序员不能掌握当前的重点,则凡事皆如有千头万绪,难
以下手。事实上,从成事败事的观点来看,人只有两种,有能力者,是把复杂的事简化;
无能力者,经常把简单的事变得复杂无比。而这种能力的差异,就在于能否掌握当前的
重点。
      观念清楚了,就看当事人是否能认真负责,坚持贯彻到底。人间世事成败,完
全基于这种态度。不认真,工作时草草了事,不可能有好的成绩;不负责更糟,没有问
题也会产生问题,发生问题后,更是无人解决;若参与工作的人多,彼此推卸责任,这
样做人处世必将失败,程序制作亦然。
      所谓认真负责,具体说来,即是在事先要彻底了解该做什么?要做什么?以及
如何去做?工作时要考虑怎样做最有效率?每一步骤会产生什么结果?而工作完成后要
彻底检查,目标是否已达成?能否再加以改进?
      最后,是对程序的品质及技巧的完美性,应锲而不舍地追求。一般人常把完美
当作不必要的奢侈,其实不然,完美是一种永远无法达到的理想。重要的观点是,人只
有在追求完美的过程中,才能不断地进步、升华。一个人若没有理想,就与动物无异,
一个程序员若没有理想,套句爱因斯坦的名言,不过是只「训练有素」的小狗罢了。
      态度来自习惯,习惯则来自于学习及锻炼,有志向上者,应该自我要求,努力
学习。等到锻炼久了,习惯成自然,有了良好的态度,终有成为大师的一天。
  3,软件开发的原则:
    分工合作,量材施用,慎重计划,严格执行,市场导向
      此处所说的软件开发,是指具有相当规模的程序,需要多数人员共同工作者。
人多固然力量大,但是人与人的相处和沟通,问题也特别多。若处理得好,力量是正值,
反之,则为负值。不仅彼此的力量相互抵消,有时还有不良的后果。
      软件开发,应该有一个主事的重心人物,如果要谈民主,不妨去搞政治。负责
人首先要对工作内容详加分判,然后根据性质分配工作。分配时应注意工作量、时间要
求、个人特性及相互的配合等因素,责任要划清,交待要明确,俾能集中众人力量,分
工合作。
      成事在人,如果用对了人,则成功在望。每个人都有其独特的个性、能力及态
度,适合于不同性质的工作和方法。所以应事先了解每个程序员的个性、能力及缺点,
再行分配适合的工作。
      不仅分配工作时要度量才干,管理时亦然,人不是机器,不可能绝对适应同一
种工作方式。但是,若每个人以他自己适应的方式工作,对整体而言,又有步骤不一、
难以相互配合的弊病。
      比较理想的解决方式,是对参与工作的人员,施以再教育,使之习惯于一种统
一的方式,借着训练的过程,也可增进对每个工作人员的认识了解。
      再就是工作计划,将工作分成几个阶段,并配合人员的分工及设备器材的条件,
逐步实施之。
      工作计划相当于建筑蓝图,一旦确定了就难以修改。一个完整周详的计划,应
包括了工作目标,人员分配,时间进度,执行细则,沟通方式,解决问题的程序等。
      有了计划,还要有监督执行的专责人员。这种人才必须有足够的经验,对全部
计划能了解透彻,有敏锐的判断力,并敢于担当。工作时执行要严格,待人要宽厚,处
理事务要果断。
      最后一项原则,才是真正的成败关键,那就是,产品要以市场需求为导向。不
能符合使用者需求的产品,一定「没有用」,没有用的产品,则不具备任何价值。
      要测试产品是否「有用」,其实很简单,以程序员为例,如果自己都不愿采用,
显然是用处不大。有人会说,程序员又不是使用者,在没有必要时,再好的产品都不肯
用。这话并不尽然,人喜爱美好的、尤其是与自我有关的事物。如果程序真有用,制作
的程序员一定会想尽方法去  玩赏、测试,而且乐此不疲。
      同理,程序员只有当自己不断的试用后,才会发现实际应用上,所可能面临的
问题。而当问题解决以后,用得方便,有了实际效益,市场才有可能接受。
  4,工作环境的建立:
    环境安静,数据齐全,消息流通,压力合宜
      从事软件工作的人,可以说就是一个艺术家,艺术需要注入心智,需要个人无
保留地投入。在这种情形下,环境相当重要,必须事先安排妥当。
      环境的物质条件并不重要,但是安静、卫生,却关系着艺术家心理及生理上的
平衡。喧哗、吵闹会令人心烦意乱,难以专心。对艺术家而言,不能专心,就毫无创造
佳作的可能性。当然,若只把软件开发视作生产线上的生产工作,那就不在话下了。
      程序是运用数据、处理数据的工具,写程序最怕的是数据不全,因为缺乏一点
必须具备的数据,而使得整个计划受阻,是最可惜的事。同时,程序本身也是一种广义
的数据,尤其是一些软件开发所必须的工具,都应事先准备齐全。
      由于计算机发展日新月异,新观念、技术层出不穷,数据永远难以收集完整。
所以消息的流通性非常重要,在一个闭塞的环境里,埋头苦干的结果往往会落在别人的
后面而尚不自觉。更何况世界各国从事计算机工作者多不胜数,他山之石可以攻错,消
息的流通常可使软件工作者节省大量的心力。
      最后是工作的压力,为了效率,压力要大;但站在人的立场,不论身、心,实
在是经不住长期或太大的压力。所以,如何求取一个合宜的折衷点,是不容忽视的。
      以我的经验,一般人受年龄、经验、动机及意志力等的影响,承受压力的能力,
不一而同。大概说来,年轻、初学者,在适当的动机下,能够承担长达三至五年、持续
性的重大压力;有经验、年龄稍长,除非有极强的动机,再加上坚定的意志,才能维持
下去。
      软件开发需要劳心劳力,艺术创作则更需要坚持执着的毅力,技术有方法、有
步骤,一定可以实现。艺术则要有观念、有创意,加上心智的投注。两者融合,观念由
大处着眼,技术由细部着手,是则,理想终将成为事实。

上一页    下一页