狮城岁月之七:NEC

创作的冲动来源于对过去的尊重和对未来的向往。字里行间无意中表达出你的理念,你对生活,工作,爱情的诠释。

文章均为狮子羔羊原创,版权归狮子羔羊(CN) 及其笔名拥有者所有。为保护微信公众平台的【原创】特性,有意转载者请联系作者
打印 被阅读次数

NEC Singapore 是日本NEC Co.的子公司,它提供从硬件,系统软件,到应用软件开发等IT服务。因为它是NEC Co. 的子公司,它所提供的IT服务都是基于其总公司的产品线。和大多数日本公司一样,总公司提供给子公司的产品一般都是落后于其主要产品线一代或者更多。虽然当时NEC Co. 已经有基于UNIX 操作系统的产品系列,但是在新加坡的子公司所能有的还是其早期的非开放式的小型机系统,叫Astra. 这样的情况直到95初才开始有了变化,那时我才有机会接触到NEC UX, NEC 的UNIX 系统和Oracle 数据库。我会在本章的后半部分详谈,现在让我回到九二年我刚在NEC Singapore 工作的时候。

Astra 的主要开发平台是COBOL。 稍微了解这一行的人大都知道,或者听说过COBOL程序设计语言。我第一次接触到COBOL 是在大学二年级时选修课时选了COBOL, 不过我考试时不及格,原因是这个语言里有大量英语单词做为关键字,而我不会它们的拚写。那是我四年中唯一不及格的课程。工作以后我唯一需要用的语言却恰恰是COBOL. 我们工作后的几个项目都是用COBOL。由于我比较懒惰,不愿意做烦锁的事,凡事都想法找捷径。不满足于重复别人做的做法。为此我读了很多随机资料,长时间里待在机房里做试验写程序。几年后我成了COBOL高手, 许多别人不会的功能我都会。
象现在的C#或Java, 一两年就有一个新版本。比如微软的.Net 技术2002年发布了.Net 1.0 和 Visual studio 2002, 2003年发布了.Net 1.1 和visual studio 2003;2005年发布了.Net 2.0 和Visual studio 2005, 2008年发布了.Net 3.5 和Visual studio 2008, 中间还有一个.Net 3.0; 2010年发布了.Net4.0 和Visual Studio 2010; 2012年发布了.Net 4.5 和Visual studio 2012; 2013年又为Window 8.1 发布了Visual studio 2013.
只是那时更新发展的没有现在这样频繁。就COBOL 而言,从七九年我第一次接触COBOL 到一九九九年我最后一次用COBOL,二十年中只有三个版本:COBOL 74, COBOL 85 和 COBOL 95.
当时(九一年到九五年)NEC小型机上配备的COBOL 只有COBOL 74 和COBOL 85,更令我吃惊的是没有人用COBOL 85, 只会用COBOL 74而且只会用一些简单功能和简单语法。有一个人号称会COBOL 85可是他写的程序用COBOL 74 也能编译。这并不是因为缺乏资料。随机资料中有COBOL 74 和COBOL 85的全部资料。也不是象在中国程序员的英文水平不高,看不懂英文资料。真正的原因是工程师的基本知识不够和没有创新的敬业精神,有许多人都不是大学毕业的。相对之下,我这个南大计算机系的学生有八年编程经验的COBOL 高手就有一点鹤立鸡群了。
我的第一步就是启用COBOL 85 并真正地使用COBOL 85 新增的功能和新的语法结构,用RD SECTION 设计报表。这样我写的程序较别人写的程序有如下特点:
短,快(写得快,运行也快),易读易改,少出错。我非常幸运的是当时的组长没有基于保护自身利益的原因而压制我这个连英语都说不清楚的外国临时工的创新。他全力支持我的创新工作,并要求我给其他职员提供COBOL 85 的培训,他让我把我写的程序提供给其他同事作为样本,并不时地为其他人提供辅导。这样一来经过半年多一年的时间,我所在的组的编程水平大大提高,我在组里的地位也确立下来了。小组的几个项目都做的很顺利。大家都很高兴。后来我被雇佣为资深工程师的时候,我想那还是有一定的群众基础的。
九三年三月,另外一个小组的一个项目出了些状况,老板让我去帮忙看看,我与小组长了解了一些情况,她说系统其它部分都是好的,就是有一个程序是另外一个中国工程师写的,他没有能按时完成。她让我看看他的程序。我对那同事有一定的了解,应该不会出这样的问题,出于维护同胞的心态,和仗着我COBOL 高手的名声,我与她说:这样吧,我就不看他的程序了,就当他还没有写。妳告诉我这个程序的逻辑,我两天两夜不睡觉把程序写出来。那时我写COBOL 程序的速度是一天一千行,写完后半天一天时间调试,一个程序就写好了。所以两天两夜写好一个程序不是不可行的。
大家都说这是一个可行的方案。我提这个方案的原因是我不想陷入和中国同事争论他写的程序的细节,变成两个中国工程师之间的争论。就这样,我们俩个关在一个小房间里谈了几个小时,直到深夜十一点钟,我得出结论:不是程序员的错,根据系统的数据结构,她所想做的事是无法实现的。这是一个整体设计错误。我又与那位中国工程师谈了。他说我发现的问题他也与那组长提过 ,只是小组长回答说:这不关你的事,我叫你做什么你就做什么。我闻此言后无语了。
就这样我向老板和我的组长汇报了情况。大家都觉得事关重大,必须一级一级地上报。就这样一直报到最上层,上层经过讨论做了如下决定:
1)NEC决不接受失败,我们将向客户通告并要求宽限三月,三个月中我们将用一切可用的资源把这个项目做成。
2)原来的项目组被重组,两个组长和两个资深工程师为骨干成员。原来的项目厂组长被就地降职,与其他的原项目小组成员一道协助工作。两个组长主要是负责客户协调和系统功能定义,我主要是负责系统整体设计和其中一个主要模块的具体设计工作(就是上一次出问题的核心模块)。另外一个资深工程师负责与财务系统的接口。
就这样我们开始了非常辛苦的项目拯救计划。每天的正常工作时间是早晨九点到晚上十点,大概有三分之一的时间工作超过午夜,到了项目的关键时刻,我们一直工作到凌晨三四点,有两三次我们四人通宵工作直到第二天早晨,回家洗澡休息几个小时后再来公司继续工作。每天晚上到了七点左右我们的部门经理就来带我们四人出去吃晚饭或买好饭莱带来给我们吃,然后一直与我们一起工作,了解情况,讨论一些重要事宜并做出相应的决定,然后他就是用他的电脑写项目情况汇报,我们就继续我们的工作直到深夜。
现在回想起来我们几十个人工作故然辛苦,那个原来的项目组长的日子也不比我们好过。她的老板(也是我的老板)对她的能力如何不了解,给了她力所不及的工作,难道他就没有责任了吗?想起来我当时应该多为她考虑一些。对比我在HP的情况,有一定相似之处。相同之处在于项目进展不好,很多错,越改越多,最后三个客户相继退出。从管理层到工程师都不合格。在一个领导的要求下我曾经做过一个全面的评估并对发现的问题提出了补救方案。可是我所得到的发应是与当时我在NEC告诉老板系统有严重设计错误完全相反。
第一反应是,你说的不一定对,我们不一定要做这么多事情,也许我就这样做下去,可能也能做成,客户也不见得能发现。以后不要找他了。第二反应就是限制我的工作范围和工作权限。第三就是尽量压低我的地位,除非遇到了无法解决的技术难题,一般问题不找我,就算找到我,我提供了解决方案,他们也经常在不与我讨论的情况下改动或不与使用。 
我想了许久才搞懂为什么是这样的。
从管理层来看,如果让他的老板知道了我所发现的问题,并且知道了需要花多少时间来补救,他一定会因为失职而被问责,可能还会影响到他的老板的老板。所以他尽量大事化小,蒙混过关,就算以后证明我说的对,现在也要尽量拖,拖一时算一时。从中层技术人员来说,接受了我的说就是承认他们的技术错误。那决对不是好事。一定要让管理层相信我 说的不一定对,反正管理层也不懂技术。从普通程序员来说,本来我的技术就这样,以前从没有人看我写的程序,写的好与不会没有人知道,也没有人有兴趣知道,只要能过了今天就好。现在这个架构师天天看我写的程序,指出这样那样的问题,这样一来我的技术水平就曝光了,另外为了按照架构师提出的方法来改又增加了许多工作量,在改动中要是出了错还要被批评。总之,我这个架构师是一个不受到欢迎的人,但是也是一个难得的有用之人。如果客户提出问题,架构师总有应对方案;不论客户发现什么问题,他们总可以说我们的应用架构师已经指出了这个问题并给出了解决方案,我们正在逐步解决这个问题。从另外一个考量,如果我所写的文章和发现的问题被客户看到,毫无疑问地,客户会立即终止合同。
最近我想清楚了以后,我开始以提供新技术的名义写与项目无关的文章,这样既显示了我的价值又不触动项目的问题,就算是写系统里的技术问题我也只写那些无法改变的问题。我这样做的原因是我认为项目一定会失败或者被客户拒绝,等到那时我再出手。象前面三年里我为了拯救项目得罪项目里的各层人员,但是如果因为我的努力项目成功了,别人得好处的情况对我实在没有什么意义。这就像是一个病人拒绝承认有病,你想方设法地让他吃苦药。你让他吃药时他恨你;最后你把他治好了他说本来就没有病。所以一是要让他承认有病,二是要在他发烧了来找你的时候才出手。
言归正传,话说三个月后,经过重新设计的系统基本开发完毕,为了赶时间系统在没有经过严格测试就投入使用。在试运行期间发现许多编程问题,不过只是编程问题,没有设计问题。我们几个人白天陪伴用户一同使用系统,一旦发现问题就详细记录下来。晚上用户下班了,我们一一地分析每一个问题,找到根源后一组人改程序,一组人校正数据。每一组由一人操盘,其他人监督,从而确保修改动作是正确无误特别是不能丢失数据。一般都是我和另一位资深工程师操盘。其工作压力之大是难以想像的,因为我们是用生产运行来找错改错的,稍有不慎将会对客户造成不可挽回的损失。算是我们运气,也是我们几人经验老道,几个星期下来,系统基本稳定,客户基本满意,NEC的声誉终于保持下来了。项目搞定后公司做了一系列的人事变动:我们以前的老板被降级后转到别的部门(用人不当)我们四人中的一个组长升级为部门经理(领导拯救工作有功)我被升级为组长(冲锋陷阵,主持设计有功,展示技术水平高超)原来的项目组长被辞职(承担责任或者难以面对整个事件。这件亊进一步展现了我的技术实力,也为我在NEC的进一步展奠定了一定的基础。其代价是数不尽的超时工作和不太少有的通宵达旦的工作。记得有一次我在公司工作直到早晨,七点钟左右,我女儿打电话给我哭着说:爸爸,你在哪里?家里没有人,妈妈也不在家。我怕,你什么时候回来?”我接电话后立即放下工作往家赶。亊后我的小组长发出一些议论。我回答道:我七岁的女儿整夜一人在家,早晨醒来发现一人都没有,哭着打电话给我。作为父亲我一定要放下一切去照顾她。等以后我的孩子子有人照顾了,我会让你知道我是怎样疯狂地工作的。
我在NEC做的最后一个项目是我最为骄傲的一个项目。那是NEC在开放平台上的第一个项目。在我被选中负责整体设计后其他几个资深工程师颇有微词。那个刚刚升任经理的前组长在工作会议上直言:”我知道有一些人对我的选择有异意,但是如果让我投注的话,我会投在我认为最有把握蠃的马的名下。如果有人认为自己是更好的选择,请私下与我交谈。”从此之后,就没有人议论了。
 
这个项目是NEC Singapore 的第一个在开放平台上的项目,数据库是运行在NEC Unix 上的Oracle 7.0, 前端开发工具是在windows 上的Oracle Form 和Oracle Report.
系统是用于新加坡最大的炼油厂的生产监控系统(The Petroleum Co.简称TPC).
在一个日常工作日有两万多个釆集数据,如温度,流速,髙度等。在这两万多个原始数据中有一半左右需要人工去读表记录,然后人工输入 。一共大概有两百多个输入程序。根据这两万多个原始数据,系统需要计算另外两千多个计算数据点,如:流速乘时间(24小时)得到日流量,油位乘截面积得到体积,体级乘比重再乘温度和温度系数得到重量等。还有一些计算是月汇总,年汇总等。所以有两千多个计算程序。然后就是数不尽的报表。与大多数软件开发项目一样,销售人员把价格压的很低,只要客户签约就好,能否按时,按预算完成他们根本不管。根据传统设计,两百多个输入程序(五个人天一个),两千多个计算程序(两个人天一个),就算是两千个报表程序(两个人天一个)。就算不做测试,程序没有一个错,设计时间不计也要有八千个人天。可是设计和开发我们只有四千人天的预算。无论如何也不可能做完。
 
有好几次老板问我能不能按时完成,可见那也是他的最大耽忧。这个情况下我没有发表言论只是埋头研究需求和学习这些数据之间的关系和这些计算公式。我的回答是我还不知道,再给我一些时间,再给我一些时间。一个月后我觉得我有办法在短于预算的时间内完成项目。并用C++写了两个试验程序并与Oracle 做了联接试验。我的设计是这样的:
 
 
1。用一个table为每一个数据点(tag)给出明确的定义,如果是记算Tag, 定义其计算公式。
2。用两个table 定义每一个数据输入模块。
3。在oracle 里用view 转换数据结构从(tagid,date,value) to (date, tag value1, tag value 2,,,,)
4. 在oracle 里用一个trigger 去激活一个计算程序当一个tag 值被加到数据库里。
5.这个计算程序就是根据计算公式为计算数据点计算数值并存入数据库
 
根据这个设计
两百个数据输入程序变成了一个(四十个人天)
两千个数据计算程序变成了一个(一百个人天)那是一个C++的程序是我亲自写的。
用于编写报表的时间也大大减少了(一天一个,两千人天)
再加上一个数据点设置程序(十个人天)
和其它数据设置工作(一百个人天)
总共设计和开发工作是三千人天以下。
 
而且我的的设计的可扩展性非常好。要加一个数据点,要加一个计算数据点,要加一个输入程序只是数据输入而己。就这样我把一个不可能的的项目变成了一个盈利的项目。
 
可是客户就是不在我的设计上签字。我与客户的CIO有过一个私人会面。他对我说:我看了你的设计,我非常喜欢。如果你有兴趣的话,我希望你能到我这里来工作。我之所以不在你的设计上签字是因为我希望我的部下能真正懂得你的设计。我谢谢他的好意并答应好好训练好他的手下。这样一来一往两个星期后他就签字了。
 
但是他的手下有几个笨蛋,为了解释清楚费了我很大的劲。大半年后系统根据我的设计做成了,演示成功。大家对我的技术水平又有了新的认识。那是我在NEC 的第四年。由于人事的变动和我对开放式平台的向往和我的技术水平,我觉得我应该离开了。九五年十月,我辞职去了淡马锡理工学院在电脑部职位是资深软件专家。我离开NEC 主要有两个原因。一是对管理层有些失望,二是我一心想到微软的技术平台。在淡马锡我实现了向微软的转移,并从此走上了微软的技术道路。后来的事实也证明了我的判断是正确的。当时其他的软件现在都己被不同的工具取代了,唯有微软的平台一步步向前越来越好。请看狮城岁月之八,也是狮城岁月的最后一集,淡马锡理工学院。
 
 
 
.
 
 
登录后才可评论.