计算机是个复杂的机器,相比普通的机器(比如小家电、汽车),它可以在使用过程中对其「工作行为」进行「再定义和场景适配」,以解决不同场景下的人的需求和问题,这种「定义的结果」,对于机器的最终用户来说,是「应用 / Application」。
对于非计算机相关的普通人而言,即便是有诸多对于职位头衔的描述:「程序员」、「软件工程师」、「架构师」、「首席技术官」,也离不开一个潜意识的印象:「做网站的」或者是「修电脑的」。
很多「架构师」,都是从「软件工程师」开始,不知不觉的变成了一个「架构师」。对于我个人而言,当我还是一个实习生,被「升」为一个部门架构师带领一些正式员工干活的时候,对「架构师」这个概念居然是一片空白,甚至于不知道这是个「好消息」,还是个「坏消息」,当然也不知道「架构师」是干嘛的。
所以,我一直以最简单的方式对架构进行定义:架构是一种用计算机解决问题的综合能力,与头衔无关。下面我将结合自己的工作经验,谈谈这些年来,我对结构的理解。
架构能力并不是与生俱来的,而是和具体经历强相关的,丰富的经验是形成架构能力的基础。
很多时候我们强调「系统性思考」对于架构设计的重要性,希望从方法论上能够对正在从事或者即将从事架构工作的程序员在专业能力上进行提升。教条式、填鸭式的培训,是教不出架构能力的。理论的价值是能够帮助应用理论的人少走一部分的弯路,但不能够解决眼前的现实问题。
在企业里,架构是一个实践结合非常紧密的领域,一切以解决实际问题为目标。由于问题是多种多样的,导致解决的方法也是多种多样的。踩过的雷,填过的坑,都需要进行总结和抽象,才能提升到架构层的高度,防止重蹈覆辙。
对于一个复杂问题,通常会对复杂问题按照能力领域进行分解,其目的是能够找到与现有能力相匹配的映射。这个映射,就是解决方案。它,离不开人的「知识型劳动」,主要分解为三个方面:
对于已知问题的抽象和建模
来源: http://www.infoq.com/cn/articles/my-6-cold-thinkings-about-the-architecture.