Prolines软件背后的故事
2023-06-26 09:46:04 阿炯

一个国外友人用成熟的编程工具开发了一个了不起的软件记事。本文总结自刘欣的博客。

就是他,David Vacanti。


1974年,David从科罗拉多州立大学获得电气工程学位,随后加入波音公司,主要设计各种各样的雷达,一口气干了21年。1998年跳槽到霍尼韦尔公司,还是研究雷达,又干了19年。可以说,David 一辈子都在和雷达打交道。

更让人称奇的是,他在1983年,开启了自己的副业,开了一家叫做“Vacanti Yacht Design”的公司(美国允许在职的人这么做吗),专门开发出售船舶设计软件:PROLINES。


这个软件不断被维护,升级,如今PROLINES 已经40岁了,已经是一个成熟、稳定、强大的3D CAD程序,几乎可用于设计任何类型的船舶。用PROLINES可以设计这样的船:


这样的(赢得多次赛艇竞赛):


这样的:



PROLINES有多牛呢?

小型船只设计是个非常小众的市场,用户只是业余爱好者,专业游艇设计师,PROLINES在80年代后期推出,一直不断发展和升级,全世界有超过3000个 PROLINES 安装,可以说在全世界范围内培养了一批追随者。

PROLINES 第一个引入了参数化船体设计概念。通过选择船体类型并输入一些基本的船体尺寸,可以在几秒钟内创建一个船体,这种输入“船体参数”的概念已被整个行业采用。在内部使用 NURB(非均匀有理 B 样条曲线),这就可以创建任何可以想到的船体形状,并将其导出为 STL、DXF、IGES、GHS GF1、VPP 和其他文件格式。

PROLINES甚至成为美国大学土木工程师的一个标准工具。David用来开发PROLINES的工具就是古老的IDE开发工具:Delphi

上世纪80年代末,David用Turbo Pascal 和Metagraphics编写了PROLINES,在DOS时代,GUI编程是非常困难的,他必须得自己创建下拉菜单,检测窗口中的点击事件、创建对话框窗口,这让David不胜其烦。

当1995年,Delphi发布时,David非常激动,Turbo Pascal 升级成了Object Pascal,并且提供了对GUI快速开发的能力,他意识到Delhpi能极大地改进PROLINES,立刻把产品开发升级到Delphi,并且一直坚持用Delphi开发,直到28年后的今天。

Delphi 是 Borland出品的快速开发工具,在上个世纪90年代非常火热,它学起来比VC简单,编译出的代码又比VB(Visual Basic)快,人送外号“VB Killer”。

很多人喜欢Delphi,甚至胜过VB。Foxmail、Total Commander、Skype、WinRAR、BeyondCompare等知名软件都是用Delphi开发的。

Borland这家公司很可惜,以Turbo Pascal、Trubo C/C++起家,打造惊世之作Delphi,后来推出C++ Builder、JBuilder,可以说一代程序员是伴随着Borland成长起来的。但在桌面应用转向Web应用的关键时刻,Borland受到了微软、开源的Eclipse、Java的巨大冲击,Delphi也几经易手。虽然Embarcadero还在推出Delphi的新版本(最近的版本是2023年2月发布的11.3,当然也有开源的Pascal集成开发环境-Lazarus)。

VB和Delphi都是使用起来简单,但是一点也不缺乏开发复杂应用程序的能力,VB和Delphi的极限依赖于程序员的编程极限。David通过PROLINES就发挥了Delphi的极限:生成复杂的公式和计算,强大的3D CAD绘图渲染能力,支持高DPI的显示器,这对CAD应用程序的精细设计至关重要。

像David这样的程序员,不仅没有失业,反而在自己的赛道中发展得越来越好,是小而美的典型。他现在的生活很舒服,时不时开船出去转转。回到“祖籍”意大利西西里岛寻根问祖。(PS:Redis之父也生活在西西里岛)

应用程序已经从桌面转向Web和手机,Delphi可能已经不是开发这些应用程序的最佳选择了。我们要思考的是,能否像David这样,结合自己的专业优势和爱好,用自己擅长的开发工具去开发一个软件,长期维护,不断打磨,最终成为细分领域的领先者。这样长期稳定的副业才是程序员梦寐以求的、真正的副业。

当然,想完成这样的事情,首先得有业余时间,其次得有自己的爱好,能达到这两点的中国程序员太少了...


Bill Gates后时代的Visual Basic会在哪儿

1、缘起
1988年春天,Alan Copper坐在微软的大会议室中,给Bill Gates和微软的十几名员工做了一次著名的演示。这个叫做Tripod的开发工具,控制面板上面是一些按钮,列表框之类的东西,它采用事件驱动的方式,即当用户执行某个操作(如单击按钮)时,系统会触发特定代码执行执行。

很明显,这种开发方式把Bill Gates强烈地震撼了。Gates想到了自家刚刚发布的Windows操作系统:


GUI界面虽然对用户很友好,但是对程序员来说,在上面编程痛苦不堪,必须需要使用原始的 Win32 API。这意味着使用C语言编写 WndProc()函数,在里边用丑陋无比的switch case 语句来处理各种Windows消息。

