开发思想 – KISS/DRY、奥卡姆剃刀、重复发明轮子、过度工程/设计/YANGNI

重复发明轮子

每个开发人员都有英雄主义情结,这种情结驱动我们去做一些创造性的工作,严重的情况下,我们会情不自禁地重复发明轮子(re-invent the wheel)。

譬如,我们发现JavaScript里没有方法方便我们对一个数组进行快速操作,我们就动手开始写了,或许,你应该先看看Underscore或者更好的Fork版本Lodash。

譬如,大家用.NET开发一个游戏,发现没有脚本引擎类库,打算自己写一个,或许,你可以考虑一下DLR (Dynamic Language Runtime)支持的那些Iron系列,譬如IronRuby、IronPython等等。

譬如,大家用Xamarin开发了iOS/Android手机App,希望采集一些运行时信息,譬如用户的使用情况、程序产生的错误等等,所以打算自己写一个,其实,微软针对Xamarin开发了一个手机app管理平台:Mobile Center ( https://mobile.azure.com )

所以,我们不应该重复自己(DRY),不应该WET(Write Everything Twice),要KISS(Keep It Simple, Stupid!),正如我在另外一篇文章里所说的:https://kayow.com/2018/06/softwaredevelopmentthoughts1/ 

过度设计

极端情况下,我们会实现一些现在、短期甚至中期都不会用到的功能,这就是over-engineering(过度设计)。

譬如,我们设计一个内部使用的系统,现在公司员工数量有100个,我们预计并发用户数是50,根据公司的发展规划,接下来5年人数不会翻倍,所以我们的设计完全可以按照75个员工并发进行。

为什么不应该过度设计?譬如要达满足95%的需求,我们花了95%的时间,剩下了的5%,我们可能需要2倍的时间去实现,而要做到120%,我们可能需要5倍的时间。

而且,就像乌鸦喜欢收集一些闪亮的小玩意那样,我们热衷于研究那些很火热很炫酷的技术,这样才能显得我们特立独行,比别人优异。严重者,会不顾一切把这些技术引入现有的产品中,譬如一些Web项目原来是用angularjs编写的,因为react火,所以我们就用react重写了前端,那这个耗时的工作除了满足了开发人员的虚荣心和膨胀的ego,究竟带来了什么实质的产品收益?并没有。

所以,时刻告诫自己,每增加一个新功能之前,都应该问一下自己正:是否真的需要。若无需要,勿增实体,这就是奥卡姆剃刀理论。YANGNI(You Aren’t Gonna Need It),你并不需要它,也是这个意思。

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。