← 返回展厅
MUMPS

MUMPS

年份:1964
平台:MAINFRAME
开发者:Neil Pappalardo (麻省总医院)

医疗领域的隐形冠军,至今仍在医院核心运行

浏览:22
点赞:0

简要介绍

【创世纪厅】

1964年,MUMPS正式问世。由Neil Pappalardo (麻省总医院)主导开发,面向MAINFRAME平台用户。

医疗领域的隐形冠军,至今仍在医院核心运行

技术特色:编程语言、医疗软件、数据库。

影响力评估:技术维度 6/10,商业维度 7/10,文化维度 3/10,用户维度 5/10。

作为创世纪厅的经典代表,MUMPS在软件发展史上留下了深刻的印记。

详细介绍

1964年的夏天,当披头士乐队正以一曲《A Hard Day’s Night》席卷全球,当IBM System/360刚刚发布、宣告计算机兼容时代到来,在波士顿麻省总医院一间不起眼的实验室里,一位名叫尼尔·帕帕拉多(Neil Pappalardo)的年轻程序员正在编写一段注定将改变医疗信息历史的代码。他当时并不知道,自己创造的这个系统——MUMPS——会在未来六十年里,像一颗深埋在数字地层下的化石,悄无声息地支撑着全球最庞大、最关键的医疗数据网络。它没有硅谷明星产品的光鲜,没有苹果或者微软的传奇故事,但它的存在本身就是对科技史的一种反讽:那些最丑陋、最反直觉的设计,往往拥有最顽强的生命力。

要理解MUMPS的诞生,必须回到1960年代初的计算机世界。那时,计算机还是庞然大物,通常占据整间空调房,由穿着白大褂的操作员小心翼翼地维护。编程语言的主流是FORTRAN和COBOL,它们是为科学计算和商业数据处理设计的,强调结构化、类型安全和明确的文件操作。数据存储在磁带或磁盘上,程序员必须显式地打开文件、读取记录、关闭文件,每一步都像走钢丝。而在医疗领域,情况截然不同。医院的数据不是整齐的表格,而是混乱的、不断变化的:患者的姓名、地址、病史、化验结果、处方、账单……这些信息相互关联,随时可能被医生、护士、药剂师、财务人员同时访问和修改。传统的文件系统对此束手无策——你无法让多个用户同时修改同一个文件,也无法轻松地从一个患者的记录跳转到他的家族病史或用药历史。

麻省总医院(Massachusetts General Hospital, MGH)正是这种困境的典型受害者。作为哈佛大学医学院的教学医院,MGH每天要处理成千上万的患者数据。1963年,医院的管理层意识到,必须用计算机来管理这些信息,否则整个医疗流程将陷入混乱。他们找到了麻省理工学院林肯实验室的工程师,并组建了一个名为“麻省总医院实用多编程系统”(Massachusetts General Hospital Utility Multi-Programming System)的项目——这就是MUMPS的雏形。项目的核心人物就是当时年仅22岁的尼尔·帕帕拉多,他刚从达特茅斯学院毕业,带着一股初生牛犊不怕虎的锐气。帕帕拉多后来回忆说,他最初只是被要求写一个程序来管理患者挂号,但他很快发现,现有的工具根本不够用。于是,他决定自己创造一个。

帕帕拉多的设计思路在今天看来堪称“叛逆”。他抛弃了当时所有主流编程语言的约定,从零开始构建了一套全新的逻辑。MUMPS的第一个惊人之处是变量命名:它允许使用字符串作为变量名。这意味着你可以写出像“SET name(‘John Smith’) = 42”这样的代码,其中变量名本身就是一个包含空格和标点符号的字符串。对普通程序员来说,这简直是噩梦——变量名应该是简洁的、不可变的标识符,怎么能用患者的名字作为变量名呢?但帕帕拉多的目标用户不是程序员,而是医生和护士。在他们眼中,用“John Smith”来指代患者的数据,比用“PATIENT_ID_12345”要自然得多。这种设计理念后来被称为“以人为本的编程”,尽管在1960年代,它被主流计算机科学界视为异端。

