软件工程师都应该知道的10个定律

news2024/11/17 5:35:01

 一、海勒姆法则

内容

当一个 API 有足够多的用户,你在契约中承诺了什么并不重要:系统中所有看得见的行为都会有某个人依赖……

案例

现在有两个系统A和B,B的一个接口返回一个列表。A系统的开发人员发现返回的列表都是按照ID正向排序的。本身A系统正好需要其按照正序排序,于是直接自己没有做排序就直接使用了。

海勒姆法则

实际B返回的列表是直接从数据库取出来的,自身没有做排序,并不知道自己的返回列表顺序被依赖了。有一天,B系统有个新需求,需要在返回列表数据前对数据先做个处理。因为B本身没有意识到自己提供了有序的列表,处理时就可能产生问题。

二、切斯特顿栅栏

内容

简单来说是:存在即合理。

在某种情况下存在某种制度或法律,为了简单起见,我们可以把它当做道路上竖立一道栅栏或大门。后来的改革者会欢欣鼓舞地说:“我没有看到这东西有什么用处,让我们把它清除掉吧。”

而更聪明的改革者则会说:“如果你没有看到它的用处,我当然不会让你们清除它。离远点动脑子想想。然后,当你可以回来告诉我你确实看到了它的用途时,我才可能让你毁掉它。”

做出重大决策的核心部分是理解先前决策背后的理由。如果我们不了解是如何形成当前状态,我们就有使事情变得更糟的风险。

切斯特顿栅栏

案例

有很多人接手一个前人做的项目时,会发现一些代码写的不对或者不好。有想马上动手改一改的冲动。但是有经验的前辈就会说这个代码运行了这么多长时间,不能随便改。有段逻辑看起来是错的,那很有可能是因为负负得正,其他地方也有问题正好一起合成了正确的结果。在理清楚所有脉络前,最好什么都不要动。

三、二阶思维

内容

简单来说:更深层次的考虑问题

把问题思考到二阶、三阶和n阶的能力,或者简称为二阶思维——是增强你思维的强大工具。

案例

二阶思维

在上面切斯特顿栅栏的案例中,就可以使用二阶思维多想一层,把整个系统的原本思路原因分析清楚。大家在做故障回顾和案例分析时常用的5why分析法也是二阶思维的经典应用。

四、街灯效应

内容

简单来说就是:拿着锤头找钉子

出自下面这则寓言:

一天晚上,一个警察看到一个醉汉在路灯下的地面上找东西,问他在找什么。醉汉回答说他钥匙丢了。警察看了看也找不到,就问他:“你确定你钥匙是在这儿丢的,就在路灯下?”醉汉说:“不,但是这儿的光是最亮的”。

街灯效应

案例

在排查生产问题的时候,特别是不能复现的问题。很多人的排查方法取决于自己知道哪些方法而不是问题本身需要什么方法。要解这个问题需要大量的积累,有更多的方法、思路,才能根据问题找到合适的方法。

五、虚荣指标

内容

虚荣指标是指无法真正反映情况的数字。

案例

虚荣指标

有些反馈表面数据的指标,它们让效果看起来很好但却不能告诉我们具体价值,典型的虚荣指标如点击量、下载量和曝光量,数据量级很大,让人印象深刻,但这样的数据用于广告宣传还行,用于指导公司行动就意义不大。举例如下:

1、 点击量。这是互联网洪荒年代所使用的指标,随便什么网站,只要上面可点 的东西多,这个数字都会很高。相比之下,你更应统计点击的人数。

2、页面浏览量(PV值)。这个指标只比点击量稍好一点点,因其统计的是网页被访客请求的次数。除非你的商业模式直接与PV值挂钩(即展示广 告),你还是更应统计(访问的)人数。

3、访问量。你的100访问量究竟来自于1个访问了 100次的用户,还是100 个访问了 1次的用户?它无法指导行动。

4、独立访客数。只能显示有多少人访问了网页,却不能告诉你这些人在页面上做了什么。他们为什么停留?是否离开了?如果是一款内容型产品,更应该关注单个用户的阅读文章数量、用户的使用频次、有点击行为的浏览时长 和点击位置。以这些指标反馈到具体的用户行为和用户喜好,来优化内容运 营行为。

5、粉丝/好友/赞的数量。计算粉丝/好友的数量只是一场毫无意义的人气比 赛,除非你能让他们做对你有利的事。你在社交平台上振臂一呼时,有多少 粉丝会响应?只有知道了这个数字,他们才对你有意义。实际上,更应该观察用户对产品核心 功能的使用情况,资讯类产品公司要关注用户浏览了几篇文章,电商类产品 公司要看用户浏览了哪些商品且有没有购买,在线教育类产品公司要关注用 户是否参与了课程并按课程进度听课。

6、网站停留时间(time on site ) /浏览页数(number of pages )。用户停留时间是指用户在某个页面停留了多久,而不是浏览了多久。用 户停留时间并不能反映用户对内容的喜好程度,我们更应该使用用户的阅读速度、阅读完成度和内容跳出率等数据判断用户对某个页面内容的喜好程度。用这 两个指标来替代客户参与度或活跃度并非明智之举,除非你的商业模式与这两个指标相绑定。而且,它们并非一定能说明问题。比如,客户在客服或投 诉页面上停留了很长时间,不见得是什么好事。

