乙級電腦軟體設計技術士應考記
上週六,我為了乙級電腦軟體設計技術士的術科測驗,跑了一趟台中,到勤益技術學院應考。
說起來,這次應檢經驗非常不愉快啊。明明就是在高雄報名,也在高雄考學科,竟然要我跑到台中考術科,感覺非常不爽,而且基本上是砸鍋了。沒想到出了一題最優路徑選擇演算法的實作題,偏偏我最弱的就是那一點,沒做完那題,是一定不過的。寫了十年 C/C++ 程式,竟然沒考過,實在是太大意了。附帶一提,當年 (民國83年) 丙級電腦設計技術士一開辦,我就考到了,隔了十二年「終於」等到乙級檢定...
在實務上,C 語言程式還是佔大多數,純 C++ 語言的程式反而少。別懷疑,看看 Linux 上的軟體,八成都還是用 C 語言寫作。但不用 C++ 並不表示寫不出個體導向 (Object-Oriented) 的程式。早期接觸個體導向的程式人員,大都會用結構型態與函數指標進行資料封裝。像我用 C 語言同樣能實作繼承、動態連結等功能。再者我接觸 C++ 的時間算早,所以 C++ 後期發展出來的東西,如 template, STL 等,我反而不熟悉,考試時就先吃了虧。
而工具的選擇上,更是令我十分不滿。使用工具限定使用 VisualStudio .Net 跟 Borland C++Builder 這兩種,偏偏我都沒用過。我是在 Linux 環境下用 gcc/make 這些工具的。就算在 Win32 環境下,也還有 MinGW32 與 Borland C++ 5.5 command line tool 這兩套可自由取得 C/C++ 編譯工具,為何不能用?害我考試時還要先東摸西摸後,才搞清楚要如何建立專案及生成執行檔。我不清楚考 Java 的人,用的是什麼工具,或許也不是用 JDK 、 IBM VisualAge 或 eclipse。
還有一個小插曲。考試時不知為何,我無法使用 cin,cout, istream, ostream 這些東西,明明 include iostream 了,compiler 竟然說未宣告,見鬼了。偏偏題目限定要實作 >>, << 的運算子覆載作輸出入,於是我當場實作了一組最簡單的 In/Out class...
考試前,承辦單位事先寄了一份模擬試題。跟實際上的試題比對,大致可以看出術科應檢的重點。前三題都是 C++ 語言在運算子覆載以及動態連結上的應用實作。兩題實作運算子覆載及夥伴函數 (friend function) ,一題實作動態連結。但最後一題才是重點,最後一題一定是演算法,而且是冷門的演算法題型。例如模擬試題中的「最長遞增子串列」,我在 Google 上搜尋許久,才搞清楚那是 LIS ,而我手上的資料結構與演算法相關書籍中,根本沒提到這玩意。這次應檢時,則是出了「最優路徑選擇」,給你一個交通網絡圖,分 A~E 個交通系統及 1~9 個站點。試設計一個程式,可依使用者輸入的任兩站點,計算出最省交通費用的路線。
題目一跟題目三類似。我就說一下第三題吧。實作一 fraction 類別 (分子/分母) ,並提供四則運算與大於、小於及等於的運算子。最後再以夥伴函數的功能,實作 >> 及 << 的輸出入動作。我前面說到不能用 cout/cin 而被迫自己當場實作一組 In/Out class 的事,就是指這題。當然,題目本身並沒有要求考生實作一組 In/Out 。
題目二,給你一個 publication 類別,衍生 book 及 type 類別,以動態連結實作 getdata() 及 putdata() 兩個方法。
樂多舊回應