失眠的夜里,偶然读到一段话,据说是管理学中的“苛希纳定律”(我对管理学是外行,不知道是否管理学中真的有这么一个定律):如果实际管理人员比最佳人数多两倍,工作时间就要多两倍,工作成本就要多四倍;如果实际管理人员比最佳人数多3倍,工作时间就要多3倍,工作成本就要多6倍。
我没有什么管理工作的经验,不过这个定律似乎同样适用于软件设计。当过度设计带来额外的复杂度时,它的负面效应似乎不是线性增长,而是成倍数的向上翻。Bug,额外的维护成本,升级和改造都成了噩梦。
我个人的切身体会,就是有一段时间热衷于复杂的设计,用各种模式和多层架构来实现功能。诚然,这样的设计带来了相当大的弹性,但是过度复杂的程序难以调试和维护。特别是对于我这样并没有高超能力的开发人员,程序稍复杂些,就会逐渐超出控制。最后面临的将是淹没在代码的海洋里。
所以近来开始转向轻量级的设计方式,也越来越感叹这个世界的螺旋式轨迹。是的,我们不应该为不需要的功能付出额外的代价,也不应该为”可能“的需求去实现某种功能——考虑扩展的话,也应该是在可以预计的范围内,同时尽量预留接口而不是实现。虽然没有对AOP有深入的了解,但是也能感觉到这种”织入“式的思想确实可以带来这样美妙的平衡。如果我们可以更方便的织入代码,就可以方便和灵活的迭代我们的软件。
Sample is Smart,如是如是。读STL,感觉有一种震撼,同时开始憧憬.net 2.0。
科技术的进步应该可以给我们工作得更轻松,而不是相反。如论作为用户还是创造者,这都是我应该记住的事。