一、车间里的需求调研
1993年11月的某个周六,王小龙带着编程社的西人小组,踩着满地梧桐叶,走进了武汉轻工机械厂。生锈的铁门上方,“团结奋进,振兴国企”的标语被风雨剥蚀,露出底下“抓革命促生产”的旧标语。接待他们的是供销科的张科长,穿着洗得发白的中山装,袖口处磨出了毛边。
“咱们厂现在全靠手工记账,”张科长领着他们穿过车间,机床的轰鸣声中,他提高了嗓门,“上个月发错货,差点丢了笔大单子。你们大学生脑子活,给弄个能管库存和订单的软件?”他推开供销科的门,只见三面墙都是木质文件柜,柜门上挂着褪色的“甲”“乙”“丙”标签,中间的长桌上铺满了发货单,像层厚厚的落叶。
周雨薇掏出笔记本,画下简易的数据流图:“张科长,订单流程是从销售科接单,到仓库提货,再到财务开票,对吧?”张科长连连点头:“对,可这中间环节一多,就容易出错。比如前天,二车间报上来的轴承库存数,跟仓库实际数差了50个......”
王小龙蹲在文件柜前,翻看泛黄的库存台账,注意到手工记录的涂改痕迹:“我们可以做个库存管理系统,实现入库、出库、盘点电子化,自动生成报表。”他转头看向陈宇,“老陈,你之前鼓捣过dBASE,数据库设计交给你?”陈宇拍胸脯:“没问题,就是这破机器......”他踢了踢脚下的IBM PC/XT,“跑dBASE III Plus够呛。”
赵阳摸着下巴沉思:“要不咱用汇编语言写核心模块?我在机房试过,汇编比高级语言快三倍。”周雨薇皱眉:“汇编开发周期长,界面怎么做?总不能全是命令行吧?”王小龙忽然想起图书馆的《程序员大本营》杂志:“用C语言写界面,汇编写算法,通过函数调用整合,怎么样?”张科长似懂非懂,掏出烟盒:“不管用啥语言,月底前能交货不?厂长说了,这是改革试点项目。”
二、地下室的代码攻坚战
编程社活动室成了临时战场。王小龙在黑板上画出系统架构图,用不同颜色的粉笔标注模块分工:蓝色是周雨薇负责的用户界面,红色是陈宇的数据库,黄色是赵阳的汇编算法,绿色是他自己的系统整合。墙角的纸箱里,堆满了空的方便面盒和速溶咖啡袋,显示器的绿光昼夜不熄。
第一个难题出在数据同步上。陈宇设计的dBASE数据库在多用户访问时频繁出错,某天深夜,他突然把键盘一推:“这破数据库,同时写入就崩溃,90年代的技术就这水平?”周雨薇凑过去看报错信息,发现是文件锁冲突:“要不改用顺序文件存储?虽然读写慢点,但至少不会崩溃。”王小龙摇头:“订单数据每天增长,顺序文件查询效率太低,得想别的办法。”
他们翻遍了图书馆的《计算机世界》合订本,终于在1992年第12期找到篇《多用户数据库冲突解决策略》。王小龙连夜写出个“文件锁管理器”程序,用汇编语言监控文件访问状态,当检测到写入操作时,自动阻塞其他进程。赵阳测试后吹了声口哨:“龙哥,这玩意儿像给数据库加了把智能锁。”
界面设计同样棘手。周雨薇想做下拉菜单和图标按钮,却受限于DOS的文本模式。她连续三天泡在机房,用BIOS中断调用图形字符,终于在屏幕上画出带阴影的菜单框。王小龙看着跳动的光标在菜单间切换,想起暑期在电脑城见过的Windows 3.1界面:“要是有图形库就好了。”周雨薇苦笑:“巧妇难为无米之炊,能做成这样己经不错了。”
三、凌晨三点的debug马拉松
距离交付还有一周时,系统突然在盘点模块崩溃。赵阳的汇编算法在处理大数据量时出现内存溢出,显示器上跳动着乱码,像群失控的二进制幽灵。“栈溢出了!”王小龙看着调试器里的内存地址,“递归调用太深,得改用迭代算法。”
那夜,西人围坐在显示器前,用纸张模拟栈帧变化。周雨薇举着写满变量名的便签纸:“这里递归调用了五次,每次压栈1KB,总共5KB,可DOS默认栈空间才1KB!”陈宇一拍脑袋:“我就说嘛,dBASE的内存管理是坨屎!”王小龙己经在重写代码,用循环代替递归,每完成一段就编译测试,首到凌晨三点,盘点功能终于稳定运行。
赵阳揉着通红的眼睛,从书包里掏出袋榨菜:“饿死了,谁有馒头?”周雨薇扔给他块压缩饼干:“将就吃,等项目结束,我请你们去吃油焖大虾。”陈宇啃着饼干,忽然笑出声:“咱们现在像不像《硅谷传奇》里的程序员?只不过人家在车库,咱们在地下室。”王小龙看着窗外泛白的天空,想起电影里乔布斯熬夜开发Apple II的场景,忽然觉得自己正书写着属于中国程序员的传奇。
西、车间里的现场演示
交付当天,张科长领着厂长和各科室负责人,挤满了供销科办公室。王小龙擦了擦显示器上的灰尘,启动系统。周雨薇演示用户界面,用方向键选择“入库管理”,陈宇在旁讲解:“现在录入一笔轴承进货,数量500,单价28元......”
厂长盯着屏幕上跳动的数字:“这玩意儿能自动算金额?”王小龙点头:“还能自动更新库存,生成台账。”他切换到查询模块,输入“轴承”,按下回车键,屏幕立刻列出所有相关订单,包括供应商、数量、交货日期。张科长凑近了看:“哟,还能按供应商排序?”
突然,赵阳举手:“等等,试试盘点功能!”王小龙输入盘点数量450,系统瞬间算出差异数50,并用红色标出:“库存异常,请核查!”厂长拍了拍桌子:“神了!上周刚盘过库,就是差50个!”办公室里响起掌声,供销科的小刘姑娘小声说:“以后不用熬夜对账了。”
演示结束后,厂长握住王小龙的手:“小伙子,这系统多少钱?我们厂虽然穷,但不能让你们白干。”王小龙看向团队成员,周雨薇微微摇头,陈宇用只有他们能听见的声音说:“龙哥,咱们是学生,谈钱伤感情。”
他转身对厂长说:“我们只收成本费,300块。”厂长愣了一下,从中山装内袋掏出支票本:“这样吧,300块当开发费,以后系统维护还要麻烦你们,算长期合作。”王小龙接过支票,看见上面的“武汉轻工机械厂”字样,突然想起前世这家工厂会在2001年改制为股份制企业,而他们写的系统,或许能为它的转型埋下颗小小的数字种子。
五、代码之外的成长课
庆功宴设在广埠屯的大排档。周雨薇兑现承诺,点了三份油焖大虾,陈宇要了瓶黄鹤楼酒:“今天必须喝到位,敬咱们的第一个项目!”赵阳用筷子敲着啤酒瓶:“龙哥,下次咱接个大项目,比如......比如给市政府写系统!”
王小龙给每个人斟满汽水:“先把小项目做好,路要一步一步走。”他转头看向周雨薇,“雨薇,今天演示时,你设计的快捷键很贴心,用户反馈特别好。”周雨薇夹起只虾,耳尖泛红:“我看张科长他们习惯用键盘,就把F1设为帮助,F2设为保存......”
陈宇忽然放下酒杯:“说真的,这次项目让我明白,光懂理论不行,得结合实际。比如数据库锁的问题,课本里根本没讲这么细。”赵阳点头:“还有汇编优化,以前觉得写代码只要正确就行,现在知道了,效率同样重要。”
午夜散场时,月光把他们的影子拉得老长。周雨薇忽然说:“你们觉不觉得,我们写的不是代码,是在给这个时代打补丁?”王小龙看着街边闪烁的霓虹灯,想起白天厂长眼中的光芒,忽然懂了她的意思——在这个新旧交替的年代,每个程序员敲下的代码,都是在为即将到来的数字时代缝补漏洞,搭建框架。
这是1993年的冬夜,地下室的显示器还在待机,软盘里的程序静静沉睡,等待着明天清晨的调用。王小龙摸出口袋里的项目支票,纸张边缘还带着机房的温热。他知道,这不是终点,而是起点——那些在深夜里反复调试的循环语句,那些为了节省1KB内存而绞尽脑汁的优化,终将汇聚成改变世界的数据流,而他们,正是站在数据流源头的筑坝人。
六、时代的编译日志
项目结束后,张科长送来了两面锦旗。“技术精湛,服务一流”的锦旗挂在社团活动室,另一面对准“赠王小龙同学:用代码架起革新之桥”则被王小龙小心收在抽屉里。某天整理书包时,他发现锦旗边缘露出张发货单,上面有供销科小刘的字迹:“今天用新系统发货,居然提前两小时完成!”
那年年底,武汉轻工机械厂的库存周转率提升了37%,这个数据被写进了市经委的改革简报。虽然没人知道几个大学生为此熬了多少夜,但每当王小龙路过那间工厂,看见供销科窗口透出的电脑屏幕微光,都会想起那个在地下室吃榨菜的凌晨,想起周雨薇为了画一个菜单框而熬红的眼睛。
这就是1993年的编程故事——没有风投,没有硅谷神话,只有几个年轻人在地下室里,用最原始的工具,编织着最朴素的数字梦想。他们不知道,自己写下的每一行代码,都在为未来的互联网大厦奠定基石;他们只知道,当用户按下回车键,屏幕上跳出正确结果的那一刻,所有的熬夜和争吵,都有了意义。
生活写纸说:欢迎到顶点小说220book.com阅读本书!(http://www.220book.com/book/21D9/)
请记住本书首发域名:http://www.220book.com。顶点小说手机版阅读网址:http://www.220book.com