吃"软饭"的一些不良思考习惯
1. 认为“简单原则”,就是不加认真思考,制作最简单易于实现的系统。
殊不知真正的简单是深思熟虑之后得到的结果。要多视角考虑,并且,必要时还需要跳出来思考,避免钻牛角尖,这样,才可能拿出真正简单有效的方案。
2. 对于难以实现的需求,而不是认真客观地认识和挖掘他们,然后根据可用的技术和资源,找出合理的解决方案,而是否认这些需求的存在。
这样往往实现的功能不能满足真正的需求,导致在系统的各个方面都要处理特殊问题(Special Case),这样,一个系统充满处理特殊逻辑的代码,系统开始变得不易维护和扩展。
3. 每次使用算法,就自认为需要处理的数据量肯定巨大,性能要求极高。
前不久,同事为了设计一个需求,需要去除数组里为空的数据和重复的数据,为了得到极好的性能,进行了大量的研究。然而这个功能并不常用,而且数据量不大,数组的元素经常是少于3个的,最多也没有多少,结果花费了大量时间,做出来的东西对于处理这种极少量的数据反而性能并不理想。
4. 往往纠缠于那些不经常使用的功能,而不是经常使用的功能。
出现这种问题的原因是:因为经常使用的功能相对于那些不经常使用的功能稍微简单一点,这样,为了那些不经常使用的功能改变了系统、设计结构,不经常使用的功能易于实现,而经常使用的那些功能却难以实现,影响了正常功能的使用。
5. 认为使用了面向对象的语言,就设计出了面向对象的系统。
其实不然,大多数系统仍是过程式思维设计出的结构,未能使用到面向对象带来的易扩展,易维护,易重用等好处。
6. 认为使用了设计模式就是好的设计,拼命地把各种学到的模式生搬硬套到系统。
刚开始还从需求入手,但是逐渐地,为了使用设计模式,使要解决的问题偏离和真正问题,臆想出不适合的或者根本不存在的需求。
7. 我们需要的是有智慧的程序员,而不只是聪明的程序员。
聪明的程序员会把某一方面做到了极致,而有智慧的程序员还需要从各个方面做权衡,最终得出合适的解决方案,不仅Think,还需要Think Different(不是Think Differently):
I. 从系统的的各个方面,不同视角看待问题。
II. 从目前的各种资源考虑,包括人力,物力资源。
III. 从发展趋势考虑,设计可以扩展,容易改变的系统。
IV. 跳出以前思考问题的固定思维模式。当一个接口的实现里充满了对于各种各样的special case处理,而不能跳出这些方面,对这些special cases进行更为泛化的分析,给出更为泛化的设计。