换个角度认识软件.pdf

在软件开发过程中,比较难的一件事就是如何表达需求、方案、问题,甚至有时候日常沟通也会出现“驴头不对马嘴”的沟通窘境。

之所以会出现这类表达问题,一部分原因是我们对逻辑的理解不同。大多数有经验的开发者、系统分析师都具备一定的辩证思维和方法,要说谁没有逻辑,这件事情很难说得过去。如果每个人都是用自己的思维方式和“逻辑”,让沟通过程变得非常困难。令我疑惑的是,每个人都相信逻辑是很重要的,但几乎没有文章讨论过在软件设计和开发过程中如何使用现代逻辑学,以及解决诡辩的问题。

这里讨论一些能在软件工程中使用的逻辑学基础知识,尤其是概念相关的内容在业务分析、领域建模和架构设计中都可能会被用到。

1当你提到用户时,你是指什么?

我曾经参与过一个物联网系统的设计,其中大家经常会提到一个词“设备”,但是“设备”这个词在不同的开发者眼里有不同的概念,为此,讨论“设备”这个词花费了不少的功夫,最终依然没有定义清楚。

有些开发者认为“设备”是现实中看得见摸得着的物品,另外的开发者将服务器上用于映射物理设备的实例也叫做“设备”。于是,他们在沟通时经常会出现对于“设备”的理解不一致导致的混乱。

另外一个例子是“用户”这个概念。在不同的场景(上下文)下, “用户”这个概念可以是使用软件的大活人,也可以是数据库中的一条记录,也可以是服务中的用户对象,有时候也将用户服务类叫做用户。

这样就非常混乱,不仅无法沟通,而且还导致开发者对系

统的认知也变得困难,很多东西处于混沌状态。

在咨询的工作中,我发现非常有意思的是,将软件中的概念一一定义清楚,整个系统的设计工作差不多就完成了。所以设计软件的过程和现实中人们相互交流非常类似。英国哲学家维特根斯坦把人们交流的过程叫做“语言的游戏”,当我们描述事物的时候实际上就是将有清晰边界的元素贴上标签,这个标签就是我们说的概念。

朴素的概念是来源于个人背景和理解,因此概念难以统一。正是因此不同语言之间准确地翻译也不太可能1,不同文化背景难以找到合适的概念互相映射。后来哲学家认识到人们认识概念是由一些更为基础的属性构成的,那可以认为概念就是由属性组成的。比如“人”这个概念,有四肢、直立行走的行为、皮肤光滑等属性。

这些基本的属性又是一些更基本的概念,如果我们对这些基本的概念达成共识,那么我们就有机会对概念进行统一。类似于面向对象语言Java中的类,类有各种属性,这些

属性最终都可以通过8种基本的数据结构描述。

因此属性是认识概念非常重要的一方面。属性包含了事物自身的性质、行为,比如黑白、高矮、是否能飞行、是否独立行走。事物除了自身的性质外,还与其他事物发生一定的关系,比如大于、相等、对称、属于等。事物的性质、行为以及和其他事物的关系,统称为事物的属性。

通过属性就能找到概念的边界。 具有相同属性的概念是同一个概念,即使它们的名称不同也不应该分为不同的概念。例如,土豆和马铃薯都是同一个概念。如果意识不到属性对概念的影响,则会出现生活中的命名错误,例如小熊猫并不是小的熊猫,而是单独的一种动物。

本文来自知之小站

 

PDF报告已分享至知识星球,微信扫码加入查阅下载3万+精选资料,年享1万+精选更新

(星球内含更多未发布精选报告.其它事宜可联系zzxz_88@163.com)