写点什么

架构漫谈(二):认识概念是理解架构的基础

  • 2016-02-25
  • 本文字数:2766 字

    阅读完需:约 9 分钟

架构漫谈是由资深架构师王概凯 Kevin 执笔的系列专栏,专栏将会以 Kevin 的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架构如何落地、如何写好程序等问题。专栏的目的是希望能抛出一些观点,并引发大家思考,如果你有感触或者新的感悟,欢迎联系专栏负责人 Gary(微信 greenguolei)深聊。

本文是漫谈架构专栏的第二篇,作者通过几个例子,讨论了一下认识概念的误区,如何有效的去认识概念,明白概念背后的含义,以及如何利用对概念的理解,快速的进行学习。

前一篇文章中,我们讨论了什么是架构。事实上,这些基础概念对于做架构是非常重要的,大部分人对于每天都习以为常的概念,都自以为明白了,但实际上都是下意识的,并不是主动的认识。比如说“什么是桌子?”,做培训的时候,我经常拿这个例子来问大家,回答千奇百怪。这实际上就导致了做架构的时候,不同角色的沟通会出很多问题,那么结果也就可想而知了。

如前一篇所说,架构实际上解决的是人的问题,而概念是人认识这个世界的基础,自然概念的认识就非常的重要。这篇文章尝试讨论一下,如何去认识概念。当然这篇不是语言学的文章,我这里所讨论的,和语言学可能不太一样,如果大家对语言学感兴趣,也可以去参考一下。

首先我要先声明一下,这一系列的文章,都是以人的认识为主体去讨论的,解决的都是人的问题,任何没有具体申明的部分,都隐含这一背景,以免大家误解。

概念也属于人认识这个世界并用来沟通的手段,包括“概念”这个概念,也是一样的。在古代,不叫“概念”,称之为“名相”。

何为相?

一般我们认为:看到一个东西,比方说杯子,“杯子”就是一个名字,指代的看到的东西就是相,就是事物的相状。我们一听到“杯子”这个词,脑海里就会浮现出一个杯子的形象。而“杯子”这个词,是用来指代的是这个相状的,叫做名。合起来就叫做“名相”。

可是当我们把杯子打碎了的时候,我们还会称这个碎了的东西叫杯子吗? 肯定不会,一般会叫“碎瓦片”,如果我们把碎瓦片磨碎了呢,名字又变了,叫做“沙子”。这就奇怪了,同样一个东西,怎么会变出这么多的名字出来?

那究竟什么才是相?

实际上“相“表达的不是一个具体的东西,如上面所提的一个瓷器杯子,并不是指这个瓷器,而是这个瓷器所起的一个作用:一手可握,敞口(一般不超过底的大小,太大口就叫碗了),并且内部有一个空间可乘东西的这么一个作用。并不是指这个瓷器本身。这也是为什么我们从电视上看到一个人拿杯子的时候,我们知道这个是杯子。但是实际上我们看到的都是光影而已。所以说相实际上代表的是这个作用,并不是具体的某个东西,而名是用来标识这个作用的,用来交流的。

为何需要这个作用?

这个作用其实是为了解决“人需要一个可单手持握,但是希望避免直接接触所盛物体”这个问题。

所以说,每个概念实际上所解决的,还是人遇到的某个特定的问题,我们把解决问题的解决方案,给定了一个名字,这个名字就是对应的某个特定的概念。对于概念这个词本身,为了统一指代这些名字,我们称起这类作用的名字称为“概念”。我们上次讨论的“架构”也是是同样的一个特定概念,这里不再详述。同样,什么是“建筑”? “建筑”实际上解决的就是“人需要独占的空间,并还能够比较流畅的和外部世界沟通”的问题。

再拿前面的“桌子”来举例,什么叫“桌子”? 很多人回答,四条腿,或者说有腿,有一个平面,等等,柜子不也是这样吗?为什么我们看到柜子,不会认为是桌子呢?即使我们放在柜子上吃饭,我们看到仍然会问,为什么在柜子上吃饭? 不会叫桌子。如果明白了上面的道理,就很简单了,桌子实际上是为了解决人坐在椅子上,手还能够支撑在一个平面上继续开展活动的问题,一般会和椅子配对出现。坐在椅子上工作,对着柜子有一个很严重的问题–不知道大家试过没有–就是腿无法展开的问题。当这么坐着超过半小时就知道是什么痛苦了。所以桌子的平面下方一定会有一个足够容纳膝部和小腿的空间,来解决这个问题。解决了这些问题的装置,才能称之为桌子。

类似也可以定义出来椅子,由此可见,桌子和椅子的高度也是有限定的,都是是解决人的问题,要符合人的身高:椅子的高度和深度,必须符合小腿和大腿的长度;椅背的高度要配合脊柱的高度;桌子的高度要配合小腿和脊柱的高度之和;成人和小孩的自然也就有区别了。这又变成生理学了,事实上要做好桌子和椅子,必须要理解人的生理结构,才能正确的理解桌子和椅子的概念。

同理,为何我们可以在不同的语言间进行翻译,是因为虽然语言不同,但是人类所面临的的问题是一样的,所使用的名不同而已。对于不同的动物之间的翻译也是同理。

关于抽象

在讨论桌子这个概念的过程中,很多人会提出抽象这个概念,认为定义桌子实际上就是抽象的一个过程。这里,我觉得有必要要澄清一下抽象这个概念,我认为这个里面有误解。我注意到,在做架构师的群体中,不谈抽象好像就不是一个合格的架构师。

