架构每日一学 4:成为首席架构师,你必须学会顺应人性

· 浏览次数 : 13

小编点评

**马斯洛需求理论在架构活动中的作用** 马斯洛需求理论认为,每个人都有各种各样的需求,这些需求背后的动机是发自内心的。当一个人的需求所诱发的动机是发自内心的,那这些动机就有强大的内驱力,科维在《高效能人士的七个习惯》一书中也将“积极主动”放到了第一个习惯,如果一个企业中的员工都是积极主动的,且动机是发自内心的,那这个企业将有无限的能量。 在架构活动中,遵循马斯洛需求理论可以帮助我们更好地把握技术方向,从而保证架构活动的成功。当我们尊重和顺应人性,我们可以更好地理解用户需求,并根据用户的痛点进行设计。这可以帮助我们打造更用户友好的产品和服务。 以下是一些在架构活动中遵循马斯洛需求理论的建议: * **尊重和顺应人性** * **关注用户需求** * **根据用户的痛点进行设计** * **从人性的角度出发** * **保持好奇心和探索精神** 通过遵循马斯洛需求理论,我们可以打造更加用户友好的产品和服务,从而获得更大的成功。

正文

本文首发于公众平台:腐烂的橘子

架构师生存法则之二:架构活动需要顺应人性

程序员入行的第一天起就进入了一个机器的世界。在别人的眼中,程序员平时很少说话,更多的时间在和电脑打交道。

程序员工作时间久了大脑会被格式化,就像一个一个方格。它有一定好处,就是你在写代码的时候更容易理清边界,开发模块化的代码,而你的代码也将逐渐变得越来越符合“高内聚低耦合”的要求,从而在技术上一步步向专家靠近。

但是格式化思维也有一个坏处,就是我们的思维容易陷入机械化思考的盲区,而对人性的考虑偏少。如果你对自己的要求不高,或者你只想踏踏实实做一名程序员,你可以选择我行我素,但是作为一名架构师,如果你的架构活动不顺应人性,你将很难生存。

为什么?因为忽略人性可能会给架构设计带来致命错误,这个致命错误可能会从此让企业一蹶不振,很难再翻身,或者可能造成大量资损或用户流失。

先来讲一个经典的例子。美国一家儿童医院在给儿童进行核磁共振扫描时,需要儿童一动不动,躺在设备上进半个小时,这对于拥有好动天性的儿童来讲是很难做到的,因此做扫描的前提是做全身麻醉。但是为了做核磁共振,让儿童做全身麻醉,这会让一个本身相对安全的设备反而变得比较危险。

Doug Dietz 担任通用电气医疗集团(GE)医疗成效系统的工业设计师,他亲眼目睹了儿童的焦虑和害怕以及父母的满面愁容,于是他没有对核磁设备做任何改造,而是在设备的外部布置了特定历险主题的场景,比如说海盗船、宇宙飞船等,而将儿童躺在核磁成像仪器内一动不动的要求变成了特定的历险,这时奇迹发生了,这些儿童大部分就可以轻松完成这个任务,这家儿童医院的全麻率也从80%降低到了10%。

这里的关键在于,把核磁共振设备周围的环境布置成历险的场景,与设备本身的硬件设计毫无关系,但是却完美的解决了该设备遇到的问题。

马斯洛需求理论

提起人性,我们不得不提到马洛斯的需求理论。该理论谈到每个人都有各种各样的需求,比如吃饭的需求、买车、买房、买包、玩演唱会门票等等。每一个需求的背后都有动机,比如吃饭是你最基本的生理需求,通过吃饭让自己不饿是你的动机。关于需求和动机,马斯洛理论谈到了两个重要的点:一是动机是有优先级的,二是动机是可以跃迁的[1],下面我们分别详细说明。

一 动机有优先级

谈到动机有优先级,我们不得不先强调一个观点:学习或了解知识一定要从第一手资料入手。如果你去搜索马斯洛理论,你会在网上看到,大部分的文章都在讲马斯洛的需求模型,他们把需求分成了类似金字塔的不同层次,如下图。

但当你真正读完原书后发现,马斯洛真正想表达的观点并不是需求是分层的,而是说需求背后的动机是有优先级的。

