高级编程语言诞生已经过去了大半个世纪了,在我们看来,什么都在进步,但是编程语言的发展却有些缓慢了。虽然现在语言更加丰富,框架更多,但是最基本的编程方式还是没有任何改变,就是“写代码”,其实在英文中“Programming”和“Coding”是两个单词,有没有可能,我们只“编程”而不“写代码”?
由于我个人比较喜欢图形化的思维方法,在我学习代码以后,就一直在思考一个问题:有没有另一种实现代码逻辑的方法?这种方式可以“抹平”各种编程语言/框架之间的差异,实现“去掉程序语法,保留程序逻辑”。我们尝试去探索一条“应用开发的最短路径”,这条路经涵盖了从“开发”——“测试”——“上线”——“运维”的全过程,自动生成全栈代码(包括前端/后台/数据库代码),甚至尝试给用户提供“最直观”“一眼就能想到”的编程实现方法。
图形化的编程思路,在几十年前就有许多公司和团队想到过,并且构思出了很多优秀的产品,一些是“图形+代码”快速生成某种编程语言的产品,例如Visual Basic、Dreamweaver、Delphi、C++Builder、JBuilder等等;再到硬件设备图形化编程产品Labview;以及科学计算领域大名鼎鼎的Matlab;都能看到图形化编程的影子。
但是,以往的图形化编程方式,或多或少都有一些问题:例如,图形化了一部分UI,核心逻辑无法图形化表达(还是要写大量代码);又例如,一些图形化方案,尝试构造完整的代码逻辑空间,图形化设计过程过于复杂;还有一些框架过于陈旧,并没有实现面向对象的组件设计;还有一些图形化方案本身并不适合表达特别复杂的逻辑,例如Scratch,导致无法实现“通用”的应用开发。
要想做一种新的编程方式(新范式),几乎需要面对所有程序员(开发者)的检验,这是一件非常困难的事情,甚至比设计一门新的代码编程语言更加困难。
设计新的图形化编程语言的主要挑战
一 需要软件工程理论上的创新(编程语言的设计只是很一小部分)
在OOP面向对象理论出现以后,已经过去了好几十年,虽然也有“敏捷开发/精益开发”、“CI/CD持续集成/持续部署”、“DevOps”、“DDD领域驱动设计”等,但在本身的开发范式上并没有太大的创新,都是沿用“代码开发范式”。在我看来,这套范式整个使用路径,随着领域的不断扩展,各种软件产品公司的加入,变得越来越复杂,对于初学者很不友好,已经成为进一步扩大“软件”生产力的“核心”阻力。
以前端为例,以下是网上流传需要掌握的知识图谱:
前端学习路径图(来自互联网)
这仅仅只是前端需要掌握的知识,后台和运维需要掌握的内容一点也不比前端的少。就光前端开发这一项技能,没有好几年的时间,很难达到一定水平。
如果想要在一个图形化界面里面同时支持“前端开发”+“后台/数据库开发”+“运维”+“软件全生命周期管理”,难度可想而知。
另一方面,这种新的编程方式,相比传统代码编程方式,要能实现以下四个评价关键点中至少三点,才有意义。
这四个评价要点为(相比传统代码编程方式):
(1)更高的学习效率;
(2)更快的开发效率;
(3)更方便的运维;
(4)更快的运行速度;(表现为生成的代码质量)
iVX的四个评价关键点
二 需要底层技术的创新
首先要保证产品本身的架构的灵活性。现在无论是前端还是后台,还是云计算,技术迭代的速度都非常快,需要设计一个通用的架构,保证有新技术出现的时候可以快速迭代进来,这点非常重要。纵观很多具有IDE(整合开发环境)的产品,就是由于架构比较固化,无法引入新的技术,最终被新产品/新技术淘汰。
其次,图形化编程语言本身的设计以及和现有编程语言的转化,是另外一个难点。图形化编程语言的AST(抽象语法树)如何设计?语义空间(关键字)有多大?如何才能生成流行且大家熟悉使用的编程语言和代码框架?后台数据库以及后台资源如何接入并保证高可用?外部系统例如3D、2D、物理引擎如何接入?如何高效渲染?这些都是很棘手的问题,而且很多问题并没有标准答案,都需要独立创新和研发。
就拿AST(抽象语法树)设计举例,前端的AST和后台显然是不一样的,例如后台需要转码Java,而前端需要转码vue/react/dart等,那Java是直接采用Java原有的AST还是重新设计一种?最终我们选择了重新设计一种AST,用来生成Java AST,再转码Java Code,这个技术目前成功应用于iVX图形化编程IDE中,并且申请了国家专利保护。
iVX图形化编程IDE
三 需要产品设计方面的创新
当我们2007年开始投入研发的时候,当时也不是这么乐观,估计3~5年可以做出成型的产品,当时想的是可以设计个网站/网站前端就可以了(当然还没有云计算的概念,大家还不知道SaaS是个啥?也没有想着用浏览器来做应用了,所以只有网站的概念。)后来深入进去,发现浏览器原来还可以做很多事儿,接下来的几年浏览器本身升级和迭代速度加快了,互联网连续设计,移动互联网快速加入并成为应用开发的主战场,我们的产品也不得不进一步升级。
这种来自产品快速升级的压迫感,让我们根本就没有办法停下来。支持了动画和广告,你就想支持前端界面开发,支持各种应用开发;支持了前端你就想要支持后台和数据库开发;然后你想要支持云计算,支持微服务和Serverless;然后你想要把编程语言配套设置都加上,IDE、多人开发、版本管理、自定义组件管理...一个都不能少;再然后就是平台化...模版平台、组件平台、交易平台、应用商店纷纷上马...需要做的事情太多太多。几乎是把编程语言几十年建立的大厦和配套设施都要独立靠我们团队去实现一遍,而且很多技术还要自己摸索...
Finally...
我们沿着这条道路探索了十七年(2007年~2023年),iVX就这样诞生了。
产品很早就在线上可以访问了(2021年~2022年),但我们几乎没有推广和宣传,总是觉得这个产品无论是体验上还是技术框架上,都还有需要调整的地方,因此,我们来来回回重构了7~8次,功能点新增和调整上千次,最终形成了现在的版本——5.0版。总体来说,我们对目前的版本整体上已经比较满意,因此决定推向市场,就目前为止大概有30万注册的开发者,已经通过我们平台开发了近100万个应用了。总体来说,没有什么bug了,而且生成代码性能表现也很出色,大家可以放心使用。
目标30年...
iVX坚持每周迭代,到现在为止,团队构成基本上全员研发(为此,国内税务主管部门多次来查,说我们申报的研发人员比例太高,我告诉他们“我们财务系统都是财务人员自己研发的,现在已经转研发了”)。
底层技术的演进,往往需要更长的时间,但是一旦有所突破,往往也会带来生产力更大的进步。在iVX IDE的基础上,通过AI模型自动编程,是我们研究的新方向。希望通过我们的努力,可以为更多人服务,并创造价值。