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