专家 x 抽象 x 类比

多年以前,我一直对于 “专家” 这一词有大量的困惑。到底怎样才是专家?怎样才算是技术专家?社交媒体上所谓的 “技术专家”,在某方面(如编程)上的实力一般,也算是专家吗?过去,我并没有细入的思考过这个问题,直到看到一个软件的元模型,以及一本名为《表象与本质》的书,才重新构建起一个专家的雏形 —— 感谢公司大佬之前推荐的 GEB。

在这里,便尝试性地做出第一次小结。作为第一次小结,它会存在一系列的不完善的地方,有待于后续进行完善。

所谓的专家嘛,就是在擅长的 “领域”(或者领域中的一个子领域)里,构建了具有范畴化(归类)的概念空间,并可以通过类比灵活地完善自己的概念库。简单来说,就是一个专家能有不同层次的抽象能力,还能以合理的方式(不同的层次)的语言和不同的人进行 “交流”(编程的对话)。

模型:对于现实的抽象

回到我们擅长的编程领域,尝试性地对周遭的空间做一个抽象。诸如于,对我们所处的位置进行建模,以将其作为数据进行存储。在不同的上下文里,这个位置是一个相当迷惑的。比如说,你正在和你的亲人聊天,ta 问你:你现在哪里?不同的人可能有不同的回答:

  • 住在一起的家属,答案可能是:客厅。可能让你去拿个快递。

  • 出差时:某某市。不需要详细的信息。

  • 市内外出:xx 商城。

仅从交流的层面来说,这个问题就相当的令人头大。

对位置进行建模

而回到代码在,在不同的业务领域里,在对于这个位置建模时,这个位置可能是:

  • 一个 GEO 坐标。它只包含:longitude、latitude 两个属性。软件想获取当前的位置,以推荐一些相关的广告信息。

  • 一个房间内的位置。它可能是:卧室(次卧、主卧)、室厅、厨房等。软件在寻找匹配的智能(障)音箱,并及时响应你的请求。

  • 一个建筑位内的位置。它可能是:地下一层、地下二层、一楼、地面等。软件在寻找合适的位置,以找到合适的人将快递放到你手里。

  • 一个城市的某个位置。它可能是:xx 区 xx 街道 xx 小区等。软件在寻找你的准确位置,以便判断你是否在封控区内。

  • 一个国家的某个省某个市。它可能是:中国福建省厦门市。软件需要大致的位置,以便计算合理的快递价格。

位置在不同的上下文、不同的人眼里,可能造成非常大的二义性。而以协作的方式构建出这个模型,则可以有效地减少这种二义性的发生(PS:这也就是为什么协作调模型会受到欢迎的原因)。如果只考虑通过 IP 上门查表的情况下,只需要类似于百度这样的 API 结果:

{
address: "CN|北京|北京|None|CHINANET|1|None", #详细地址信息
content: #结构信息
{
address: "北京市", #简要地址信息
address_detail: #结构化地址信息
{
city: "北京市", #城市
city_code: 131, #百度城市代码
province: "北京市", #省份
},
point: #当前城市中心点
{
x: "116.39564504", #当前城市中心点经度
y: "39.92998578" #当前城市中心点纬度
}
},
status: 0 #结果状态返回码
}

所以,在掌握上述的分类的情况下,我们能算是地理位置方面的专家吗?

新的抽象概念:行政区与行政区划分

我觉得我不是,比如说,按专业(维基百科上,对于 行政区划 的定义来说)来说,省这一级应该算是一级行政区:所以,我们有 34 个省级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区。在中国的上下文下,我们相当于只概括了其中的一类类型,基于这种模型建模,会出现中国北京北京市的情形。

而,现在这样的位置模型放到俄罗斯联邦的情况下,它又有问题了,会出现俄罗斯 - 北高加索联邦管区- 车臣共和国,再往下才是行政区。如此类推,就当前来说,我们能掌握好地球上的主要行政划分。而像英国这种包括殖民地的国家,还有群岛 - 教区这样的概念。放到地球 🌍 这个上下文下,这个问题就更复杂了。

所以,在中文的维基百科上,这个层级就变成了:

  • 一层行政区

  • 二层行政区

  • 三层行政区

  • 四层行政区

  • 五层行政区

然后,每个国家就可以获取自己有几级的位置,以及有对应的名称,完美。

然而,由于我们原先已经有一套系统了,为了更好的类比于原来的位置信息,API 可能返回相同的结果,但是解释就变成了如下的形式:

