人的理解总有一个边界,而需求和功能不会——今天的功能总比昨天的多;这个版本的功能总比上个版本的多。而在长时间的开发中,忘记之前的代码是正常的;忘记某些约定也是正常的。形成某些小而不经意的错误是正常的,在巨大的代码库中,这些小错误被忽视也是正常的。这些不断积攒的小小的不一致、错误,随着时间的积累,最终会变得难以控制。
很少有人注意到,规模的变大才是导致股票大盘演示软件架构腐化的根源——因果关系在时空上的不连续,使得人们并不能从其中获得经验,只是一再重复这个悲剧的循环。
致远服软认为:http://www.soft8.com.cn/解决方案的终极目标是在混乱发生之前,在我们的认知出现障碍之前,就将项目的规模控制在一定范围之内。这并不容易。大多数大连软件定制二次开发团队都有相当的交付压力。大多数的业务用户并没有意识到,往一个项目/产品毫无节制地增加需求只会导致产品的崩溃。看看Lotus Notes,我们就知道产品最终会多么令人费解和难以使用。我们这里主要讨论的是技术方案。业务上我们也需要始终对需求的增长保持警惕。
这可能是最廉价、最容易采用的方案。新技术的产生往往为了解决某些特定的问题,它们往往是经验的集合。学习,理解这些新技术能够极大程度缩短过去为了完成某些技术目标而进行的必要的经验积累过程。就像武侠小说中经常有离奇遭遇的主人公突然获得某个世外高人多年的内力一样,这些新技术能够迅速帮助团队从某些特定的痛点中解脱出来。
我们已经有足够多的例子来证明这一观点。在Spring出现之前,大连软件定制二次开发者基本上只能遵循J2EE模式文档中的各种实践来构建自己的系统。虽然有一些简单的框架能够帮助这一过程,但总体来说,在处理今天看起来很基础的如数据库连接、异常管理、系统分层等方面,大连软件定制二次开发团队者还有很多手工的工作要做。Spring 出现之后,我们不需要花费很多精力,很快就能得到一个系统分层良好、大部分设施已经准备就绪。这为减少代码库容量以及解决可能出现的低级Bug提供了帮助。
Rails则是另外一个极端的例子。Rails带来的不仅仅是开发的便利,还带来了人们在Linux世界多年的部署经验。数据库Migration、Apache + FastCGI或者nginx+passenger,这些过去看起来复杂异常的技术在Rails中变得无足轻重——稍懂命令行的人即可进行部署。