论为什么需要软件工程

版权声明:http://www.sunansheng.com/ https://blog.csdn.net/sunansheng/article/details/78802790
工程这个东西是很有意思的,我们说科学是掌握规律,技术是利用规律克服大自然的限制,而工程,却是利用技术来克服人自身的限制。技术会告诉你,造个金字塔,把石头垒成四棱锥就行了,如果你是个力大无穷的巨人,或者是个能意念移物的魔法师,你就啪啪啪把石头搬过来堆起来就完事了。但我们是凡人,我们力量很小,我们很弱,所以我们需要滚木,需要滑轮,需要绳索来帮忙,做了许多额外的麻烦事情,只为了克服我们肉体的自身限制。体力上有限制,智力上同样有限制。软件工程很大程度上就是解决我们人类智力上限制的问题,软件工程师在面对不知所谓的kernel dump的时候会无助,会哭泣,在面对无休止的接口变动的时候会歇斯底里,面对改一行代码系统就全挂的窘境束手无策,所以我们需要微内核、微服务这样的框架来约束系统,降低系统的复杂性,让我们所有犯的错误都能保持在可控的范围内,让因为我们的愚笨而写出的有bug的代码也能勉勉强强运行起来而不是分分钟crash,哪怕这些方法额外增加了许多工作量、还降低了效率。但是,总是有超人存在的,我们人要造一个纪念碑,设计一堆方案,superman会说,哈?这个事情,不是只要我去把那个石头举起来,然后飞过来,放在这里不就好了嘛?体力上差距这么大的超人也许不存在,但智力上差距这么大的超人却是存在的,所以要记住工程方法只是为了拯救我们这些凡人,对于超人来说,他们是不需要这些的,他们要做的仅仅是“搬起来,放下去”而已。
可以多人开发这件事情在软件工程上是至关重要的,如果一个工程必须每个程序员都完全理解整个工程的架构才能着手开发,那这个工程一定做不成,不说完全理解一个庞大项目本身不可能这个问题,大家理解也会有偏差,写出来代码合不到一起,这就是为什么需要有严格的模块拆分,而且接口必须控制在解耦的、可以理解的、数量尽量少的范围内,而且通过框架来避免错误相互扩散。

猜你喜欢

转载自blog.csdn.net/sunansheng/article/details/78802790