淺析“作坊式”開發(fā)

字號(hào):

“作坊式”開發(fā)雖然只是對(duì)軟件開發(fā)形式的一種比喻的說(shuō)法,但深究起來(lái)卻還真是一個(gè)不小的話題。在此我粗淺地探討一下作坊式開發(fā)被廣泛采用的一些原因,不談所謂“作坊式的企業(yè)”之類大的話題,只就“開發(fā)方式”層面上的相關(guān)思路理一理,對(duì)工程化管理內(nèi)容也不再贅述。所述之言為個(gè)人觀點(diǎn),觀者仁者見仁、智者見智。
    這里講到“作坊式”,主要是指?jìng)鹘y(tǒng)手工作坊的生產(chǎn)模式而言的。所謂作坊式生產(chǎn)模式大同小異,一般情形是:由一個(gè)掌握了某種技能的“匠人”,帶領(lǐng)幾個(gè)不需太多技能的“伙計(jì)”進(jìn)行全程生產(chǎn),匠人的技能是由其師傅“口傳心授”的,其他人基本上插不上手。生產(chǎn)過(guò)程中由匠人以他的一套“規(guī)矩”來(lái)安排,不需什么規(guī)程、制度,更不需要做什么“計(jì)劃”、“方案”。匠人在作坊里的“技術(shù)權(quán)威”使得老板也不敢對(duì)其“指手畫腳”,否則他會(huì) “撂挑子”,事情成敗取決于匠人的能力。在這樣的情形下,生產(chǎn)過(guò)程基本上是無(wú)序的、無(wú)約束的,老板作為“管理者”角色的職能幾乎談不到,甚至受匠人的擺布,除非老板是一個(gè)非常高明的匠人。
    果真以作坊式這樣的含意來(lái)比喻我們的軟件公司的開發(fā)過(guò)程,那我們的軟件開發(fā)技術(shù)骨干們將無(wú)不怒發(fā)沖冠了,IT業(yè)畢竟被稱作“高新技術(shù)”行業(yè),而拿我們掌握技能的骨干技術(shù)人員比作小作坊的“匠人”,這無(wú)論無(wú)何是一種惡劣的、污辱性的詆毀!但不幸的是,我們大多應(yīng)用軟件的開發(fā)過(guò)程的確以“作坊式開發(fā)”比喻是較為恰當(dāng)?shù)摹?BR>    公正地說(shuō),就以此方式我們還是成就了好多成功的應(yīng)用開發(fā)項(xiàng)目,甚至可以說(shuō)此法支撐起了軟件開發(fā)的初期事業(yè)。比如,DOS時(shí)代國(guó)內(nèi)眾多的電腦編程高手開發(fā)出了一大批膾炙人口的個(gè)人軟件產(chǎn)品,如嚴(yán)援朝的CCDOS,王永民的五筆字型,吳曉軍的2.13,朱崇君的CCED,以及求伯君的WPS等等。DOS時(shí)期是個(gè)人英雄主義的時(shí)代,一個(gè)人就可以叱咤風(fēng)云。
    如果你承認(rèn)我們幾千年民族手工業(yè)正是由作坊里的匠人們支撐的,那作為剛剛有二三十年歷史的應(yīng)用軟件開發(fā)業(yè),沿襲了我們的民族傳統(tǒng),應(yīng)該說(shuō)不是什么丟人的事。同樣,我們繼承了DOS時(shí)代先輩們的一些生產(chǎn)模式,似乎也無(wú)可厚非。
    但是,在我們的“作坊”里還是有了太多的項(xiàng)目失敗,這種失敗或者表現(xiàn)為無(wú)法實(shí)現(xiàn)的不可為、或者表現(xiàn)為開發(fā)周期的不可控制、或者表現(xiàn)為項(xiàng)目結(jié)果為用戶所不認(rèn)可、或者表現(xiàn)為項(xiàng)目終的嚴(yán)重虧損,這種失敗的慘痛出乎我們的意料,以至于我們無(wú)所是從。再加上技術(shù)人員、資金嚴(yán)重匱乏的困擾,軟件開發(fā)管理舉步維艱。
    作坊式的軟件企業(yè)中,很多東西都是裝在開發(fā)人員的腦子里面的,往往會(huì)因?yàn)橐粌蓚€(gè)開發(fā)骨干走了,就造成整個(gè)公司的癱瘓。賭注完全押在這一兩個(gè)人的身上,資本投入風(fēng)險(xiǎn)很大,如果研發(fā)骨干一個(gè)人另謀高就,公司投資等就將全部付之流水,作坊式的運(yùn)作模式嚴(yán)重阻障了軟件企業(yè)的成長(zhǎng)。
    軟件開發(fā)本身確實(shí)是一項(xiàng)復(fù)雜、艱苦而又充滿著風(fēng)險(xiǎn)的工作,唯其如此,幾十年來(lái)中外軟件開發(fā)業(yè)的專家和學(xué)者們?cè)诖罅康氖№?xiàng)目中總結(jié)著失敗的經(jīng)驗(yàn)和教訓(xùn),陸續(xù)創(chuàng)立了相關(guān)的學(xué)說(shuō)并應(yīng)用于指導(dǎo)軟件開發(fā)的實(shí)踐,取得了一定的成果。在項(xiàng)目開發(fā)過(guò)程上借鑒一般工程過(guò)程建立了軟件開發(fā)的“工程化理論”,在開發(fā)方法上總結(jié)有結(jié)構(gòu)化分析方法、組件式開發(fā)、凈室開發(fā)以及目前較為推崇的面向?qū)ο蟮姆治鲩_發(fā)方法等等,在軟件開發(fā)質(zhì)量管理上有CMM、ISO等一些成熟的體系。這些規(guī)范化理論和方法在不斷的改進(jìn)發(fā)展中日趨成熟和完善,并對(duì)軟件開發(fā)過(guò)程的工程化管理和規(guī)范化實(shí)施起到了革命性的指導(dǎo)作用。
    事實(shí)上,但凡專業(yè)的軟件開發(fā)人員在大學(xué)里就學(xué)過(guò)《軟件工程》這門課,所有上面提到的一些理論知識(shí)都全面涉及,在此就不講其具體內(nèi)容了。縱觀這些指導(dǎo)性的理論以及我們所采用的開發(fā)方式,我們說(shuō),作坊式開發(fā)對(duì)小型應(yīng)用軟件開發(fā)項(xiàng)目是有一定的用武之地,在一定程度是不違背快速開發(fā)理論的;但對(duì)于稍成規(guī)模的小型軟件(更不用說(shuō)中、大型的軟件)項(xiàng)目的開發(fā)過(guò)程,那就必須遵從于工程化理論的原則和方法,落實(shí)規(guī)范化的管理,否則失敗的風(fēng)險(xiǎn)將伴隨著整個(gè)開發(fā)過(guò)程,而且越到后期失敗的可能性會(huì)越大,一旦失敗,其經(jīng)濟(jì)損失也就會(huì)非常巨大。
    那么,既然有這樣的工程化理論,為什么往往不為我們所廣泛忠實(shí)地采用和貫徹呢?這是問(wèn)題的癥結(jié)所在,值得探究!歸結(jié)起來(lái),主要有以下一些原因:
    首先,市場(chǎng)對(duì)軟件工程化開發(fā)的意義理解不夠,沒有形成廣泛的支持。
    “應(yīng)用軟件系統(tǒng)”本身的內(nèi)含都包括哪些?對(duì)于用戶來(lái)說(shuō)往往只局限于“在計(jì)算機(jī)上運(yùn)行的程序”這樣一個(gè)膚淺的理解,不知道還應(yīng)有計(jì)劃、調(diào)研分析、方案、設(shè)計(jì)、質(zhì)量監(jiān)督、測(cè)試、培訓(xùn)、系統(tǒng)說(shuō)明文檔等等的內(nèi)容;對(duì)于“程序是做什么的?應(yīng)達(dá)到怎樣一個(gè)目標(biāo)?”這樣一些問(wèn)題一般沒有從主觀上得到重視,更難談到從根本上把握。
    之所以如此,就如同在規(guī)范化工程理論發(fā)展成熟的今天,我們?nèi)砸宰鞣皇介_發(fā)模式進(jìn)行生產(chǎn)一樣,信息化建設(shè)到了一個(gè)如火如荼的時(shí)期,而大多用戶對(duì)其本質(zhì)方面的認(rèn)識(shí)還僅僅停留在“機(jī)器代替手工”這樣的理解上,他們對(duì)軟件產(chǎn)品應(yīng)該具有的性能、適應(yīng)性、安全性幾乎一無(wú)所知,甚至對(duì)一個(gè)自己所需要的應(yīng)用系統(tǒng)的功能范圍都不是能夠很好地定義。這樣,用戶是很少會(huì)對(duì)開發(fā)企業(yè)提出實(shí)質(zhì)性生產(chǎn)要求的。
    用戶方往往將期望寄托于他們選定的開發(fā)企業(yè),認(rèn)為一切難題都會(huì)由開發(fā)方很好地解決。在這種情形下,他們不會(huì)想到軟件開發(fā)的失敗可能(認(rèn)為是開發(fā)方的事),當(dāng)然也就不會(huì)去了解會(huì)導(dǎo)致開發(fā)失敗的風(fēng)險(xiǎn)因素,也就不會(huì)提倡以工程化的規(guī)范方法來(lái)約束過(guò)程了。孰不知,他們那“崇高的信任”很容易地被開發(fā)方強(qiáng)*了,許多的用戶方在項(xiàng)目進(jìn)行相當(dāng)時(shí)間后才發(fā)現(xiàn)一些問(wèn)題,在項(xiàng)目將完成時(shí)或試用階段才與開發(fā)方發(fā)生爭(zhēng)端,但終認(rèn)輸?shù)耐怯脩?,因?yàn)橐粋€(gè)相對(duì)的軟件外行與“內(nèi)行”的開發(fā)方對(duì)峙,顯然只能在大量的“事實(shí)”面前承認(rèn)是自己的失誤導(dǎo)致功能的不完整、項(xiàng)目的延期……。
    這樣“無(wú)知的”用戶群廣泛存在,是“作坊式開發(fā)”賴以生存的沃土,培育了“作坊”的勃勃生機(jī)。既然用戶要的是包括其規(guī)劃功能的、可以“跑得通”的應(yīng)用程序,何必當(dāng)什么工程來(lái)費(fèi)時(shí)費(fèi)力地勞作,敲出來(lái)不就得了!有那功夫還不如找些理由應(yīng)對(duì)用戶的“挑剔”。
    軟件企業(yè)在沒有形成規(guī)范化管理體系時(shí),不可能建立起“全面為客戶信息化建設(shè)服務(wù)”的意識(shí),企業(yè)沒有能力將工程化過(guò)程要求提到應(yīng)用實(shí)施規(guī)劃內(nèi)容當(dāng)中,從這一層意義上說(shuō),其實(shí)是作坊式軟件企業(yè)自己斷送了自己的前程。
    用戶對(duì)應(yīng)用軟件以及開發(fā)過(guò)程的不理解,造成其對(duì)軟件產(chǎn)品成本和開發(fā)周期的過(guò)低估計(jì),從而使軟件企業(yè)無(wú)力投入更多的人力和資金健全開發(fā)組織管理、規(guī)范整個(gè)工程過(guò)程。
    第二,規(guī)范化管理理論不被軟件開發(fā)企業(yè)管理者所重視、風(fēng)險(xiǎn)意識(shí)淡漠,人員組織和資金投入不夠。
    所謂規(guī)范化管理,是依據(jù)工程化理論,對(duì)項(xiàng)目實(shí)施的過(guò)程進(jìn)行科學(xué)的、有條理的管理,這得有一整套的操作規(guī)范和監(jiān)督機(jī)制。對(duì)于有一定規(guī)模的軟件企業(yè),得有一整套技術(shù)管理體系,包括得力的管理機(jī)構(gòu)、人員配備和完善的管理制度,管理體系中應(yīng)嚴(yán)格制定生產(chǎn)過(guò)程的步驟、監(jiān)管方法,必須有專人監(jiān)督制度的有效實(shí)施;要有一個(gè)確定的發(fā)展方向,制定企業(yè)的遠(yuǎn)景規(guī)劃;根據(jù)需要,建立一支具有各技術(shù)層次、各技術(shù)方向的技術(shù)隊(duì)伍;在整體上要形成一種團(tuán)結(jié)、向上的具有凝聚力的企業(yè)文化。特別是對(duì)于軟件開發(fā)過(guò)程,一定要堅(jiān)決地貫徹落實(shí)前人總結(jié)形成的工程化管理理論和方法,這決定著一個(gè)軟件企業(yè)的命運(yùn)。
    軟件業(yè)是一個(gè)高投入,高回報(bào),高風(fēng)險(xiǎn)的成長(zhǎng)性極強(qiáng)的行業(yè)。在想獲得高回報(bào)之前,首先應(yīng)考慮如何規(guī)避風(fēng)險(xiǎn)、如何使自身得到成長(zhǎng)和壯大。風(fēng)險(xiǎn)是伴隨著應(yīng)用系統(tǒng)開發(fā)的整個(gè)過(guò)程的,一旦風(fēng)險(xiǎn)失控,其結(jié)果對(duì)軟件企業(yè)往往是致命的。作坊式的軟件企業(yè)在小的應(yīng)用軟件的作坊式開發(fā)中嘗到了些甘甜頭,而對(duì)潛在的風(fēng)險(xiǎn)危機(jī)缺乏認(rèn)識(shí),為自己的“成型的”開發(fā)模式而沾沾自喜,這種模式實(shí)際上使企業(yè)的效率不能提高、市場(chǎng)適應(yīng)能力低、企業(yè)內(nèi)部危機(jī)四伏。可惜的是,軟件企業(yè)的決策者們往往看不到這一點(diǎn),短期利益的輕易獲得導(dǎo)致終的企業(yè)倒閉,這是的失敗。
    按照工程化理論和規(guī)范化管理要求,企業(yè)須要投入更多的人力、財(cái)力于:客戶關(guān)系管理、分析設(shè)計(jì)結(jié)果審查、流程化的過(guò)程管理、質(zhì)量管理等等,而遠(yuǎn)非代碼實(shí)現(xiàn)的人力支持。與作坊式開發(fā)模式相比,企業(yè)的管理者們首先想到的是投入太多,卻看不到作坊式開發(fā)風(fēng)險(xiǎn)造成的虧損危機(jī),反而不會(huì)積極支持以提高開發(fā)效率和系統(tǒng)可靠性的工程化開發(fā);在沒有必要的人力保障和過(guò)程指導(dǎo)的情況下,項(xiàng)目組規(guī)范化開發(fā)的嘗試是弱不禁風(fēng)的、沒有結(jié)果的。在這種情形下,不可能有積極的實(shí)踐活動(dòng),不可能建立起一個(gè)健全的機(jī)制來(lái)支持工程化規(guī)范開發(fā)的進(jìn)行。