樂觀的程序猿

有一次看到來自Instagram用戶findheart的話:

程序員是一個懂得享受生活的羣體。每幾個月或者幾周,他們就會慶祝一個叫“Deadline Eve”的節日。在這一天晚上準備大量的食品飲料,通宵達旦地工作,並互相致以“下個milestone絕逼不再拖延”的美好祝願。

我從這個笑中含淚的小段子看到了程序員的一個特點:樂觀。

是的,你沒看錯,樂觀,就是樂觀。

程序員是我見過的最樂觀的一羣人,這也是我作爲一個程序員回顧自己的開發生涯時發現的一個祕密。

要知道,程序員的生活充滿未知:未知的項目,未知的語言,未知的框架,未知的工具,未知的進度,未知的天坑,未知的Bug,未知的交付日期,未知的績效評估,未知的KPI……

So,在這種茫然四顧一切皆不可知的環境中生活,你要是不樂觀,你絕對扛不住,你根本不可能見到明天的太陽。因爲,未知會產生恐懼,這是人之天性,恐懼堆積多了人就會崩潰。而偉大的程序員,堅韌的程序員,不可思議的程序員,擁有超強耐受力的程序員,倍受蹂躪仍躑躅前行的程序員,不但奇蹟般地在這個非人的環境裏存活了下來,還每天樂樂呵呵屁顛屁顛的,這不是樂觀是什麼?還能有哪個羣體如此樂觀嗎?

看,項目估算就這麼簡單

項目過程

當程序員在白色的電腦屏幕上寫下“printf(“Hello World!”)”時,他確信,只要按下CTRL+R或者點擊運行按鈕,黑黑的命令行窗口就會對他們說“Hello World!”。

是的,就是這個樣子。當你寫下“Hello World”這句駭人聽聞的咒語,電腦絕不會用“Goodbye World……”這句更震撼人心的話來回應你。

我們程序員面對的世界是0、1世界,簡單而直接。我們在軟件開發的世界裏徜徉得越久,就越容易受到這種邏輯思維潛移默化的影響。我們崇尚簡單,討厭複雜,無論是在數字世界,還是現實生活。

程序員喜歡看到確定的、可預知的結果,而我們的世界裏卻有這麼多的不確定性,我們的辦法就是隻往好處看,只青睞那些我們把握得住的東西。

:Begin //請注意,此處的Begin爲用於goto跳轉的標籤

當我們被迫評估項目進度時,我們會先採取大事化小小事化了的策略,然後把那些人見人愛的小傢伙一一拎出來,樂不滋滋地給他們分時間,這個4小時,那個3.5……OK,很快我們就覺得胸有成竹,一切盡在掌握,吧啦吧啦我的魔仙棒,傲嬌地轉上一圈再伸臂一點,整個項目大概需要4個人月,預留一些時間比如1個人月應對隨時可能出現的天外來客,我們有8個人,啊哈,半個月哦不,2周半搞定!

大傢伙分頭行動,哼哧吭哧咣嘰咣嘰開搞了。

第一週的時候,我們報告說:“工作正在有序進行,一切都在掌握之中。”

第二週的時候,我們報告說:“出了點兒小意外,但加兩個晚上班兒就可以追回進度,我們可以搞定。”

第三週的時候,我們報告說:“又出了點兒小意外,你知道,軟件開發就是這樣,驚喜不斷。不過我們週六和週日已經擺平了意外,我們很快就可以搞定了。”

第四周的時候,我們報告說:“嗯,情況比我們想象的複雜,在集成時遇到了不明狀況,整個團隊搞了一個通宵才搞定,結果第二天沒辦法幹活,所以,進度比預期的要晚一些,不過,請相信我們,很快就可以搞定了。

第五週的時候,我們報告說:“這周肯定可以搞定了,相信我們的能力。”

第六週的時候,整個團隊都一臉黑線在加班……

第七週的時候,我們報告說:“系統集成完成啦,第一個Beta版本可以內測了。這雖然比我們預期的時間晚了一點點,不過,我們的內測版本堪稱完美,幾乎不可能出現Bug。”

……

第十週的時候,整個團隊都在加班加點改Bug,人人一臉黑線外加兩個青腫的眼袋,每當焦慮萬分的老闆詢問上線時間時,項目經理都會說“快了快了,就這兩天就搞定了。”

等到第十四周要結束的時候,版本終於發佈了。

皆大歡喜啊。

老闆已經被這羣猴子逼瘋了,心裏恨得要冒火,還得咬着牙說:“兄弟們辛苦了,你們的努力大家有目共睹。”

我們報告說:我們發佈的版本質量很高,容易上手,用着也方便,用戶一定會滿意。相比之下,少許的延期是值得的。

goto Begin

好吧,項目估算簡單嗎?

你看過《人月神話》了嗎?