更令人瞠目的是MUMPS的层次化数组(global)系统。在传统的编程语言中,数组是扁平的、固定大小的,你需要用数字索引来访问元素。但MUMPS的数组是树状的、动态的,可以用任意字符串作为键,并且可以无限嵌套。例如,你可以创建一个名为“^PATIENT(‘John Smith’, ‘BLOOD_PRESSURE’, ‘2024-01-01’)”的全局变量,直接存储患者某天的血压数据。这个结构不仅存在于内存中,还直接映射到磁盘上的持久化存储。这意味着,当你创建一个MUMPS全局变量时,它立即被写入磁盘,并且直到你显式删除它,它永远存在。没有打开文件、关闭文件、序列化、反序列化的繁琐操作——数据就是数据,从创建到消亡,始终在那里,随时可以被任何程序访问。这种“持久化变量”的概念,是MUMPS最核心的创新,也是它至今仍在医疗领域不可替代的根本原因。

MUMPS的语法同样离经叛道。它允许在一条语句中完成读写、计算和跳转。例如,你可以写“SET X = $ORDER(^PATIENT(‘John Smith’, ‘VISITS’, X))”这样的代码,它同时读取下一个访问记录、更新变量X,并返回结果。这种“一条龙”式的写法让代码变得极度紧凑,但也极度晦涩。一个典型的MUMPS程序往往只有几百行,但每行都像是一道谜题。帕帕拉多和他的同事们后来承认,这种设计是为了在内存极其有限的条件下(当时MUMPS运行在只有16KB内存的PDP-7计算机上)最大限度地提高效率。他们牺牲了可读性,换来了极致的性能和数据管理能力。

1966年,MUMPS的第一个实用版本在MGH上线,用于管理患者挂号、预约和账单。它立刻显示出了统系统无法比拟的优势:多个医生和护士可以同时访问同一个患者的记录,修改实时生效,无需担心数据冲突。医院的管理效率大幅提升,患者等待时间显著缩短。消息很快传开,其他医院开始对MUMPS产生兴趣。1967年,帕帕拉多和几位同事成立了MUMPS用户组,这是最早的软件用户社区之一。1972年,MUMPS被美国国家标准协会(ANSI)正式批准为标准语言,编号为ANSI X11.1-1972。这标志着它从一家医院的内部工具,正式升格为国际认可的编程语言。

然而,MUMPS的“黄金时代”也伴随着激烈的争议。主流计算机科学家对它嗤之以鼻。结构化编程的倡导者、图灵奖得主艾兹格·迪杰斯特拉(Edsger Dijkstra)曾公开批评MUMPS“是对编程艺术的侮辱”。它的语法混乱,缺乏类型检查,全局变量无处不在,几乎违反了所有软件工程的最佳实践。更糟糕的是,MUMPS的社区文化极度封闭——开发者们习惯用晦涩的行话交流,代码几乎不写注释,文档更是稀缺。这种“神秘主义”让MUMPS在学术圈和商业软件领域始终处于边缘地位。但恰恰是这种边缘化,让它躲过了后来几次技术浪潮的冲击。当关系型数据库在1970年代崛起时,MUMPS的层次化结构被视为过时的“玩具”;当面向对象编程在1980年代流行时,MUMPS的全局变量被嘲笑为“危险的垃圾”;当互联网在1990年代爆发时,MUMPS的网络支持几乎为零。但每一次,医疗行业都选择了坚守。原因很简单:MUMPS能工作,而且工作得非常好。它的数据模型天然适合医疗记录的树状结构,它的持久化机制保证了数据永远不会丢失,它的多用户并发控制比任何关系数据库都要简单高效。对于医院来说,稳定性和可靠性远比时髦更重要。

MUMPS最辉煌的成就,是催生了两个至今仍在统治医疗信息系统的巨人:VistA和Epic。VistA(退伍军人健康信息系统)是美国退伍军人事务部(VA)在1970年代基于MUMPS开发的电子病历系统。到2020年,VistA管理着超过900万退伍军人的健康记录,覆盖全美1700多个医疗设施。它被广泛认为是世界上最大的电子病历系统之一,也是MUMPS最成功的“纪念碑”。而Epic Systems公司,由朱迪·福克纳(Judy Faulkner)在1979年创立,最初就是基于MUMPS开发的。Epic后来虽然引入了Java和C#等现代技术,但其核心数据层仍然依赖MUMPS的全局变量结构。今天,Epic是美国最大的电病历供应商,市场占有率超过40%,服务超过2.5亿患者。梅奥诊所、克利夫兰诊所、约翰·霍普金斯医院等顶级医疗机构都在使用Epic系统。可以说,你走进任何一家美国大型医院,你的病历信息几乎必然流经MUMPS的代码。

