除了程序猿,開發(fā)人員還是設(shè)計(jì)師、建筑師……
編程領(lǐng)域不僅僅關(guān)乎代碼。許多企業(yè)一開始都認(rèn)為開發(fā)人員只需要學(xué)習(xí)編程語言就可以了。但是,要想讓開發(fā)人員效率更高,企業(yè)還必須了解代碼的細(xì)微差別及其與編碼內(nèi)容的關(guān)系。
代碼不僅僅是代碼,它還編纂了規(guī)則,集成了人們對(duì)編程內(nèi)容的理解與解讀。如果開發(fā)人員無法理解編程的內(nèi)容,就無法高效地工作。
這也是為什么開發(fā)人員不僅僅是程序猿——他們的工作不僅限于根據(jù)給定的、相對(duì)模糊的營銷需求來敲鍵盤。雖然這種情況很常見,但事實(shí)上,開發(fā)人員絕不應(yīng)止步于此——尤其是想成為一名敏捷的開發(fā)人員。
對(duì)于敏捷的誤解
敏捷是一個(gè)有趣的詞。很多人都似乎“了解”它。企業(yè)更是深信不疑地認(rèn)為自己在踐行這一點(diǎn)。但很多人都理解錯(cuò)了。大部分情況下,敏捷變成了奇怪的瀑布式開發(fā)。一個(gè)項(xiàng)目被劃分為幾個(gè)階段,最后一次性交付給客戶,這種情況很常見。
在瀑布式開發(fā),或者說偽敏捷開發(fā)中,開發(fā)人員都無法參與到中間流程中,只負(fù)責(zé)最后的流程。但開發(fā)人員不是泥瓦匠,也不應(yīng)該被那樣對(duì)待。
當(dāng)馬丁·福勒 、羅伯特·馬丁和其他15位軟件開發(fā)領(lǐng)軍者在《敏捷軟件開發(fā)宣言》上署名時(shí),他們的側(cè)重點(diǎn)是革新軟件的開發(fā)方式,賦予開發(fā)人員在工作中更多的有效性與自主權(quán)。
這在一定程度上是因?yàn)樗麄冋J(rèn)識(shí)到開發(fā)人員不是一味執(zhí)行他人計(jì)劃的機(jī)器人。他們還是建筑師、工程師和建設(shè)者,通常被包裝成一個(gè)獨(dú)特的角色。他們是你的全棧工程師、軟件開發(fā)人員、IT運(yùn)維技術(shù)人員和混合開發(fā)人員,有著交叉領(lǐng)域的知識(shí)和技術(shù)。他們是專業(yè)技術(shù)人才,也是通才。
企業(yè)如何改變這一現(xiàn)狀
如果開發(fā)人員覺得自己只是個(gè)程序猿,那么解決這一問題就是一個(gè)機(jī)構(gòu)層面的過程和結(jié)構(gòu)問題。如果你是小型初創(chuàng)企業(yè)的一員,處理這一問題可能要比思維模式根深蒂固、工作關(guān)系穩(wěn)固的大企業(yè)容易一些。
敏捷開發(fā)的目的是通過循環(huán)交付為企業(yè)創(chuàng)造速度和流動(dòng)性。與主流觀點(diǎn)相反,軟件從來都不是一個(gè)完整的產(chǎn)品。人們總是要對(duì)軟件做一些修改——無論是基于市場需求,還是由于不可預(yù)見的情況引起了錯(cuò)誤,亦或是這一修改對(duì)公司發(fā)展至關(guān)重要。軟件開發(fā)中唯一的永恒的就是改變本身,這是無法避免的。
為了應(yīng)對(duì)這些變化,開發(fā)團(tuán)隊(duì)必須要小——那種人數(shù)在一位數(shù)或兩位數(shù)出頭、兩張披薩就可以管飽的小團(tuán)隊(duì)。杰夫·貝佐斯稱之為“雙披薩原則”。一個(gè)大項(xiàng)目擁有多個(gè)團(tuán)隊(duì)無可厚非,但關(guān)鍵是要把人數(shù)維持在最低標(biāo)準(zhǔn),這樣才能實(shí)現(xiàn)成員間的有效溝通。
每個(gè)團(tuán)隊(duì)可以在一個(gè)團(tuán)隊(duì)主管或負(fù)責(zé)人的帶領(lǐng)下負(fù)責(zé)一個(gè)功能,但團(tuán)隊(duì)主管或負(fù)責(zé)人必須有效地將戰(zhàn)略性開發(fā)計(jì)劃傳達(dá)給每一個(gè)成員。這點(diǎn)至關(guān)重要,因?yàn)樗茏岄_發(fā)人員提前構(gòu)思代碼和結(jié)構(gòu),想出有效的自動(dòng)化流程方法,使其輸出結(jié)果與企業(yè)需求保持一致。
自主、負(fù)責(zé)地創(chuàng)建代碼
代碼或許是開發(fā)人員創(chuàng)建的最終輸出,但它也受市場營銷、管理、商業(yè)團(tuán)隊(duì)和任何關(guān)系到最終輸出的人的影響。當(dāng)出現(xiàn)問題時(shí),不能只責(zé)怪代碼。
最高效的開發(fā)人員也會(huì)參與到溝通、用戶故事創(chuàng)建、最終決策制定和交付功能排序等其他過程中。這種參與非常重要,因?yàn)樗梢宰岄_發(fā)人員了解他們編碼的領(lǐng)域。如果開發(fā)人員不了解這一領(lǐng)域的知識(shí)和實(shí)踐,或者在這方面沒有牢固的基礎(chǔ),那么他們必不能將企業(yè)的規(guī)則和要求有效地轉(zhuǎn)化為‘計(jì)算機(jī)語言’。
編程不僅僅是編程語言,還是對(duì)規(guī)則和期望的集成,同時(shí)也要讓電腦以人類能明白的方式去理解和重現(xiàn)這些規(guī)則與期望。如果代碼因開發(fā)人員對(duì)源代碼的誤解而出錯(cuò),假設(shè)他們的能力沒有問題,那么就是沒能準(zhǔn)確理解企業(yè)對(duì)數(shù)字材料格式的需求。
對(duì)于別人的代碼又能做些什么呢?
有時(shí),開發(fā)團(tuán)隊(duì)可能繼承前一支團(tuán)隊(duì)的代碼。這些代碼可能很好。但通常情況下,由于遺留方法、過時(shí)的格式和當(dāng)時(shí)流行但現(xiàn)在低效的工程模式,這些代碼現(xiàn)在可能不適用了。
這種情況時(shí)常發(fā)生,尤其是對(duì)于那些在軟件開發(fā)行業(yè)干了很多年的人。雖然這些代碼是過時(shí)的產(chǎn)品,但企業(yè)及其團(tuán)隊(duì)依然要對(duì)其負(fù)責(zé)。每個(gè)軟件、硬件和基礎(chǔ)架構(gòu)都有保質(zhì)期,超過了5年就要接受檢測,使其適應(yīng)新的時(shí)代。還能用并不代表還能保持高效——這也可能成為團(tuán)隊(duì)敏捷開發(fā)能力的主要瓶頸。
這一點(diǎn)開發(fā)人員最清楚,當(dāng)參與更高層次的溝通和決策時(shí),他們可以充分規(guī)劃更新并創(chuàng)建應(yīng)急計(jì)劃,以降低遺留系統(tǒng)帶來的風(fēng)險(xiǎn)。直接在遺留系統(tǒng)中添加新功能無異于在檢查舊房子結(jié)構(gòu)完整性之前拆除房梁。如果真的這樣做了,你永遠(yuǎn)也不知道這個(gè)房子什么時(shí)候或是否會(huì)坍塌。
結(jié)語
代碼如同數(shù)字房地產(chǎn),企業(yè)需要接受的事實(shí)是,開發(fā)人員不僅僅是程序猿。只有當(dāng)開發(fā)人員被視為一個(gè)具有凝聚力、跨功能團(tuán)隊(duì)的一員時(shí),他們的編碼能力才會(huì)有效提高。
把開發(fā)人員都放到項(xiàng)目的末尾就如同憑借一些草圖和一塊平頂木板蓋房子。開發(fā)人員的職責(zé)是選擇、構(gòu)建、美化及其中間的所有流程,最終將企業(yè)的理想轉(zhuǎn)化為現(xiàn)實(shí)。這就是為什么在項(xiàng)目開發(fā)周期中,盡早讓開發(fā)人員參與其中至關(guān)重要。