如果我们没有看原著,那就可能被网上的文章所误导,这对于我们的成长是极其不利的。同样已故的技术专家“左耳朵耗子”,也在他的文章中极力说明了极力推荐我们阅读英文文档[2]。

动机的优先级,我们可以通过下面这张图理解:

首先,我们每天遇到的各种各样的需求,有些事基本的需求有些事更高层次的需求。都大致可以归为这几类需求。这也是网上绝大部分文章都在说明的问题。

然而,马斯洛真正想表达的是,每一个需求都会对应一个动机,这个动机会占据大脑的全部,只有当前动机被满足之后,你的大脑才会被第二个动机所占据。 这些动机类似于一个责任链,也就是说,你的大脑是单线程的,而不是多线程。

比如你已经两天两夜没有睡觉了,此时的你极其难受,连眼睛都睁不开。相信你除了想好好睡上一觉,应该不会想着哪家新开的饭店好吃,并准备去吃上一顿吧。也就是说,动机是有优先级的,当前的你,睡觉的动机比吃饭的动机优先级更高。此外,睡觉的动机会独占你的大脑,且在这个动机被满足之前,其他的动机只能等待。所以平时我们开玩笑说的,自己的大脑是“单核的CPU”,一定程度上是符合马斯洛需求理论的。

二 动机抢占

马斯洛认为,生理需求说最基本的需求,在生理需求被满足之后,心理安全感需求诱发的动机就会主导人类的主要意识。

注意心理安全感和安全是两个概念,安全是指人身安全,归根结底,它属于生理需求的一部分。而心理安全感是心理上的诉求。广义上是指人们试图寻找生活中的安全和稳定性,表现为乐于倾向熟悉的、常规的、习惯的、已知的、可控的事物。

一个人的心理安全感主要来源于他的成长过程。如果一个孩子出生时,父母为他提供了安全、舒适、可控的环境,孩子在小时候获得这种安全感之后,在将来的工作和生活中也会逐渐拓展到相对安全的、可控的、可预测的环境中。

而你一旦置身于一个不安全不可控的环境中,即使你没有受到直接威胁,这种安全感也会丧失,最明显的是当新冠疫情来临之后,超市里的口罩被一抢而空。

在心理安全感的需求之上,是自尊和被尊重的需求。马斯洛强调,这个尊重不是来源于其他人对你的尊重,而是自己发自内心的一种有底气的自尊。

这个定义非常有意思,我们常常认为一个具有很高社会地位,或者有足够金钱的人,会获得“有底气的自尊”,其实不然,有一些已经财务自由的人仍然缺乏“有底气的自尊”。而在工作中遇到这样的同事是很麻烦的,因为他会把你对他说的意见不一致的话,理解为不尊重,这对于架构师来讲简直是噩梦。

从另一个角度看,如果一家企业能够给员工带来认同感、需求感,那么也会给员工带来自信,和对工作的高度投入。

你有没有发现马斯洛提出的这些需求有一些共同的特征?是的,他们都是源自于内心的,而不是所处的环境或其他人强加给他的。

这就说明,当一个人的需求所诱发的动机是发自内心的,那这些动机就有强大的内驱力,科维在《高效能人士的七个习惯》一书中也将“积极主动”放到了第一个习惯,如果一个企业中的员工都是积极主动的,且动机是发自内心的,那这个企业将有无限的能量。

从这个角度看当前的企业就会发现很多问题。比如企业常常教员工“拥抱变化”,就是一个违背人性的价值观,因为从人的角度需要获得心理安全感,如果员工经常处在一个变化的环境,这种心理安全感就会丧失。有些企业认为只要不断进行宣讲,员工就会从心里慢慢接受,但根据马斯洛的理论,除非员工发自内心的获得了心理安全感,否则只靠企业的宣传是没有用的。

而有底气的自尊也是同样的道理,不是说别人说你有自尊,你就有自尊了,而是自己内心认为具备这个自尊,你才会真正具备。

在自尊和被尊重的需求之上是自我实现的需求,这个需求就是一个人发自内心的认可自己的价值,也就是我们常说,成功是由自己定义的。你觉得你成功了,那你就是真正的成功。

这些不同层次的需求背后都对应各自的动机,你可以有很多需求,但是某个时刻只能有唯一的动机占据你的大脑,一旦某个动机抢占成功,这时你的听觉嗅觉,触觉思维,所有的活动都在为你这个唯一的动机而服务。