MUMPS的“长寿”并非没有代价。随着系统规模的膨胀,维护MUMPS代码的难度呈指数级增长。许多MUMPS程序是几十年前写的,作者早已离职或去世,留下的只有一堆没有注释、没有文档的“面条代码”。更可怕的是,MUMPS的全局变量是全局命名的,这意味着不同模块可能意外地覆盖彼此的数据。一个微小的错误可能导致整个医院系统瘫痪。2000年代初,美国退伍军人事务部曾试图用现代化的COTS(商业现货)系统替换VistA,但耗资数十亿美元的项目最终失败,原因很简单:没有任何商业系统能完美复现MUMPS的数据模型和并发控制逻辑。医院的管理者们无奈地发现,他们被MUMPS“绑架”了——这个系统太独特、太根深蒂固,以至于无法被替代。

在技术史的长河中,MUMPS是一个异类。它没有赢得任何奖项,没有被写入教科书,甚至被大多数程序员遗忘。但它的影响力却无处不在。2008年,美国《连线》杂志发表了一篇题为《最丑陋的编程语言如何拯救了医疗》的文章,第一次向大众揭示了MUMPS的存在。文章中提到一个著名的轶事:一位MUMPS程序员被问及如何调试代码,他回答道:“你不需要调试,因为代码永远不会出错——它只是会做一些你没想到的事情。”这种黑色幽默恰恰反映了MUMPS社区的独特文化。在MUMPS的世界里,程序员不是工程师,而是“巫师”,他们掌握着一套外人无法理解的咒语,守护着医院数据的圣殿。

2018年,美国国家标准与技术研究院(NIST)发布了一份报告,指出MUMPS系统存在严重的安全漏洞,尤其是缺乏对SQL注入和跨站脚本攻击的防御机制。但报告也承认,更换这些系统需要“数十亿美元和十到二十年时间”。医疗行业的选择是:继续使用MUMPS,同时在外围添加现代化的安全层。这种“修修补补”的策略,让MUMPS像一座古老的城堡,外面包裹着玻璃幕墙和太阳能板,但内部的石墙和护城河依然坚固。

今天,如果你走进麻省总医院的地下机房,你仍然可能看到一台老旧的IBM大型机,上面运行着1966年版本的MUMPS内核。它的旁边是崭新的云服务器集群,运行着Epic的现代应用。但那些云服务器最终还是要通过API调用这台老机器上的MUMPS全局变量。这种技术上的“时空错位”,是医疗IT领域最独特的景观。MUMPS证明了,在软件世界里并不是最新的就是最好的。有时候,最反直觉的设计,恰恰能解决最复杂的问题。

帕帕拉多后来成为了医学信息学领域的先驱,获得了无数荣誉。但他最自豪的成就,始终是MUMPS。在一次采访中,他说道:“我们当时只是想解决一个实际问题,没有想过要创造历史。但历史选择了我们,因为医疗数据太重要了,不能交给那些花哨的、不稳定的系统。”这句话或许是对MUMPS最好的总结:它不是为程序员设计的,而是为患者设计的。在追求优雅和效率的编程世界里,MUMPS始终是一个叛逆者,一个丑陋但顽强的幸存者。它教会我们一件事:在技术演进的道路上,真正重要的不是语言的优雅,而是它能否持久地、可靠地服务于人类最根本的需求。

深度研究

影响力评价

技术影响商业影响文化影响用户规模108108
9.0
综合影响力评分
评分基于技术、商业、文化、用户四个维度的综合考量
🔧技术创新
卓越10/10

对技术发展和工程实践的推动程度

💼商业影响
显著8/10

对商业模式和市场格局的影响深度

🎭文化遗产
卓越10/10

在科技文化和社会层面的持久影响力

👥用户覆盖
显著8/10

用户群体的广度和普及程度

评论区 (0)

登录 后参与评论

加载中...