先前評閱學生之破蓆 (project),也閒聊幾句。本來是寫二三事,結果愈寫愈長,相信是這兒最長的一篇
一、前言
應該是學生第二或第三個軟件工程的科目,破蓆的形式乃四人一組,學期尾寫成一軟件。題目是開放式,只要求使用現有的框架 (Framework) 以及用戶間存在協作(collaborative) ,這樣的要求可以說是寫甚麼都可以
二、Ego
開放式破蓆是比較好看,沒有集體平庸的約制下,上游的學生是可以遠遠跑出。至於破蓆能跑得多遠,取決於學生的 Ego 有多大,有時在起跑線上已大約可預計結果 (當然也有跌眼鏡的時候,但通常也不會差太遠)
三、Mission Impossible
其實學生大約可用的時間為一個月﹐而且夾雜其他科的功課或破蓆,有組還是做了隻 3D 捲軸射擊遊戲。雖說網上素材充足,但遊戲編程畢竟麻煩鎖碎事甚多。完成品聲色方面弄得似模似樣,遊戲性雖有待改進,以技術門檻與時限來說,能完成已是不錯。須知某部分頹廢學生的 Final Year Project ,一年時間也遠不及這個水準
破蓆早就定了分,考試亦已完結,閒說這組同學依然在完美化這隻遊戲
四、意念
有說本港學生缺乏創意,但在下想說有意念的從來都是稀有的小眾。雖說題目是開放式,近三份一學生的題目還是可歸為同類
五、錢途
亦很坦白說,沒有驚喜,未能看見甚麼 “The Next XYZ”,或者是有潛力可幹一筆的破蓆。互聯網與實體世界的區別,在於互聯網是個貼近完全競爭的世界﹐全球人口均可進入這個鬥獸場,除非有如祖國動用網絡長城,否則即使未來是走去全球化之路(deglobalization),對純網上世界亦沒有影響。基本上現時可想像得到的純網絡服務,應該也有人做過。當然要學生破蓆與現有的網絡軟件 (Webapp) 相比是個不切實際的要求,但想有錢途的話,這是個基本門檻。而今年幹 Webapp 的,以學校破蓆的基準亦只是不過不失,距離「可以一戰」的門檻依然甚遠
意念上有潛力可以賺些茶錢的,感覺上有兩組,都是做小遊戲。其中一組意念上雖已有人做過,但現實上因地域語言及文化壁壘的存在而可以一試,但組員技術太差,不成氣候,浪費了意念。而另一組在下則覺得的確可以找些 Game hosting ,賺些少外快
六、分工
各人的工作量,粗略可從 Code Repository 的活動中,以不科學方法估計出來。據在下觀察所得,在大部分的小組裏,總有一位同學,所作出的貢獻約全組近半或以上。 4:2:2:1 乃在下最常見之分工比例,即工作量最高與最低的一位相差四倍,當然這個數字是不能作準
七、Free Rider
Free Rider 問題乃校園破蓆常見的問題,即某些組員對破蓆的貢獻近乎零甚至是負貢獻,以不費吹灰之力享有其他組員的成果,某程度上可說是高度理性的表現。慣常處理方法是要求各人對其組員評分,以達宣洩效果 (其實對最後分數的確影響有限,何況各人通常是比較仁慈)。評分中的其中一條問題是問「假如有一筆錢,閣下會如果與組員對分」,有位怨氣重的同學回應道「寜可捐給樂施會」
假如容許學生可以炒組員魷魚,遊戲規則就是另一回事。Free Rider 本身貢獻微乎其微,炒掉有助改善效率。而被炒者則可能成為人球,或落得一人成組的下場
八、網絡安全
O/R Mapping 的流行,令 SQL injection 的機會大減,SQL 雖不能完全被取代,但在不少場合已經是不再必要。還在用 SQL 的小組,難得不是全部有 SQL injection 的問題。存在 Cross-site Scripting (XSS) 問題的應該有一堆;而登入密碼有機會被截取的,若該部部分是出自學生手筆的話,應該也是全數中招;至於 Cookie attack 之類在下就不懂了。安全性問題要注意的地方實在太多,假若在下要做 Webapp 在這方面也肯定要請教高手指點,沒有研究過安全性就隨手架站實屬高危行為
九、易用性 (usability)
長久以來這方面是學校破蓆的弱項,一來是吃力不討好,付出與回報不成比例,二來要留意的地方又是有很多 (又是博大精深,學海無崖),三來根本不少人對此毫無頭緒。其實易用性與美觀度有一定關係,美觀的不一定易用,但好用的通常也不難看
十、電腦語言
所用的語言是正常的大路,除了有組是用 Ruby。Java 佔最大比數,寫 XBox 遊戲的全用 C#,php 為數不少,法拉薯 (Flash) 也有幾組
在下依然鼓吹在學校破蓆使用動態語言,一來語言彈性較大,二來放在開發的時間可以縮短,三來寫 Test 也感覺上比較容易
十一、調試 (Testing)
也是吃力不討好,付出與回報不成比例的工作。基本的調試也是破蓆要求的一部分,當然最後在這方面相當認真的人不多 (但不是沒有)。而且一般 programmer 就是覺得寫 code 的時間是 productive,寫 test 的時間是 non-productive。學校破蓆就沒有所謂,反正是用完即棄一次性,至於象牙塔外是否如此,在有限時間內 coding 與 testing 的比重,大家心照吧
十二、內涵
以往用過其他人為了研究而寫成的軟件,得出學院出品必屬劣品的體會,先前氣侯門事件(climate gate) 洩漏出來的程式碼,被人發現是驚嚇級數。可能已經是第二至第三個軟件工程的科目,而且部分人已有 co-op (placement/internship) 經驗,整體上程式碼的可讀性算是不錯,code smell 不算嚴重,至少不見有神之物件(God Object)。 雖然現在已經有 document generator 如 Javadoc,緩和了 programmer 不願寫字的問題,但說明不足仍是普遍存在(其實也不算差﹐只是略嫌不足),尤其是神奇數字 (Magic Number) 幾乎是每組都出現的問題。Copy and Paste code 與 Hard code 的情況不算普遍。有興趣的可以留意維基 Anti-patterns 一項
十三、修辭
畢竟是軟件工程的破蓆,對測試與程式碼的質量還是有一定要求﹐在下還是要每組審閱程式碼,先前見過的一幅圖好好的總結了這個過程︰

讀 Code
有時就是覺得學編程不只要寫得多,好 code 值得多看一點。好 code 與爛 code 的分別,就好比兩位作者在表達同一個題材,好的一位在修辭技巧方面比另一位表達得清晰。學寫字會強調臨摹,學寫文也有範文,而閱 code 似乎一直也不被重視
Recent Comments