这会不会引起编程范式的变革?

这会不会引起编程范式的变革?

github.com/rainforeste...

计算机从最初为了解决计算问题慢慢演进到现在主要解决软件工程问题,即逻辑问题,但我们能操控计算机的工具(语言、范式)依然停留在为解决计算问题而设计的阶段,在面对逻辑问题时由于这种工具与问题的不匹配衍生了《人月神话》里所说的偶然复杂性,就像用勺子砍树,虽然能勉强做到,但非常难用,而我们却从未质疑过工具是不是本来就用错了,荒谬至极。

从另外一个角度来说,计算机之所以叫"计算机"是因为它最初为了解决计算问题,而现在主要为了解决逻辑问题,那么它应该叫"逻辑机"或"逻辑/计算机",也应该配有解决逻辑问题的工具才对。

这就不得不剖析"计算"与"逻辑"的区别:

  • 计算是步骤、指令,是过程性的,它描述的是一系列在时间上依次发生的动作
  • 逻辑是规则、关系,是声明性的,它描述的是概念之间永恒成立的关系或约束

所以这就解释了现有的操控工具为什么适合计算问题,而不适合逻辑问题。需要创造一种新的工具来解决逻辑问题,并且它的特点一定是声明性的。

就像为了解决计算问题而创造的指令一样,解决逻辑问题也需要把逻辑拆解为最小单元并找到表达方式。因为现有编程语言的指令是解决计算问题的工具,而我们不可能从工具中找到逻辑的最小单元,所以就得忘掉这些,跳出这些,从底层状态机视角去拆解就能得到:

  • 逻辑是一系列状态转移节点所组成的路径
  • 计算是每个状态转移节点的内部转换过程

继续拆解出逻辑的最小单元就是最小化的"状态转移节点",描述从上一个状态到下一个状态的转移。而"状态"在程序中表达为"变量",所以这个逻辑最小单元的表达方式就是:描述从上一个变量到下一个变量的转移,即数据转换。

但这个"数据转换"概念在计算与逻辑的视角却截然不同:

  • 计算关注的是实际的转换过程,它得等到前面变量传过来之后才开始运行
  • 逻辑关注的是抽象的转换方向,它不关心前后变量是否存在,只需要描述好方向就行

所以解决逻辑问题的工具就是:设计一种既可以描述转换方向又无关变量是否存在的新写法

于是就有了这种新编程范式:通过声明式写法把业务逻辑简化为描述数据之间的转换关系。构成简单、稳定、可靠的球状关系网,让程序从刚性结构变为柔性,砸不坏摔不烂,易于维护。

这种范式不仅几乎消除了偶然复杂性还解决了一个以前无解的难题,即使业务逻辑发生变化或规模增长,修改难度也是恒定的,不像传统命令范式会随着规模增长修改难度暴涨。打个比方,使用命令范式编程就像盖楼,每个砖块就是指令,当修改时移动任何一块砖都可能导致崩塌,因为它是顺序向上积累的;而新范式描述的是抽象的关系网,修改只是调整指向关系而已,无关顺序,稳定可靠。(正好救赎不可靠的 AI )

最后总结,其实这代表了一种网状结构的自动状态机,或许是/或贴近程序的最简单形态。

相关推荐
superman超哥20 分钟前
Rust String与&str的内部实现差异:所有权与借用的典型案例
开发语言·后端·rust·rust string·string与str·内部实现·所有权与借用
ssshooter30 分钟前
复古话题:Vue2 的空格间距切换到 Vite 后消失了
前端·vue.js·面试
IamZJT_36 分钟前
拒绝做 AI 的“饲养员” ❌:前端程序员在 AI 时代的生存与进化指南 🚀
前端·ai编程
MM_MS40 分钟前
Halcon控制语句
java·大数据·前端·数据库·人工智能·算法·视觉检测
愈努力俞幸运1 小时前
rust安装
开发语言·后端·rust
踏浪无痕1 小时前
JobFlow 负载感知调度:把任务分给最闲的机器
后端·架构·开源
程序员Agions1 小时前
程序员武学修炼手册(二):进阶篇——小有所成,从能跑就行到知其所以然
前端·程序员
UrbanJazzerati1 小时前
Python自动化统计工具实战:Python批量分析Salesforce DML操作与错误处理
后端·面试
小画家~1 小时前
第四十六: channel 高级使用
java·前端·数据库
我爱娃哈哈1 小时前
SpringBoot + Seata + Nacos:分布式事务落地实战,订单-库存一致性全解析
spring boot·分布式·后端