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

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

github.com/rainforeste...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
lzp07913 分钟前
C#如何优雅处理引用类型的深拷贝(贰)
spring boot·后端·ui
KaMeidebaby3 分钟前
卡梅德生物技术快报|适配体筛选技术架构演进:SPARK-seq 高通量平台原理与技术流程解析
大数据·前端·其他·百度·架构·spark·新浪微博
Mr.Java.14 分钟前
Spring AI MCP Server分布式翻车现场:Streamable协议的甜蜜与危险,以及无状态救赎
java·后端·spring·ai·负载均衡
ZC跨境爬虫14 分钟前
跟着 MDN 学CSS day_7:(层叠优先级与继承)
前端·css·数据库·ui·html
夕除14 分钟前
spring boot 11
java·spring boot·后端
枕星而眠18 分钟前
C++ String类精讲:从基础用法到进阶底层原理
开发语言·c++·后端·学习方法
Shadow(⊙o⊙)19 分钟前
qt信号和槽链接的接入与断开
开发语言·前端·c++·qt·学习
慕斯fuafua20 分钟前
JS——DOM操作
前端·javascript·html
忆林52022 分钟前
Jenkins前端打包构建老项目拯救指南
运维·前端·jenkins
念何架构之路23 分钟前
Go pprof性能剖析
开发语言·后端·golang