LRESULT CALLBACK WndProc(HWND hwnd,
UINT msg, WPARAM wParam, LPARAM lParam){
    switch(msg){
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

即使想创建一个简单的窗口,没有几百行代码也是不行的。编程模型乏味又枯燥,简直不是人干的活儿。 相比之下,Alan Copper的Tripod可以把各种组件拖拽到表单设计器,然后对事件添加处理代码就可以了,又简单又直观。这绝对是以后Windows开发的未来。

“我们为什么没有做这样的东西?!” Bill Gates扭头对着他的随从问道。

Bill Gates买下了Tripod,并且让项目组对Tripod进行改造,用自己喜欢的Basic作为新工具的内置编程语言。最终,Visual Basic问世了。


Visual Basic的一大特点就是:有限的功能集使得学习曲线要短得多。

成为一名优秀的 Visual Basic 6 程序员比成为一名优秀的 C++ 程序员花费的时间要少得多。

2、发展
Visual Basic的出现也是恰逢其时。八九十年代,个人电脑市场正在迅猛发展,疯狂地吞噬原来大型机和小型机的领地。生活在那里的数百万COBOL程序员非常紧张,也想转型到PC开发上来,但是C/C++陡峭的学习曲线和非常低级的Win32 API成为最大的拦路虎。

正当他们无所适从的时候,提供了更简单抽象层的Visual Basic出现了,在组件化的编程模型下,你只需要把“控件”拖放到表单时,设置好属性,编写好事件处理代码,一个Windows应用程序就开发出来了。从此,大型机COBOL程序员高兴地拥抱了Windows平台。

一些编程新手也被Visual Basic吸引,他们了解到函数如何工作,对象如何工作,迅速地开发出应用程序,第一次感受到了编程的乐趣和力量。而Alan Copper当初的一个设计决策让Visual Basic一飞冲天。

在Visual Basic中,每一个控件(文本框,按钮,下拉框等)都是一个单独的,可以动态加载的DLL,也就是说,任何人都可以开发属于自己的控件,然后加载到Visual Basic当中。

这和后来Eclipse,IDEA,VS Code的插件思想非常类似,只是VB比他们早了一个时代。无数软件开发厂商开始开发这种自定义控件(VBX),日历选择器,图标,条码扫描,报表...... 海量的VBX迅速发展成一个第三方的市场。

Visual Basic不断地推出新版本,不但支持快速开发桌面的GUI应用,还可以通过ADO等手段访问数据库,从而开发C/S架构程序。到了1998年,Visual Basic 6.0发布时达到了巅峰,有三分之二的Windows商业应用是Visual Basic开发的,Visual Basic 在全球拥有350万开发人员,是C++程序员数量的十倍以上。能和VB一战的,恐怕也只有Delphi了。


Alan Cooper和微软签署了严格的保密协议,在四年的时间内,一直保守秘密,不对外界透露他在做什么。直到Visual Basic 发布以后,他的朋友Mitchell Waite 打电话问他,在VB那个about box中的Copper是不是你?此时Alan Copper才承认是他干的。

Mitchell Waite请Alan Cooper吃了一顿饭,亲耳听到了完整的故事,不由地感慨:这使你成为VB之父!1994年,由于对可视化编程的杰出贡献,Visual Basic 之父Alan Cooper获得了微软第一个Windows先锋奖。


3、衰落
Visual Basic在桌面开发中辉煌了10年,直到它撞上了互联网的大潮。Sun公司的Java异军突起,独领风骚,让微软感受到了巨大的压力。

在开发了不成功的Visual J++,被Sun控诉说破坏了Write once ,run anywhere 之后,微软决定另起炉灶,开始做.NET。Visual Studio的所有产品都摇身一变,加上了.NET后缀,Visual Basic也不例外,成了VB.NET。

VB.NET彻底改变了最初的产品精神,变成了更复杂,功能更全的编程语言,开始和C#一起共享很多复杂的概念,线程、继承、多态,学习曲线陡然升高。但是在.NET平台上,C#才是亲儿子,是微软的战略产品,既然底层的概念都类似,为什么不选C#呢?

在一篇微软的博客中,.NET 讲师 David Platt痛斥微软产品犯的错误:几乎所有的VB6程序员都对VB6很满意,这是一辆非常不错的汽车,他们很愿意成为汽车的司机,至于VB6中缺乏运算符重载,多态,他们并不在乎。但微软团队听到了3%的司机的意见,这帮人想成为战斗机飞行员,他们参加各种会议,写各种文章,在论坛上发帖,希望给汽车增加响尾蛇导弹,安装加力燃烧器,HUD显示屏,反导设施......

微软最终做到了,这就是VB.NET。

更糟糕的是,微软发布的迁移工具是不可靠的,代码从VB迁移到VB.NET非常困难,很多时候,用户需要手工重写。这彻底打破了开发人员对VB的信任,VB程序员开始摇摆,要么从VB.NET从头开始,要么转向PHP,Python,JavaScript,大多数人选择了后者。

Visual Basic 6.0成了最后一个经典的VB版本,一些程序员依然坚守,2008年4月,微软宣布停止支持VB 6 IDE,但是直到今天,Windows依然支持运行VB6开发出来的程序,可见这里有一个庞大的、遗留VB6程序的部落,不容忽视。

4、反思
2006年,一个18岁的程序员在邮件列表中问了这么一个问题:编程的下一件大事是什么?

没想到,著名的 Linus Torvalds 竟然回复了:“帮助简化所有日常苦差事的工具, 例如我个人认为Visual Basic在编程方面比面向对象做得更多,但人们嘲笑VB是一种糟糕的语言,虽然VB不是一门伟大的语言,但是VB中的简单易用的数据库接口比面向对象要重要得多......”

转眼间,Visual Basic已经诞生30多年了,但是编程并没有变得比九十年代简单,相反变得更复杂了,还专门分离出了前端来处理UI相关的问题,还有层出不穷的框架,让人难受的、复杂的CSS,浏览器兼容问题...... 这些苦差事和30年前用拖拽的方式建立界面有天壤之别。

我们现在其实缺少像Visual Basic这样的隐藏复杂性的工具,它功能有限但是足够,学习曲线短,可以快速上手,迅速开发出应用出来。

下一个时代的Visual Basic会在哪儿呢?