體驗2012 CodeRetreat全球活動

作者:Tony Qu

上週六訂了coderetreat上海站的課程,一大早7:30就出門了,確實遠了點,在五角場那裏,過去坐地鐵也要1個小時左右,到那邊已經9:10分了。

首先來說說coderetreat的含義,retreat在英文中有治療的意思,所以code retreat可以翻譯爲編程技能修正課程,其主要流程是通過若干個session,每個session 45分鐘,解決一個編程問題,可能是算法或者實際問題,題目類似ACM,但它並不注重結果,沒做完也沒關係,但在做的過程中要能學到東西。當天由於是全球活動,其實世界各地都在同時進行活動,當然會有些時差,據姚若周同學(主要組織者之一)講,當天日本有5個城市、悉尼也有好幾個城市、中國也有好幾個城市、還有米國、歐洲都在進行活動,大屏幕上有個視頻共享界面把世界各地的活動情況都試試傳送了過來,看到世界各地的一羣人都在做同一件事,你懂得,這感覺非常特別。

IMG_20121208_165551 

接着來說下活動租用的場地,看到這碑大家應該明白了吧,沒錯,就是創新工場上海辦公樓,地址是國定東路300號,其實是和國定東路200號一起的,都是創業園區,只是兩個門而已,離地鐵十號線站大概10分鐘路程。那樓還真的不是蓋的,雖然地方有那麼點小偏,但樓絕對是又新又讚的,連我遠在德國的學長看了這照片不禁感嘆中國的樓蓋的是好,德國都是些破樓。

image 

image

(以上照片使用了android 4.2的全景拍攝功能,自動合成效果貌似還能接受。)

據說場地是創新工場免費贊助給agile tour和coderetreat的,所以省了不少成本,畢竟這活動是公益性質的,在這裏替大家謝謝開復和創新工場的無私奉獻者們。

 

言歸正傳,回過頭來說coderetreat。這活動通常是兩個人一組,一組有一臺電腦就行了,因爲是結對編程,另一個人不一定要有電腦,有紙和筆就行了。由於要編程結對的兩個人原則上是要懂同一種語言的。

主要規則如下圖所示

image

 

第一點:所有測試必須通過

第二點:代碼要清楚、要有意義、要保持一致

第三點:不要重複行爲或配置

第四點:使方法、類和模塊儘可能的小(裏面的代碼越少越好)

這四點可不是這麼容易達到的,大家自己體會吧。
其實每個45分鐘的Session做的東西都是一樣的,在新一輪session開始時,你可以重新選擇搭檔,因爲這個活動注重的是與不同的人交流獲得不同的心得和知識。我總共換了2次搭檔,3個人,第一個是個攜程的架構師、第二個是某大學教授,第三個是一個老外(米國人,我後來才知道他盡然也是certicated scrum coach,牛人啊,膜拜~)。

我與攜程的哥們配合很是默契,我們做需求分析很快,而且考慮到了很多情況,第一場雖然沒寫幾行代碼但是基本把整個問題搞清楚了,還寫了幾個測試用例,後來因爲說要換搭檔,所以沒一起做下去,估計一起做幾輪,我們一定能完成。第二個是王教授,人家是大學裏教軟件工程的,但是人家倒也沒閒着,自己做了個BDD框架,我們整個session基本上在聊她那個框架,蠻有意思的,因爲目前好的BDD並不多,他們是希望通過項目實踐把整個BDD流程做熟,然後進行孵化,據說還在博客園發過文呢。第三個是那個米國大牛,人家可是boostagile.com的培訓師,英文叫Dale, 中文名叫大樂,這位大叔中文確實講得不錯,雖然很多話他聽不懂,但他很謙虛,經常會說“這個不會”、“我腦子壞了,記不住”,甚是搞笑,和這種大牛呆在一起完全沒有任何壓力,又可以學到很多東西,真是難得啊。

 

來說說當天我學到的東西

a. 如果是TDD,單元測試應該先於代碼實現,即使是類名也應該是通過單元測試代碼中的名字創建出來的,而不是先寫那個類。

b. 單元測試代碼應該最小化,測試的東西應該是非常基本的功能,不要涉及和這個用例無關的邏輯,即使有些時候它在同一個被測試的方法中實現。

c. 不同的人考慮問題的角度不一樣,產生的培訓效果會完全不同。

我接觸的三位同學他們的出發點都是不同的,第一位和我差不多,希望完成任務,所以我們更注重用捷徑完成問題,但有時會忽略過程;第二位同學完全是來推廣她的BDD的,所以(強行)要求我用它的BDD框架來設計測試用例,但說實話,由於我對這框架不熟,所以不可能在45分鐘內馬上上手,所以我後來乾脆和她聊其他事了,呵呵;第三位同學更注重過程,他和姚若週一直在討論如何寫單元測試(我當時其實在旁邊打了回醬油),如何能寫得讓單元測試只有很少的代碼,少於5行,所以相比之下,第三位老外的收穫可能是最多的,但他其實無所謂做不做完,這和這個活動的初衷也更接近。

d. 如何不用if實現同樣的邏輯

當天我們的題目正常思路肯定會用到if,因爲要判某個細胞是否活着,後來老外想了個辦法,直接只存活着的細胞結點,這樣遍歷的時候就不用判斷了,肯定是活細胞。這招說實話,我一開始確實想不到。

e. Dvorak鍵盤佈局

這是一種特殊的鍵盤佈局,據說可以改善手到敲擊任何一個鍵所需的距離,當然這需要練習2周-4周才能適應,具體可以看http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard

f. 不用鼠標寫代碼

這是差不多在下午倒數第二輪講師提的要求,說實話,一開始大家都不習慣,但後來發現用快捷鍵確實會有不同的效果,習慣了就會很快。

g. 適當的圍觀可以帶來意想不到的宣傳和學習效果

我是個很注重細節的人,我發現基本上有個問題或討論只要超過3個人就會引起多人圍觀,這時人數會迅速變成6人甚至10人,但圍上來的基本是想知道他們在討論什麼,能學到什麼?這很重要,因爲大家對話題有同樣的興趣。

h. 做結對編程時,即使發現了錯誤也不要馬上打斷你的搭檔,這樣一方面是效率問題,一方面也是對搭檔的尊重,等他寫完這部分代碼,一起指出效果會很不同,這同時也是在做code review。

 

先寫到這吧,希望以後有更多這樣有意義的活動可以參加,再次感謝agile tour對coderetreat活動的贊助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章