软件开发新思维
无论是简单的问题解决步骤,还是包含了大量实践活动的软件过程域(科目),它们都属于宏观的解决途径。然而,任何软件问题,其最终解决还是要落实到具体的细节之上,这些问题细节需要采用与之相对应的微观方法来解决。例如,架构设计作为技术解决过程域中的一项实践(或者分析设计科目中的一项活动),涉及到大量的模块划分问题;而帮助人们进行划分的方法则主要有比较、分类等思维法。
比较、分类等都属于普通的逻辑思维法,我们甚至在中学时就已经学习过这些知识。然而不幸的是,国内不少程序员并不能有意识地去运用这些逻辑思维方法来解决软件问题;甚至因为不知道如何使用常规科学思维来完成开发任务,而将软件开发神秘化。
本章主要探讨各种常见的科学思维方法,及其在软件开发活动中的应用途径。其中引用了一个参考程序实例,来展示比较、分类、类比、联想、分析、综合、归纳、演绎等主流逻辑思维法在日常开发中的运用。
第一节 软件开发中的思维方法
从方法论的角度来看,人类在解决问题时所使用的思维方式有:分析、归纳、综合、想象、直觉等等。这些(战术级的)基本方法,被重复使用于问题解决过程中的不同环节;同样,它们也被大量地应用于软件开发的活动中。可以说,软件工程师微观上的思维模式、方法、技巧等,并没有超出这些传统的科学思维范畴。
软件开发中的宏观与微观方法
在第二章中,我们探讨了问题解决步骤与软件过程。软件过程在整体上提供了软件开发的大粒度框架,确定了主要的实践活动,及其先后顺序。毎项活动都有对应的输入、输出工件,并由相应的人员角色在活动中处理这些工件。这些处理工作包含了若干的问题,例如,需求(过程域)科目的工作流明细中,有开发前景文档的(实践)活动,而前景文档涉及到识别项目的涉众、确定目标软件的边界范围等问题;开发团队必需分别去一一解决那些问题,即要组合执行若干个问题解决周期。然而,每个问题解决步骤本身并非想象的那么简单,它还包含了更加细致的内容;例如,识别项目的涉众,先要收集与项目相关的各类人员的信息,然后分析他们的状况、比较他们与项目的关系,最后归纳出相关的涉众类型。分析、比较、归纳等在此最终落实了软件问题的解决,它们实际上属于软件开发中的微观方法。
下图是软件开发过程、活动、问题解决、以及微观思维方法的层次结构示意:
图2.1软件开发过程、方法层次结构示意图
如图所示,无论是简单的问题解决步骤,还是包含了大量实践活动的软件过程域(科目),它们都属于宏观的解决途径。不过,任何软件问题,其最终解决还是要落实到具体的细节之上,这些问题细节需要采用与之相对应的微观方法来解决。例如,架构设计作为技术解决过程域中一项实践(或者分析设计科目中的一项活动),涉及到模块的划分问题;而帮助人们进行划分的方法主要有比较、分类等思维法。比较、分析、归纳等都属于逻辑类思维方式;此外,还有直观类思维、与想象类思维等方式,它们相对逻辑思维法而言是一种不可或缺的补充,并往往起到升华的作用,例如灵感与顿悟等。
破除软件开发中的神秘主义
国内软件界存在一定程度的神秘主义倾向,在自己无力使用常规软件工程途径解决软件问题后,往往简单地将软件开发归于艺术化、玄学化。
经常看到的一种典型现象——某个高手熬了几个通宵,终于拿出了一个精巧的设计方案;团队其他成员都很钦佩他,并想向他学习其中设计的技巧;但高手吹嘘说这完全是靠其灵感所得,思考过程毫无逻辑可言;久而久之,团队成员将这个高手看作是充满神秘色彩的艺术家,而非普通的工程师,并且认为软件开发是一门艺术,不能靠逻辑思维来解决。
这个高手的设计思考过程,本质上仍然是分析、比较、归纳等各类逻辑思维方法的组合应用,形象、或直观的灵感思维则可能在此基础上起了升华作用,但绝非其吹嘘得那样占据了主要的位置。实际上,只要是智力良好、并接受过系统的逻辑思维以及其它思维方式训练的程序员,都有可能使用普通的思维方法,去解决软件中的大部分问题。反过来讲,任何正确的软件方案,都可以在逻辑上找到令人信服的依据。
国内软件工程的教学培训,已经开始关注软件过程、问题解决等宏观方法,但却仍然忽略了基本的科学思维方法在软件开发中的微观应用。于是造成开发人员知道在项目中要去做哪些活动,但还是不清楚这些活动到底该怎么去做。这也是神秘主义在国内软件界能够喧嚣一时的原因之一。
本书将同时在过程、活动及其关联问题、以及具体解决问题的微观方法等三个层面,来探讨软件架构的开发之道;希望能让读者不但知道设计架构需要做什么,同时还明白具体该怎么做。
比较、分类等都属于普通的逻辑思维法,我们甚至在中学时就已经学习过这些知识。然而不幸的是,国内不少程序员并不能有意识地去运用这些逻辑思维方法来解决软件问题;甚至因为不知道如何使用常规科学思维来完成开发任务,而将软件开发神秘化。
本章主要探讨各种常见的科学思维方法,及其在软件开发活动中的应用途径。其中引用了一个参考程序实例,来展示比较、分类、类比、联想、分析、综合、归纳、演绎等主流逻辑思维法在日常开发中的运用。
第一节 软件开发中的思维方法
从方法论的角度来看,人类在解决问题时所使用的思维方式有:分析、归纳、综合、想象、直觉等等。这些(战术级的)基本方法,被重复使用于问题解决过程中的不同环节;同样,它们也被大量地应用于软件开发的活动中。可以说,软件工程师微观上的思维模式、方法、技巧等,并没有超出这些传统的科学思维范畴。
软件开发中的宏观与微观方法
在第二章中,我们探讨了问题解决步骤与软件过程。软件过程在整体上提供了软件开发的大粒度框架,确定了主要的实践活动,及其先后顺序。毎项活动都有对应的输入、输出工件,并由相应的人员角色在活动中处理这些工件。这些处理工作包含了若干的问题,例如,需求(过程域)科目的工作流明细中,有开发前景文档的(实践)活动,而前景文档涉及到识别项目的涉众、确定目标软件的边界范围等问题;开发团队必需分别去一一解决那些问题,即要组合执行若干个问题解决周期。然而,每个问题解决步骤本身并非想象的那么简单,它还包含了更加细致的内容;例如,识别项目的涉众,先要收集与项目相关的各类人员的信息,然后分析他们的状况、比较他们与项目的关系,最后归纳出相关的涉众类型。分析、比较、归纳等在此最终落实了软件问题的解决,它们实际上属于软件开发中的微观方法。
下图是软件开发过程、活动、问题解决、以及微观思维方法的层次结构示意:
图2.1软件开发过程、方法层次结构示意图
如图所示,无论是简单的问题解决步骤,还是包含了大量实践活动的软件过程域(科目),它们都属于宏观的解决途径。不过,任何软件问题,其最终解决还是要落实到具体的细节之上,这些问题细节需要采用与之相对应的微观方法来解决。例如,架构设计作为技术解决过程域中一项实践(或者分析设计科目中的一项活动),涉及到模块的划分问题;而帮助人们进行划分的方法主要有比较、分类等思维法。比较、分析、归纳等都属于逻辑类思维方式;此外,还有直观类思维、与想象类思维等方式,它们相对逻辑思维法而言是一种不可或缺的补充,并往往起到升华的作用,例如灵感与顿悟等。
破除软件开发中的神秘主义
国内软件界存在一定程度的神秘主义倾向,在自己无力使用常规软件工程途径解决软件问题后,往往简单地将软件开发归于艺术化、玄学化。
经常看到的一种典型现象——某个高手熬了几个通宵,终于拿出了一个精巧的设计方案;团队其他成员都很钦佩他,并想向他学习其中设计的技巧;但高手吹嘘说这完全是靠其灵感所得,思考过程毫无逻辑可言;久而久之,团队成员将这个高手看作是充满神秘色彩的艺术家,而非普通的工程师,并且认为软件开发是一门艺术,不能靠逻辑思维来解决。
这个高手的设计思考过程,本质上仍然是分析、比较、归纳等各类逻辑思维方法的组合应用,形象、或直观的灵感思维则可能在此基础上起了升华作用,但绝非其吹嘘得那样占据了主要的位置。实际上,只要是智力良好、并接受过系统的逻辑思维以及其它思维方式训练的程序员,都有可能使用普通的思维方法,去解决软件中的大部分问题。反过来讲,任何正确的软件方案,都可以在逻辑上找到令人信服的依据。
国内软件工程的教学培训,已经开始关注软件过程、问题解决等宏观方法,但却仍然忽略了基本的科学思维方法在软件开发中的微观应用。于是造成开发人员知道在项目中要去做哪些活动,但还是不清楚这些活动到底该怎么去做。这也是神秘主义在国内软件界能够喧嚣一时的原因之一。
本书将同时在过程、活动及其关联问题、以及具体解决问题的微观方法等三个层面,来探讨软件架构的开发之道;希望能让读者不但知道设计架构需要做什么,同时还明白具体该怎么做。
作者:不老神仙
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。