问题所在...
自从有了代码,有了 Coding 这回事儿以来,无数人都在往一个方向努力:减少代码,甚至是减少到零。
这一过程不断迭代,从编程语言的重新设计、 IDE 的设计、图形化的设计到各种库和开发框架的涌现、各种工具包、云计算、服务/微服务...包括最近提的比较多的“图形化编程Scratch/iVX”、“低代码/无代码”... 其实细想一下也都是为了“减少”代码量服务的。为了减少代码量,有时候甚至牺牲性能也在所不惜!
那为什么要减少“代码量”呢?因为...
1.代码太多了... 作坊式的手工操作编写大量代码,带来太高的成本;(俗称码农)
2.代码太难学了... 高门槛阻碍了太多人进入编程领域,不懂英文不行,岁数大记性差也不行...
3.代码太难维护了 ... 代码太过灵活,很难标准化,很多实现方式只有开发者自身看得懂,可维护;(现在甚至有“防御性编程”的说法🤣,意思就是面向“看不懂”编程,工作就保住了)
4.代码实施成本高 ... 各种环境,各种工具的使用,以及各种服务器和云资源的分散使用,增加了代码可实施成本。
一方面,程序员们夜以继日的不停加班,觉得自己苦不堪言;另一方面,用人单位觉得“养研发”实在是“太昂贵”了... 两边都活得艰难,这实际上就是“生产力水平低”的表现。
因此,减少代码,本质就是提高生产力!效率和收益就会显著提升!
我们应该如何去减少代码呢?...🧐
代码不会凭空消失
根据信息学最基本的原理,复杂度是不会凭空消失的!啥意思呢?前面我们说了“编程本质就是建模”,也就是在这个“建模”的过程中如果需要一个 “if” 或者 “for” 来表达 “分支” 和 “循环”逻辑(假设建模的方法不变),这个“if” 和 “for” 不可能被压缩的!
再简单点说,如果程序的逻辑是固定的,那么代码总量(信息总量)也是相对固定的(当然,这个和开发的具体的人有关,这个差异我们就不再这里做定量分析了),也就是说“运行态”的“代码总量相对固定”!
如果这样,是否意味着“减少开发人员的工作量”是逻辑上不可能的呢???
大家理解一下下面的公式:🤨
「最终运行的代码 ≠ 开发人员编写代码」
也就是说可以通过尽可能减少开发人员的“操作步骤”、“自动增加生成代码数量”、“减少Debug/测试/运维流程”...来提升编程效率 。
那我们应该怎么做呢?(以 iVX 为例)
一、统一的封装,灵活的封装,恰到好处的封装
集装箱的革命性意义,就是封装功能最好的体现。放到代码里,封装,其实就是一种重用的机制,把稳定的一部分包装起来,只把具体的 input 和 output 暴露在外面。就像一块芯片,里面什么结构,多少纳米,多少层和我们没啥关系,我们知道它算力怎么样,怎么使用就可以了。因此,封装是一种减少代码量的有效方法。
统一封装,主要指最好有统一的格式,并按照统一的标准进行封装。例如 iVX ,全部都是面向组件,“一切皆组件”,就一个编辑界面,一种组件封装形式,一个统一的逻辑调用方法,这种稳定的结构,有更好适应性,也更容易拓展。
灵活封装,主要指“用户自定义”的封装能力,也包括“能够将现有代码资源无缝整合”的意思,保证用户的灵活方便,以前代码和资源可以重用。
恰到好处的封装,指的是如何避免“组件爆炸”?如果保证“组件的颗粒度”?如何平衡“灵活性”和“颗粒度”之间的关系,如果过于追求“灵活”可能导致开发过程复杂度增加,如果过于强调“封装”,可能灵活性又会丧失。在 iVX 框架中,通过对“组件分层”的设计方案加以解决,同时允许用户“自定义组件”的加入,比较好的解决了这个问题。
二、“解耦”+“正交”的产品架构
“解耦”应该还比较好理解,可以没有联系的模块或部分,尽量拆开,方便以后“灵活拼接组合”。如果没有“解耦”,就代表用起来“不清爽”,瞻前顾后,“不得劲儿”(这也是程序设计里面经常提到的概念)。在iVX 中表现为:面向对象的组件封装、前后台组件分离、引入了“云计算”作为后台资源组件、尽量使用 Serverless 服务、引入“微服务”、前端引入“数据驱动”、支持API组件、图形化编程语言(含编译)和指定语言代码生成...等等 都涉及到“解耦”的概念。
“正交”,什么是“正交”?坐标轴上“X”轴和“Y”轴就是正交的,这种情况下,整个平面的点都可以通过一个 X 坐标和一个 Y 坐标表示,这样的表达最丰富,效率也最高(稀疏程度也一致)。如果能够采用正交的概念,会带来更高的表达效率,进一步压缩代码量。
在 iVX 架构中,也有很多正交的例子,例如组件封装维度和事件面板逻辑维度正交,逻辑控制结构(if、for等抽象出来单独表达块)和语意/表达式正交,... 这些正交的设计,可以让产品表现出更高的效率。
三、去掉语法,抹平现有的编程语言差异
“抹平”是一个比较流行的词,现在也很容易理解了。最典型的例子就是 ChatGPT,“抹平了人类语言的差异”,我认为这是它的最大贡献之一,你说的“希伯来语”和讲“梵文”对ChatGPT没有差别(那种说过程LLM对中文理解更好,纯粹是营销话术哈)。所以“抹平”,核心价值就是“统一了表达”,降低了学习和维护门槛。
同样,以 iVX 为例,前端可以生成多种框架React/vue、Python、flutter、小程序、不排除鸿蒙等,后台可以生成Java、Node.js等,以后甚至可以支持绝大多数的编程语言的自动生成,这样本质上也就“抹平”了编程语言的差异,语法被逻辑取代,学习编程和维护程序变得更加简单。
在实现了前面“1、2、3”后,实际上就形成了一种完整的“图形化”编程语言,实现了“键盘编程”向“鼠标编程”的转变。
这样的转变,将大大提升编程效率,另外,还有一个额外的Bonus(福利)就是Bug也会大幅度减少。在对Bug的统计中,有很多是拼写或语法错误,由于是鼠标编程,这些错误通常都不会发生(没有地方可以拼写了☺️)。
技术的难题只能通过技术解决
前面说了很多,架构和产品方面的,但是其中最 HardCore 的部分还是“技术”本身。例如,我们测试过别的代码生成产品,后台也是同样生成 JavaCode,但是只要一修改并预览的时候,就要等5分钟以上,但是 iVX采用了一种更聪明的做法:使用生成 WASM(网页汇编语言)来预览,可以瞬间打开。这些东西要详细说还有很多很多,但总结起来也就一句话,开发起来都是以年来计算的,所以说 IDE 很难,做新的编程语言更难。
以上基本上讲清楚了,为什么可以“减少代码”甚至“无代码编程”,以及“如何减少代码”的。
没看懂或者没时间看的,可以点个收藏先,顺便点个赞,日行好事~