不懂開發請不要說這很容易實現
“這個網站相當簡單,所有你需要做的就是完成X,Y,Z。你看起來應該是技術很好,所以,我相信,你不需要花費太多時間就能把它搭建起來。”
我時不時的就會收到這樣的Email。寫這些郵件的人幾乎都是跟技術不沾邊的人,或正在研究他們的第一個產品。起初,當聽到人們這樣的話,我總是十分的惱怒。他們在跟誰辯論軟體開發所需要的時間?但後來我意識到,即使我自己對自己的專案預測要花去多少開發時間,我也是一籌莫展。如果連我自己都做不好,我何必對那些人惱怒呢?
真正讓我鬱悶的不是他們預估的錯誤。問題在於他們竟然認為自己可以做出正確的估計。作為開發人員,我們經常會發現,在軟體開發的問題上,一個外行人會很自然的把複雜的事情估計的很簡單。
這並不是為我們的憤怒找藉口。但這引起了另外一個有趣的問題:為什麼我們天生的預測複雜性的能力在遇到程式設計問題時會失靈?
為了回答這個問題,讓我們來認識一下我們的大腦如何估計事情的。有些事情對於一些沒有經驗的人也很容易預估正確,但有些事情則不然。
我們來想想觀看一個人彈吉他。即使你從來沒有彈過吉他,在觀看了一場彈奏《瑪麗有隻小羊羔(Mary had a Little Lamb)》的吉他表演後,你也能大概推測出這很簡單,一個人不需要太高的技術就能演奏出來。同樣,當觀看了有人演奏D大調的《卡農(Pachabel’s Canon)》後,你也很容易推測出,這很複雜,需要很長時間的練習才能演奏的出來。
為什麼我們能夠很迅速準確的預估這兩首曲子的複雜性呢?這是跟我們用來判斷一個事情簡單和還是複雜的方法有關的。我們的大腦有一些現成的模式來完成這些事情,首先一個就是根據速度。這種情況下,大腦會辨別每秒鐘演奏的東西。根據每秒鐘演奏了多少東西,我們很容易有一個直觀的判斷曲子的複雜度。因為用吉他演奏一首歌是一種物理過程,一種感官上的活動,我們的大腦很容易依此來推測速度,繼而轉換成複雜度。
我們還有另外一個天生的推測依據:體積。想想把一個帳篷和一棟公寓放在一起對比。即使一個人從來沒有學過建築學,他也能告訴你通常設計和建造一個帳篷會比設計和建造一棟公寓要簡單。為什麼?因為我們天生的會使用物理體積作為事物複雜性的一個指標。
當然。上面說的這兩種邏輯分析並不是總是100%的有效。但大多數情況下,人們就是這樣幹,而且很成功。大多數情況中,我們在對物理過程評估時,我們的大腦會對物理事物進行有效的關聯,不需要依賴之前的經驗。
現在讓我們來談談軟體。當一個不懂技術的人試圖對軟體開發時間進行評估時,有兩個很基本的直觀指標在輔助他們:以體積為指標的複雜度和以速度為指標的複雜度。但他們沒有意識到,軟體跟他們想象的不一樣。軟體本質上不是有形物質。沒有體積和速度。它的極小的組成部分可能會時不時的在電腦螢幕上閃現。正因為如此,當面對開發一個web應用時(或任何型別的軟體),我們的基本直觀感覺失效了。
這第一點,速度,很顯然根本不可能被外行人拿來對軟體進行評估。於是很自然的,他們傾向於使用體積指標進行評估。要麼是根據描述文件的頁數,要麼是根據軟體的功能用例數或特徵數。
有時候,這種評估手段確實有效!當面對一個靜態網站,沒有特別的設計要求,外行人很容易用這種方法估計出開發時間。但是,通常情況下,對於軟體開發,體積並不能真實有效的反映複雜度。
不幸的是,對於軟體的複雜度,唯一有效的推測方法是依據經驗。而且還不是時時都好用。作為一個程式設計師,我知道,根據我之前開發過的相似的功能特徵,我可以估計出現在的這些功能特徵各自要多少開發時間。然後,我把總時間加起來,這就得到了完成整個專案需要的大致時間。然而,事實情況中,每個專案在開發過程中都遇到二、三個瓶頸。這些瓶頸會肆意的消耗程式設計師的大量時間,你在遇到它們之前根本不會有所預見。它們會拖住整個專案,致使工期延後數週甚至數月。
這些是沒有經驗的人在評估複雜度時不會理解的。他們不明白在其他事情上都很靈的方法,為什麼放到軟體開發上就不靈了。所以,下一次當你聽到有人說“我想你幾天時間就能把它開發出來”時,不管是誰說的,都不要懊惱。深呼吸一下,告訴他這篇文章的地址,自己該幹什麼還幹什麼。
英文連結:I'm Sure It Will Only Take You A Few Days To Code 翻譯 IT外刊評論
相關文章
- 不懂技術的人不要對懂技術的人說這很容易實現
- 請非技術人員不要對技術人員說這很容易實現
- 【譯】「開源」其實很容易
- 請不要對程式設計師初學者說這些話……程式設計師
- 請不要打斷開發人員
- 為什麼精益生產實現起來這麼難?這篇文章說的很通透
- 這是道面試題,想不懂,請教大家面試題
- 請不要說自己是Java程式設計師Java程式設計師
- 請不要說自己是 Java 程式設計師Java程式設計師
- 看完這篇你不能再說不懂SSO原理了!
- 說說軟體開發這個職業
- 工作容易,賺錢很難
- 幽默:Python很容易學?Python
- 在程式設計師面前千萬不要說這9句話,我一個同事就死的很慘!程式設計師
- 你以為這樣寫Java程式碼很6,但我看不懂Java
- 千萬不要再這樣建立集合了!極容易記憶體洩露!記憶體洩露
- SQLite 真的很容易編譯SQLite編譯
- 這四款好用的前端開發工具,不要錯過!前端
- 建議外貿人不要在郵件中出現這些詞,容易被判定為垃圾郵件!
- 開源,想說愛你不容易
- 花五分鐘看這篇之前,你才發現你不懂RESTfulREST
- 同時學習多種程式語言其實很容易
- 好的程式碼很容易刪除!
- web前端入門很容易,全棧卻很難,為什麼每個程式設計師都那麼說?Web前端全棧程式設計師
- 主從分離的事務操作很容易發生誤操作
- 這個需求,開發說我們不想做.......
- 還有人不懂分散式鎖的實現就把這篇文章丟給他分散式
- Redis 很屌,不懂使用規範就糟蹋了Redis
- @Transactional千萬不要這樣用!!踩坑了你都可能發現不了!!!
- 建立微服務很容易,但是有幾點很難 - James Hickey微服務
- 請教這個應用技術如何實現?
- SPA路由機制詳解(看不懂不要錢~~)路由
- [js] 請使用js實現商品的自由組合,並說說你的思路JS
- 為什麼這麼多人覺得前端開發很難做下去?前端
- Java集合看了這篇爛文 就夠了(不要臉的說)Java
- 如果不會這兩招,千萬不要說你懂大資料大資料
- 小視訊開發第一步,為了實現這些功能小視訊原始碼開發者們很費勁原始碼
- 拜託,面試請不要再問我TCC分散式事務的實現原理!面試分散式