加入 M 革命

还没有读者喜欢这个。
MUMPS, M and R programming languages

Opensource.com

你是个极客吗?

如果是,那么掌握医疗保健的未来现在触手可及。

你需要做什么?

学习 M 编程语言,并教给其他人。

什么是 M 编程语言?

M 编程语言也称为 MUMPS。它代表麻省总医院实用多程序系统

M 是一种多用户、强命令式语言,旨在

操作和控制海量数据库。它用于计算机市场的高可用性、高可靠性领域——包括银行和医院。它提供简单的数据抽象,其中所有数据值都是字符串,所有数据都可以构建为多维数组。M 数据结构是稀疏的,使用字符串作为下标。M 本身是一种语言,结合了数据库引擎。

M 难学吗?

这是用 M 编写的常见的 Hello World 程序

MYLABEL ; This is a comment
 WRITE !,”Hello World”
 QUIT

空格在 M 中很重要。命令通常从第二列开始。参数与命令之间用一个空格分隔。

M 无聊吗?

一点也不,M 入门容易,并且很快变得有趣。

这是 M 最酷的功能之一,稀疏索引数组

SET ClientAddresses(“Main Street”,”1056”,”Apt 23”)=”John Doe”
SET ClientAddresses(“Main Street”,”1056”,”Apt 23”,”August 15”)=”Mary Poppins”

在这个例子中,字符串 “Main Street”、“1056”、“Apt 23” 和 “August 15” 都用作稀疏数组 “ClientAddresses” 中的索引。

稀疏数组是使 M 特别适合医疗保健应用程序的功能之一,因为它与构成健康记录的一系列不太可能事件导致的数据自然稀疏性相匹配。

这是用 M 计算的斐波那契数列

FIBONACCI ; compute the Fibonacci series
 SET (A,B)=1
 FOR I=1:1 SET S=A+B WRITE !,S SET A=B SET B=S QUIT:S>100
 WRITE !,"Result= ",S

学习 M 编程能帮助我找到工作吗?

  1. 美国 80% 以上的医院没有电子健康记录 (EHR)。相反,他们仍然运行纸质表格 [1]
  2. 医院在未来几年内采用 EHR 将获得经济奖励。如果他们未能在某些日期前采用 EHR,一些医院还将受到处罚 [5]
  3. 美国目前部署的最大 EHR 系统是用 M 编写的,包括 VistA(退伍军人健康信息系统和技术架构)。VistA 是目前管理退伍军人事务部运营的所有医院和门诊设施的系统 [6]
  4. 在医院部署 EHR 将需要在未来几年内需要数万名开发人员。

使用 M 的机构包括:AmeriPath(现为 Quest Diagnostics 的一部分)、Care Centric、Epic Systems CorporationEMISPartners HealthCareMEDITECHGE Healthcare(原 IDX Systems 和 Centricity)、退伍军人事务部医院、国防部和印第安人健康服务中心。金融用户包括:Ameritrade,美国最大的在线交易服务机构,每天交易量超过 120 亿笔,以及 英格兰银行巴克莱银行

为什么我从未听说过 M(或 MUMPS)?

M 的应用领域非常特定于需要支持稀疏数据的高需求和高性能数据库。大多数 M 开发人员多年来一直在高性能医疗保健和金融应用的特定领域工作。
在美国所有医院部署 EHR 的倡议,现在将 M 编程带入主流,这将需要数千名开发人员来维护和支持所有这些安装。

M 很酷吗?我可以用它编写移动应用程序吗?

是的,可以。

一旦你学习了 M 编程的基本技术,你可以查看企业 Web 开发环境 EWD,并开始从移动设备(包括 iOS 和 Android [2])与 M 数据库应用程序交互。

我对 NoSQL 数据库很感兴趣。我为什么要关心 M?

因为 M 就是 NoSQL 数据库。M 实际上是一种集成了数据库引擎以持久存储数据的语言。M 在 SQL 出现之前就存在了。而且 M 也是一个高度可扩展和可靠的数据库系统。

