前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做软件的人不被他人忽悠的唯一方法

做软件的人不被他人忽悠的唯一方法

原创
作者头像
程序员吾真本
发布2023-07-28 19:52:24
2120
发布2023-07-28 19:52:24
举报
文章被收录于专栏:程序员吾真本

做软件的人,不管你是管理者、业务人员、需求分析人员、开发人员、测试人员、运维人员,在IT技术和过程推陈出新和突飞猛进的时代,很容易被人忽悠。你是不是经常发现,出于从众心理,你投入时间和金钱,读书和听课,学习并实践了身边其他人所热捧的新技术和新过程,从设计思维,到敏捷,到精益,到DevOps,到持续交付,到TDD,到DDD,到整洁架构,到基础设施即代码,到混沌工程,到AIGC。学了和用了一圈下来,结果发现,*软件质量仍然较差,用户价值仍然较低,软件交付仍然延期*。你感觉被人忽悠了。

如何才能不被忽悠?

如何才能不被别人忽悠?方法只有一个,就是*用科学方法自己动手做实验*,来验证书上和大佬所说的技术和过程,能不能提升自己的软件质量和用户价值。

有人会说,我就是一边学技术和过程,一边在实践呀。实践出真知呀。

没错。你肯实践,就能甩开只读书而不动手的人好几条街。但如果只是实践,而不安排没有做这个实践的*对照组*,怎么知道实践新技术和过程后的成效,要好于原来旧的方式,从而让其他人信服?

咱们拿敏捷试点举例子。有几个企业在做敏捷试点的时候,能安排一个不引入任何敏捷实践的团队,做对照组,来验证敏捷实践的实际成效呢?经常是领导只安排一两个团队当引入敏捷实践的“实验组”做“试点”,而不安排对照组团队。做了一段时间后,把试点团队的度量数据整理一下,作为试点成效汇报上去,就开始推广,并不考虑与对照组团队做对比。

有人会说,可以把实验组的试点团队在试点前和试点后的数据进行对比呀。这样说听起来合理,但这样对比有个问题,就是试点团队在试点前,根本就没有度量试点期间需要度量的指标。为了营造试点后良好的成效,此时经常会靠拍脑袋,把试点前的数据写得低一些,让试点的成效皆大欢喜。

但此时,如果实际成效与试点前相比,几乎持平,甚至更差,一般就没有人敢仗义执言了。此时,团队成员心里,都觉得自己被忽悠了。

还有人会说,找个与试点团队相似的团队,作为对照组,太麻烦了。可以不设置对照组,而在试点团队结束试点后,找其中的团队成员访谈一下,问问他们是否觉得敏捷实践有帮助,就行了。

这个方法虽然简单,但其中隐藏着两个很大的问题。第一,团队成员在访谈中,出于社会情境的压力,在从众心理的驱使下,只会说敏捷实践的好话。毕竟领导要求大家支持敏捷试点嘛。第二,访谈的结果只能揭示相关性,而无法揭示因果关系。我们知道,两个事物相关,并不等同于它们之间存在因果关系。*相关性不等同于因果性*。要想*揭示因果关系,只能靠有对照组的科学实验*

图:要想揭示因果关系,只能靠有对照组的科学实验
图:要想揭示因果关系,只能靠有对照组的科学实验

为什么人们都热衷于寻找因果关系?因为只有这样,才能让人产生*可感知的控制感*,进而能满足人天生具有的*自主作出选择的需求*

如何做好科学实验?

如何才能做好有对照组的科学实验?有如下6步。

1 基于观察

2 问出问题

3 形成可验证的解释性假说

4 基于假说做出预测

5 设计并执行有对照组的实验,验证预测

6 根据实验结果可回到第3步,不断迭代优化假说或预测

用科学方法做实验,不仅可以用于验证敏捷是不是在忽悠人,还可以用于验证你在书中读到的技术和过程是不是在忽悠人。

假设你在书中读到了这么一段:Docker利用chroot这个Unix系统调用,来为每个进程分配各自的根目录,用来隔离这些进程。

该如何用上面6步,设计一个科学实验,验证一下这段文字是不是在忽悠人?

1 基于观察。

我读到“Docker利用chroot这个Unix系统调用,来为每个进程分配各自的根目录,用来隔离这些进程。”

2 问出问题。

我可以问:“运行在电脑上的docker容器,其中的文件系统,与其宿主电脑上的文件系统,是隔离的吗?”

3 形成可验证的解释性假说。

我可以这样提出解释性假说:“Docker利用chroot这个Unix系统调用,为每个进程单独分配一个根目录,用来保存这个进程的所有文件,从而实现进程之间的隔离。”

4 基于假说做出预测。

我可以这样做出预测:“当我在电脑上运行一个Docker容器后,容器内特定文件夹中的特定文件内容,应该与宿主电脑上相同文件夹的相同文件中的内容不同。因为这样才能体现隔离性。”

5 设计并执行有对照组的实验,验证预测。

我可以将宿主电脑Ubuntu系统,当作一个对照组,并执行下面的命令,查看文件/etc/issue的第一行,获取操作系统版本号信息。

代码语言:javascript
复制
head -n1 /etc/issue

我了解到宿主电脑的Ubuntu版本是:

代码语言:javascript
复制
Ubuntu 22.04.2 LTS \n \l

然后我在宿主电脑上通过以下命令,运行一个Docker容器,并把它当作实验组。

代码语言:javascript
复制
docker run --name firstcontainer -ti --rm alpine:3.11 /bin/sh

这行命令会根据alpine 3.11镜像,运行一个名为firstcontainer的容器。并且能在命令执行后,打开一个命令行界面,用来操作容器内的文件。

然后我在容器内的命令行界面,执行与宿主机同样的命令,来查看容器的操作系统版本号。

代码语言:javascript
复制
head -n1 /etc/issue

命令运行结果告诉我,容器内的Linux系统版本是:

代码语言:javascript
复制
Welcome to Alpine Linux 3.11

6 根据实验结果可回到第3步,不断迭代优化假说或预测。

实验结果表明,对于同样目录同样文件名的/etc/issue文件的第一行,对照组和实验组的结果不一致。这支持了第3步的假说。我可以视支持的情况,不断迭代和优化实验。

总结一下。*读书*虽然能很快得到结论,但*难以说明*结论一定适用于你,且*难以揭示*结论背后的原因。*访谈*只能揭示相关性,无法揭示因果性。*相关性不等同于因果性*。揭示因果性的*唯一方法*,就是*用科学方法做实验*。你用科学方法,做具备对照组的实验,来验证书上或大佬所说的结论,是否名副其实。这才是做软件的人,不被他人忽悠的唯一方法。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何才能不被忽悠?
  • 如何做好科学实验?
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档