相信做研发的同学们大部分都是听过这个原则的,这就是大名鼎鼎的“奥卡姆剃刀”原理。
原理很简单,也是我们做工程实践的一个重要指导原则,之前一些帖子也分享过几个原则(不要过度设计、封装分层、高内聚、短小精悍的设计))。原理说的是“如无必要,勿增实体”,英文:Entities should not be multiplied unnecessarily ,也类似中国的传统哲学“大道至简” 。
咱们是技术社区,还是从技术说起。在系统设计之初,我们在实现需求的前提下,尽可能的少的引入外部依赖或者减少实现环节,尽可能的减少系统复杂程度,能用手榴弹的不要上核武器。带来的好处很多,简单罗列一些:
- 减少技术管理成本;
- 减少团队沟通成本;
- 减少学习成本;
- 降低系统故障概率;
- 少了外部依赖可控性更强
好处的点还能列挺多。 坏处也有一些,简单设计了可能会重复造简陋的轮子、降低开发效率。工程人员还是要在实践过程中综合考虑一下,尤其是技术栈的管理者,谨慎引入新工具。
其实写奥卡姆剃刀想说的不仅仅是技术,有心的同学可能会去详细的了解一下奥卡姆剃刀原理的诞生过程:
公元 14 世纪,来自奥卡姆的威廉(William of Ockham)对当时无休无止的关于“共相”“本质”之类的争吵感到厌倦,于是著书立说,宣传只承认确实存在的东西,认为那些空洞无物的普遍性要领都是无用的累赘,应当被无情地“剃除”。他所主张的“思维经济原则”,概括起来就是“如无必要,勿增实体。”因为他叫威廉,来自奥卡姆,人们为了纪念他就把这句话称为“奥卡姆剃刀”。
是十四世纪诞生的一种思维原则,并不是软件工程领域的独有思维方式,甚至看起来像是“抬杠通识”。所以第一层拓展是,这个原则可以一定程度上的指导我们日常生活。
第二层拓展,想想那时候欧洲刚结束黑暗中世纪不久,文艺复兴也才开始了一段时间,当然不可能有软件工程这种事物存在,甚至大型的生产项目可能都不多甚至没有。是哪位前辈把这样的思想引入到工程实践领域的?又是如何觉得这样的一种原则可以在工程领域获得收益的?这中间的思维过程值得让人学习。
第三层拓展,我们技术同学从中学习到的仅仅是要打开视野,不要只专注技术领域,学习一些技术以外的知识开拓视野同样非常重要,学一些“无用之学”;更重要的是要有迁移学习的能力。如何把相通的思维或认知迁移到新的系统中去,机器学习里有个词叫“迁移学习”或者“嫁接学习”,这是我觉得每一位同学值得思考的地方,站在巨人的肩膀上看的更远,走的更远。
#今日份十分钟#分享+自勉。“吾生而有涯,而知也无涯,以有涯随无涯,则殆已!”,多学一些不那么无常善变的知识。