我們先來(lái)看個(gè)段子:
去飯店,坐下來(lái)器瘪。
“服務(wù)員,給我來(lái)份宮保雞痘嫜恪橡疼!”
“好嘞!”
——————這叫原始需求
大廚做到一半庐舟。
“服務(wù)員欣除,菜里不要放肉∨猜裕”
“不放肉怎么做袄恪滔岳?”
“不放肉就行了,其它按正常程序做挽牢,不就行了谱煤,難嗎?”
“好的您稍等”
——————中途需求變更
廚房:
大廚:“你大爺禽拔,我肉都回鍋了”
服務(wù)員:“顧客非要要求的嘛刘离,你把肉挑出來(lái)不就行了嗎”
大廚:“行你大爺”
然而還是一點(diǎn)點(diǎn)挑出來(lái)了
——————改動(dòng)太大,部分重構(gòu)
餐廳:
“服務(wù)員睹栖,菜里能給我加點(diǎn)腐竹嗎硫惕?”
“行,這個(gè)應(yīng)該簡(jiǎn)單野来∧粘”
——————低估改動(dòng)成本
廚房:
大廚:“你TMD,不知道腐竹得提前泡水曼氛?炒到一半才說(shuō)缚柳?跟他說(shuō),想吃腐竹就多等半天”
服務(wù)員:“啊你怎么不早說(shuō)搪锣?”
大廚:“早說(shuō)你MLGB我怎么知道他要往宮保雞丁里放腐竹”
然而還是去泡腐竹了
——————新需求引入了新研發(fā)成本
餐廳:
“服務(wù)員秋忙,還是把肉加回去吧”
“您不是剛說(shuō)不要肉嗎”
“現(xiàn)在又想要了”
“...好的您稍等”
——————某一功能點(diǎn)搖擺不定
廚房:
大廚:“日你啊,菜都炒過(guò)火了你讓我放肉构舟?還好肉我沒(méi)扔”
服務(wù)員:“客戶提的要求你日我干嘛灰追?”
大廚:“你就不能拒絕他啊狗超?暗臁?”
服務(wù)員:“人家是客戶嘛努咐】噍铮”
——————甲方是大爺
餐廳:
“服務(wù)員!服務(wù)員渗稍!”
“來(lái)了來(lái)了佩迟,你好?”
“怎么這么半天案鸵佟报强?”
“稍等我給您催催啊”
——————改動(dòng)開(kāi)始導(dǎo)致工期延誤
廚房:
大廚:“催你M催,腐竹沒(méi)泡好拱燃,我還得重新放油秉溉,他要想吃老的也行,沒(méi)法保質(zhì)保量”
——————開(kāi)發(fā)者請(qǐng)求重新排期
餐廳:
服務(wù)員:“抱歉,加腐竹的話得多等半天召嘶,您別著急哈”
“我靠要等那么久父晶?我現(xiàn)在就要吃,你們能快點(diǎn)嗎弄跌?”
“行...您稍等”
——————甲方催活
廚房:
大廚:“我日他仙人板板甲喝,中途改需求又想按期交付,逗我玩呢碟绑?”
服務(wù)員:“那我問(wèn)問(wèn)俺猿,要不讓他們換個(gè)菜?”
大廚:“再換我就死了”
——————開(kāi)發(fā)者開(kāi)始和中間人PK
餐廳:
“服務(wù)員格仲,這樣吧押袍,腐竹不要了,換成蒜毫能快點(diǎn)嗎凯肋?對(duì)了谊惭,順便加點(diǎn)番茄醬”
——————因工期過(guò)長(zhǎng)再次改動(dòng)需求
廚房:
大廚:“我日了狗啊,你TM不知道蒜毫也得焯水拔甓圈盔?還有你讓我怎么往熱菜里放番茄醬啊悄雅?驱敲?”
服務(wù)員:“焯水也比等腐竹強(qiáng)吧,番茄醬往里一倒不就行了嗎宽闲?很難嗎众眨?”
大廚:“草。腐竹我還得接著泡容诬,萬(wàn)一這孫子一會(huì)又想要了呢娩梨。”
——————頻繁改動(dòng)開(kāi)始導(dǎo)致大量冗余
餐廳:
“服務(wù)員览徒,菜里加茄丁了沒(méi)有狈定?我去其它飯店吃可都是有茄丁的”
“好好好您稍等您稍等”
——————奇葩需求
廚房:
大廚:“我去他二大爺他吃的是斯里蘭卡三流技校炒的宮保雞丁嗎?宮保雞丁里放茄断芭睢纽什??”
服務(wù)員:“茄丁抄好了扔里邊不就行了嗎友雳?”
大廚:“那TM還能叫菜嗎稿湿?哪個(gè)系的?”
服務(wù)員:“客戶要押赊,你就給炒了吧。”
大廚:“MB你順道問(wèn)問(wèn)他腐竹還要不要流礁,我這盆腐竹還占著地方呢不要我就扔了”
——————奇葩你也得做
餐廳:
“服務(wù)員涕俗,還要多久能好啊”
“很快,很快...”
“再給我來(lái)杯西瓜汁神帅≡俟茫”
“...好”
“我再等10分鐘,還不好我就走了找御,反正還沒(méi)給錢(qián)元镀。”
“很快霎桅,很快...”
——————黑暗前的最后黎明
10分鐘后
“咦栖疑,我上次吃的不是這個(gè)味啊滔驶?”
從廚房殺出來(lái)的大廚:“我TM就日了你的狗...”
——————最終決戰(zhàn)——————
你=客戶
服務(wù)員=客戶經(jīng)理+產(chǎn)品經(jīng)理
大廚=碼農(nóng)
請(qǐng)自行轉(zhuǎn)換...
注:以上場(chǎng)景已極度夸張遇革,實(shí)際生產(chǎn)生活中碼農(nóng)和PM是和睦友好的相親相愛(ài)的一家人
編程語(yǔ)言,它終歸是一門(mén)語(yǔ)言揭糕,只是它的使用者是電腦軟件和硬件萝快。產(chǎn)品經(jīng)理和程序員對(duì)于需求理解的思維體系、語(yǔ)言體系著角、語(yǔ)言上下文環(huán)境不同揪漩。
比如這個(gè)需求:一包中華45元,產(chǎn)目經(jīng)理給你50元吏口,讓程序員去買(mǎi)包煙把找的5塊錢(qián)拿回來(lái)奄容。
產(chǎn)品經(jīng)理覺(jué)得非常簡(jiǎn)單,一句話的事锨侯。
而對(duì)于程序員而言:
50元是不是假錢(qián)嫩海?
如果不是假錢(qián),去哪買(mǎi)煙囚痴?
如果去西安買(mǎi)煙叁怪,西安賣(mài)煙的地方關(guān)門(mén)了?是回去給產(chǎn)品經(jīng)理說(shuō)賣(mài)煙的地方關(guān)門(mén)了還是一直找深滚,直到找到一個(gè)沒(méi)有關(guān)門(mén)的賣(mài)煙的地方奕谭?
如果這里的一包中華是40元,或者一包中華是50元痴荐,買(mǎi)不買(mǎi)血柳?不管多錢(qián)都買(mǎi)?還是征求產(chǎn)品經(jīng)理同意后再買(mǎi)生兆?
怎么判斷買(mǎi)的煙不是假煙难捌?還是不管真假買(mǎi)了一包中華就算?
買(mǎi)了之后是郵寄給項(xiàng)目經(jīng)理?還是自己給帶回來(lái)根吁?還是讓順道的同事給捎回去员淫?
如果買(mǎi)回來(lái)買(mǎi)的是50元一包的中華,產(chǎn)品經(jīng)理嫌貴了怎么辦击敌?
如果買(mǎi)回來(lái)的是40元一包的中華介返,是給產(chǎn)品經(jīng)理退5元錢(qián)還是給他退10元?
如果產(chǎn)品經(jīng)理一定要45元的中華怎么辦沃斤?
如果產(chǎn)品經(jīng)理突然不想要這煙了圣蝎,讓你退回去怎么辦?
如果賣(mài)煙的人不退怎么辦衡瓶?
如果產(chǎn)品經(jīng)理讓你退了重新在別的地方買(mǎi)一包怎么辦徘公?
如果賣(mài)煙的老王退了,但是再?zèng)]有別的賣(mài)煙的地方了怎么辦鞍陨!
如果又找到一個(gè)賣(mài)煙的地方步淹,并且一包中華也是45元。帶給項(xiàng)目經(jīng)理诚撵。項(xiàng)目經(jīng)理聽(tīng)說(shuō)你是從西安買(mǎi)的缭裆,他要抽北京買(mǎi)的煙怎么辦?
......
你會(huì)發(fā)現(xiàn)問(wèn)題沒(méi)完沒(méi)了寿烟。
這會(huì)你可能會(huì)說(shuō)程序員太死腦筋澈驼。錯(cuò)!產(chǎn)品經(jīng)理所說(shuō)的筛武,中華45元缝其,給你50元,買(mǎi)完找5元徘六。這句話是建立在一系統(tǒng)上下文語(yǔ)境内边,人類(lèi)生活習(xí)慣,生活常識(shí)當(dāng)中的待锈。產(chǎn)品經(jīng)理的潛臺(tái)詞是說(shuō)找最近的有賣(mài)煙的買(mǎi)一包45的不是假煙的中華煙漠其,找的五塊錢(qián)給我。
而對(duì)于程序語(yǔ)言竿音,還是開(kāi)頭那句話:編程語(yǔ)言是一門(mén)語(yǔ)言和屎,它的使用者是軟件和硬件。對(duì)于計(jì)算機(jī)而言春瞬,它沒(méi)有情感柴信,不理解人類(lèi)的這一系統(tǒng)語(yǔ)言環(huán)境,生活習(xí)慣宽气,生活常識(shí)随常。它只嚴(yán)格按照它的語(yǔ)言規(guī)則潜沦,編譯原理一步一步,老老實(shí)實(shí)线罕,絲毫不露地往下執(zhí)行止潮。如果沒(méi)有分歧窃判,一切妥當(dāng)钞楼。如果有分歧,完蛋了袄琳。人類(lèi)千百萬(wàn)年來(lái)進(jìn)化形成的臨機(jī)應(yīng)變询件,相機(jī)行事等等這些本能,計(jì)算機(jī)及編程語(yǔ)言一丁點(diǎn)不具備唆樊。它就認(rèn)準(zhǔn)程序員寫(xiě)的程序宛琅,就乖乖地聽(tīng)你程序,指哪打哪逗旁。所謂的人工智能也只是程序員把每一種可能嘿辟,人類(lèi)面對(duì)問(wèn)題所會(huì)面對(duì)的問(wèn)題事先寫(xiě)好程序語(yǔ)言錄入進(jìn)計(jì)算機(jī)。如果意外在之前所料之中片效,程序完美執(zhí)行红伦,如果意外所料不及,那就是BUG淀衣,就是錯(cuò)誤昙读。而這些BUG和錯(cuò)誤都要程序員去一點(diǎn)一點(diǎn)補(bǔ)充產(chǎn)品經(jīng)理所謂“需求”之外的所有潛臺(tái)詞。
這是在需求確定的情況下膨桥,如果程序員正在買(mǎi)煙的路上蛮浑,產(chǎn)品經(jīng)理打電話說(shuō),剩下5塊錢(qián)回來(lái)再買(mǎi)瓶水只嚣。那之前所有的邏輯程序員又得再執(zhí)行一遍沮稚。如果產(chǎn)品經(jīng)理過(guò)一會(huì)又打電話說(shuō)再買(mǎi)個(gè)面包。册舞。蕴掏。那就折騰死程序員了。
從需求方面說(shuō)完环础,再?gòu)某绦騿T編碼實(shí)現(xiàn)方面來(lái)說(shuō)囚似。還是剛才的需求:產(chǎn)品經(jīng)理給程序員50元,讓買(mǎi)一包45元的中華煙线得,找回來(lái)5元錢(qián)饶唤。
程序員一聽(tīng),程序里面寫(xiě)死了贯钩,從線路1去西大街募狂,買(mǎi)完煙再沿線路2返回办素。但是中途產(chǎn)品經(jīng)理說(shuō)你再買(mǎi)點(diǎn)零食回來(lái)。程序員傻眼了;銮睢P源!得雷滚,只能程序重新設(shè)計(jì)需曾,從線路2出發(fā)。
試想祈远,從初中開(kāi)始學(xué)英語(yǔ)呆万,初中三年,高中三年车份,大學(xué)四年谋减,十年下來(lái),有幾個(gè)人能面對(duì)外國(guó)人說(shuō)一口標(biāo)準(zhǔn)的英語(yǔ)扫沼?編程語(yǔ)言也一樣出爹,有些程序員大學(xué)沒(méi)好好研究編程,或者根本不是計(jì)算機(jī)系缎除,上過(guò)幾天培訓(xùn)班严就,知道編程是怎么一回事,會(huì)寫(xiě)if/else/for伴找,就業(yè)所迫盈蛮,就開(kāi)始商業(yè)編程了。寫(xiě)程序必然是指哪打哪技矮,別的情況我不管抖誉。這樣的程序,脆弱的不敢碰衰倦,一有改動(dòng)就是要性命啊袒炉。
最后一方面是,國(guó)內(nèi)軟件開(kāi)發(fā)樊零,開(kāi)發(fā)流程不完善我磁。有活就趕緊埋頭干,干了不對(duì)再說(shuō)驻襟。最終需求理解不到位夺艰,項(xiàng)目周期比火車(chē)還長(zhǎng),項(xiàng)目成本居高不下沉衣。
有時(shí)候拖著下巴想想郁副,編程真是一門(mén)藝術(shù)活。
文章來(lái)源:知乎 @貓愛(ài)吃魚(yú)不吃耗子