Country Name:
State/Province:
District/County:
City:

这个外国人写的模型又相当的令人头大, District/County 变得相当的诡异。所以,这就是考验一个专家能力的时候了。

在这时,与 State 进行了类比,也都抽象都到一级行政区,对于我们这些普通人来说好理解多了 \~。从编程的角度来说,一层行政区这个名称相当的不好,鬼知道它对应的是啥。

抽象:用再简单的方式解决问题

抽象的有趣之处在于,当你有了更高一次的抽象时,解决问题的方式将变得非常简单 —— 但是,它是有成本的。

从抽象的过程来看,其实可以分为多种分类方式及其抽象,每个维度面向的是不同发展时期的。所以,它可能会有:

  • 类比:省市区街道 → 行政区

  • 分类:行政区类比 → 一二三级行政区

  • 元模型:行政区类比/一二三级行政区 → 层级树

只是呢,从编码的角度来看,不同的抽象层次里,它的实施成本差异是巨大的,如提取一个元模型 —— 可以直接考虑按倍数计算。而类比呢,是其中成本最小的一种方式。

全集还是抽象模型?

在实施的时候,当我们构建一个位置模型时,会考虑构建一个位置的全集,这样实施成本是最低的 —— 因为位置相关的属性是有限的,短期内也不可能快速变化。并且,位置信息并不是系统的核心功能所在,并不需要建立过于复杂的元模型。而其它模型,可能是无限的,并且还会大量的无预期增长,比如各类的智能设备。诸如于在 OpenHAB 智能家家居系统,构建的 Location 层次是这样的:

Location:
- Indoor
- Building : Garage, House, SummerHouse
- Floor : Attic, Basement, GroundFloor, FirstFloor, SecondFloor, ThirdFloor
- Room : Bathroom, Bedroom, BoilerRoom, DiningRoom, Entry, FamilyRoom, GuestRoom, Kitchen, LaundryRoom, LivingRoom, Office
- Corridor
- Apartment
- OutDoor: Carport, Driveway, Garden, Patio, Porch, Terrace

穷举所有可能的家居位置信息,构建一个分类系统和分类机制,来一个新的 Location,可以划到一个合适的位置。所以,如果一个专家,它可以对它们进行抽象,分类,再进行元模型的提取。

在编程模型上,OpenHAB 则提供了一个概念的抽象:Things、Channels、Bindings、Items、Links,其中 Things 是整个系统的一个重要概念,即可以物理添加到系统中的实体。Things 并不一定需要是真实设备,还可以是互联网上的各类资源。从这个定义上来说,它对于可控制的资源进行了定义。而设备也是一种资源,HTTP API 也是一种资源。它相当于是对他们进行了抽象,这也就是 Things 的有意思之处:两个不相关的分类,在具备同一属性时,可以进行抽象。

所以,从编程上来说,提供全集还是抽象模型,取决于它的增长程度。

抽象行为

有了抽象的模型之后,再对模型的行为进行抽象,我们就能得到一个抽象的语言 —— 用来描述模型之间如何进行交互。我们便能得到一套行之有效的 DSL,诸如于 OpenHAB 中的 Rule DSL:

rule "Start wake up light on sunrise"
when
Channel "astro:sun:home:rise#event" triggered
then
switch(receivedEvent.getEvent()) {
case "START": {
Light.sendCommand(OFF)
}
}
end

当我们提升到这一层次来考虑问题时,那么问题就变得非常简单了。甚至于,我们可以结合各类智能(障)语言输入设备,来快速完整各类设备的添加。

元模型:一个类型系统

而在我们引入设备这一概念的时候,我们会发现:我们是在编写一个领域特定的类型系统。在这个类型系统里,我们为这些设备定义了:名称、属性:度量、状态、控制等。诸如于一个客厅的灯,我们在设计它的元模型时,它的名称是:灯。它包含的属性包含了:亮度,高度是一个 Int 类型,所以还需要在模型上存储对应的属性。一个简单的元数据便是(仅为示例):

# Room
name: 灯
location: Indoor::Room::LivingRoom
category: Lightbulb
property: [{ name: 'light', type: Lighting, value: 38 }, { key: 'color', type: ColorItem, value: '#123456'}]

而对于 value 本身的处理,也就是一类的类型,它可以是:Color, Number, Int, Image, Location, DateTime, Switch等。而针对于 Switch 来说,它还归属于 OnOffType,包含了开关相关的状态(State),以及对应的控制命令(Comand)。而 State、Command 本身也是一种 Type。

