1998,蝴蝶落到表单上
原创 · 约 21 分钟阅读 · 阅读 --

1998,蝴蝶落到表单上

作者: 字与码


古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关开发。更完整的更新写在微信公众号「字与码」:工作经历、对新技术的想法,以及这些年折腾工具、模型和工程系统的记录,会不定期发在那里。

1997 年那只在浏览器里飞来飞去的蝴蝶,到了 1998 年,突然落到了表单上。

这句话听起来有点扫兴。

蝴蝶多轻。页面会动,坐标会变,浏览器像刚学会走路的小孩,笨拙但兴奋。表单则很重。姓名、部门、编号、日期、金额、状态、审核人、备注、打印、查询、统计。它们一点也不浪漫,甚至有点枯燥。

可真正让软件进入多数公司日常的,往往不是蝴蝶,而是表单。

1998 年,我开始做 MIS 开发。MIS 是 Management Information System,管理信息系统。今天这个词已经有点旧了,甚至显得土。但在那个年代,它代表的是一家公司、一所学校、一个机关、一个业务部门,开始认真把纸面流程搬进电脑。

那是软件落地的另一面。

浏览器告诉我们,世界正在变大;MIS 告诉我们,世界变大以后,办公室里的每一张表也要跟着变。

企业信息化,最早不是酷技术

很多技术史喜欢写大事件:浏览器大战、搜索引擎、开源运动、操作系统、芯片、AI。那些当然重要。但对大量程序员来说,真正开始工作后首先遇到的,常常不是改变世界的平台,而是一个又一个业务系统。

它们可能叫人事管理系统、库存管理系统、财务管理系统、客户资料管理系统、设备管理系统、教学管理系统。名字听起来都不性感,但每个系统背后都有一套真实的组织流程。

谁能录入?

谁能修改?

谁能审核?

数据错了怎么办?

报表按什么口径统计?

打印格式为什么和原来的纸质单据不一样?

这些问题,放在今天仍然是企业软件的核心问题。只不过今天我们把它们包装成 SaaS、BPM、ERP、CRM、低代码、数字化转型。1998 年的时候,它们更多时候就叫 MIS。

做 MIS 的第一课,是承认用户不关心你的技术有多漂亮。

用户关心的是:这张单子能不能录进去,明天领导要的报表能不能打出来,上个月的数据能不能查到,权限有没有弄错,系统坏了会不会影响他们下班。

这和 1997 年那只蝴蝶完全不同。

蝴蝶飞得不够顺,最多不好看。企业系统错一条数据,可能就有人真着急。

Delphi 为什么让人怀念

写到 1998 年,就绕不开 Delphi。

Delphi 不是 1998 年才出现的,Delphi 1 早在 1995 年就已经发布。到 1998 年前后,Delphi 3、Delphi 4 这些版本已经成为很多 Windows 桌面数据库应用开发者非常熟悉的工具。

我后来很长一段时间都觉得,那个年代最好用的 IDE 是 Delphi。

这不是情怀滤镜。

Delphi 的好用,是具体的。打开 IDE,拖一个按钮,拖一个输入框,双击事件,写几行 Object Pascal,连上数据库,放一个数据表格控件,一个能跑的窗口应用很快就出来了。对做 MIS 的程序员来说,这种效率非常直接。

更重要的是,它让程序员的思维方式变了。

在更底层的年代,你首先想的是文件、内存、函数、编译、链接。到了 Delphi 这种工具里,你开始想窗口、控件、事件、数据源、数据集、表单、报表。程序不再只是代码执行流程,它开始长得像用户正在使用的东西。

1998 年企业 MIS:从纸质表单到数据库记录

企业信息化最朴素的一步:把纸质表单、审批流程和报表变成数据库里的记录。图为按年代氛围生成的示意图。

Borland 这家公司也值得记一笔。

很多年轻程序员可能只听过 Microsoft、Oracle、Sun、Netscape,却不一定对 Borland 有感觉。但对 1990 年代和 2000 年代初的一批开发者来说,Borland 是非常有存在感的名字。Turbo Pascal、Borland C++、Delphi、C++Builder,这些工具陪过很多人入门,也陪很多人做过真实项目。

Borland 的工具有一种工程师友好感。

它不像某些企业级工具那样笨重,也不像后来很多 Web 工具那样需要一堆脚手架和配置。它给你的感觉是:我知道你要做程序,我尽量让这件事直接一点。

Delphi 尤其如此。

它并不完美,也有自己的生态、版本、组件和部署问题。但在那个 Windows 桌面应用和数据库应用大量增长的年代,它确实给了程序员一种很强的生产力。

表单背后是组织

刚开始做 MIS,很容易把问题看简单。

