
下面是我的个人经验:
1)设计的人力成本过高。
例如开发一个团队内部使用的软件。该软件只需要在项目持续的6个月内进行使用。但是开发人员从界面到性能,从功能到安全性全方面的设计。最终导致该软件的开发消耗了3个月的时间。这时,不如用半个月的时间开发一个界面常简陋,甚至偶尔会崩溃的小程序。
2)设计的功能使用率很低。
例如开发一个P2P下载软件。该软件主要是提供下载的功能。但是实际开发过程中将10%的成本投入到软件的语音识别功能上。此时需要评估该功能的使用人群,使用频率,产品实际效果是否能达到预期等等。
3)实现该设计导致代码易读性,可维护性,性能下降。
我们在进行开发时就遇到该情况。实际产生作用的代码很少,但是在设计时强行追加了很多设计模式。虽然看上去“高大上”了,实际维护时,却需要花费大量的人力去维护该设计。有时甚至会出现这种设计模式导致功能复杂度上升的情况。这类问题往往是大型项目在进行设计时易出现的。总设计师希望把该设计贯穿到每个功能模块,但是却忽略了某些模块的特殊性。
以前总是举不出过度设计的例子,今天遇上一件事,总算有了一个反例:程序员A编写代码,记录用户购买商品记录,设计1个8字节字段,前4个放用户ID,后4个放商品ID。
粗看设计没有太大问题。实际编码中,发现数据库中商品ID,是long long类型,8个字节。他遇上困难,卡在那里了。他找上leader,说明要改设计,需要更多时间,完美兼容这种情况。
但是现在没有足够的时间,来做大的变动,于是找了个折中方案,整个字段8字节放商品ID,另外再用一张表去关联用户ID同商品ID的购买关系。
在我看来,这就是过度设计了。
我的方案,仍然坚持原有设计,前4字节放用户ID,后4个字节放商品ID的后4字节。这个方案,是有缺陷的,商品ID是一个自增的循环数,存在一种 用户ID+商品ID后4字节 重复的可能性。
但是我们考虑一下,现有商品ID增长到:约2亿,4个字节能够支撑40亿商品,现有商品库运营4年了。
按照现在的业务发展速度,无论如何,2年内,我看不到一点重复的可能。不需要重新设计,简单把功能实现。并记录,规划在1年后重构这部分代码。(很可能在1年内,这个模块就因为其它原因要重构)
为什么要为了未来的支撑能力,耗费现在的开发资源呢?做一个额外的表,不是增加新的逻辑吗?
再举一个例子,对闰年的判断逻辑:
1、 if($Year%4==0) return Trueelse return Fasle
2、if ( ($Year%4==0 && $Year%100!=0 ) || $Year%400==0 ) retrue Trueelse return False
我选择了第一种逻辑,当然第二种更为标准。我的原因是:
1、第一种逻辑速度够快;
2、我做的不是日历程序,只是一个应用需要判断闰年;2100年,对我来说太遥远,我的编码活不到那一年,中间肯定被别人废弃了。在未来的80多年中,我的代码都不会出问题。
过度设计,需要更多设计时间和测试成本,如无必要,还是尽量简洁一些好。
当你把【代码清洁】当作目的时,就是恶习了。为什么会存在代码洁癖,究其根本,是我们对“维护代码”这种让人抓狂的事情的实际需求,让我们越来越注意到清洁的重要。比如说 1 == a 这个,如果从来没有把 a == 1 写错成过 a = 1 导致你调式很长时间过,恐怕这个人能难把这个纳入到他的洁癖范畴内,即使他对空格的使用要求近乎苛刻。在我的圈子里面,一直有很多搞单片机的的。这些人主业是做电子甚至是机械的,当需要一个控制器的时候,会用单片机写一些非常小的程序来实现控制。我发现在这个圈子里面,就几乎没有代码洁癖的人,别说洁癖了,代码的基本清洁都看不到,即使这个人在做电路板的时候一板一眼。为什么?因为没有需求,代码本身长度都很小,而且都是写过无数遍的基本套路,甚至大段大段的代码都是用辅助工具直接生成的;这些代码对他们来说,多乱都很难写错,并切,最重要的,这些代码几乎都不需要维护,因为功能简单,程序就是可以做到没有BUG,需要升级的时候也很少。混乱的代码,于他们的工作效率,几乎没有什么影响;相反,由于开发环境难以想象的简陋,整理代码会浪费他们大量时间。既然代码洁癖是由需求引起的,那么我们来反思一个问题:我们做的和我们需要的一致么?其实问题问出来的时候,相信大家有答案了,既然用到了“洁癖”,肯定代表“做多了”,《编程之道》这本故事书里面有个有趣的小故事:一个初学者被要求编写一个财务软件。他疯狂地工作了很多天,但他的主管检视他的程序时发现,它写了一个编辑嚣,一个图形程序集,和人工智能的界面,但是看不到任何跟财务有关的东西。主管要求解释时,程序员被激怒了:你太没耐心了,我会在最后写财务的部分。这就是一个典型程序员在干的事情,所有的优秀程序员都要经历这样的阶段,过度设计、过度优化、过度使用技巧等等等等,因为我们就是这样的群体,对这些的追求就是我们学习编程提高自己的动力,所以我们必然会经历这样的事情
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)