星期五, 1月 16, 2009

Socket Programming

這次的期末作業,學到的東西可真不少...


大家常在說「把程式寫得好、寫得有效率、寫得容易閱讀」很重要。可是,當自己著手幾千行跑不掉的程式時,顧慮這些,似乎變成一件很難很難的事,尤其是時間緊逼期末考時。

雖然我對程式有許多固執的要求,可是在這樣的情況下...什麼都丟棄了,宛如把程式寫完才是第一重要的事。也因此,當我重新看過自己程式之後,提出了一個疑問:「為什麼我先前在寫會這麼暴力呢?」。花了一些時間進行改進後,程式總算是我所能接受的樣子。但令人好奇的是,為什麼當初在寫,就不會想到這些呢?

整個作業下來,我犯了一件大錯,我把這個遊戲想得太過簡單了。原先我以為搞定連線後,剩下的遊戲流程可以在一個晚上內解決,但...我錯了。

寫遊戲流程當天,我從晚上七點寫到半夜快四點,不僅還寫不到一半,還出現許多難以解決的 bug - multi-thread 以及 TCP 連線造成的許多問題,我前所未見。為了解決這些問題,所花的時間竟佔了整個 project 時間的一半!!

整個 project 所用掉的時間,加加減減,36 小時絕對跑不掉。這對我來說是個非常驚人的數字,雖然我知道日後一定有需要花更多時間的程式,但這卻是我第一次花這麼多時間在同一支程式上面。

高中的學長曾說:「身為資工系,一定要習慣寫幾千行的程式,因為未來要寫的,恐怕不是幾千行就能解決的...所以如果連幾千行的程式都寫得很吃力,那以後要如何跟其他人競爭」。的確...我懂這個道理,也總覺得幾千行的程式我應該應付得來。是阿....的確是應付得來,但能否寫得好就是另外一回事了。

剛接觸 proServer 時,我一直覺得 proServer 很難寫,還好我只負責維護。可是寫過這次 project 之後,我改觀了,我深深覺得 proServer 比這支程式簡單太多了。簡單的 GUI 應用,UDP 的傳送方式等...都比這支程式來得好處理。

總之,經過這次 project 後,我對程式的視野又更廣了,不僅是學到如何解決 socket programming 上會碰到的大小問題,對幾千行的程式,也有了點基礎概念,知道該如何寫才能把它寫好,在 try and error 中成長。

最後,我覺得最可惜的是,我沒辦法讓我的 partners 參與程式的撰寫過程,只能給他們美工或其他方面的工作。而最主要的原因是,這個 project 給得太倉促了,繳交期限的兩個禮拜前才給定,加上最後一個禮拜是期末考週,我光是自己寫都很趕了,怎麼還有時間教我的 partners 寫呢?

因此,我強烈建議,如果下次要出這種大工程的 project 時,請麻煩在 2 個月前就給定。畢竟不是每個人都能在 2、3 天內就搞定 socket programming 的....

沒有留言: