from: http://cid-ba6a52af193f301f.spaces.live.com/blog/cns!BA6A52AF193F301F!122.entry
Oh,my pair project
From new Pair(HuangShuo,WangGuan)
簽入代碼,發送郵件,關上Flex Builder。糾結了差不多兩周的Pair Project終於能夠有個了結了,此刻跑來碼碼字,感到甚為解脫。
我們Pair,Wang Guan和我,剛面對這個作業時,基本上是傻眼的,因為除了寫點C和Java基本什麼也不會了。當我發現了Silverlight網上教程的缺乏又聽到有同學說到Flex後,我們選擇了Flash+Papervision3D類庫來實現我們的3D陸戰棋,當然依舊是什麼都不會。
我們開始瘋狂的Baidu,搜尋各種諸如Flash3D,pv3d教程的關鍵字,然後拿到源碼,在機器上試。我們最開始的Pair Programming就是以一起想辦法用原始碼跑出網上的效果開始的,但是基本上是悲劇的,不斷的嘗試,卻依舊弄不懂怎麼在MXML裡面顯示出那個旋轉的立方體。
所有的知識對我們兩個都是新的,對它們完全沒有概念。我覺得這種情況下的Pair Programming是沒法進行了,必須先弄點基礎。於是我們開始了分工,WG開始研究陸戰棋的規則的3D擴充,我則開始攻關flash 3d圖形方面。
慶幸flash的普及度的確很高,教程很多,各種牛人個人首頁也多,我開始瘋狂看教程,調代碼,然後給每一個我能找到的教程作者的email發郵件提問。這樣度過了黑暗的好幾天,終於慢慢見到光明了,Cube轉動起來了,視角拉動起來了,終於有個牛人回我郵件了,最後我們來回了13次郵件。
我掌握了怎麼設點,畫線以後,我就告訴WG,讓他開始設計棋盤,幾番爭論,大概確定了棋盤的樣子。我向WG講了代碼的寫法,然後他開始實現棋盤線條的代碼。當最後WG改出了一個正確的棋盤時,拖動著那個精緻的空間網格,感受著我們自己弄出來的3D效果,真的覺得這是天賜的藝術品啊。
通過不斷的看Papervison3d的api,不斷的試代碼,我終於覺得能開始做自己的項目了。於是我們進行了項目中最關鍵的一次Pair Programming,我們利用編譯課上機時間,在機房裡Pair完成了整個項目的類的設計與程式結構的設計。我們一起分析出類,然後找屬性,寫方法頭,開始是WG用鍵盤,後來我用。一個明顯的好處是,寫完一條自己不確定的語句,馬上可以跟Pair一起縷一縷思路。一下午下來,感覺甚為清爽,因為終於清楚這個項目的做法了。
接下來的工作,又開始分工。我來做圖形外觀方面的東西,這個容易測試,也不必要兩人做。WG則寫了很多內部邏輯處理的代碼。這時我們開始了項目中用到最多的一種Pair Programming了,也就是WG用他的代碼開始跑,我沒有寫代碼帶來的主觀偏見,很適合出測試範例,代碼出了問題,馬上我們從比較抽象一點的層面來討論這個事件的邏輯,最後WG哦的一聲,弄明白了,回到代碼層次迅速改好代碼,繼續上面的過程。這時很常見的就是WG坐在電腦前,我站在他身後,走來走去,然後俯身去用滑鼠出測試範例;WG則是轉身來跟我討論,完了再轉回去改代碼。
軍棋本來棋子就麻煩,加上我們每個棋子都會有三種貼圖,在不同的時候顯示,來增強使用者的體驗效果,因此關於換貼圖,關於相互吃子的邏輯,我們反覆這樣Pair了好多次,改了無數bug,也不幸引進了無數bug,最後也只能弄到自己找不到bug,其實可能還是有。由于軍棋中很多類似的邏輯代碼,我們又用了很多直接暴力枚舉的代碼,不在一起寫代碼而在一起debug,避免了在那些邏輯簡單打字量大的代碼上浪費Pair的時間,我覺得這個方法還是成功的。
現在基本做完了這個作業,回過頭來想想,其實還是有很多經驗教訓的。
一條經驗是,學好基本的東西,真的很有用。Java的基礎協助我們基本上沒有在ActionScript的文法與用法上花費什麼時間。另外一個再次被印證了的經驗,搜尋引擎是個好東西,有了互連網,似乎真的不能說什麼“流行的”技術是不能掌握的——當然還是要花時間的,說不定還要痛苦個幾天。
教訓更多的體現在總體的設計上。Actionscript是物件導向的,一開始關於flash3d什麼都不明白,我們並沒有太在意麵向對象的分析設計方法的運用,很多地方有些隨意,如果最開始能老老實實的畫類圖,分析用例,也許不會後來突然發現重要的屬性取不到,要改很多代碼了。再就是一些邏輯,一開始我們並沒有很完全的去分析清楚,沒有用很優雅的處理方法寫程式,後來改代碼,只能瘋狂的用if,寫到最後,有些代碼真的改得很難看了。
整個過程,也讓我們對一些問題有了親身的體會。最明顯的就是“迴歸測試”這個東西,我之前一直不太相信它的必要性,這次改行棋邏輯的代碼,算是讓人體會到了迴歸測試多麼重要,很多次都是改對了一個貼圖顯示,新毛病又出來了。。。
也不過是兩周不到以前,無助的看著Papervision3D 的api,都有些想放棄這作業了,若干天后的現在居然能做出個東西來,還能現在來碼碼字,真有種熬過黎明前的黑暗的感覺。這項目,我會記住很久了。
最後說點題外話,因為調試的時候程式崩潰,強行關IE,我這vista悲劇的藍屏了兩次,死機了一次;另外,Flash3D現在還不支援硬體加速,全是CPU算出來的,這些天我的CPU也是長時間接近100%,也許哪天Flash3D能發揮點顯卡的能力了,我真應該把這個Pair Project再拿出來試試,讓CPU看著顯卡出力,它自己清閑爽一爽。