幾種華麗無比開發方式
不要被我的標題騙了。我可不是來宣揚什么模型驅動開發,或者什么測試驅動開發的,那些都弱爆了。今天我要說的,是幾種看起來激動人心、華麗無比,但是可以讓程序員們痛苦不堪的開發方式,特別適合那些熱衷于折磨虐待程序員的項目經理和產品經理們。當然,掌握以后,偷偷用就好了,請不要來感謝我。
進度驅動開發(SDD,Schedule Driven Development)
這是在國內最為流行的開發方式,大家心照不宣,口口相交,代代相傳,我只是把它寫下來而已。它最華麗的地方在于,可以百分之百,甚至百分之二百地壓榨程序員的勞動力。
需要實現哪些需求?用什么技術?用什么平臺?項目采用什么流程管理?這些都不重要。重要的是——什么時候交付?
假使說,老大們通知,下個月的這個時候要看到產品發布,那么:
三周以后就要拿出完備的產品準備上線;
兩周以后就請發布beta測試版本,ST、IT之類的東西就得在那之前完成;
本周就必須完成編碼和UT,那么周一設計,周二、周三開發,周四、周五測試和修正問題。
看,項目計劃多么完美。項目時間本來就該是根據deadline倒排的。
項目做什么呢?先做那些相對重要的需求,可是如果時間緊的話就只好砍需求了吧……不!你怎么能那么容易就放棄呢?你看,我的完美的計劃里面沒有安排周六和周日嘛,大家可以來加加班嘛,年輕的時候不得奮斗一把嘛,不用砍需求,平時的時間再壓一壓不就可以如期上線了?
在熱情洋溢的動員會之后,大家開始拼命趕工了,瘋狂的一周過去了,測試團隊始終等不到開發團隊提供的發布包,難道“又”要延期了?
那還用問嗎?當然!
測試團隊的時間也是可以壓縮的嘛。于是煎熬的兩周過去了,發布日期眼看越來越不靠譜,項目經理覺得,他需要挺身而出了——
敏捷思想教導我們,搞不定的時候,質量不能丟、進度更不能丟,那我們只得砍需求了。這樣,我們只發布“核心功能”總行吧……
可是什么才是“核心功能”呢?
對了,我們做完了哪些?要不,做完的就算“核心功能吧”?
太牛了!這真是一個偉大的創舉!
別忘了,給程序員畫餅也是項目經理重要的技能——大家再努努力,進度壓力也是沒辦法的事,發布以后大家就輕松了,有好日子過了!
瞧,“沒有發布不了的版本”,這是真的!
產品發布以后大家就輕松了,有好日子過了,這也是真的!
文檔驅動開發(DDD,Document Driven Development)
這種開發方式也非常華麗,對于許多領導和老大們而言,文檔勝過一切。架構文檔要靠ppt,因為他們的智商和知識不足以理解滿是文字的東西,而膠片,則是最接近看圖說話的好東西。設計文檔,要靠足夠詳細的word文檔,項目經理要看到你的文檔細致到肯定可以輕松地指導編碼,如果你明天突然拉肚子拉到抽筋,打嗝打到卡住,喝水喝到噎著,于是不幸住院的話,文檔的威力就體現出來了,他可以輕松找到你的備份,替掉你的工作。
軟件開發全套有十項文檔,從工作任務書開始,只有完成了文檔,你的工作才算完成。如果你要在郵件里面,或者會議上向大家傳授一點什么技巧,你可得當心了,因為接下去劈頭蓋臉的就是這樣一句“有文檔記錄嗎?”,仿佛有了文檔就有了一切,有了文檔就買了保險——至于有沒有人看,嗨,誰管呢?
別忘了,文檔的核心地位需要貫徹到底。在績效考核的時候,最能寫的人,就可以成為優秀員工。代碼這種無法體現智商差異的東西可以踢一邊去,只有文檔才是智慧和能力的綜合代表啊。
指標驅動開發(IDD,Indicator Driven Development)
這種開發方式的華麗,源于它超強的數據化和量化的能力。寫代碼的目的是什么?完成需求?優雅設計?用戶體驗?你全錯了。
再次強調,終極目的是測試覆蓋率。
整個軟件開發流程里,你可以找得到無數的指標要求,在做每一件事情之前,必須要像默念毛主席語錄那樣回顧一遍需要達成的指標,然后再動手。
有一天,你發現用戶體驗像屎一樣的產品,居然自動化測試也可以達到95%以上的通過率,bug居然可以收斂到10個/輪測試,而且Findbugs /CheckStyle/PMD/Source Monitor/Simian之類的無數代碼檢查工具的結果頁上,都齊刷刷地顯示著綠條……
恭喜你,你成功了。
更重要的是,項目成功了。
裝逼驅動開發(ZDD,Zhuangbility Driven Development)
這大概是幾種開發方式中最華麗的一種。在設計前、寫代碼前,在做每一項事情之前,都要謹記裝逼的重要性。對于很多不懂技術的領導來說,聽起來越牛逼的軟件,就越值得開發。
產品裝逼:必須支持“云”和“大數據”,比如數據存儲到服務端叫“云同步”,其實具體怎么個支持法,這不重要,關鍵是裝逼的理念,理念!
設計裝逼:核心就是,靈活!強大!設計,就是要體現出自己的知識和閱歷,已經無比聰慧的頭腦。設計的東西萬萬不可簡單直接,這是和裝逼理念嚴重違背的。軟件的每一個組件不但能夠對常見的異常情形容錯,你就是刪掉它幾個類它一樣跑得歡快。
代碼裝逼:漫山遍野的Factory,漫山遍野的接口,最好別讓我看到“new”這樣的關鍵字;超強的解耦,好端端一個軟件,不把它分成個十幾二十層來實現都對不起J2EE的祖宗;超級無敵靈活的配置,需要啥配啥,還支持各種免重啟的熱插拔、熱部署,產品發布的時候小于500個可配置的項都不好意思自說產品是自己做的。
評審裝逼:體現自己超強無比的全面性和洞察力,請參閱我曾經寫過的一些牛叉無比的評審方式中,“到處放炮型評審”。
總而言之,軟件工程的每一個環節都需要達到足夠的裝逼值,才能進入下一環節。裝逼是指導軟件開發的重要思想。
其實還有很多其他華麗無比的開發方式,比如會議驅動開發(MDD),Demo驅動開發(DDD)等等,但這幾種是最常見的。如果你知道更華麗的開發方式,請告訴我。