不就是增删改查吗?

建几张表,写几个窗口,做几个查询,打印几张报表。代码复杂度好像也不高。和汇编、图形学、网络协议比起来,这些东西似乎都很“业务”。

后来才知道,业务系统的难不在算法,而在现实。

现实里的数据不干净。一个部门叫法可能有好几种,一个人会调岗,一个编号会沿用旧规则,一个字段本来设计成必填,结果历史数据里大量为空。现实里的流程也不稳定。今天是三级审批,明天变两级;这个领导出差,审批要代理;月底要临时加一张表;年底统计口径又变了。

技术系统最怕的不是复杂,而是含混。

MIS 系统恰恰要处理大量含混的东西。纸面流程里,很多规则靠人脑补,靠一句话解释,靠老员工经验。变成软件以后,你必须把它写成字段、状态、权限、校验和流程。

这会逼着组织照镜子。

原来谁都能改的数据,现在要不要限制?

原来口头说一下就行的审批,现在要不要留痕?

原来每个部门各算各的指标,现在统计口径到底听谁的?

这些问题最后都会落到程序员面前。你以为自己在写表单,其实你在帮一个组织整理自己的规则。

这也是企业软件最有意思、也最折磨人的地方。

它表面上是技术项目,内里是组织项目。

数据库让软件开始有记忆

1998 年做 MIS,数据库是核心。

没有数据库,表单只是临时输入。数据存下来,系统才有记忆。能查询、能统计、能追溯、能对账、能打印历史报表,软件才真正参与管理。

那时很多项目使用关系数据库。表结构设计、主键、外键、索引、事务、查询语句,这些东西会慢慢进入日常。你会开始理解,字段不是随便加的,类型不是随便选的,索引不是越多越好,报表慢不一定是界面问题,可能是查询写得差,也可能是表结构一开始就没想清楚。

从这时候开始,程序员很容易形成一种本能:先看数据。

界面可以重做,流程可以调整,代码可以重构,但数据一旦错了,就麻烦得多。企业系统最宝贵的不是窗口,也不是按钮,而是多年积累下来的业务数据。

这句话后来在不同系统里不断被验证。

做银行系统时如此,做互联网平台时如此,做大数据平台时如此,今天做 AI 应用时仍然如此。模型、界面、算法都会变,数据质量始终决定系统能走多远。

1998 年的 MIS 系统,用今天眼光看很朴素,但它让我很早就明白:软件真正变重要,是从它开始承载数据开始的。

Windows 98 和办公室电脑

1998 年,Windows 98 发布。

这对个人电脑和办公室电脑来说,是一个非常有年代感的节点。那时的办公桌上,越来越多地出现米黄色主机、CRT 显示器、键盘、鼠标、打印机。电脑不再只是少数技术人员的设备,也开始进入普通部门。

操作系统、Office、数据库客户端、MIS 系统、打印机驱动、网络邻居,这些东西一起构成了当时办公室的信息化体验。

这种体验一点也不丝滑。

驱动会冲突,打印机会卡纸,系统会蓝屏,网络共享会找不到,数据库连接会失败,用户会把窗口关掉以后说系统没了。今天我们习惯了云服务和浏览器,很多客户端问题都被藏到了服务端和网页里。可在当年,桌面环境本身就是软件交付的一部分。

这也是 Delphi 这类工具的重要性所在。

它生成的是用户眼前能打开的 Windows 程序。这个程序有菜单、有工具栏、有表格、有按钮、有打印预览。对那个年代的用户来说,这就是“软件”的样子。

Web 当然在成长,但大量企业内部系统仍然是桌面应用。

蝴蝶在浏览器里飞,表单在 Windows 桌面上落地。

1998 年的另一条线:互联网入口正在成形

有意思的是,1998 年不只有 MIS、Windows 98 和办公室电脑。

那一年,Google 成立。

如果站在今天回看,这当然是超级大事件。但站在当年,一个搜索引擎创业公司和我们正在做的企业系统,好像离得很远。一个面向全球网页,一个面向单位内部流程;一个处理链接和排名,一个处理字段和报表;一个后来改变互联网入口,一个当时只是在办公室里让人少填几张纸。

但它们其实都在处理同一件事:信息如何被组织。

MIS 把组织内部的信息结构化,Google 把公开网页的信息排序。前者关心权限、流程、报表,后者关心链接、相关性、入口。一个向内,一个向外。它们共同说明,1998 年的软件世界已经不只是“让机器执行命令”,而是开始围绕信息本身建立秩序。

同一年,XML 1.0 成为 W3C 推荐标准,开源运动也以更明确的方式出现。信息交换、标准、协作、开放,这些词都在那一年变得更有重量。

