最近我們 Lab 有一個 case,據說會是我們這一屆最後的一個 case。這個 case 其實存在已久,我之前曾經用 PHP + MySQL 寫了一個版本,這個版本後來因為 requirements 改來改去,我一開始也沒做好設計,只求快速結案,於是 bug 滿天飛,最後決定砍掉重練。其實 bug 太多只是砍掉重練的其中一個理由,更大的原因是我希望大家能夠多分擔一點工作,畢竟這是 Lab 的大家都有責任的 case。
重新開始時,我們首先有幾個決定:
- 程式語言、資料庫的選擇?
- 資料庫要不要正規化?正規化到什麼程度?
- 如何分工?
我們的決定是 C# + MySQL,因為 C# 大家都不熟,但是為了論文大家都得用到,可以一起學習——我用 C# 寫了論文實驗的前置處理程式,大家得學會看懂它、修改它。資料庫也下定決心重新正規化,至於分工方面,由於這個 case 環環相扣,我們、或者說我實在不知道怎麼分,最後分得似乎有些不公平,不過這應該是大家第一次、也是最後一次,動員整個 lab 一起進行一個 case,我覺得很感人。
根據這次的經驗,我覺得我不是一個好的 PM 或一個好的 Senior——我早該知道的,但我沒有改進。我不知道如何控制進度,才第一次開工就讓大家一起吃了早餐,當天其實我也很累,不過看大家都沒走,我也不敢走。PM 實在是一個深奧的職業,要怎麼樣保持良好關係又能及時交付,我實在是想不出好方法。
猴子有問題問我時,我的態度有時、或者可能是通常都不是很好——剛開始如此,我後來有特別注意措詞、語氣,希望給人的感覺確實有所改善。猴子的 C# 沒有比其他人更熟,甚至我覺得他可能連最根本的程式基礎都沒有打好,他非常認真,但他還是被我唸最多的。猴子大概兩年來都是扮演受害者的角色,最近我開始感覺他可能只是想要扮演一個深入大家的好同學,所以假裝融入大家,其實沒有人認識真實的他,我們認識的只是一小部份罷了——不過反過來說,誰又是真實的?所謂的社會化,不就是用層層的糖衣武裝起自己?每個人都有必須說謊的理由,我並不覺得有什麼不對。——當我在寫前面這段自作聰明的言論時,就表示我又回到 1st Phase 了 XD
分工的方面,起初我覺得好像給胤太爽了,但後來由於 data 也更新了好幾次,所以他也得重複好幾次人工過濾及轉換成資料庫的流程,並沒有輕鬆到哪裡去。為了避免誤會而附帶一提,我們這個 case 的資料必須是由人工過濾,因為沒有固定的規則可以交給電腦自動過濾,這項工作以及類似的工作我以前也作過,一邊作一邊覺得自己其實是資處科的學生才對 XD 我的分工是寫 UI,可能有人覺得這麼輕鬆的工作我分給自己很不公平,然而這是必然的結果,因為不管給誰寫,最後老闆都會要我重作 UI,但為了彌補我的良心不安,我還是給其餘三個小組都幫了一些忙。
前面提到我們決定採用 MySQL,但猴子發現 MySQL 不能同時開啟多個 Reader,這對於猴子寫程式是個阻力,而且用 MySQL 的話,安裝也會變得困難,因此我建議改用 Embedded Database。在 C# 上的 Embedded Database Solution 最常見的有兩種,其一是 SQL Server Compact、其一是 SQLite。雖然我跟 SQLite 比較熟,但我熱愛官方的毛病又犯了,便努力研究了一陣子 SQL Server Compact,最後結論是 SQLite 方便又夠用。一些評測還指出 SQLite 更快,完全沒有吸引我選用 SQL Server Compact 的理由,於是我們決定改用 SQLite。SQLite 不但不用安裝,還允許同時開啟多個 Reader,但這時我們的程式已經不再需要這個要求了,這是好事 :p