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