最近为工作中和学习中遇到一些问题而发愁,夜不能寐,做梦都在寻求方法。

问题简单的来说,就是开发过程中遇到很多本觉得不该遇到的问题,比如数据关系在数据表的设计,比如说自动化测试无法接入,ORM接入设计,开发流程如何优化,Web标 准性问题等等。我罗列了大约30条会导致开发效率降低的因素,也一直在思考怎么解决他们,如果让我来设计他们,会用什么方式来提高效率,让系统更优美。

读完《人月神话》和《走出软件作坊》之后,似乎有了一些明悟。今天wiki到没有银弹这个话题,我意识到自己太过于追求一步到位了。

Brooks 认为,附加性的困难会随着工具的改善而逐渐淡化,反而是本质性的困难最难以解决,因为大部分的活动是发生在人们的脑海里,缺乏有效的辅助工具。依造 Brooks 的说法有下列几项:[2]

复杂性(complexity):软件要解决的问题,通常牵扯到计算步骤,这是一种人为、抽象化的智能活动,多半是复杂的。

不可见性(invisibility):尚未完成的软件是看不见的,即使利用图示说明,也常无法充分呈现其结构,使得人们在沟通上面临极大的困难。

协同性(conformity):在大型软件环境中,各子系统的接口必须协同一致。由于时间和环境的演变,要维持这样的一致性通常十分困难。

变异性(changeability):软件所应用的环境常是由人群、法规、硬件设备、应用领域等,各因素所汇集而成,而这些因素皆会快速变化。

没有银弹这句话大学时候就听过了,作为伪完美主义者,我一直觉得有完美的解决办法。一度认为OO就是解决之道。现在回首来看,的确是没有银弹。

改变不了大环境,就改变小环境,改变不了小环境,就等待改变的机会~


原文链接: 没有银弹 | Log4D

3a1ff193cee606bd1e2ea554a16353ee

欢迎关注我的微信公众号:窥豹

窥豹