以下是自己在大一修習程式設計一學年的簡短心得~
在政大資訊科學系的大一必修課程中,最注重的不外乎是程式設計(ㄧ)(二),以下分別簡稱為CP1,CP2。在這門課程中,我從完全不認識C語言,到現在能對基礎資料結構有所了解。
在剛開始修習這門課時,對於程式設計毫無理解的我,真的相當吃力。我才在CP1的Assignment2就已經卡關,當時的我一看見作業內容,毫無頭緒。
雖然只是簡單的猜拳遊戲,但對於第一次接觸迴圈概念的我,搞得有些頭昏腦漲。
其實,在課程中,教授的表達非常清晰,課程的進度也相當緊湊,而作業量更是非常之多,不僅有9個Assignment,還有12個Exercise,扣除開學與考試週,平均起來每週大約二份作業。
每週的課程都有新進度,幾乎可以說是一個禮拜就教完一個章節以上。CP1整學期的內容囊括了C語言的基礎語法:Variable declaration, Function, Array, “Pointer”, String, Structure and Union, Preprocessor…等,這麼多的內容要壓縮在一個學期上完,可想而知課程的繁複度有多重。其中,為什麼把pointer特別用雙引號標記起來呢?因為…CP2整個學期所注重的資料結構(Data Structure),都在使用指標(Pointer)。
在CP2的課程中,主要在資料結構上有所著墨,例如:Linked-list, Stack, Queue, Tree,這些都是非常基礎的資料結構,使與這些技巧的目的是在於節省紀錄資料的空間,以及增加資料處理的速度。
很多人以為這些資料結構都跟生活上的東西毫無關聯,但其實大有關係。例如:洗好的盤子堆疊後由上而下按照順序使用,即符合Stack的LIFO(Last-in, First-out)的概念。許多小吃店在牆壁上所放的衛生紙,用餐者向下抽取使用,此亦符合Queue的FIFO的概念。不僅如此,教授及助教提供的作業,在這個學期都非常地與生活中的應用有所相關。以CP2 Assignment8 為例:我們生活中所用的拍照技術,全景模式即是應用相片組合的概念完成,而這部分可以適用Tree這項資料結構來處理。
此外,還有一些常見的Sorting & Searching是在課程內容中有提及,例如:Merge sort, Quick sort, Insertion sort, Binary search...等,這些內容同時也會與時間複雜度(Time Complexity)相提並論。
總而言之,這是一門非常精彩的課,雖然課程質量很重,相當吃力且辛苦,但你征服它的成就感無法言語。面對這門課所帶來的成長,必須要付出相當多的時間在這上面,甚至必須每天培養手感,才能在期末的上機考有好表現。在CP1,CP2這兩學期的疲勞轟炸後,我能明確體會到思考程式結構是非常消耗腦力的,但是,也唯有自己曾經痛苦掙扎後,才會在抽象思考的能力上有所進步。程式就是這樣,思考過程有趣但想不出來也很痛苦,令人又愛又恨。
P.S. 本文會隨時更新!謝謝您用心看完文章,如果喜歡我的內容,請點個拍手或留言吧!也順手按下follow鍵,隨時追蹤新文章。歡迎不吝賜教~