在進研究所之前,寫程式是興趣,但電子系的課程以硬體為主,軟體方面的課程少又淺,只能靠自己自修,寫過最大的程式,也不過就是專題二、三千行的規模,對寫程式這件事有大幅度的進步,就不能不提到研究所的OOP了,OOP這門課可是迎新餐會中,大家抱怨(幹譙)的話題呢!開學第一週第一次上課就出作業,一直寫到學期的最後一週,最後一次作業交出去的程式碼行數大約七千行,但以整個學期統計,新增+刪除+修改的程式碼行數應該接近一萬大關,也因此成為印象深刻的一門課。所以Become a Summer Legend!系列接下來的幾篇文章,就來寫一下這幾年研究所中讓我印象深刻的課程吧!
系上物件導向程式設計(OOP)這門課在去年分家了,由於系上還是有不同的研究領域,不見得所有的研究領域都是以物件導向的方式開發程式,所以在去年拆成樣式導向軟體設計(Pattern-Oriented Software Design)和通訊軟體設計(Communication Software Design),大體上,POSD比較繼承到OOP的精神,從連結的課程概述裡可以看到一段文字:『...學生須於課後投入約150~200小時完成一個樣式導向軟體設計專題...』,150小時還不含看書的時間,想當年OOP一整個學期下來七次作業,只有第一次作業以輕鬆的13個小時完成外,剩下的六次作業都超過20小時,20小時是多長呢?正好是周末整整2天都坐在電腦前寫程式,第一個學期只修三門課,老師們也配合得很好,可以說以ABC、ABC、ABC的循環,用作業滿整個學期的18週。
不過作業的份量是一回事,主要是作業有連貫性的,提早體驗了開發(寫新功能)的樂趣、維護(讓舊的程式跟新的程式一起運作)的難處、Debug的痛苦、重構(當時還不知道有好的重構手法)的技巧、Pattern的好處,規格變更(需求永遠會變)的哀號、單元測試的用處、API文件(好的API文件讓你上天堂,爛的API文件讓你下地獄)的重要性和架構的美麗之處,雖然稱不上大型程式,也跟以前玩具級互不相關的小程式作業,有天壤之別,修完這門課,讓我提昇不少自信,也讓我在之後也當過這門課的助教。
當學生寫程式有學生對OOP這門課的感受,當上助教後又是不同的感受,每次出完作業,跟鄭老師討論時,都會對作業該出多難有新的想法,可能是以前被操過,當上助教後也想操學生,每次作業出完鄭老師都會刪掉一些功能,然後說:『別以你現在的能力來估學生要花多少時間』,這句話後來我的指導教授用不同的方式呈現:『把你的時間乘上3差不多就是大學部學生需要花的時間』,後來有詢問過一位修OOP的外籍(印度)學生,他說他花了50小時寫第三次作業(當年只出四次,但每次的分量加重),我聽到還覺得不可思議,後來發現,50小時只比平均時數高一點點,這也就是150~200小時(50*4)的由來了。
當OOP這門課助教最大的感動,是某個業界工作過的學弟說:『這門課學到的東西比我過去兩年的工作經驗還多』,有這句話,花再多的時間改作業也值得了。話說回來,要在這門課有所收穫,得用心寫作業才行,隨便寫寫就算過了,也學不到什麼精隨,更別說抄襲了,必當無疑!
留言列表