抽象这个词代表的含义,实际上是把不同的概念的相似的部分合并在一起,形成一个新的概念。这个里面问题很多:首先“相似的部分”在不同的人看来,并不一定那么相似;其次,抽象之后形成的是一个新的概念,和原来那个概念并不一样,所解决的问题也不一样。所以我们不能用抽象来定义一个事物,抽象实际上是一个分类的过程,完全是另一码事。再举一个例子,杯子和容器,很多人认为容器是杯子的抽象,但是实际上杯子是杯子,容器是容器,它们所解决的问题是不一样的。当我们需要解决装东西的问题的时候,会说容器;当我们需要解决单手持握要装东西的时候,会说要一个杯子。

回过头来,根据架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。事实上,这一能力,在任何一个领域都是适用的,比如我们如果想要学习一项新的技术,如Hibernate、Spring、PhotoShop、WWW、Internet 等等,如果知道这些概念所要解决的问题,学习这些新的技术或者概念就会如虎添翼,快速的入手;学习一个新的领域,也会非常的快速有效;使用这些概念来解释问题,甚至发明新的概念都是很容易的事。为什么强调这个呢,因为做架构的时候,很多时候都是在一个新的领域解决问题,必须要快速进入并掌握这个领域,然后才能够正确的解决问题。

以上通过几个例子,讨论了一下认识概念的误区,如何有效的去认识概念,明白概念背后的含义,以及如何利用对概念的理解,快速的进行学习。掌握了这些原则,会有利于帮助我们在架构阶段,快速的识别和定位问题。

下一篇我们会来讨论一下,如何快速的定位和识别问题,这是架构的起始。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-02-25 16:3513601

评论

发布
暂无评论
发现更多内容

3个办公网站,助你又快又好地搞定工作总结ppt!

彭宏豪95

效率工具 职场 PPT 效率办公 AI生成PPT

淘宝天猫商品详情API:商品参数对比与选择

技术冰糖葫芦

API api 货币化 API 文档 API 测试

基于人工智能的代码分析与 Bug 检测实战

霍格沃兹测试开发学社

开发体育赛事转播软件平台的成功之道:确定目标市场的需求

软件开发-梦幻运营部

【JavaScript】前端算法题 40道题+解析

EquatorCoco

JavaScript 前端 前端算法

面试官:说说你的项目亮点?

王磊

Java

三星Galaxy Z Flip6:内外兼修小折花魁,解锁科技改变生活新方式

科技热闻

JAVA应用CPU跳点自动DUMP工具

京东科技开发者

JavaScript 中的闭包和事件委托

不在线第一只蜗牛

JavaScript 前端

【京东云新品发布月刊】2024年7月产品动态

京东科技开发者

开放签电子签章系统终于支持docker部署方式了

开放签开源电子签章

Docker 镜像 电子签章

唯品会商品列表数据接口详解与实战应用(VIP.item_search)

tbapi

唯品会商品列表数据接口 唯品会API接口 唯品会

TapData 信创数据源 | 国产信创数据库 OceanBase 数据同步指南,加速国产化进程,推进自主创新建设

tapdata

某黑产最新免杀攻击样本详细分析

我再BUG界嘎嘎乱杀

黑客 网络安全 安全 网安

天润融通助力车企做好战败线索分析,实现商机转化最大化

天润融通

人工智能

开启智能屏跃级体验,天猫精灵「哇哦闺蜜机」首发 4999 元起

新消费日报

微软将深度整合 Azure AI 与 GitHub;Stability AI 0.5 秒生成三维建模丨 RTE 开发者日报

声网

聊聊JVM如何优化

京东科技开发者

基于Golang实现Kubernetes边车模式

俞凡

golang 架构 微服务

制造业数字化转型创新思路 |《数智新时代制造业数字化创新实践白皮书》上线!

tapdata

产品经理的需求管理秘籍:9大工具解读

爱吃小舅的鱼

需求管理 软件需求管理 需求管理工具

打造知识共享文化:2024年8大最佳企业工具

爱吃小舅的鱼

知识管理 知识管理系统 知识管理软件

跨平台数据同步:京东商品详情API的多平台支持

技术冰糖葫芦

api 货币化 API 文档 API 测试 pinduoduo API

软件测试学习笔记丨BlueOcean 安装与使用

测试人

软件测试

万字干货:从消息流平台Serverless之路,看Serverless标准演进

快乐非自愿限量之名

数据库 Serverless 服务器

Netty的源码分析和业务场景

快乐非自愿限量之名

php Netty 开发语言

如何在Java、C、Ruby语言中使用Newscatcher API

幂简集成

ruby C语言 API java

前端常用的几个工具网站

源字节1号

开源

AI大模型在业务受理的智能化实践和探索

鲸品堂

运营商 大模型 企业服务大模型

电车风噪大?巧妙利用空气动力学和仿真技术,解决风噪影响

Altair RapidMiner

汽车 仿真 汽车仿真 altair 新能源车

Milvus 向量数据库进阶系列丨构建 RAG 多租户/多用户系统 (上)

Zilliz

人工智能 AI Milvus 向量数据库 大语言模型

架构漫谈(二):认识概念是理解架构的基础_架构_王概凯_InfoQ精选文章