7、收集到的用户邮件地址数量。有很多人对你的创业项目感兴趣,这很好。但是,如果不知道他们中有多少人会真正打开你的邮件(并为你邮件中的内容 买单),纵使有再多人在你的邮件列表上也是枉然。更好的做法是:向一部 分注册用户发送测试邮件,看他们是否会按照邮件中的提示去做。

8、下载量。尽管有时会影响你在应用商店中的排名,但下载量本身并不带来价值。你需要衡量的是:应用下载后的激活量、账号创建量等等。但是没有免费功能的付费应用除外。

六、墨菲定律

内容

凡事只要可能出错,那就一定会出错。

墨菲定律

案例

一个项目负责人,拿到一个项目,做好了方案。把开发人员、测试人员等相关方都叫到一起开会,对齐了方案和排期。如果大家各司其职,按照方案和排期进行,事情会很顺利。但是经常做项目的我们自然知道,事情很少像想象的那样顺利过。比如开发人员自己开发好了,却忘记了通知测试人员测试。测试人员有其他的项目要忙,没人通知他也没有自己主动问问是否需要测试了。这些都需要设置跟进和应对措施,不能想当然。

七、墨菲第二定律

内容

没有什么事情像看起来那么简单。

墨菲第二定律

案例

项目往往会比你预计的时间长,比如临时会插进去更紧急的事情;比如合作团队遇到问题;所以有经验的工程师往往会给自己留一些buffer。

八、康威定律

内容

组织设计的产品/设计等价于这个组织的沟通结构。

案例

如果你让 4 个小组开发编译器,那么你就会获得 4 个编译器。所以我们要用一切手段提升沟通效率,比如工作中常用的wiki、jira、github和即时通讯工具。

九、格雷欣法则

内容

简单来说就是坏的挤走好的。

也就是通常所说的“劣币驱逐良币”定律。周先生以西方公案的方式介绍其来龙去脉,也就是先生说的“以讹传讹”。十六世纪的英王伊丽莎白有位顾问,就是Sir Thomas Gresham(葛氏),他发现市场上流通的货币,由于在流通中磨损而重量不足,人们便把“足金”储存起来,熔化成金属块,甚至转运出口,只把“不足”的拿到市场上使用。

格雷欣法则

案例

很多用人单位招聘秉持着:新招聘的员工水平一定要高于目前员工的平均水平,宁缺毋滥的原则。就是要避免“劣币驱逐良币”定律。

十、泰斯勒定律

内容

泰思勒定律也被称为复杂度守恒定律。该定律指出每一个过程都有其固有的复杂性,存在一个临界点,超过了这个点过程就不能再简化了,你只能将固有的复杂性从一个地方移动到另外一个地方。

简单点来说:如果想让用户使用简单,那产品自身的实现复杂性就会增加。

案例

以下是一个通过产品自身增加处理,让用户行为变得简单的例子:

泰斯勒定律

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSH版本信息可被获取

漏洞描述 Name SSH版本信息可被获取 Description SSH服务允许远程攻击者获得ssh的具体信息,如版本号等等。这可能为攻击者发动进一步攻击提供帮助。 CVE No. CVE-1999-0634 分析结果 该问题不属于漏洞,不存在安全风险。SSH协议是一种安全协议&am…

基于Springboot实现幼儿园管理系统项目【项目源码+论文说明】

基于Springboot实现幼儿园管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于幼儿园管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了幼儿园管…

【PickerView案例13-应用程序对象介绍 Objective-C语言】

一、应用程序对象介绍: 1.应用程序对象介绍: 应用程序介绍: 应用程序介绍: 应用程序介绍: 应用程序启动,本身这一过程,不是应用程序启动就完事儿了, 它有一些比较细节的东西,比如说: 1)info.plist以及pch文件 2)UIApplication对象 这个呢,我们都是分开的去说,…

C语言进阶文件操作

本章重点 1. 为什么使用文件 2. 什么是文件 3. 文件的打开和关闭 4. 文件的顺序读写 5. 文件的随机读写 6. 文本文件和二进制文件 7. 文件读取结束的判定 8. 文件缓冲区 目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文…

分布式软件架构——服务端缓存的三种属性

服务端缓存 在透明多级分流系统中,我们以流量从客户端中发出开始,以流量到达服务器集群中真正处理业务的节点结束。一起探索了在这个过程中与业务无关的一些通用组件,包括DNS、CDN、客户端缓存,等等。 实际上,服务端缓…

Docker搭建Redis cluster集群

redis常用的三种集群方式是:主从复制,sentinel 哨兵模式,cluster模式,本节我想详细记录下cluster集群的动手部署方式。cluster是比较主流的方式,优缺点可以百度查下。 Redis-Cluster采用无中心结构,每个节…

Hadoop启动缺失ResourceManager

