天天看點

【轉】C語言新員工訓練營

背景

【轉】C語言新員工訓練營

在客戶咨詢後期,客戶的傳遞壓力很大,導緻顧問閑置。正好他們部門招聘了一些新員工大概7名,有3人是剛畢業,4 人是社招有經驗的Deveoper。因為新員工剛到公司,有充足的時間進行能力提升,是以由錢安川帶着這些人做了為期一個月的C語言訓練營。以下為錢安川的總結。

其實,剛開始的時候我是不太樂意給新員工做教育訓練的。因為擔心新員工基礎薄弱,效果不好,浪費我的時間和精力,覺得更多的去影響他們的Leader和經理更加重要。但是,做了幾次活動之後,他們所有的人都超出了我的期望。他們每個人都很強的學習和提高欲望,能夠按時按量的完成我布置的作業,心态非常Open,非常主動積極的學習。

活動方式

C語言新員工訓練營和OO訓練營的方式有所差別。因為參加OO訓練營平均都有3年以上的華為工作經驗,可是C語言訓練營都是新員工,甚至有的是剛剛畢業。但是他們的優勢是有充足的學習時間。通過和他們的經理的讨論之後,決定每天上午由我統一訓練,下午他們回歸到各自的子產品組,熟悉子產品的業務和技術。

時間:每天上午

活動方式:

1. 早上站立會議:每人要在站會上分享一條學習經驗或者教訓

2. 展示家庭作業代碼

3. 顧問提出需求

4. 分組讨論和設計(如果需求簡單,則跳過此環節)

5. 各自TDD開發

6. 代碼示範

7. 點評和顧問總結

8. 布置家庭作業

活動的組織方式和OO訓練營基本類似。不同的地方如下:

  • 多了一個站會分享學習經驗和教訓的環節,為大家營造一個互相學習和分享的氛圍。
  • C語言訓練營沒有要求結對開發,因為大家對語言還沒有吃透,希望給每個人獨立思考寫代碼的空間。
  • 代碼基本上都是上午寫完的,隻有偶爾的重構任務作為家庭作業
  • C語言訓練營有一個讀書寫代碼活動,這是每天的家庭作業,在後面我們會有詳細介紹

訓練營内容

新員工的技術和經驗參差不齊,有些人連C語言還沒有吃透,如何去教他們做TDD和簡單設計呢?這是一個很大的挑戰。我回想起自己學習新語言的方法。前些時間我自學了SCALA語言,看完了《Scala程式設計:Java虛拟機多核程式設計實戰》,但還是覺得很多概念沒有吃透,于是我就把書合上,然後把書上所有的例子獨立寫了一遍,這時才能感覺自己是學了一門語言。

我用同樣的方法要求這些新員工,我給他們找了一本書《C程式設計語言》,同時給大家做了一個具體的讀書計劃。當然這個還不夠,我要求每個人在不看書的情況下,把書上的例題改造成測試驅動的代碼。比如:Hello World 的例子

#include main() { printf("hello, world\n"); }

要求把這個例子改造成測試驅動的代碼。改造之後代碼分别為:

測試代碼:

TEST(test_case_name, test_greetings) { EXPECT_EQ("hello, world", greetings()); }

業務代碼:

char[] greetings() { return ("hello, world"); }

通過這樣訓練,每個人可以系統的學習一遍C語言的所有知識,并且可以鍛煉如何用TDD進行開發。

大概花了20天左右的時間,每個人基本上都寫完了書上所有的例子。這些隻是家庭作業的部分。在每天上午我帶着大家集中訓練。我們完成的練習有:長方形、機關轉換和飛機場項目。每個人都要遵循簡單設計四原則,用TDD的方式寫代碼,全部使用快捷鍵,用Module C的方式寫C語言代碼。

效果

很明顯,效果是矼矼的。就連一直對靈活有質疑的PO主任也站出來說:“今年新員工是有史以來代碼寫的最好的一屆”。大家都回報通過TDD方式系統的學習了C語言,掃除了很多的語言盲點。通過練習,每個人都學會了簡單設計,TDD開發,什麼是好代碼,如何寫出更加優雅的C代碼。而且通過每天站會分享和代碼示範,給大家提供了一個互相學習、交流的平台。

經驗總結

  • 讀書寫代碼活動的效果好的太明顯了,可以幫助大家在很短的時間裡吃透一門語言
  • 讀書寫代碼活動必須要有計劃有規律的進行,我是給大家排了3周左右的計劃,并且要及時檢查,讓大家示範成果,一方面是互相學習,一方面是鼓勵大家繼續前進
  • 剛開始早站會是每人說昨天做了什麼,今天準備做什麼。但是,我發現這樣就太過形式了,因為大家都很清楚這些事情。是以我把站會内容改為:每人分享一條學習經驗或者教訓
  • 在活動中遇到任何問題,我們都會把他寫在白闆上,并且指定一個owner(負責人),之後去研究搞定,第二天和大家一起分享
  • Module C是解決C語言設計的不二選擇