简单来说,它对归类进行了归类:

  • 一个客厅的灯是一种灯。

  • 灯包含了开关的属性。

  • 开关则包含开关状态和控制开关的属性。

这真是昂贵的抽象成本。大类中包含了小类,小类又包含了细分类型,而类型最后还要用类型系统描述。

构建抽象的成本

回过头来看,我们构建模型的目的又在哪里呢?为了一次次的日常交流,还是为了更好的知识传承?

最后,回到我们跑歪的标题上来,一个理想的专家在精通自己的领域之后,能快速触类旁通。就好比是一个学霸,便是一个 “学习/考试” 方面的 “专家”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
接触Thingsboard用得到!!! 目录 1  参考资料 5  文档目的 6 第一章 项目框架整理说明 7 1.1 项目框架说明 7 1.1.1 package包功能描述 8 1.1.2 thingsboard开发主要涉及到的包 10 1.1.3 thingsboard代码类及接口说明 10 第二章 thingsboard涉及到的流程图 12 2.1 物联网网关架构 12 2.2 ThingsBoard微服务架构 13 2.3 Thingsboard产品架构 13 2.4 Thingsboard规则引擎 14 2.5 ThingsBoard Architecture 15 第三章 项目框架涉及到的第三方包或插件 17 3.1 Thingsboard 包 17 第四章 ThingsBoard设备连接协议 23 4.1 订阅消息传递协议(MQTT) 23 4.2 请求响应模式(CoAP) 23 4.3 请求响应模式(HTTP ) 24 第五章 ThingsBoard打包 25 5.1 后端打包 25 5.2 前端打包方UI 25 第六章 ThingsBoard框架日志 26 第七章 ThingsBoard数据库 目录 目录 1  参考资料 5  文档目的 6 第一章 项目框架整理说明 7 第二章 thingsboard涉及到的流程图 12 第三章 项目框架涉及到的第三方包或插件 17 第四章 ThingsBoard设备连接协议 23 第五章 ThingsBoard打包 25 第六章 ThingsBoard框架日志 26 第七章 ThingsBoard数据库 27 第八章 官网主要文档目录 28 第九章 前端技术概述 29 第十章 关于Thingsboard开发环境部署 30 第十一章 数据库表结构 32 错误!未定义书签。 7.1 关系数据库(使用了2个数据库) 27 7.2 非关系数据库(redis) 27 第八章 官网主要文档目录 28 第九章 前端技术概述 29 9.1 前端包括哪些技术点 29 9.2 前端技术描述 29 第十章 关于Thingsboard开发环境部署 30 第十一章 数据库表结构 32
C64x CSL支持库是一种用于C64x数字信号处理器的软件开发工具。C64x是德州仪器(Texas Instruments)公司推出的一款高性能、低功耗的数字信号处理器。CSL(Chip Support Library)是一种软件开发库,提供了一系列用于C64x的功能模块和接口,帮助开发人员更方便地使用C64x进行软件开发。 C64x CSL支持库包含了多个功能模块,包括硬件抽象层(HAL)、片上总线(On-Chip Bus)、中断管理器(Interrupt Manager)、数据管理器(DMA Manager)等。这些模块可以帮助开发人员更好地管理C64x的硬件资源,并提供了一些常用功能的封装和接口供开发人员使用。 其中,硬件抽象层(HAL)提供了对C64x硬件资源的抽象和管理,使得开发人员可以更方便地访问和配置硬件资源,如片上存储器、GPIO、定时器等。片上总线(On-Chip Bus)模块提供了对C64x片上总线的访问接口,用于高效地传输数据和指令。中断管理器(Interrupt Manager)模块用于管理处理器的中断,并提供了对中断处理的接口。数据管理器(DMA Manager)模块用于管理数据的传输,使用DMA(Direct Memory Access)技术可以提高数据传输效率。 C64x CSL支持库的使用可以大大简化C64x软件开发的过程,并提高开发效率。开发人员只需调用相应的函数接口,而不用关心底层硬件的具体配置和操作。同时,C64x CSL支持库还提供了一些示例代码和文档,帮助开发人员快速上手和理解库的使用方法。 总而言之,C64x CSL支持库是一种为C64x数字信号处理器提供的软件开发工具,通过封装底层硬件资源和提供常用功能的接口,帮助开发人员更方便地开发C64x的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值