软件业有一本很出名的书《人月神话》,里面有一段论述,就是"没有银弹"",如果看懂了的人,应该就不会纠结什么低代码了。简单来说,银弹是指让软件开发效率提升10倍的方法,没有银弹就是作者不认为十年内(现在过去大概50年了吧)有相应的技术能达到。
理由是:软件开发存在两种复杂性,*本质复杂性*+和*附加复杂性*+。
本质复杂性是事物本身的复杂性,跟使用的工具,方法无关。
附加复杂性是解决问题的方法,工具等带来的复杂性。
附加复杂性在整体中的占比没有到9/10,所以即使再优秀的工具和方法也不能把复杂性降低到1/10。
这么多年从汇编,到C语言*,到面向对象*,到各种框架,各种方法论都在致力于降低附加复杂性,也有效果,但都不是银弹。软件开发中的本质复杂性就是现实世界的各种复杂性,而不是编程语言难学难用所带来的,相反编程语言是针对这些复杂性所设计的工具。我们可以不断优化工具,或者不懂问题使用不同工具,但是显然你还是要把最大的精力放到应对现实世界复杂性上。
## 典型回答
这个问题是很多读者在一些文章中评论的,因为我多次提到过没有银弹,那么这是个啥意思呢?
没有银弹,其实来源于一本书,书名叫《没有银弹:软件工程的本质性与附属性工作》翻译自《No Silver Bullet—Essence and Accidents of Software Engineering》
这句话表达的意思就是:由于软件的复杂性本质,没有一个什么技术、手段、方案是可以解决所有问题,而不带来任何负面影响的。
书中的故事:
在民俗传说里,所有能让我们充满梦靥的怪物之中,没有比狼人更可怕的了,因为它们会突然地从一般人变身为恐怖的怪兽,因此人们尝试着查找能够奇迹似地将狼人一枪毙命的银弹。
我们熟悉的软件项目也有类似的特质(以一个不懂技术的管理者角度来看),平常看似单纯而率直,但很可能一转眼就变成一只时程延误、预算超支、产品充满瑕疵的怪兽,所以,我们听到了绝望的呼唤,渴望有一种银弹,能够有效降低软件开发的成本,就跟电脑硬件成本能快速下降一样。
但是,我们预见,从现在开始的十年之内,将不会看到任何银弹,无论是在技术上或管理上,都不会有任何单一的重大突破,能够保证在生产力、可靠度或简洁性上获得改善,甚至,连一个数量级的改善都不会有。
然而,怀疑并非悲观,虽然我们预见不会有任何重大的突破,而且事实上,我相信发生这种重大突破也不符软件的本质,但是,仍然有许多令人振奋的创新正在进行当中,若能按部就班、持之以恒地予以发展、散布,并灵活运用的话,想必应该会得到一个数量级的进展。快捷方式是不会有的,但有志者事竟成。
人类能克服疾病的第一步,就是以细菌说(germ theory)淘汰了恶魔说(demon theory)和体液说(humours theory),正是这一步,带给了人类希望,粉碎了所有奇迹式的冀望,告诉人们进步是要靠按部就班、不辞劳苦而来,得在清洁卫生方面持续不断地投入心血,养成良好习惯,才是正道。如今,我们面对软件工程也是一样。