你的工资单和银行帐户很可能正在由 M 数据库管理。

我如何设置 M 编程环境?

你可以在这里获取一个虚拟机,其中已经设置了 M 编程环境

或者你可以按照此页面上的说明创建自己的环境

在这两种情况下,你都将使用 M 的开源实现,称为 GT.M [3],由 Fisglobal [4] 开发和维护。

我在哪里可以了解更多关于 M 的信息?

本文旨在成为系列文章的第一篇。在我们的下一期中,我们将介绍 M 101——M 编程的基础介绍,包括流程控制和例程的基础知识。

如果你有任何你希望讨论的特定问题或主题,请在评论中发布,我将在后续文章中解决它们。

你可能还会发现以下书籍很有用

  1. M Programming by Richard F. Walters
  2. The Complete MUMPS by John Lewkowicz

参考文献

[1] 美国医院电子健康记录的使用,《新英格兰医学杂志》,2009 年 (http://www.nejm.org/doi/full/10.1056/NEJMsa0900592)
[2] 企业 Web 开发 (EWD) (http://gradvs1.mgateway.com/main/)
[3] http://sourceforge.net/projects/fis-gtm/
[4] http://www.fisglobal.com/
[5] http://www.cms.gov/ehrincentiveprograms/
[6] http://www.va.gov/vista_monograph/

标签
User profile image.
Luis Ibáñez 在芝加哥的 Google Inc 担任高级软件工程师。

31 条评论

为什么医疗保健的未来要用 MUMPS 编写?

医疗保健是一个在技术上至少落后 10 年的行业,你不认为在健康 IT 领域推广 MUMPS 而不是推广更新的技术(在这种情况下是编程语言)与推动医疗保健走向“未来”背道而驰吗?

医疗保健,特别是刚进入健康 IT 领域的新人,应该利用自 MUPS 在 50 多年前创建以来所做的所有新发现,而不是采用该行业已经存在的所有坏习惯。

无论如何,感谢分享这篇文章,并感谢您关注健康 IT 行业!

作为 M 的长期用户,当每个人都谈论“M 语言”时,我感到沮丧。M 的优势不是语言(不是说它不好,但它相当过时),而是数据库。“M 语言”非常适合管理该数据库,以及大量的幕后业务逻辑。然而,它没有能力处理现代用户界面。我们使用 HTML、Javascript、Ajax、node.js、Adobe flex 和其他技术进行“前端”工作。没有任何理由不能使用任何语言或开发工具来完成这部分工作。尝试将医疗保健数据挤压到 SQL 表中是一件更糟糕的事情....

但唯一的问题是 IT 界很少有人了解 M 技术,当你开始时,你需要知道基本命令,为此我们需要学习 MUMPS。毫无疑问,数据库很重要,但突然间试图在没有任何帮助的情况下学习一种语言

但唯一的问题是 IT 界很少有人了解 M 技术,当你开始时,你需要知道基本命令,为此我们需要学习 MUMPS。毫无疑问,数据库很重要,但突然间试图在没有任何帮助的情况下学习一种语言

显然有人说 VistA 软件使用 mumps 比任何其他现代编程语言都快得多,而且现在没有 IT 公司有兴趣进行试验......

你提出了一个很好的观点。
你是对的,未来不一定非要用 M 编写。

然而,地面和目前的现实是,最好的 EHR 以及在美国部署规模最大的 EHR 都是用 M 编写的,包括专有的和开源的。这代表了数千万行代码,目前在数千家医疗机构中运行。这个软件体系需要一个充满活力的社区来支持它。

“语言老旧”的论点本身是无效的。也就是说,语言不会过期。真正的问题是当说这种语言的人不够多时,这正是本系列文章旨在解决的挑战。

这里的重点不是“M 是唯一的选择”,而是“M 是一个非常重要的选择”,并且这个领域需要新一代的开发人员。

其他人应该仍然选择用 C++、Python 或 Java 编程吗?…… 当然,为什么不呢。

但这并不能改变当前的现实,即有数千万行 M 代码在医疗机构中运行,这将需要一个庞大的社区来维护它们。这些是经过验证的系统,目前每天都在拯救生命并降低医疗保健服务的成本。

对于希望参与有意义项目的年轻开发人员来说,M 是一个极好的选择。

你是对的。语言不会过期。

是的,如果程序员想要为你们提到的某些公司工作,那么 M 绝对是他们的选择。

但是,在我看来,这些公司及其解决方案并没有改变医疗保健。它们是过时且昂贵的解决方案。

我的观点是,为什么要尝试将人们转移到一种无人使用的语言,而不是将一个行业转移到每个人都喜欢的当前趋势——我不是说要更改您提到的公司/解决方案的代码库,而是创建基于更新和更性感的架构的新产品,这是每个人都在寻找的。

我敢打赌,如果更多医疗保健公司使用 node.js、rails、NoSQL(不是 M...)、python/django 等进行编程,那么将会有更多的程序员被吸引加入该行业。你觉得呢?

谢谢你的回答!

JL,

是的,我同意你的观点,其他更新的技术在医疗保健领域也发挥着重要作用。

特别是,我很高兴你提到了 node.js,因为这让我们谈到了 EWD (http://gradvs1.mgateway.com/main/),“企业 Web 开发”,这是一个 Ajax 框架,方便编写数据库驱动的应用程序。EWD 将安全会话模型集成到基于 Node.js 和 Javascript 的实时 Web 框架中。在服务器端,EWD 连接到 M 数据库。这是一个新旧(经过验证的)技术如何成功结合以满足用户需求的示例。在前端,我们获得了一个模型图形用户界面,可以部署在 iPad 和 Android 设备上,而在服务器端,我们获得了 M 数据库的可靠性、可扩展性和速度。

我们实际上将在我们在 RPI(http://public.kitware.com/OpenSourceSoftwarePractice/index.php/Spring2012/Main_Page)的当前开源课程中使用 EWD 和 M,进行将移动设备连接到 VistA 安装的课堂项目。

你还提到了 python 和 django,这也很有趣。我们班的学生还将参与与 Indivo (http://indivohealth.org/) 相关的项目,使用 python 和 django。

您说的有道理,M 语言并非医疗保健未来应用的唯一途径,许多不同的技术将在这一领域发挥综合作用。正如在其他应用领域一样,重要的是为系统的每个不同组件使用合适的工具。

亲眼见过这个系统运作后,它是一个非常强大的系统,可以轻松击败任何使用新技术创建的其他分布式系统。 在您批评我之前,我是一位老牌的 C、Unix、Java、JEE 开发架构师。M 语言应该被认为是这个领域的领域特定语言 (DSL)。当然,您可以使用其他语言编写 VistA 中使用的任何应用程序,但工作量和语言的表达力都无法与 M 开发人员相提并论;至少不付出巨大的努力是不行的。任何认为这是胡说八道的人显然都没有研究过这种语言或数据库。当然,数据库在事务处理方面存在缺点,但它的设计目的是适应医院和一般医疗分类的需求。因此,需要很大的灵活性,这正是 VistA 设计如此强大的原因。它允许动态更改,并且不需要预先开发模式。医疗领域是动态的,不像许多其他业务。有大量的规则和特定领域的知识,会使任何尝试做类似事情的关系数据库完全失败;顺便说一句,我亲眼目睹了这一点。
我以前也见过关于新技术的争论,并且曾经也支持新技术,但在这种情况下,M 语言和数据库是这个解决方案的正确选择。使用 RESTful API 和类似技术扩展其功能当然是一件美好的事情,而且显然应该这样做。但不要把孩子和洗澡水一起倒掉。

很棒的文章。我在各种医疗机构中使用 M 语言工作了 20 多年。令人惊叹的是,它如何支持从 286 到小型计算机(还记得它们吗?),再到 IBM 大型机,再到今天的服务器的多用户系统。在一家大公司中,我们在 OpenVMS、Unixware、Linux 和 Windows 上运行着相同的应用程序。虽然在某些领域它并不适用,但在存储和访问大量索引数据方面,它很难被击败。

并且基础语言的语法不像一些更现代的语言那样构成入门障碍。

Steve

感谢这篇精彩的文章!我在医疗保健和银行业使用 M 语言编程已有 20 年。

我知道作者有开源背景,但在谈论 M 语言时不提及 InterSystems 真的不公平,特别是当所有引用的组织(MEDITECH 除外)都是 Caché/Ensemble 的长期客户,<b>而不是 GT.M 的客户</b>。

是的,感谢您指出这一点。

我特意坚持使用 GT.M。( http://www.fisglobal.com/products-technologyplatforms-gtm ),因为这就是我计划在后续教程帖子中使用的,当然,正如您指出的那样,因为它​​是开源的。

但您提出的观点很好,Intersystems Cache (http://www.intersystems.com) 对于 M 社区非常重要。

三十多年前,我开始在大学门诊部使用 MUMPS 和当时最新的 VA File Manager 来实施预约系统和实验室结果跟踪应用程序。当大学医院花费 450 万美元购买了一个漂亮的、基于 IBM 的 HIS,但从未让医务人员满意并在几年后被废弃时,我们只花费了几千美元就获得了一些服务超过十年的东西!今天,我仍然使用 MUMPS 来处理数据集,而其他人似乎无法使用性感的“现代”工具来处理这些数据集。可以肯定的是,基本的 MUMPS 终端界面既不漂亮也不性感,但该语言具有强大的字符串操作能力,并且数据库速度极快,而且由于稀疏数组,它占用的磁盘空间极小。因此,我可以随身携带整个大型医院数据库在笔记本电脑上!用“现代”RDB 试试看。
我同时使用 Caché 和 GT.M,除了我必须为其中一个的多用户容量付费,而另一个则不需要之外,它们都运行良好。而且两者都将其数据和字符串处理暴露给图形编程工具,这些工具看起来确实现代而性感——所以我们可以让那里的用户对外观和性能都感到满意。
“现代而性感”显然适用于新款保时捷,但在引擎盖下是一个运行奥托循环的发动机,该循环于 1876 年开发。当然,还有更新的替代品,如燃气轮机和旋转发动机,但奥托循环发动机就在保时捷或兰博基尼中——随便你——因为它仍然适用于该应用,而且价格(有时)合理。这就是为什么 MUMPS 仍然是如此多高性能数据系统引擎盖下的引擎:它运行异常出色,而且成本在经济上是合理的。

当你说“随身携带整个医院数据库在笔记本电脑上”时,我不禁想起了所有关于这种笔记本电脑丢失或遗忘在出租车上的新闻报道。我希望你至少对磁盘进行了加密。

感谢这篇精彩的文章!我 20 年前开始使用 MUMPS (Epic Systems),并且非常喜欢它。

2011 年,我开始围绕 MUMPS 开发一个 Java 框架(专注于 GT.M,但也应该可以很好地移植到 Caché)。我喜欢 MUMPS 数据存储和索引的灵活性——但我希望我的 Web 服务器和大多数业务逻辑都在 Java 中。

我的框架仍处于早期开发阶段。但任何有兴趣的人都应该在这里查看 http://www.divconq.com/ 。

哈哈 - 愚人节是下个月,伙计们。

这是一个古董级的浪费时间的东西,只会污染你的大脑。去学习“Perl”或其他有用的东西,现在真的在银行等地方使用。

(是的 - 我在银行工作)。

MUMPS 在银行(GT.M 针对该市场)以及信用社中使用。我相信 Caché 在 TD Ameritrade 使用。

猜想医疗保健行业不够有用。

做得好,你“未具名人士”——你在银行工作,并且你懂 Perl——当然,Perl 是那些新一代语言之一,银行喜欢它的易用性以及它在瞬间处理数百万客户数据的方式……

Mumps 仍然有它的位置,任何人如果仅仅因为它的年代久远而无视它,显然需要去阅读更多的宣传册。

仅仅因为年代久远而拒绝某物是对我们人类意义上的长辈和 DP 意义上的其他物品的不公正。
. Unix 及其后代 (Linux, BSD, 等)
. C++, C# 和其他 C 的后代
. Lisp/Scheme/etc,它仍然活跃并且其特性正在新语言中显现出来

eXist DB 和原生 XML 数据库可能是一种替代方案。Markmail 使用了这个,并且使用 Xquery 的性能值得审查。这将允许 SOA 和 restful Web 服务,在这些服务中可以使用其他基于 Web 的技术……

哇!来自过去的震撼。我曾在 MUMPS 世界中的所有大公司工作过;InterSystems、DEC 和 Greystone。

MUMPS 有许多很酷的功能,即使在今天听起来也很先进,但在 1970 年代,它们简直令人难以置信。例如,它是无类型的;一切都是字符串;我们当时没有这样称呼它,但它几乎是面向对象的,如果 A="1.2" 且 B="3.4",则 A+B="4.6",但如果你连接它们(我忘记了语法),则是 "1.23.4"

此外,程序的代码存储在数据库中,*并且可以被自身修改*!是的,代码是数据,数据可以是代码。大量的 MUMPS 代码会形成一段代码字符串,然后执行它。真是狂野、狂野的东西。

至于它看起来很旧,是的,我想确实如此。但看看 Hadoop 的“Pig”。它有一种明显的复古感。MUMPS 将非常适合!

我期待着其余的文章!

-Matt Phelps

看起来 MUMPS 更像是一个粘贴在 SQL 服务器或类似服务器之上的脚本 shell/环境,而不是一个“语言”。看起来你可以轻松地编写一系列 MUMPS 脚本,并从 Linux 主机上的 BASH 环境中调用/控制它们,甚至可以通过 HTML 服务器的 cgi/java 脚本来调用/控制它们。

它的优势似乎在于使其更容易创建和连接到任意内容的关系数据库。

实际上,对我来说,它似乎与我们过去在工作中用来访问数据库的 icicle 脚本没有太大区别。

不要将方法的成熟度与弱点混淆。我经常使用 C 和汇编语言编程;金字塔的底部蕴藏着力量。

“看起来 MUMPS 更像是一个粘贴在 SQL 服务器或类似服务器之上的脚本 shell/环境,” - 这简直是大错特错!我最初在 DEC PDP/11 和 VAX/VMS 上编写代码,在 PDP 上,MUMPS 是操作系统(搜索 DEC DSM)!!!它是语言和数据库,其存储是分层的 l,而不是结构化的(SQL)——后来为了与更多的“业务对象”应用程序兼容,它获得了 SQL 层,但通常数据仍然是分层的,数据映射在 SQL 场景背后进行(有人记得 EDA-SQL 吗?)。在 VMS 和 Unix 上,它甚至具有到 TCP/IP 套接字的直接接口,这使得事情变得非常有趣,因为它开辟了一个全新的世界。早在 90 年代末(根据 google groups 1998 年 2 月的帖子),我就让它直接从数据库引擎运行 Web 服务。

我可以列举出银行、交易大厅、律师事务所、超市、商业街零售商、保险经纪人,他们都在使用它。

http://en.wikipedia.org/wiki/Hierarchical_database_model
http://groups.google.com/group/comp.lang.mumps/

应用程序开发人员,对“M”非常感兴趣,很想学习……

应用程序开发人员,对“M”非常感兴趣,很想学习……

致 CustomDesigned

我保证磁盘已加密,并使用了非常难的密码。文件本身也是如此。

而且还用手铐铐在我的脚踝上。

然而,我想表达的重点是 MUMPS 数据库在磁盘上是多么紧凑。我指的是一家 800 床位医院 20 年的数据。不仅仅是数据,还有所有操作这些数据的例程。也许紧凑是轻描淡写,但存储成本显然是最小化的。

自 1985 年以来,我一直是 MUMPS、M、CacheScript 程序员,最初在罗德岛州普罗维登斯的 VA 工作,使用 Fileman 进行 DHCP 软件开发。后来为军队开发 Fileman 和 CHCS,然后是 Kaiser Permanente 和 MIIS 版本的 MUMPS,再后来是为印度健康服务机构开发 Fileman 和 RPMS,现在是 IDX 和 EPIC。这是一条漫长的道路,而且全部是 MUMPS 或 M 或 CacheScript。说这种语言不重要是不准确的,我看到它多年来的变化,当 Intersystems 最终打破 MDC gidlock 时,我非常高兴,因为该语言已经现代化了。阅读这些评论让我看到,你们中的一些人对这种语言或它所使用的数据库一无所知。如果没有语言和数据库的集成,它就不会像现在这样存活这么久,不要试图将它们分开,它是一个完整的环境,用于完成它所用于的那种系统。而且它速度很快,非常快。我对我开发的网站(不是使用 CSP,而是 Cache 端的 HTTP 服务器例程)的响应速度感到惊讶。

有趣的网站,我想看到更多。

大约 15 年前,我开始了我的计算机科学研究,当时我大约 20 岁。我学习了 c、c++、java 和一些脚本,如 HTML、javascript 等,以及数据库概念的简单介绍。但后来我的人生经历了很多挫折,在此期间我不得不停止任何计算机科学研究/工作或使用。
现在,如果我要学习“M”编程,MUMPS,以便能够在组织中实施它,---我需要多长时间?--- 另外我还需要至少 6 个月的时间来复习我以前学过的计算机技能。
我认为,考虑到我的情况,任何程序员指南都会建议我干脆忘记编程。你们有什么建议?

我过去曾在当地一所技术学院教 Web 开发(并且我经常使用 M 语言),所以我经常遇到类似的问题。

假设你 15 年前在编程方面做得不错,那么你的挑战将不是复习你的技能,而是找到一份工作。如果你确实想在软件开发领域找到一份工作,你可能会面临来自具有近期经验的人的激烈竞争。

颠覆这种情况的最佳方法之一是找到一个利基市场并学习它。例如,学习 WorldVistA (http://www.worldvista.org/),其中包括 MUMPS 和一些新的有趣的东西,如 nodeJS。我不确定目前 WorldVistA 的市场是什么样的——所以不要太字面地理解它——只是尝试找到一个不那么拥挤的利基市场,并在其中变得出色。

另一种方法是承担一些小型 Web 开发项目。如果不积累作品集,可能很难赚到很多钱——但是有很多 Web 设计公司需要网站编码方面的帮助(可能主要是 PHP 和 MySQL,而不是 MUMPS)。

仅仅掌握一种语言技能(仅仅是 Java,仅仅是 MUMPS 等),而没有利基市场或作品集,很难推销自己。a) 他们怎么知道你很优秀,b) 许多其他人也掌握语言技能,但没有特定领域的知识。

如果编程对你来说是天生的,那么 MUMPS 本身就很容易学习。它与许多数据库不同,所以有一个门槛,但是一旦你理解了全局变量以及 $o、$d 和 $q 的作用,你就具备了所需的一切。你可以考虑我的入门教程——http://www.divconq.com/home/getting-started/ 上的 4 篇 M 语言帖子——但是那里也有很多其他的入门教程。

我刚刚收到 Laurent Parenteau 的消息,他好心地准备了一个补丁,让 github 能够识别 M 代码,而不是将其错误地归类为 Objective-C。(目前,github 中的 M 语言项目被归类为用 Objective-C 编写的)。

请通过发布评论并加上“+1”来支持 Laurent 的补丁,帮助我们推广这个修复。

<quote>
“……我已经提交了一个补丁来修复这个问题,但根据我读到的内容,如果有人为我的更改“+1”,这将有所帮助并提高他们集成它的速度。

由于我认为您可能对在 GitHub 中看到此问题得到修复感兴趣,因此我想我可以请您访问我的 pull request (https://github.com/github/linguist/pull/148)) 并简单地添加一条评论说“+1”。另外,请随意将此转发给其他可能对此感兴趣的 M 语言和 GitHub 用户。”
</quote>

非常感谢 Laurent 整理了这个补丁。

Luis

© . All rights reserved.