Hadoop启动缺失ResourceManager 查日志是resourcemanager空指针,java.lang.NullPointerException 1、进入根目录的tmp文件夹 cd /tmp2、删除hadoop-yarn-root rm -rf hadoop-yarn-root3、重启hadoop就好啦!!!!&…

三网运营商大数据精准营销客源信息提取的原理是什么?

现在的这个互联网时代,越来越多的人从事运营商大数据这个行业,相信大家都很好奇运营商大数据的绝对优势究竟是什么,它究竟是有什么魅力,能够让那么多的人为它所倾倒,下面我们就来看一下它究竟有什么优势吧。 1.对用户的…

解析硬件连通性测试的重要性及测试方法

在现代科技世界中,硬件设备的复杂性和多样性已经达到了前所未有的水平。无论是计算机、智能手机、物联网设备还是嵌入式系统,各种硬件组件的协同工作对于设备的正常运行至关重要。硬件连通性测试是确保这些组件相互配合无误的重要步骤。 一、硬件连通性测…

[nltk_data] Error loading stopwords: <urlopen error [WinError 10054]

报错提示&#xff1a; >>> import nltk >>> nltk.download(stopwords) 按照提示执行后 [nltk_data] Error loading stopwords: <urlopen error [WinError 10054] 找到路径C:\\Users\\EDY\\nltk_data&#xff0c;如果没有nltk_data文件夹&#xff0c;在…

嵌入式养成计划-30-网络编程----多点通信--单播--广播--组播

六十六、多点通信 66.1 网络属性相关函数 getsockoptsetsockopt 功能&#xff1a;获取/设置网络属性; 原型&#xff1a;#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void *opt…

12大自媒体推广平台整理

1、百家号&#xff1a;权重很高&#xff0c;百度端排名效果极好&#xff0c;即便是行业核心词&#xff0c;也可以轻松进入前三页。 2、头条号&#xff1a;即时展示效果较好&#xff0c;文章质量越高&#xff0c;被推送的范围越广。 3、微信公众号&#xff1a;更适合做私域流量…

STM32实战项目——WIFI远程开关灯

前言 其实WIFI开关灯在几个月前就想做了&#xff0c;但是对于没有云平台调试经验的我&#xff0c;一开始有些摸不着头脑&#xff0c;所以就搁置了。十一假期与老同学聊天时了解到他也在做一个远程开关灯的小项目&#xff0c;所以就重新开始了WIFI远程开关灯的小项目。 本文使用…

你不会还在人工巡检UPS设备吧!?大神技巧学起来!

在现代生活和商业中&#xff0c;依赖电力已经成为不可或缺的一部分。因此&#xff0c;UPS监控成为了保障业务连续性和设备运行的关键要素。 UPS监控的目标是提供对电力系统的全面可视化和控制&#xff0c;以及在电力故障或其他问题发生时采取即时行动。 客户案例 企业数据中心…

剑指offer——JZ86 在二叉树中找到两个节点的最近公共祖先 解题思路与具体代码【C++】

一、题目描述与要求 在二叉树中找到两个节点的最近公共祖先_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2&#xff0c;请找到 o1 和 o2 的最近公共祖先节点。 数据范围&#xff1a;树上节点数满足1≤n≤1…

软件安全测试包含哪些内容?测试流程步骤有哪些?

泽众云测试通过专业的安全测试设备与经验丰富的实施人员从应用代码、服务器、数据库、通信交互等方面针对安全性风险进行全方位的检测&#xff1b;凭借专业的安全测试设备以及积累的安全测试用例为客户出具安全测试报告&#xff0c;并为客户提供科学的修复建议。 安全测试解决的…

c++视觉---中值滤波处理

中值滤波&#xff08;Median Filter&#xff09;是一种常用的非线性平滑滤波方法&#xff0c;用于去除图像中的噪声。它不像线性滤波&#xff08;如均值滤波或高斯滤波&#xff09;那样使用权重来计算平均值或加权平均值&#xff0c;而是选择滤波窗口内的像素值中的中间值作为输…

[硬件基础]-快速了解555定时器

快速了解555定时器 文章目录 快速了解555定时器1、555 定时器内部组成2、555 定时器的工作原理3、555 定时器的操作模式3.1 单稳态3.2 双稳态3.3 非稳态 555 定时器振荡器或通常所说的 555 定时器是一种非常流行的计时相关应用 IC。 它们坚固耐用且用途广泛&#xff0c;因为它们…

提高网站性能的10种方法:加速用户体验和降低服务器负担

在今天的数字时代&#xff0c;网站性能对于吸引和保留用户至关重要。一个快速加载的网站不仅提供更好的用户体验&#xff0c;还有助于降低服务器负担。以下是10种提高网站性能的方法&#xff0c;旨在加速页面加载速度和减少服务器的工作负荷。 压缩网页资源 利用压缩算法如gzi…

CVE-2023-36845:Juniper Networks Junos OS EX远程命令执行漏洞

Juniper Networks Junos OS EX远程命令执行漏洞(CVE-2023-36845) 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#…