马斯洛理论之于架构师

从前面的核磁共振的例子我们也看到,架构师在进行架构活动时要遵循马斯洛理论,这是架构思维的一部分,可以帮助我们从另一个角度更好地看待问题。

到底是被动的去填补系统中的漏洞,被动的根据产品和业务的需求选择迭代方案;还是主动出击、脱离现有的技术方案,从人性的角度出发,把关注点放在深度理解用户解决用户痛点的方面,进而拓展技术空间?

想想iPhone、淘宝、微信这些伟大的产品,相信大家已经有了答案。

总结

在架构活动中,遵循马斯洛需求理论是架构思维的一个方面,他告诉我们在架构活动中要尊重和顺应人性,这样才能更好地把握技术方向,从而保证架构活动的成功。

参考

  1. https://time.geekbang.org/column/article/467398
  2. https://coolshell.cn/articles/20977.html

与架构每日一学 4:成为首席架构师,你必须学会顺应人性相似的内容:

架构每日一学 4:成为首席架构师,你必须学会顺应人性

本文首发于公众平台:腐烂的橘子 架构师生存法则之二:架构活动需要顺应人性 程序员入行的第一天起就进入了一个机器的世界。在别人的眼中,程序员平时很少说话,更多的时间在和电脑打交道。 程序员工作时间久了大脑会被格式化,就像一个一个方格。它有一定好处,就是你在写代码的时候更容易理清边界,开发模块化的代码,

文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题

三、用go语言,用一个单链表L实现一个队列。要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1)。 文心一言: 在 Go 语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和出队(DEQUEUE),并保持操作的时间复杂度为 O(1),需要利用两个指针,一个指向队头,另一个指

文心一言 VS 讯飞星火 VS chatgpt (110)-- 算法导论10.2 1题

一、用go语言,单链表上的动态集合操作 INSERT 能否在 O(1)时间内实现?DELETE 操作呢? 文心一言: 在单链表中,INSERT 和 DELETE 操作的时间复杂度通常是 O(n),其中 n 是链表中的元素数量。这主要是因为当你插入或删除元素时,你需要遍历链表来找到正确的插入或删除位置

文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题

五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为 O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。 文心一言: 在 Go 语

文心一言 VS 讯飞星火 VS chatgpt (106)-- 算法导论10.1 4题

四、用go语言,重写 ENQUEUE 和 DEQUEUE 的代码,使之能处理队列的下溢和上溢。 文心一言: 在 Go 语言中,我们可以使用切片来实现队列。下面是如何实现 ENQUEUE 和 DEQUEUE 操作,同时处理队列的下溢和上溢的情况: package main import "fmt" t

文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题

三、用go语言,仿照图 10-2,画图表示依次执行操作 ENQUEUE(Q,4)、ENQUEUE(Q,1)、ENQUEUE(Q,3)、DEQUEUE(Q)、ENQUEUE(Q,8)和 DEQUEUE(Q)每一步的结果,队列初始为空,存储于数组 Q[1..6]中。 文心一言: 在这个问题中,我们尝试使

文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题

二、用go语言,说明如何在一个数组 A[1..n]中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者都不会发生上溢。要求 PUSH 和 POP 操作的运行时间为 O(1)。 文心一言: 在这个问题中,我们要在一个数组 A[1..n] 中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者

文心一言 VS 讯飞星火 VS chatgpt (103)-- 算法导论10.1 1题

一、用go语言,仿照图 10-1,画图表示依次执行操作 PUSH(S,4)、PUSH(S,1)、PUSH(S,3)、POP(S)、PUSH(S,8)和 POP(S)每一步的结果,栈 S初始为空,存储于数组 S[1..6]中。 文心一言: 图 10-1 展示了在执行一系列栈操作后栈的状态。我会用文字描

文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

八、用go语言,设 X[1..n]和 Y[1..n]为两个数组,每个都包含n个有序的元素。请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数。 文心一言: 要在 O(lgn) 时间内找出两个有序数组 X 和 Y 中所有元素的中位数,可以使用二分查找算法。以下是用 Go

2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组

2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组中所有元素按位OR后的最小值。 输入:nums = [3,5,3,2,7], k = 2。 输出:3