軟件的質(zhì)量問(wèn)題引起的不僅僅是安全問(wèn)題,更容易導(dǎo)致時(shí)間表失衡、預(yù)算超支、不能執(zhí)行或執(zhí)行可能性較低等問(wèn)題的出現(xiàn)。因此,在軟件開(kāi)發(fā)過(guò)程中,任何個(gè)人(從初級(jí)程序員到高級(jí)經(jīng)理)的不適當(dāng)操作行為,都可能導(dǎo)致軟件客戶對(duì)我們交付的產(chǎn)品價(jià)值失去信心。
作為軟件開(kāi)發(fā)人員,取得正式的資格證書(shū)(證明一個(gè)人能夠勝任某項(xiàng)特定的工作)并不是最重要的要求。一味強(qiáng)調(diào)開(kāi)發(fā)人員具備資格證書(shū),只會(huì)增加開(kāi)支和助長(zhǎng)官僚作風(fēng),并不會(huì)導(dǎo)致工作質(zhì)量的提高。事實(shí)上,許多工作相當(dāng)出色的人們并不具備其相關(guān)領(lǐng)域的學(xué)歷。相反,很多取得學(xué)歷的人們卻并非能夠勝任本職工作。
我們需要的是什么?
首先,我們需要采用一種方法,能夠?qū)浖こ處煹牟僮骱凸芾砟芰M(jìn)行有效的測(cè)試評(píng)估。在dot-com時(shí)期,人們爭(zhēng)相閱讀《Learn (C++/Java/Visual Basic/etc) in 21 days》系列叢書(shū),并在求職簡(jiǎn)歷中聲稱自己是程序員。他們因此迅速爭(zhēng)取到超過(guò)其自身價(jià)值的高額薪水,而具備真實(shí)技能的程序員也僅僅是處于相同的薪水標(biāo)準(zhǔn)。是的,"21 Days"系列叢書(shū)很多時(shí)候被認(rèn)為是成為優(yōu)秀軟件工程師的入門(mén)書(shū)籍。但由于缺乏有效的評(píng)估和測(cè)試手段,使具備工作能力的人員與不能勝任工作的人員,基本上沒(méi)有薪水或職位的差異。
在《人月神話》(Mythical Man Month)一書(shū)中,F(xiàn)rederick Brooks指出:一個(gè)不能勝任工作的程序員與一個(gè)優(yōu)秀程序員相比較,兩者之間的工作效率相差十倍。(Frederick同時(shí)指出:根據(jù)統(tǒng)計(jì)顯示,各人的閱歷與其工作效率之間并不存在直接的關(guān)聯(lián)性。)
我們面臨的問(wèn)題是:如何對(duì)能力差異進(jìn)行斷定?在許多情形中,我們都能夠意識(shí)到(至少是部分意識(shí)到)差異的存在。舉一個(gè)例子:一個(gè)工作多年的程序員,他的新同事?lián)碛?5萬(wàn)美元的年薪,而他僅僅只有1.4萬(wàn)美元的年薪。他或許工作相當(dāng)努力,但他努力工作所創(chuàng)造出的價(jià)值卻極為有限,是否公司根本不值得雇用這樣的員工?針對(duì)這種情形,讓許多經(jīng)理感到為難的是,他們?nèi)狈τ職鈱?duì)一個(gè)努力工作的員工指出他不能勝任這份工作。事實(shí)上,我們能夠認(rèn)識(shí)到許多持有資格證書(shū)的程序員并不能勝任他們的工作,但由于沒(méi)有及時(shí)糾正或改變這種狀況,最終可能導(dǎo)致工作的嚴(yán)重失誤。
概括的來(lái)說(shuō),有很大一部份所謂的"軟件工程師"并沒(méi)有做出任何有價(jià)值的貢獻(xiàn)(盡管他們的工作相當(dāng)努力),甚至可能影響整個(gè)團(tuán)隊(duì)的工作效率;然而,他們的薪水卻與能夠創(chuàng)造價(jià)值的人們保持一致。
從管理者的角度考慮,盡管我們的大多數(shù)程序員并不能為公司創(chuàng)造更多的價(jià)值,但不能以最低工資標(biāo)準(zhǔn)對(duì)他們進(jìn)行支付;同時(shí),也不能將他們?nèi)拷夤?,而僅僅保留工作效率高的程序員。因?yàn)檫@將嚴(yán)重影響員工的士氣?;谏鲜隹紤],公司臨時(shí)解雇所有的程序員,并將他們的工作轉(zhuǎn)移到印度,可以用低于最低標(biāo)準(zhǔn)工資的待遇雇用到所需要的所有程序員,并且有希望獲得最佳的工作效率。
這種做法的正確性和合理性不容置疑。對(duì)于管理者來(lái)說(shuō),解雇那些不能勝任工作的程序員或者試圖改進(jìn)他們的工作,都是很棘手的問(wèn)題。因此,充分利用國(guó)外廉價(jià)的人力資源無(wú)疑是個(gè)明智的選擇。
我們?cè)賮?lái)關(guān)注一下資格證書(shū)的問(wèn)題。資格證書(shū)是衡量程序員能否勝任工作的標(biāo)準(zhǔn)么?回答是否定的。因?yàn)橹挥性趯?shí)際工作中才能體現(xiàn)程序員的真實(shí)才能。許多有才能的人們并不具備正式的學(xué)歷背景;同樣,具備良好學(xué)歷背景的人們卻不一定能夠勝任他們的工作。因此,經(jīng)理應(yīng)該對(duì)他們的開(kāi)發(fā)人員進(jìn)行實(shí)際有效的評(píng)估和考查。
我們要求經(jīng)理客觀公正地對(duì)程序員的工作能力進(jìn)行評(píng)估。然而,有哪些確定的方法能夠?qū)浖こ處煹膫€(gè)人工作表現(xiàn)進(jìn)行跟蹤測(cè)定呢?此外,我們還應(yīng)該認(rèn)識(shí)到,客觀的測(cè)評(píng)工作可能僅僅只是一種形式。因?yàn)闆](méi)有人愿意唱黑臉,將不能勝任工作的壞消息轉(zhuǎn)告給當(dāng)事人。
我們必須做出選擇
當(dāng)我們決定開(kāi)除那些不能勝任工作的程序員時(shí),面臨的問(wèn)題是:大部分不安全和缺乏功能性的軟件卻遺留了下來(lái)。在出現(xiàn)問(wèn)題之前,人們基本上不會(huì)注意到這些不安全軟件潛在的隱患。但是在項(xiàng)目的開(kāi)發(fā)過(guò)程中,總是伴隨著需求增長(zhǎng)、逾期超支等問(wèn)題。為什么會(huì)出現(xiàn)這些問(wèn)題?歸根結(jié)底,是由于人們對(duì)遺留的問(wèn)題軟件可能導(dǎo)致的不良后果,缺乏事先的預(yù)估和防范。因此,在系統(tǒng)的可靠性、安全性、可擴(kuò)張性、以及可升級(jí)性的開(kāi)發(fā)過(guò)程中,不得不耗費(fèi)現(xiàn)有程序員的大量時(shí)間。正如他們所說(shuō)的那樣:"我們對(duì)現(xiàn)有的代碼庫(kù)(Code Base)缺乏足夠的信心。如果我們的時(shí)間再寬裕一個(gè)月,就能夠?qū)φ麄€(gè)代碼庫(kù)進(jìn)行重構(gòu)(refactor)。然而我們?nèi)鄙龠@一額外的時(shí)間。"此外,維持一個(gè)可擴(kuò)展、可升級(jí)系統(tǒng)的正常運(yùn)行同樣會(huì)增加開(kāi)支。
令軟件工程師倍感沮喪的問(wèn)題,是他們創(chuàng)造出的優(yōu)秀軟件得不到推廣和應(yīng)用。與一個(gè)具備更多穩(wěn)定性的系統(tǒng)相比較,經(jīng)營(yíng)者更愿意交付具備更多特征的功能。原因很簡(jiǎn)單,因?yàn)檫@是用戶所期望的??蛻敉鶎?duì)代碼本身并不感興趣,他們更關(guān)注的問(wèn)題是軟件的實(shí)用性。他們會(huì)指責(zé)說(shuō):"你使用的代碼違反了面向?qū)ο螅╫bject-oriented)的所有設(shè)計(jì)原則。你將如何為軟件增加新的特性?"或者提出:"你應(yīng)該對(duì)所有靜態(tài)和綜合的變量進(jìn)行考慮,對(duì)系統(tǒng)進(jìn)行重新編寫(xiě),才能滿足更多的擴(kuò)展性要求。你編寫(xiě)的軟件或許能夠滿足10個(gè)用戶的要求,但它是否能夠滿足1000個(gè)用戶的需求呢?"或者說(shuō):"你完全沒(méi)有考慮到事務(wù)處理的互隔離性問(wèn)題,以及一致性問(wèn)題。未來(lái)6個(gè)月中,一旦事務(wù)處理出現(xiàn)問(wèn)題,我的數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤數(shù)據(jù)時(shí),如何繼續(xù)開(kāi)展工作呢?"
此外,客戶對(duì)系統(tǒng)也有諸多要求,例如:"你使用EJB了么?我希望能夠使用EJB的系統(tǒng)。我還需要使用XML......"我們沒(méi)有理由對(duì)客戶提出的諸多要求感到不滿。作為軟件工程師,幫助客戶做出明智的決定正是他們的工作之一。
【?發(fā)表評(píng)論?0條?】