最近,「得到」全新策劃了一個(gè)知識(shí)工程,叫“前途叢書”。這套書選取社會(huì)上各個(gè)熱門的職業(yè),對(duì)行業(yè)高手腦子里的經(jīng)驗(yàn)和認(rèn)知進(jìn)行整理,是適應(yīng)這個(gè)時(shí)代需求的、非常獨(dú)特的一套百科全書。在這套書的研發(fā)過程中,我們發(fā)現(xiàn)了一個(gè)非常有意思的事情:高手都有“上游思維”。
為什么這么說呢?我們今天以其中一本《這就是軟件工程師》為例,來一起找找答案。
我們都知道,程序員,更準(zhǔn)確地說是軟件工程師這一行,毫無疑問是近年來的熱門職業(yè)。這一行薪酬高,平均薪資在所有行業(yè)里排第一,比金融行業(yè)都高。除了薪酬高,人才需求也大。光是2020年2月到8月,招聘人數(shù)就同比上漲了22%。在熱門背后,這究竟是個(gè)什么樣的職業(yè)?「得到」圖書團(tuán)隊(duì)特別訪談了四位一線軟件工程師:第一位,騰訊公司副總裁,郄小虎。用吳軍老師的話說,“谷歌中國歷史上最好的工程師,沒有之一,當(dāng)屬郄小虎?!钡诙唬愷├蠋?,是軟件工程師圈子里出了名的“皓叔”,“左耳朵耗子”,從業(yè)20多年,堪稱“骨灰級(jí)程序員”,也相當(dāng)了不得。第三位,谷歌大腦的首席工程師,陳智峰。第四位,唯品會(huì)聯(lián)席CTO,魯鵬俊。個(gè)頂個(gè)都是牛人。關(guān)于軟件工程師,幾位老師回答了很多有意思的問題,其中一個(gè)是:你覺得軟件工程師這個(gè)職業(yè)的核心挑戰(zhàn)是什么?很多人可能覺得,軟件工程師天天跟代碼打交道,他們的挑戰(zhàn)大概率是怎么寫出更好的代碼,怎么掌握更多編程語言等等諸如此類的問題,但幾位老師給出的答案跟這些完全不沾邊兒,他們不約而同地把答案鎖定到了四個(gè)字上面:追問需求。為什么這么說呢?這是因?yàn)?,任何技術(shù)都得匹配需求場(chǎng)景才有意義,對(duì)軟件工程師來說,搞不清楚需求,相當(dāng)于在錯(cuò)誤的方向上一路狂奔,配上再牛的技術(shù)也白搭。所以說,懂得追問需求,才是優(yōu)秀工程師超出普通人的關(guān)鍵。別小看追問需求這個(gè)動(dòng)作,軟件工程師問著問著就會(huì)發(fā)現(xiàn),很多需求方,比如產(chǎn)品經(jīng)理或客戶會(huì)直接說:“先別做了,我再回去想一想?!蹦憧?,如果需求不清楚,他們自己就會(huì)感覺到不對(duì)。其實(shí)這樣的場(chǎng)景不僅軟件工程師會(huì)遇到,各行各業(yè)的人都避不開。那具體該怎么追問呢?陳皓老師和郄小虎老師給了三個(gè)方法:第一,追問具體細(xì)節(jié);第二,追問X問題;第三,追問系統(tǒng)背后是什么。我們一個(gè)個(gè)來看。
1.追問具體細(xì)節(jié),明確模糊不清的問題
我們都知道,設(shè)計(jì)程序前要先做好需求分析。在這個(gè)過程里,最重要的是確定那些模糊的東西。
因?yàn)樵诖a的世界里,1就是1,0就是0,非黑即白,沒有灰色地帶——只有把需求定義得清清楚楚、干干凈凈,把具體細(xì)節(jié)問明白,軟件工程師才能寫出代碼來。這是什么意思呢?陳皓老師舉了幾個(gè)例子,他說,很多時(shí)候產(chǎn)品經(jīng)理提出的需求非常模糊,比如“金額大一點(diǎn)的時(shí)候,就需要人審批;金額小一點(diǎn)的時(shí)候,就不需要人審批”。這時(shí)候軟件工程師必須追問:什么叫大,什么叫???3000元叫大嗎,還是5000元,10000元?你必須給我一個(gè)明確的數(shù)字。再比如,產(chǎn)品經(jīng)理說,“面對(duì)惡意的人,我們要如何如何”“這個(gè)系統(tǒng)要能防住那些薅羊毛的人”。那軟件工程師也要追問: 什么叫惡意的人?什么叫薅羊毛?能不能明確定義給我?如果產(chǎn)品經(jīng)理定義不出來,程序就沒法寫。只有把邊界條件問清楚,軟件工程師才能寫出程序來。在這里,陳皓老師還特別提醒了一點(diǎn):絕大多數(shù)人都會(huì)把關(guān)注點(diǎn)放在可預(yù)期的事情上,而忘了關(guān)注不可預(yù)期的、可能出現(xiàn)故障的一些問題,軟件工程師要特別留意。比如當(dāng)這個(gè)程序走到某一步,走不下去了,怎么辦?舉個(gè)例子,電商網(wǎng)站里都有下單支付模塊,產(chǎn)品和業(yè)務(wù)想的是,用戶選好商品,下單,支付,就完了,非常簡(jiǎn)單。但是在這個(gè)過程里,如果用戶下單了,卻沒支付怎么辦?要不要把庫存分配給他?假設(shè)不分配,直接取消訂單,那用戶過5分鐘回來,發(fā)現(xiàn)下好的單失效了,心里肯定堵得慌;那假設(shè)分配了,可用戶一直沒回來支付,庫存一直被占著,其他人用不了,這也不行。所以我們要進(jìn)一步明確,用戶多長(zhǎng)時(shí)間不付款就可以取消這個(gè)訂單。
在實(shí)際工作中,軟件工程師會(huì)遇到很多類似的稀奇古怪的問題,必須把它們一一明確下來,讓整個(gè)程序跑通。
2.追問X問題,了解需求方的初衷
好了,把需求明確下來,問題就解決了嗎?很多需求挺明確的,為什么執(zhí)行起來也總是磕磕絆絆、常常返工呢?
陳皓老師提到了第二個(gè)關(guān)鍵點(diǎn):避免X-Y問題。
什么叫X-Y問題?簡(jiǎn)單來說就是,有人想解決問題 X,他覺得Y可能是解決X的方法,于是把Y作為需求提給技術(shù)團(tuán)隊(duì),可最后大家發(fā)現(xiàn),Y根本就不是解決X的合適方案。
舉個(gè)例子。有個(gè)人在網(wǎng)上問問題,他是這么問的:“如果有個(gè)字符串,我想截取最后的三個(gè)字符,請(qǐng)問這個(gè)方程式怎么寫?”然后一堆人說截取三個(gè)字符用這個(gè)這個(gè)方法,還有的說,你這個(gè)方法不好,我的方法好,怎么怎么樣。
一個(gè)字符串要截取最后三位,一個(gè)看似明確的需求,難道你不好奇他為什么要三位嗎?后來有人問起來,這個(gè)人才說:“我想要文件擴(kuò)展名。”
好了,要文件擴(kuò)展名,這才是X問題。那擴(kuò)展名不一定是三位啊,它可以是兩位,可以是四位,只不過大多數(shù)是三位,其實(shí)專門有個(gè)系統(tǒng)函數(shù)是讓人獲得文件擴(kuò)展名的。
不要以為X-Y問題在我們的工作生活中不會(huì)出現(xiàn),這個(gè)世界上有太多X-Y問題。軟件工程師想弄懂需求,非常關(guān)鍵的一步是找出X問題。
有時(shí)候X問題被層層包裹了,所以必須拼命追問需求方,為什么要做這個(gè)事?有哪些數(shù)據(jù)和客戶支持這個(gè)事?直到了解他們的初衷。
3.追問系統(tǒng)背后是什么,繞過事,看到人
陳皓老師說的X-Y問題,郄小虎老師也提到了類似的觀點(diǎn),但角度稍有不同,在郄小虎老師看來,好的軟件工程師能繞到代碼背后,看到人。
郄小虎老師在谷歌廣告團(tuán)隊(duì)的時(shí)候,負(fù)責(zé)提升從搜索到廣告轉(zhuǎn)化的成功率。成功率會(huì)通過一個(gè)叫RPM的指標(biāo)反饋出來。
公司業(yè)務(wù)團(tuán)隊(duì)發(fā)現(xiàn),中國的RPM一直偏低,跟技術(shù)團(tuán)隊(duì)來溝通。但業(yè)務(wù)沒有直接說要提升RPM,而是說“你們把廣告字體變大一些,背景色調(diào)得更醒目一些”。
這時(shí)候技術(shù)就問了:這么做想解決的核心問題是什么?溝通之后,才知道是要提升RPM。
于是大家開始針對(duì)這個(gè)需求作調(diào)研,發(fā)現(xiàn)了一個(gè)重要問題,中國用戶有個(gè)習(xí)慣,就是一打開網(wǎng)頁,上面的根本不看,直接看下面。
當(dāng)時(shí)應(yīng)該是07、08年,那時(shí)候國內(nèi)的門戶網(wǎng)站,常常放一堆密密麻麻、跳來跳去的東西,所以大家基本上都習(xí)慣性地不看上面,直接往下滾動(dòng),看正文部分。
谷歌廣告團(tuán)隊(duì)一下子明白了,為什么廣告質(zhì)量再好,中國用戶也不會(huì)看,因?yàn)楣雀鑿V告展示位置是在頂部的。
后來技術(shù)團(tuán)隊(duì)把廣告調(diào)到最下面,很快RPM就提起來了。你看,在這件事情里,起關(guān)鍵作用的就是屏幕前的用戶,是一個(gè)個(gè)鮮活的人啊。
另一個(gè)例子也很有意思。很多人都拼過車,我們都知道,拼車就是幾個(gè)人拼一輛車。那一定會(huì)涉及到,司機(jī)載著第一位乘客去接第二位乘客的情況。
這時(shí)候有個(gè)問題,怎么走才叫順呢?關(guān)于這個(gè)問題,當(dāng)時(shí)公司有一套數(shù)據(jù)標(biāo)準(zhǔn):整體時(shí)長(zhǎng)增量或者距離增量只要不超過一個(gè)百分比,比如說15%,就是順。
假設(shè)車上已經(jīng)有一個(gè)乘客A,司機(jī)要去接下一個(gè)乘客B。A本來10分鐘能到,因?yàn)榻覤變成了11分鐘,或者本來10公里的路程變成了11公里用戶說模塊,沒超過15%,就是順的。
看起來非常明確了對(duì)不對(duì)?但好的軟件工程師依然會(huì)追問:如果在早高峰時(shí)段,本來乘客A直行就能到達(dá)目的地,但是接乘客B得調(diào)頭用戶說模塊,可能調(diào)頭用了1分鐘,增量沒超過15%,從數(shù)據(jù)上看也沒錯(cuò),這時(shí)候調(diào)不調(diào)頭?這種路線的訂單合不合理?
你看,這個(gè)問題就是看見了人,看見了拼車的乘客。很多時(shí)候乘客趕早高峰,急著去開會(huì)呢,晚幾分鐘就遲到,結(jié)果司機(jī)開著開著調(diào)了個(gè)頭,或者拐進(jìn)小區(qū)里轉(zhuǎn)來轉(zhuǎn)去接下一個(gè)人,你說誰碰見這事不抓狂?
你會(huì)發(fā)現(xiàn),可能調(diào)頭的增量沒超過15%,直行的增量也沒超過15%,看數(shù)據(jù)都挺好。但這個(gè)15%跟那個(gè)15%對(duì)用戶的影響完全不一樣,體感天差地別。
所以,郄小虎老師特別提醒了這一點(diǎn),他說:“軟件工程師腦子里要時(shí)刻繃著一根弦,要知道,數(shù)據(jù)的背后都是人,系統(tǒng)的背后都是人,代碼的背后也是人?!?/p>
在很多人的印象里,軟件工程師的主要任務(wù)是寫代碼,分析需求是產(chǎn)品經(jīng)理的事兒啊。但整個(gè)采訪下來,幾位老師對(duì)需求的關(guān)注和探求讓人印象深刻。
好的軟件工程師之所以追問需求,并不是想取代產(chǎn)品經(jīng)理,而是參與和服務(wù)自己的上一環(huán)節(jié),看見人、關(guān)注人,只有這樣,才能在問題發(fā)生之前解決問題。
這是典型的“上游思維”,軟件工程師要想突破職業(yè)天花板,必須主動(dòng)朝著自己的上游跨出一步。
其實(shí)所有職業(yè)都一樣,可以說,幾乎所有職業(yè)里最拔尖的那群人都有一個(gè)特點(diǎn),那就是力爭(zhēng)上游。
《這就是軟件工程師》是“前途叢書”里的一本,“前途叢書”和普通的書不一樣,它不是高高在上的理論,而是我們?cè)L遍行業(yè)高手,把他們頭腦里那些沉淀多年的、來自一線的、最新鮮的智慧和心法“掏出來”,捧到你的面前。
當(dāng)你做職業(yè)選擇的時(shí)候,希望快速了解一個(gè)職業(yè)的時(shí)候,在特定職業(yè)里遭遇瓶頸、渴望精進(jìn)的時(shí)候,應(yīng)該打開這套書。
除了《這就是軟件工程師》,已經(jīng)出版的還有《這就是保險(xiǎn)代理人》和《這就是投資人》,正在策劃的有電競(jìng)選手、會(huì)計(jì)師、建筑師,等等,這是一項(xiàng)不斷生長(zhǎng)的知識(shí)工程。
現(xiàn)在在「得到」站內(nèi)下單,買紙書送電子書,走到哪兒都能看,推薦你拿下。
▽戳此入手
猜 你 喜 歡
如果你覺得這篇文章有收獲,點(diǎn)個(gè)贊吧!點(diǎn)“在看”讓更多人一起成為先行者!