樂觀的程式設計師們

csdn發表於2015-07-28

  (本文發表於《程式設計師》2015 07 B)

  有一次看到來自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公里,就遭遇了第一次交通事故,和保險公司打了回交道。作為程式設計師,你說難題已被攻破技術上已經沒有風險,其實僅僅是你過於樂觀了,真正的旅途還未開始,讓你撓頭的事兒還未到來。就是這樣。

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

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

相關文章