一個高效的研發團隊是高質量軟件項目或產品的保證,而企業內訓能最大程度地確保研發團隊的高效運轉。內訓很多公司在做,但效果不好。請問,貴公司是如何實施內訓工作的?
根據我的觀察,軟件企業內訓效果不好的最主要原因是沒有好的師資,工程師的一大特點是不愛表達,沒有授課經驗,讓他們授課顯然效果不理想。我們主要有三種內訓形式。
第一種形式是Tech Talk,定期將個人在工作中所掌握的新技術或在某一領域內掌握的特殊知識,講出來讓大家分享。Tech Talk可以是邊吃飯邊聽課,也可以是邊發問邊解釋,體現了一種輕松、自由、民主和融洽的研發文化。Tech Talk在美國硅谷的軟件公司得到大力推崇,效果很好,一方面講課者不用花很多時間作特殊準備,因為講的都是他本人熟悉的內容;另一方面員工有表達的機會,能借此提高口頭表達能力;另外,聽眾從中接觸了很多新技術和新知識。
第二種方式是導師帶徒弟。給每個新來的員工配一位導師,導師的責任是教會徒弟企業工作流程、代碼書寫規范等,幫助徒弟轉換角色,盡快適應公司環境和文化。這種方式目標明確,不需要特殊的時間和形式,潛移默化地幫助了新人,也有利于互相增進理解和感情。
第三種形式是通過評審達到互相培訓的目的。例如,代碼檢查(Code review)可以讓參加會議的人互相取長補短,經驗欠缺的程序員可以向經驗豐富的程序員學習編程經驗、編碼規范和風格。代碼檢查不僅能檢查出代碼錯誤和遺漏的問題,也能在很大程度上互相提高。
以上三種形式的內訓都不需要專門的講師,避免了由于程序員不擅表達而引起的效果問題。
除此之外,我們也經常從公司的其他部門(如質量控制部門)請一些資深人士,到研發中心進行培訓、交流和座談,除了教給員工新的知識和技術,還以其個人豐富的經歷,教導員工如何對待工作、如何做一名合格的職業化的軟件工程師。
我們通過組織高水平技術團隊為美國市場提供軟件外包服務,需要不斷招收和培養技術及管理人員。我們的內訓目標是提高軟件開發管理、質量和生產效率以及人員的技術能力,培訓內容覆蓋諸如項目管理、通用管理技巧、業務領域知識、軟件技術和英語等方面的內容。
我們從公司實際出發有針對性地設置課程,例如項目管理培訓的內容包含項目管理的藝術、風險管理、客戶管理等。先期會在公司內部精心篩選適合的老師,使課程內容更具實操性。例如項目管理方面的老師由總經理及PMO直接兼任,通用管理技巧課程由人力資源總監主講,技術課程由經TEC審核的公司內部技術尖子或項目的技術領導主講。
公司對新員工的培訓尤為重視,除了傳統的入職培訓外,還為應屆大學生設立了企業內部學校,他們要經過三個月項目的實習期和三個月企業內部學校的學習。在實習期,學生直接參加實際項目的工作,在導師的帶領下學習體會項目開發過程、嚴格質量要求和編碼標準、英文E-mail和口語溝通以及公司文化;在企業內部學校里,學習各種課程、參加公司論壇和專門定制的練習項目。每門課程結束后都有考試,對學員的代碼進行抽查評審,完成績效考評。
第三,建立了培訓獎勵和考核機制。例如為技術培訓老師設立TEC幣,以資鼓勵。技術和英語授課過程中和結束時都有考試,對參加培訓的員工給出評分和評語。對成績優異的學員適當獎勵,并在全公司的TGIF大會上宣布,員工的培訓記錄和通過證書也會作為績效考核參考之一。
另外, 項目團隊領導都要參加交付研究會來學習公司基于CMMI5的項目交付過程,所有技術人員都可以參加技術研討會,管理層自身也通過Leadership論壇來不斷學習提高。
開發人員不只做開發,測試也是他們必需的工作。程序是開發人員寫的,技術上只有開發人員才清楚測試的技術要點。要保證產品的質量,開發人員必須做測試。差別在于開發的測試是技術上的,開發完成后要馬上進行,而QA的測試是系統的、客戶導向的。
針對軟件測試的特點,培訓應著眼于五個方面:一是系統性。如果從軟件測試的行業定義而言,軟件測試是系統化地保證軟件產品滿足設計規范和用戶需求。一個好的軟件測試人員往往可以系統地去審視測試需求,制定測試策略, 從而做到心中有數,保證有計劃地測試產品的功能和需求,按時達到預期的質量要求。二是從無窮到有限。軟件只要復雜到一定程度,其功能的組合就是無窮的了,理論上說測試要涵蓋全部的情況。好的專業的軟件測試人員能在無限的測試案例中找到最合理和最有效的有限集合來測試,而這些集合涵蓋了對于客戶來說最重要的應用集合。三是對客戶和產品的了解。軟件產品是設計給特定的客戶來解決特定的問題。一個好的軟件測試人員應該真正了解產品的目的和客戶要解決的問題。所以他們的測試往往是有針對性和分優先級的。這些知識會被有機的、創造性的發揮應用于軟件測試的實踐中。四是不斷創新和改進。測試往往是重復和枯燥的。一個好的軟件測試人員會在每天的重復工作中發現規律,思考如何改進這些重復和枯燥的工作,以提高效率為樂趣,最終發明和創新更有效的方法和流程來把測試做得更好。五是感覺和敏感度。一個好的軟件測試人員會對bug有一種特別的敏感和感覺。有時即使還不曉得錯在哪兒,就是感覺有問題,即所謂的“smell not good”。當發現這種問題苗頭,會堅韌不拔,直到找出了問題之所在。當然這需靠經驗的積累和培養形成。
我想如果我們能夠有目的地來培養我們測試的修養,做個好的軟件測試人員就不難了。而這樣的測試人員正是中國軟件行業所缺乏和急需的。
技術團隊內訓是因人而異、因公司而異的。不過內訓的目的只有一個,即確保技術團隊能夠高效運轉,有更多的產出。在很多規模稍大的公司中,技術部門主管常常把需求丟給HR部門,而HR部門可能要花費幾小時到幾天不等的時間去聯系一些培訓中心,咨詢確認培訓相關事項。然而這樣的培訓帶來的效果,很多時候是難以測量和評估的。
我們公司的內訓是這樣開展的,首先根據培訓對象的職位來劃分培訓的方式和目標。主要的培訓對象有三類:第一類是剛參加工作不久的實習生和新員工;第二類是公司內部一線開發人員,如測試、設計工程師;第三類是中層管理人員和技術骨干,如開發經理、產品經理。對不同類別的員工有不同的培訓策略。其次作為公司技術團隊的負責人,我和首席架構師在公司創立之初就對公司的技術走向和技術資料進行整理和儲備,采用逐漸積累和優化的方式形成我們自己的速成“三板斧”,目標是使一個新人能夠在2~4周的時間具備職位必需的開發和測試技術。以文檔加案例的模板形式,幫助新人快速轉化為“生產力”。對剛進入公司的實習生,我們用傳統的“傳幫帶”方式加上“三板斧”,使實習生逐漸轉變為熟練的工程師。對一線的開發和測試工程師,內訓計劃以內部講座結合未來產品發展方向的研究,根據每個人的背景、優勢和能力來定制不同的學習目標和方向,幫助一線工程師成為領域專家。對經理級別的培訓分兩個方面:一是提高業務能力,二是提高管理與領導能力。在提升業務能力方面,我們采用內部技術研究小組的形式,1~2人牽頭,大家共享成果。在提升管理與領導能力方面,我們會經評估后引入一些外部培訓,利用外部資源來提升中層管理人員的管理與領導能力,并以此增加他們對公司的向心力。
(本文來自《程序員》雜志10年05期)