“一切管理理論都是扯淡,哪一種也不適用我們的團隊,因爲我們這些程序員是獨一無二的,都有着與衆不同的個性,我們必須找到自己的項目管理方法。並且,我們現在的團隊已經在我們獨特的管理模式下運轉良好,完全不必要引入學習成本那麼高的控制手段,況且那樣對大家也是一種刺激,覺得公司不信任大家,這會大大的降低士氣。毫無疑問,我們現在的團隊士氣高昂,必須要保持……”

這可能是某個項目經理說的話,我不記得了。他最終的結論是:“雖然這次項目Delay了,但是下次,絕逼不會了!我們一定有辦法控制進度。”

看到了吧,這就是我們的樂觀。它生動地告訴我們什麼是真正的樂觀:即便無數次實踐已經證明我們的估算和調控手段不靠譜,我們還是會信誓旦旦地在下一個項目來臨時許下“絕逼不會延期”的諾言。

這很簡單,兩天搞定

程序員羣體的樂觀是由一個一個個體的樂觀匯聚而成的。

有多少次我們被問到這個問題需要多久解決時,我們都說出類似“兩天搞定”的話……

有多少次我們看着同事深陷泥沼無法自拔完工無望時,我們說出“要是我早就搞定啦”之類的話……

有多少次我們要學習未知的技術並把未知的技術應用到未知的業務上最終交付給客戶一個可用的系統時,我們都會天真的從我們既往的經驗池裏抓幾枚硬幣來撒撒,然後說出“大概需要半個月”這樣的結果……只有程序員,彪悍的程序員,無所畏懼的程序員,敢於樂觀地面對未知的一切拍拍腦袋給出一個確定的工期。

……

這都是因爲我們程序員傾向於把事情想得簡單,在我們這些崇尚簡單的程序員眼裏,即便你秉持着不憚以最低的效率來評估的原則,也會給出一個最終看來還是樂觀的估計。

這讓人絕望嗎?

No!恰恰相反,這正是我們程序員之所以爲程序員的一個關鍵特徵,惟其如此不能活也!

沒什麼難的,不過如此嘛

萬事開頭難。很多事情只要我們突破了最初的障礙,後面就會順風順水勢如破竹。對程序員來講,這種規律很容易被強化,因爲,我們有太多機會學習新技術新框架新業務,而大多數的語言和框架,寫一個萬能的“Hello World”就入門了!

這種學習新技術的感覺,和開車類似。我學會開車後,一直沒有上路跑過,提車後猶豫了幾天,總覺得城市裏路況複雜,很多車不管紅綠燈總在強搶黃三秒,行人又亂闖,電動摩托總是突然呼嘯而過,左轉右轉與直行同時被允許,想多了總覺得自己不能應付這種狀況,就在考慮要不要請個陪練陪着我上路跑幾天。後來因爲着急上牌,沒辦法就直接上路了,早上五點多起來,從家開到了車管所,辦完手續後又戰戰兢兢地開回了家。這是第一次單獨一個人上路,沒磕沒碰沒撞沒出事兒,居然!好吧,成功的經驗會讓你找到自信,於是後來我就敢上路了:怕啥,就那樣嘛。

程序員的情況與此類似。比如你讓一個C++程序員去開發一個AndroidApp,他可能只需要兩個星期就能學會Java和Android開發,做出一個DEMO。然後呢,跨過門檻,一切障礙都不存在了,前面都是坦途,沒什麼能阻礙這個程序員解放全人類的偉大理想了。

這種體驗的不斷重複使我們由衷地相信好的開始是成功的一半,所以,當我們哪怕僅僅做出一個小小的DEMO程序,也會興高采烈的發佈我們的結論:啊,我們已經突破了關鍵技術,從已有的DEMO來看,技術上的問題不再是問題了。

當然事實並非如此。前路險灘無數,泥沼遍佈,暗坑隨處都是,當你邁出第一步,欣喜地以爲天下獨握我手一切盡在掌握的時候,那些你難以預料的艱難險阻也已悄然出發,快速向你圍攏過來。

我開車還沒超過100公里,就遭遇了第一次交通事故,和保險公司打了回交道。作爲程序員,你說難題已被攻破技術上已經沒有風險,其實僅僅是你過於樂觀了,真正的旅途還未開始,讓你撓頭的事兒還未到來。就是這樣。

當然,程序員是樂觀的,他們說,無論前路如何,只要逢山開道遇水搭橋見佛殺佛見鬼殺鬼即可通關,天塌了有個兒高的頂着呢,項目黃了有項目經理扛着呢,公司關門了大不了換個地方再戰江湖,爺有手藝,到哪兒混不來一碗飯吃……

好吧,我們就是如此樂觀。如果你要和程序員打交道,一定要謹記此點,他們的職業習慣使得他們傾向於把事情簡單化,只看好的一面,未知的風險他們會一笑而過。所以,你要有預期,他們常常前半程輕輕鬆鬆高歌猛進,後半程心情沉重步履維艱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章