前端为什么需要标准化
你不能要求用户访问你的网站时先安装你提供的配套的浏览器或运行环境(这是java applet,flash等第三方技术失败的原因之一),前端必须有一个通用的运行环境,es和dom的出现统一了前端体验,才造就了各品牌浏览器的争妍斗艳。对于现代浏览器先驱“网景领航者”的大起大落和ie浏览器的垄断,前端技术没有及时标准化要负主要责任,Linux无法进入桌面市场要我说也要归咎于桌面技术没有标准化。世界上没有第三个移动操作系统也是因为app开发技术没有统一,客户端技术的发展自然走向统一,electron和flutter以及react native的流行正是印证了这一趋势,当然typescript等技术的流行也暴露了es标准化的弊端,在es6之后才有所缓解。不过总体来说客户端技术统一利大于弊。
服务端不需要标准
但服务端不同,服务端程序在单一环境中运行,不需要考虑兼容问题,一旦部署完成也不会轻易迁移,正是因为没有统一标准才造就了后端技术的空前繁荣,有了java,node,python,go,rust,c/c++等百家争鸣,各有各的应用场景,也不会出现让Apache支持java或让jre支持php这样的需求(即便jre有兼而收之的倾向)。lisp系和ml系编程语言家族的不断繁衍再次印证了这一点。
客户端技术标准化可谓势在必行,但后端技术标准化就是有百害而无一利。客户端繁荣得益于标准化,服务端繁荣得益于对差异的包容,比如graal。
SQL的弊端
而SQL作为服务端技术恰恰违背了这一点。SQL标准将一套理念应用到整个数据库领域,严重限制了数据库的发展,何况同样是标准,SQL远没有es每年一版的更新速度,数据库厂商也没有浏览器厂商对标准的跟进速度,SQL无法适应数据库技术的快速发展,各数据库厂商纷纷开发各自对SQL的扩展,几乎不存在一个大型项目可以不做修改直接在SQL数据库之间切换。SQL从来没有统一过。在我看来,SQL除了限制数据库技术的想象力,没有起到任何标准化的意义,没有标准化的命,全是标准化的病。SQL标准失去了引领数据库发展的意义(同样的问题出现在es6之前的js上,而SQL的问题仍然没有要改观的迹象),从数据库厂商到开发者都没有对数据库技术标准化的强烈需求。
技术本身就是相互借鉴对立统一,就像java和c#,JavaScript跟JScript,过分强调统一只会扼杀创新。SQL不应成为标准,更不应代表整个数据库领域,SQL应该只是数据库家族的小小一员。nosql的崛起标志着数据库的技术复兴,或许如今的nosql作为SQL的增强终将取代SQL。