AI下程序员和DBA其实也不必迷茫
云来了会不会去掉DBA
多年前我和瑞典马工在网上针对这个互相发公众号引发了争论。我们也在直播环节中进行了辩论。如今已经相逢一笑泯恩仇。马工回国在上海逗留的时候我们还一起聚餐。这个问题大家有各自的坚持,而更大的一个问题来了。AI时代下不仅仅是DBA,现在要不要程序员的话题也起来了。这和当年如出一辙,只是比当初的风暴更大了。因为涉及的面更大了,而且是因为现在AI发展的太快了。
AI的强大会不会去掉程序员和DBA
AI就像一个刚毕业的985的博士一样,他能给你很惊艳的效果,但是由于不了解很多背后(隐含)的事情,会给你惹出大麻烦。比如严格执行考勤,把总是迟到前台的美女开除了。而这个前台可能是老板不方便公开的女朋友。而AI对此事是不可能知道的,但是这个又不能承担相应的责任。从这个角度上来说大家都说,AI至少不能背锅吧?
就像云或者说AI无法替代DBA一样,AI也无法完全替代程序员和DBA
在开放原子基金会的大会上有幸结识复旦大学彭教授演。软件开发的根本性(Essence)困难和偶然性(Accident)困难:根本性的困难在于对于构成抽象软件实体的复杂概念结构的构思(主要是需求和设计),而产生这种抽象软件实体的编程语言表示只是偶然性的困难。
这对我以前的论点上有了方法论上的支持。举例来说程序员可能从上班到下班只有1个小时在做自己的开发工作,但是其他的沟通协调设计甚至返工都是不直接体现到开发工作量上的。即隐形成本和工作很多人没看到。用一句俗话说:只看见贼吃肉,没看见贼挨打。
有很多经验和积累是不容易量化的。中国人很多时候会说一句话:只可意会不可言传,就是这个道理。我以前做项目时候遇到刁钻的客户,我的上级告诉我应该这样去说。我去说了,但是效果很差。然后过几天他来了,他也说同样的话。效果很好。是我表达不到位吗?不是。这里因素很多,语气,气场,甚至职级不同带来的因素很大。再举一个例子,某公司DBA说这些SQL写的太差了。有的中层领导说,情况就是这样,你把他解决好。但是当更大的领导来了一看,就说写SQL这么差,你们良心过得去吗?中层的领导马上说,我们马上整改。以上的例子就是AI也好,云也好都不能去解决的。
涉及软件开发的根本性困难(即概念级别上的分析和设计),而大模型在这方面并不具备所需要的能力。所以云和AI能管理好基础环境和简单的应用。但是对于侵入软件应用开发就几乎不可能了。因为每个行业和每个场景都不一样。同一个行业不同公司的场景也不一样。需求的提出方都不一定是一个有专业知识和背景的人,需求从开始可能就错了。而设计者也未必有设计能力,一通瞎搞。最后让AI和云来开发和运维,这非常不靠谱。
防御性编程和防御性运维
软件形态的多样性: 基础性和特异性强,功能及设计复杂。生存周期长且不断演化。对于这类软件,只有经验丰富的专家型开发人员才能驾驭。所谓祖传代码也是在几年甚至十几年过程中演化而来的。这种从某种程度上来说是防御性编程。而微服务、中台、大数据、区块链这些跟风导致技术栈复杂运维运营复杂的可以说是防御性(架构)运维了。云可以让资源不断膨胀的去适应,只是要花费大量的钱。而AI开发替代很难,因为这十几年的项目经历,无数坑。明枪暗箭,甚至人情世故和江湖恩怨都可以体现在应用软件中。这水太深了,AI无法识别。
由此造成理解及编写软件代码的一部分重要背景知识并不在代码本身而在代码之外。同样由此造成理解及运维数据库的重要背景知识并不在运维手册和运维知识库之中,甚至在技术之外。
云和AI是趋势
云和AI是趋势,但是也有用不了云和AI的。那么我们就去干。
即使有云和AI,也还有很多是云和AI做不了的。我们就去干。
云和AI是我们的辅助,不是敌人。