图片来自网络
程序员(记实散文)
程序员这个角色,在当今社会已经形成了一种职业。设计信息系统,编制操作软件,统计,会计,审计系统都要有人编制软件,维护和升级系统。这些工作需要程序员完成。

三十五年前,程序员带着神秘的面纱。能够编程,研制分析系统,计算系统的人寥寥无几。一个省级银行分行,科技处不足十人。主要解决会计,储蓄手工记账问题。各专业处室根本不配计算机。报表汇总靠打算盘。项目评估中的函数计算,最先进的机器是日本松下的函数计算器。每个业务处仅配置一个。
一个偶然的机会,我成为了程序员。但是严格的说是兼职程序员,或者叫业余程序员。虽然很业余,可是凭着我的好学爱研究,锲而不舍专研,向书本学习,在实践中试验,从小成就,到分系统,大系统,逐步完善研制《项目信贷计算机管理系统》。程序员的经历终生难忘。
(1)
二十世纪八十年代,商业银行开始发放项目贷款。每个贷款项目都要进行评估。需要计算许多指标,编制许多表格。那个时候,全凭手工计算。经处长批准,财会处同意,技改信贷处配备了一台松下函数计算器。处长同意由我使用。我用这台计算器计算一个现金流量表和内部收益率。最快时十分钟就能算完。算是一个高手了。其他同事至少两个小时才能算完。搞项目评估,大部分时间在手工计算指标,手工编制报表上了。如果要进行敏感性分析,最多搞几十张报表。
如果能够用计算机自动生产报表,自动计算指标,就可大大节约评估时间。这是我的梦想。
1987年,工行重庆分行技改信贷处研发了一个项目评估软件。总行十分重视,四月份在重庆举办全国技改信贷专业计算机应用培训班。史处长批准我去参加,并要我学好后培训全省信贷人员。
四月份的重庆,最缺少的是阳光,一个月的时间仅看到半日阳光。由于重庆刚发生空难,我们选择乘飞机到成都,第二天乘火车到重庆。
培训班设在重庆分行培训中心。中心设在南岸区的长江边。我们安排好住宿后,把衬衣衬裤洗了,挂在阳台的晒衣架上。第二天早上,想把衣服收起来。没想到,用手一摸,比刚挂上时还湿,用手一拧,哗哗淌水。没办法,我们就去上课了。
重庆分行非常重视,调来了三十几台个人电脑。每个分行参培人员一台。培训是速成式,除了讲评估基础知识外,计算机评估软件只讲操作。软件系统是编译的加密软件,看不到源程序。
评估基础知识和指标计算我最熟悉了,根本不费力。前十天的课我没费气力,我还可以辅导其他同事。计算机基础操作,开机,简单的DOS命令,考盘,输入输出文件,也简单。我都学会了。
重庆,特别是南岸区,地无三里平,天无三日晴。四月的大雾,对面不见人。洗衣服要在房间里用电扇吹,才能干。我们房间住四个人,一个河南的,两个广东的,一个辽宁的。河南老李不爱说话。两个广东的一直在说着笑话。他们两个笑得前仰后合,我们却是一头雾水,不知他们说什么。我就问广州的H同事,你们为啥笑成这样。那个广东的Y同事普通话稍好些,他告诉我了答案。他说:
杨,杨,杨老兄,我嘞,我嘞依噶岗(讲)岗,一个笑话。hongkang(香港)一个bos(老板)岗(讲),kuangzhou(广州)的饭店刀太快了。李,李,李连杰进去了,李…莲英出来了。
我们被他的蹩脚的普通话逗笑了,但觉得他讲的故事没什么可笑。过了大约五分钟,河南老李大笑了起来。
哈哈哈,太幽默了。他们是说广州饭店菜价太贵了,太宰人了。我们才反应过来,全屋一片笑声。从此,我们宿舍和谐了。南北中打成一片了。一个月过得很快乐。
最后七天是软件系统上机操作。这是我们最期望的。重庆行演示了软件。开机后,电脑自动进入了《贷款项目评估系统》。他们把模拟贷款项目的数据按屏幕提示,逐个输入电脑。然后敲击计算键。电脑进入了计算系统。屏幕中提示着:
“”正在计算…”
每隔一分钟响一下铃,屏幕上的字闪一下,提示还没完成计算。大约过了十五分钟,屏幕闪烁,显示,已经计算完成。
老师们按报表键,打印出五张报表和指标。
我们盼着的计算机评估软件就算这样了。
我举手提了问题。
老师好,这个软件很好,很实用。有两个问题如何解决?第一,计算机计算速度太慢了,和我手工计算的速度差不多,能否优化。第二,如果要进行敏感性分析,比如原材料价格上涨、销售价格下降、投资增加等,需要如何操作。
重庆分行老师答复了我的问题,目前,我们用的是IBM8086机,运算速度已到极限,无法优化。第二,敏感性分析,现在还没有设计模块,需要分析时,重新调整数据,输入,再计算分析。就是按变化了的数据再做一遍。
我知道我问的问题肯定没法解决。只希望拿到系统后,再修改优化。
最后一天,考核顺利通过了。每位学员交款三百元,拷贝了一套评估系统软件。
拿到软件后,我迫不及待的将软盘放入电脑,试验运行状况。运行还算顺畅。但是,这个系统软件是编译软件,已经加密,看不到源程序。我们花三百元就拿到一个运行软件。经过反复交涉,还是没拿到源程序。真是有些失望。
带着惆怅的心情回到辽宁,向处长汇报了情况,软件不是很实用。建议不要先举办培训班。待我优化后再培训。
处长同意了我的意见。
(2)
我反复研究了重庆软件,本想在此基础上优化,但是,编译软件无法修改源程序,只能读,不能写。所以,优化根本不可能。只能推到重来,从零开始起步。
我把这个想法向处长汇报。
处长说,你学过计算机专业吗?
我没学过,在大学时学习过计算机ago60语言。这是最古老的语言,适用于国产djs6大型机。个人机我没学过。我回答。
编软件,你能行吗?
我没有把握,我对自己的学习能力很自信,我相信能够学会。
从头学很难吧,不然向科技处借一个人吧,你负责评估计算,科技处的负责软件设计。
好哇,试试吧!
处长给科技处长打了电话。刘处长说,我们真抽不出人手。第一,我们正在搞储蓄系统,人非常紧,派不出人手。第二,我们处的人都是搞多用户的,个人机不熟悉。无法完成你处的任务。
处长和我认真的谈了一次。他说:
搞这个系统非常必要。我们没有外援,只能自己搞。相信你会有办法。
我可以学,可以试,争取成功。我先边学边干,请给我三个月的时间,处里的活照干,尽量少安排出差,闲暇时间我就上机学习。请给我一台专用电脑。三个月之内,我如果能完成核心指标计算,我们自己编软件就成功了。
三个月?没问题。如果我们能搞出一个比较先进的软件,那就太好了。批你专用一台中环0530计算机,三个月内不安排你出差。处里全力支持你。
我是出生牛犊不怕虎。决心很大,但现实很残酷。计算机dos系统命令我只是粗知。编软件需要的计算机语言,我算是一窍不通。大学专业是工业会计,开了一门计算机ago60语言,早就落后了。那次穿纸带上大机试运行学生成绩计算表,我们班仅通过5个学生,当然包括我。但是,只有这么一点点基础,想编一个评估软件谈何容易。我下了决心,信心满满,坚决打好第一仗。
和处长谈话后,我马上去了新华书店。买了一本BASIC语言教程,一本dBaseⅢ数据库教程,一本编程教程。学习这三本书,开始了系统软件攻关。这三本书都很系统,如果全部掌握,三个月肯定不行。我着重研究编程教程,从逻辑框图开始学习。
最先从学生统计表开始,采用降序排列,将最高分的学生放在前面,按分数逐一排列。然后算出85分(含)以上人数,在计算班级平均分。
把这个任务画成流程图。开始——录入姓名分数——排序——统计85分以上的学生人数——计算平均分——结束。然后再把每个步骤画成逻辑框图。
逐步学习,逐步完善。第三天,完整的逻辑框图画完。此任务只有一个入口,仅有一个出口,符合要求。
我运用BASIC语言开始试验语句和功能。我打开计算机,进入BASIC系统,开始试编小程序,一个语句一个语句的试验。语句拼写不允许一个错误。不会的就查书。每天下班把程序清单打印出来,拿回家再研究。
十天过去了,我编好了第一个程序——学生成绩统计表。运行程序,按要求打印出了学生统计表。这是初战胜利。
从第十一天开始,我试图画评估中最重要的指标内部收益率计算流程图和逻辑框图。画了改,改了画。同时,继续在计算机上编写试验程序。
第十八天,试验程序基本成型。开机输入数据,开始运行计算。软件运行三分钟后,突然断开退回DOS系统。运行几次都是一样。说明软件有问题。
我打开源程序,一个字节一个字节的检查,没发现错误。再运行,还是不行。
我用打印机打印出程序清单,然后,认真检查。功夫不负有心人,经过细心检查,发现程序中多了一个逗号,问题应该出在这里。
修改后我又运行了程序。按下计算键,开始计算。屏幕上提示着“正在计算”。时间过去了20多分钟,还是没算完。我担心进入了死循环。如果是死循环就只能关机才能退出。直至35分钟时,计算机嘟的一声,提示计算完毕。指标打印在屏幕上。
等待期间,我用计算器手工计算出了这些指标。与计算机计算结果一致。说明计算机软件计算的结果正确。最不满意的就是时间太长。如能改进最好。
我分析了软件试算部分的步长。因为内部收益率要精确到万分位。所以步长设为0.0001。逐步迭代试商,直至算到累计净现值为0时的折现率。那时的8086和80186计算机,计算速度特别慢。
找到问题后,我就着手在计算步长上做文章。我先把步长放宽到千分位,待计算数值接近0的时候,在把步长调整为万分位。
这个调整步长的修改完成后,运行后速度达到了10分钟。我高兴万分。我找到了提高速度的办法。
我又把步长修改为百分位,得到接近的结果时,再调整步长为万分位。我又开始运行计算,居然提高到五分钟。我非常兴奋,我仅用了重庆分行软件计算时间的三分之一时间。
这是第23天。我把处长和处里同事叫到我的电脑台前,演示着我的评估计算系统。
处长说,祝贺!
成功了。看来我们能够研发这个评估系统了。美中不足的是,计算时间还是长了些。如能优化缩短到秒,那就先进了。另外还要完善软件,方便操作。
我接受了这个挑战,开始优化和完善系统。
(3)
我先着手研究优化缩短计算时间。我请教了几位科技处的同事,没能解决。又到图书馆查找资料,还是没解决。
我去新华书店,科技书店寻找解决问题的书。咨询了店员,都说没有这些书。
当我出了书店的门,一回头无意中在橱窗里看到了一本书,华罗庚先生的《优选法》。优选法——优化系统。二者也可能有关系。华罗庚是应用数学大师,解决应用数学问题肯定有帮助。我花了两角四分钱,买了一本《优选法》。如饥似渴的读起来。
0.618,黄金分割点。我的大脑一下子开窍了。我的计算程序慢的原因找到了。《优选法》给我提供了解决问题的方法。
我的程序中采用固定步长计算,无意义的计算步骤过多。从0开始最小步长0.0001计算,计算到内部收益率值为止。试商过程太长,速度就慢了。
受《优选法》的启发,由固定步长改为不定步长。第一步,将整个赋值区域设为1,直接计算0.618的数值。第二步,判断数值正负,如为正数,我们再把0.618至1的范围设定为1,用0.618+(1—0.618)x0.618计算数值。如果数字为负,则把0至0.618设为1,用0.618x0.618计算数值。
每次计算一个步长,很快接近百分位的期望数值。在精确到万分位。
我用这种思路修改了源程序。我反复检验无误后,开始了我的试运行。当我输完数据,按计算指令后,本来屏幕上有提示“”正在计算…”。可是运行时根本没看到。计算只用了不到0.5秒的时间就出结果了。也就是按下指令瞬间结果就出来了,根本没看到“正在计算”提示,直接“嘟”的一声,结果就打印在屏幕上了。
这次,我仅和处长汇报了运行结果,处长也亲自看了试运行。我们两人非常兴奋。攻关成功!
我们两人决定保守秘密,在软件推出前保密。同时,抓紧完善,达到实用,方便,先进。
我耗时45天完成了攻关核心计算程序。比和处长预订的时间缩短了一半。
(4)
核心计算部分出来后,仅仅是软件系统的30%工作量。还有大量的工作要做。核心计算采用了BASIC语言,因为是数据分析系统,必须采用数据库语言来设计人机对话,输入整理数据,形成数据库供计算。这又是一个大难题,我必须学会dBaseⅢ数据库语言。这时已经来不及系统学习了,只能把教程当工具书,用什么学什么。
整个系统,我采用模块设计。分为四个大模块:数据输入,计算分析,敏感分析,报表打印。数据库和软件主体采用dBaseⅢ语言编写,计算接口采用BASIC语言。用BASIC语言调用数据库数据进行计算,再将计算结果数据存入数据库供打印报表。
最难的是敏感性分析模块。重庆软件没有这个功能。但是这个功能最重要。如果评估中出现变化,必须进行敏感分析,研究数据波动时项目的可行性。
这个问题花费了我非常多的精力。白天,晚上,一直在研究。我做成了变动指标数值随机输入,同时变动数据自由组合,积木式的分析模块。变动因素包括:
1、成本升降%
2、销售增减%
3、建设成本升降%
4、项目寿命周期变化
…
可以单因素变动进行敏感分析,只要输入变动%,系统自动调整数据并计算出结果。
也可以多因素变动分析,输入变动%,自动调整数据并计算。这也是这个软件先进的一个大特点。
经过三个月的研制,软件投入试运行,又经过三个月的优化,完善的项目评估系统(辽宁版)推出来。总行推广到全国使用。此软件全国工行系统一直用到1993年。
这个软件大大提高了评估速度。评估人员只要进行尽职调查,收集到准确的数据,就可上机计算出各项指标,打出需要的报表。
我的业余程序员的生涯一发不可收拾。我研发了《项目信贷统计系统》,《项目贷款管理台账》。从而形成了完整的项目贷款计算机管理系统。
我的程序员是兼职的,繁重的评估任务一直没停歇。由于我对电脑操作比较熟悉,我还当上了省行机关各处室的电脑业余维护员。
当时,各处配备了中环0530机,质量比较差。我在研发运行评估软件时,出现了不能启动的现象。开机后不能进入DOS系统。
怎么办,我找到了电脑说明书,知道是电脑硬盘0磁道出现问题了。排除这个故障比较麻烦。首先用DOS引导盘插入软盘驱动器,然后启动计算机,进入DOS系统。第二,用backup 命令备份电脑硬盘中数据。第三,运用初级格式化命令,对硬盘初级格式化,这个过程需要一至两小时时间。第四,进行带系统的高级格式化。第五,编制自动P处理文件。第六,将备份文件拷贝到电脑硬盘。我按说明书成功激活了电脑。处里其他电脑出问题了,我也帮助搞好了。
我能够维修电脑系统的消息不胫而走,省行都知道我能修复电脑。所以,经常接到其他处室电话,请求帮助修复电脑。我都欣然同意,帮助他们修理。我确实非常累,在帮他们修电脑格式化的时间,我又跑回处里干活了。等到格式化结束,我再跑到他们处继续修理。能够帮助同事解决问题,我非常高兴,同事也很感谢。我在行里的口碑比较高。
《项目贷款计算机管理系统》等到省行的肯定,也得到总行的肯定。总行后来研发的《贷款台账系统》就是在我行个人机系统的基础上过渡到多用户大型机上的。
1990年,《贷款项目计算机管理系统》通过了省科委和电子振兴办的鉴定,获辽宁省科技进步二等奖。
在鉴定报告书上,程序员一栏工整的签上我的名字。
从零开始,边学习边编程,完成了艰巨的攻关任务。在这个过程中,我觉得信心最重要,拼搏精神最必要。学习是基础,试验谋提高。通过这次程序员的实践,我学会了计算机软件开发技术,等于多学了一个专业。程序员的实践使我养成了系统思维,锻炼了系统分析能力,为以后的工作打下了良好的基础。
图片来自网络,感谢提供者