当时未必看得清。

你坐在办公室里改一个表单字段,可能不会想到搜索引擎会改变世界,也不会想到开源会重塑整个软件产业。你只知道这个字段今天必须上线,明天用户要用。

技术史的大事,总是和日常工作并行发生。

很多时候,我们不是站在时代浪潮上,而是在浪潮旁边修一个按钮。

从小程序到业务系统

1996 年,我还在回望 386、PDP-11 和汇编。1997 年,我写过那只会飞的 JavaScript 蝴蝶。到了 1998 年,事情突然变得具体:字段、表、报表、权限、打印、用户。

这三年连起来看,很像程序员成长的三个台阶。

第一步,你理解机器。

第二步,你理解界面。

第三步,你开始理解业务。

理解机器,让你知道程序不是魔法。理解界面,让你知道用户看到的东西很重要。理解业务,则让你知道软件最终要进入现实世界,和人的流程、组织的规则、历史数据、责任边界纠缠在一起。

MIS 给我的训练,就是第三步。

它不酷,但扎实。它不像浏览器动画那样让人兴奋,也不像底层开发那样有技术纯度。它更像一门手艺:把现实里的混乱,尽量整理成用户能用、数据能存、流程能跑、出了问题能查的系统。

后来我做过很多平台级、互联网级、数据级的系统,但这种训练一直有用。

因为再大的系统,最后也会落到某些很朴素的问题上:数据从哪里来,谁能改,错了怎么查,用户为什么这么用,报表为什么不一致,系统坏了谁负责。

这些问题,1998 年的 MIS 已经问过一遍。

下一年,表单连上了银行前置机

1998 年的企业系统,多数时候还在办公室内部转。到了 1999 年,我会进入另一个更硬的场景:给银行开发,使用 SCO UNIX 做前置机,真正在生产中使用 socket 编程。

那就不是表单和报表的问题了。

那是连接、协议、稳定性、生产环境和金融系统。

如果说 1998 年让我看到软件如何整理组织内部的信息,那么 1999 年会让我看到软件如何在真实交易和生产链路里承担责任。

下一篇,就写银行前置机和真正的 socket。

1998 年 IT 大事记

  • Google 成立。 1998 年 9 月,Google 公司成立。它最初只是搜索引擎创业公司,后来成为互联网最重要的入口之一。它改变的不只是搜索,也包括广告、数据中心、分布式系统、浏览器、移动操作系统和后来的 AI 基础设施。
  • Windows 98 发布。 Microsoft 在 1998 年发布 Windows 98。它延续 Windows 95 的桌面体验,并进一步把 Internet Explorer 等互联网能力整合进个人电脑使用场景。对很多办公室用户来说,Windows 98 是那个年代电脑普及记忆的一部分。
  • XML 1.0 成为 W3C 推荐标准。 XML 在 1998 年 2 月成为 W3C Recommendation。它一度被寄予厚望,成为数据交换、配置文件、文档格式和企业系统集成的重要基础。后来 JSON 更轻量地占据了很多 Web 场景,但 XML 在企业软件和标准化接口中的影响非常深。
  • Open Source Initiative 成立。 1998 年,Open Source Initiative 出现,“开源”这个说法开始以更商业友好的方式传播。它和自由软件运动有不同语气,却共同推动了后来 Linux、Apache、MySQL、Python、GitHub 以及整个云原生生态。
  • Netscape 宣布开放浏览器源码。 1998 年 Netscape 宣布开放 Communicator 源码,Mozilla 项目由此开始。虽然早期过程并不轻松,但这条线后来会走向 Firefox,也会成为浏览器开放生态的重要一环。
  • iMac G3 发布。 Apple 在 1998 年推出 iMac G3。它用半透明彩色外壳重新定义了个人电脑的消费级形象,也帮助 Apple 走出低谷。它不是企业 MIS 的主角,却是 1998 年个人电脑审美转向的标志。
  • PayPal 前身 Confinity 成立。 Confinity 在 1998 年成立,后来与 X.com 合并并发展为 PayPal。它代表了互联网支付和线上交易基础设施的早期探索,也预示着互联网不只是看网页和发邮件,还会进入真实资金流转。
  • VMware 成立。 VMware 在 1998 年成立。虚拟化后来会深刻改变服务器利用率、开发测试环境、数据中心管理,并为云计算铺路。对当时普通程序员来说,它还不是日常工具,但它开启的方向非常关键。

Apple iMac G3

Apple iMac G3。图片来源:Wikimedia Commons。

参考资料

微信公众号

欢迎关注「字与码」

如果这篇文章对你有用,也欢迎在微信里继续关注后续更新。

微信公众号字与码二维码