为什么说高手都有“上游思维”?
你觉得软件工程师这个职业的核心挑战是什么?
很多人可能觉得,软件工程师天天跟代码打交道,他们的挑战大概率是怎么写出更好的代码,怎么掌握更多编程语言等等诸如此类的问题,但答案跟这些完全不沾边儿,而是追问需求。
任何技术都得匹配需求场景才有意义,对软件工程师来说,搞不清楚需求,相当于在错误的方向上一路狂奔,配上再牛的技术也白搭。
所以说,懂得追问需求,才是优秀工程师超出普通人的关键。
别小看追问需求,其实软件工程师问着问着就会发现,很多需求方会直接说:“先别做了,我再回去想一想。”如果需求不清楚,他们自己就会感觉到不对。
其实这样的场景不仅软件工程师会遇到,各行各业的人都避不开。
那具体该怎么追问呢?教你三个方法。
1. 追问具体细节——明确模糊不清的问题
我们都知道,设计程序前要先做好需求分析。在这个过程里,最重要的是确定那些模糊的东西。
因为在代码的世界里,1就是1,0就是0,非黑即白,没有灰色地带——只有把需求定义得清清楚楚、干干净净,把具体细节问明白,软件工程师才能写出代码来。
什么意思呢?很多时候产品经理提出的需求非常模糊,比如“金额大一点的时候,就需要人审批;金额小一点的时候,就不需要人审批”。
这时候软件工程师必须追问:什么叫大,什么叫小?3000元叫大吗,还是5000元,10000元?你必须给我一个明确的数字。
再比如,产品经理说,“面对恶意的人,我们要如何如何”“这个系统要能防住那些薅羊毛的人”。
那软件工程师也要追问: 什么叫恶意的人?什么叫薅羊毛?能不能明确定义给我?如果产品经理定义不出来,程序就没法写。
只有把边界条件问清楚,软件工程师才能写出程序来。
绝大多数人都会把关注点放在可预期的事情上,而忘了关注不可预期的、可能出现故障的一些问题,软件工程师要特别留意。
比如当这个程序走到某一步,走不下去了,怎么办?举个例子,电商网站里都有下单支付模块,产品和业务想的是,用户选好商品,下单,支付,就完了,非常简单。
但是在这个过程里,如果用户下单了,却没支付怎么办?要不要把库存分配给他?假设不分配,直接取消订单,那用户过5分钟回来,发现下好的单失效了,心里肯定堵得慌;那假设分配了,可用户一直没回来支付,库存一直被占着,其他人用不了,这也不行。
所以我们要进一步明确,用户多长时间不付款就可以取消这个订单。
在实际工作中,软件工程师会遇到很多类似的稀奇古怪的问题,必须把它们一一明确下来,让整个程序跑通。
2. 追问X问题——了解需求方的初衷
好了,把需求明确下来,问题就解决了吗?很多需求挺明确的,为什么执行起来也总是磕磕绊绊、常常返工呢?
第二个关键点:避免X-Y问题。
什么叫X-Y问题?简单来说就是,有人想解决问题 X,他觉得Y可能是解决X的方法,于是把Y作为需求提给技术团队,可最后大家发现,Y根本就不是解决X的合适方案。
举个例子。有人问:“如果有个字符串,我想截取最后的三个字符,请问这个方程式怎么写?”然后一堆人说截取三个字符用这个这个方法,还有的说,你这个方法不好,我的方法好,balabala。
一个看似明确的需求:一个字符串要截取最后三位。难道你不好奇他为什么要三位吗?后来有人问起来,他才说:“我想要文件扩展名。”
好了,要文件扩展名,这才是X问题。那扩展名不一定是三位啊,它可以是两位,可以是四位,只不过大多数是三位,其实专门有个系统函数是让人获得文件扩展名的。
不要以为X-Y问题在我们的工作生活中不会出现,这个世界上有太多X-Y问题。软件工程师想弄懂需求,非常关键的一步是找出X问题。
有时候X问题被层层包裹了,所以必须拼命追问需求方,为什么要做这个事?有哪些数据和客户支持这个事?直到了解他们的初衷。
3. 追问系统背后是什么——绕过事,看到人
好的软件工程师能绕到代码背后,看到人。
谷歌广告团队发现,中国的RPM(从搜索到广告转化的成功率)一直偏低,于是跟技术团队来沟通。但业务没有直接说要提升RPM,而是说“你们把广告字体变大一些,背景色调得更醒目一些”。技术好奇:这么做想解决什么核心问题?沟通后才发现是要提升RPM。
于是大家开始调研这个需求,发现了一个现象:中国用户有个习惯就是一打开网页,上面的根本不看,直接看下面。
07、08年那会国内的门户网站常常放一堆密密麻麻、跳来跳去的东西,所以大家习惯性地不看上面,直接往下滚动看正文。
谷歌广告团队一下明白了,为什么广告质量再好中国用户也不看,因为谷歌广告展示位置是在顶部的。后来技术团队把广告调到最下边,很快RPM就提起来了。
在这件事情里,起关键作用的就是屏幕前的用户,是一个个鲜活的人。所以,软件工程师脑子里记住一句话:
数据的背后都是人,系统的背后都是人,代码的背后也是人。
在很多人的印象里,分析需求是产品经理的事儿。但好的软件工程师之所以追问需求,并不是想取代产品经理,而是参与和服务自己的上一环节,看见人、关注人,只有这样,才能在问题发生之前解决问题。
这就是典型的「上游思维」,软件工程师要想突破职业天花板,必须主动朝着自己的上游跨出一步。
其实所有职业都一样,可以说,几乎所有职业里最拔尖的那群人都有一个特点,那就是力争上游。
- EOF -
关注后,回复「题库」领取海量算法题库
回复「电子书」获取计算机相关书籍
点赞和在看就是最大的支持❤️