软件构建中的设计

来源:互联网 发布:java 组合算法 n选m 编辑:程序博客网 时间:2024/06/10 06:13
    看了这章已经由一段时间了,总觉得自己对于这章的把握不够到位,对于一个软件产品如何进行更好的设计,这是每一个软件工程师必须面对的难题
    设计中存在很多的挑战。设计是一个险恶的问题,就像Tacoma Narrows大桥,因为没有考虑到大风给它带来的横向谐波,最早大桥中狂风中坍塌,对于编程中,我们需要一遍遍的修改代码中存在的问题,因为我们专业,所以我们需要一次次的完善自我,完善代码;设计是个了无章法的过程,因为在设计的过程中我们犯很多错误,我们很难判断自己设计设计到什么细节才算够,总是没有确切的终点,只有起点;当然设计还有很多的面临的挑战,比如:设计就是确定取舍和调整顺序的过程、设计受到诸多限制、设计是不确定的、设计是一个启发式过程、设计是自然而然形成的,在这些挑战中,我比较赞成“设计是一个启发式过程”这个观点,因为设计过程中存在很多的不确定性,因此设计技术也存在着探索性,即“经验法则”,我们没有一套完整的流程去解决这些问题,只能去减少,在试验中总会犯错误,这是在所难免的。
    在这里我们需要理解一点,那就是管理复杂度是软件的首要技术使命,在软件开发的过程,总是存在着偶然的难题和本质的难题,对于偶然性的难题,通过Brooks观察发现,软件开发中的偶然性难题在很久以前就已得到解决,但是对本质性难题,在解决方面相对比较缓慢。因为现在软件的复杂度跟以前不可同日而语,并非一两个人所能解决的,是一个浩大的工程。
    对于软件复杂度,我们该如何解决?首先我们需要去了解其根源:1.用复杂的方法解决简单的问题;2.用简单但错误的方法解决复杂的问题;3.用不恰当的复杂方法解决复杂的问题。

原创粉丝点击