FB群組: NTOUCSE 1091 程式設計 1C
就像我們上課時提到的, 程式設計課程內容的難易度在講到迴圈之前有一個很明顯的不連續點, 你應該很容易可以發現在講迴圈之前你自己看到或是我希望你寫的程式都不太大, 基本上好像只是在練習 C 語法, 寫出來的程式沒有辦法幫你做些什麼自動化的工作 , 甚至會覺得很直覺, 有點簡單, 不需要真的花什麼時間練習; 這個狀況在學到迴圈, 學到陣列的時候突然有了變化, 程式開始可以運用到計算機快速的運算能力以及大量的記憶體了, 寫的程式變大了, 程式可以精確地完成很多你不想 | |
要手動去作的事, 程式開始變得有意思了, 可是實習和作業也開始變得不是那麼直覺了, 這時候學習的慣性會讓你捨不得多花一些時間去調整, 心裡頭期待著也許過一兩節課程式又會變簡單了, 事實上這個期待很快就會落空, 你看到的程式一開始能夠完成比較有用的事以後, 不會再變回到開學的時候那麼簡單了, 過去很多同學就在這個時候發現進度遠遠地落後, 突然發現都看不太懂了, 甚至就此放棄了, 然候抱怨說怎麼一下子作業難度變那麼高, 抱怨課程設計不好, 為什麼不繼續給簡單的例子就好? 這個過程有點像學騎腳踏車, 不會騎之前你用兩隻腳走路的速度差不多 3-4 公里/小時, 會騎車以後移動的速度突然變成 15-30 公里/小時! (為什麼不只騎 5 公里/小時慢慢增加就好了呢? 呵呵, 要騎得很慢當然可以, 但是困難度反而變高了, 有點像是把一個功能很複雜的程式寫得很簡單、很容易了解一樣的困難。) 在下面的實習裡, 你會發現在迴圈之前進度會比課程稍微快一些 (上圖中虛線), 有些在課程沒有講到的東西都直接叫你上機嘗試, 反正有電腦可以直接測試看看語法會有什麼效果, 錯了也可以直接看到, 直接尋找更正的方法, 直接和老師、助教以及同學討論, 目的是希望你能夠稍微走快一點, 自己稍微把學習的觸角伸展出去, 不要太小看這個課程的內容, 才能在開始談到迴圈時不會有那麼大的震撼; 另外一個目的是希望你調整一下學習方法, 也許以前的學習經驗裡, 你發現最省力的方法是讓老師把所有 "需要學" 的東西整理清楚, 講清楚, 然後你只需要練習題目就好了, 這個學習方法是 "應付考試" 用的, 慢慢的你會發現你需要培養自己由資料裡吸收知識的能力, 自己需要定義什麼是需要學的知識, 事實上在科技快速發展的領域中 「新的知識」, 「有用的知識」可能都沒有人能幫你整理, 整理好的知識應該都過時了, 常常也沒有價值了, 你需要從這個時候就慢慢建立起自覺性的學習方法... 另外你的程式寫得對或是不對? 要看機器執行出來的結果對或是不對而定, 不是書本或是我或是助教說對就對了, 你在這門課程裡學習的是如何深度地配合電腦, 運用電腦, 如果電腦不聽你使喚, 只是你和電腦間有一些誤會, 你不需要把電腦當成敵人, 整個過程裡它也就是一切聽你的 "話" 而已, 機器很死板, 不會去判斷你的命令是不是好的, 是不是能完成你的目標, 也不會修改你的命令, 很多時候會發生錯誤只是因為你以為機器執行某一命令的效果和機器實際執行的結果不一致而已, 不是電腦在為難你, 重點不在於「你心裡想要它怎樣做」, 而在於「你告訴他怎樣做」, 這兩者有差距的時候, 就要麻煩你多花一些時間練習, 仔細觀察, 仔細校正, 慢慢地你就能夠讓電腦一個指令一個動作地乖乖聽話。 學習程式設計的過程中, 你需要逐步建立起計算機的運算模型, 很多時候也會需要應用你在計算機概論課程或是離散數學課程裡學習到的知識, 這是進入資訊工程領域中很辛苦但是非常重要的一個階段, 也許你會遇到一些本系或是外系的學長告訴你這些不要急, 你的工作生涯還有 40 年, 以後慢慢學就好了, 或是進到職場再學就好了, 學校學的都沒有用, 也告訴你大學生活只有四年, 不參加各種活動的話你的人生就浪費掉了..., 實際上呢, 各個系所的性質差異非常大, 甚至各個學校資訊系的差異也很大, 在我們系上你這個階段沒有學好, 系上大二以後的課程幾乎你都只能學裡面可以記憶的東西, 大概 30% 吧, 這 30% 大概也就是那些以後在職場裡不會用到的, 另外的 70% 呢? 因為你在這個階段沒有掌握好, 所以只能聽聽就算了, 畢業以後在資訊業界中你就很容易成為那個取代性很高的人, 你自己也不好意思跟別人說你很基礎的東西都不會, 所以連補救的機會應該是都沒有的, 於是同事們不斷地隨著技術的進步成長, 你只能尋找其它更好的機會了... 學習程式設計需要蠻多練習的, 這學期裡我們除了上課和實習以外, 也會在晚上排課輔的時間, 課輔時你可以練習上課看到或是課本上看到的任何題目, 可以練習實習的題目, 也可以練習一些線上程式評測系統 (Zero Judge, 建中的 TIOJ, 台中女中的程式解題系統, NOI, uVA online judge, Codeforce, POJ, SPOJ, URAL, HDU, NCPC 程式競賽) 上的題目, 遇見問題可以共同討論來尋求合理的作法與解釋, 對於資訊工程系的同學來說, 這不僅僅是課程而已, 每天思考程式、每天和同學討論程式並不丟臉, 表示你能夠掌握開發自己潛能的機會, 你需要不斷練習才能夠把程序性的思考變成你的習慣, 不能只是這學期期中和期末需要考試的一科而已, 這樣子對你以後接受資訊專業領域的知識才會有實質的幫助。 |
實習內容 | |
---|---|
第一週 109/09/16(三) |
|
第二週 109/09/23(三) |
|
第三週 109/09/30(三) |
|
第四週 109/10/07(三) | |
第五週 109/10/14(三) |
|
第六週 109/10/21(三) | |
第七週 109/10/28(三) |
|
第八週 109/11/04(三) |
|
第九週 109/11/11(三) | 期中上機考 13:10-16:00 (INS203/INS201) |
第十週 109/11/18(三) | |
第十一週 109/11/25(三) |
|
第十二週 109/12/02(三) | |
第十三週 109/12/09(三) | |
第十四週 109/12/16(三) | |
第十五週 109/12/23(三) | 遞迴撰寫二分搜尋 |
第十六週 109/12/30(三) | 遞迴 DFS 撰寫迷宮搜尋 |
第十七週 110/01/06(三) | 踩地雷
(bw) (exe1,
exe2, exe3,
exe4(msvc100d_dlls.zip),
exe5,
winmine_xp)
1091 教學評鑑: http://ais.ntou.edu.tw/(教學務系統/教務系統/課程評鑑/填寫問卷) 1091 工程認證課程評鑑: http://www.cs.ntou.edu.tw/questionnaire/login.php 填入學號以及密碼(密碼若未修改則為身分證字號,英文字母大寫) 一個學期很快就要結束了, 這個學期裡很多同學辛苦地調整過去所建立的學習方式, 過去的各種科目都有考試作為目標, 一方面也作為課程內容的界限, 超過考試範圍的都不需要花腦筋, 不會也就算了, 考試前來不及會的, 考試後當然也就算了, 從這個課程開始你需要發現不是這樣的了, 未來的各種課程都需要應用你在這個課程裡學到的基本方法, 你不能邊學邊就把它忘了, 更不能考完試就把它徹底忘了, 在這同時, 你也需要提升自己的學習能力, 這比起成績來說更有價值, 寒假裡其實老師是沒有放假的, 如果你覺得你想要在假期裡加強一些什麼, 歡迎你和我討論, 遇見問題當然也歡迎你來討論, 有的時候自己一個人進行很多事都會遇見莫名的阻力, 如果有人可以討論的話情況就完全不一樣了, 你可以拿這學期沒有做出來的繼續練習, 也可以去看 CPE 或是 UVa 的線上題目作為練習, 有一些參考書籍是為這些設計的, 需要的話告訴我, 如果幾個同學一起有興趣的話, 也可以幫你們講一些需要的資料結構和演算法, 如果你對於物件導向程式或是介面程式有興趣, 也可以來討論這些, 如果你對於物聯網以及一些網路裝置有興趣, 同樣歡迎你來討論, 如果你對於深度學習和機器學習有興趣, 也可以一同來學一些新的東西, 做一些有趣的應用, 最後, 如果你對於密碼學, 資訊安全有興趣, 更歡迎你加入我們的研究。 在接下來的資料結構, 組合語言, 演算法課程裡, 如果你覺得我可能對你會有幫助, 直接告訴我, 跟我約時間聊一聊, 試看看我們這個課程能不能變成一種保證班的概念, 也許你覺得這學期上課好像睡得挺好, 沒有學得很好, 擔心我會不太理你, 或是覺得實習或是課輔的時候很少幫你看程式, 不如說掰掰了吧! 其實你想多了, 我相信很多同學在這個學期裡, 因為學習環境的變化, 生活環境的變化, 還沒有投注太多的精力去學習, 或是覺得投入的力氣好像沒有相對的成果, 相信你慢慢熟悉以後, 決定到底自己要什麼以後, 自然能夠有自己能夠滿意的表現, 當老師其實最辛苦的就是要等候了....相信你想要會的時候, 你的學習一定會有突破的, 以往有很多學長在幾年的學習失敗以後, 仔細想想就會發現其實關鍵在於遇見問題都沒有人可以討論, 每一個課程的時間都很短, 還來不及進入狀況就結束了, 真的發現問題時課程已經結束了, 表現又不怎麼樣, 就不好意思去找上過課的老師問了. 最後常常以失敗收場, 不要再像國高中的時候以為自己唸就夠了, 你的目標不是在應付考試 - 應付那些數十年不變的知識上衍生出來莫名其妙的考題, 你以為資訊領域的東西都像國高中學的東西一樣不會進步了嗎? (就在你讀這些文字的時後, 也許又推出 100 種新產品了), 你覺得自己唸就能夠跟上時代的進步了? 那就太小看在這個領域上全世界的工程師所投注的心力了, 你在學校裡真的需要學到的是如何和別人互動, 如何基於別人幫你整理出來的東西快速地學到所有基礎, 才能夠把心力投注在科技尖端的挑戰, 才能夠扮演好承先啟後的角色, 希望你們在接下來的時間裡能夠建立成功的學習經驗......過去幾年一直有學長會持續和我討論, 這讓我對其他老師的課程和作業都有點熟悉了, 不過相信他們所花的時間也都有相當的收穫 (換個人談談, 常常就是容易讓自己的想法有突破的, 這種突破的價值比起找個人教你要大得多了 )。 |
第十八週 110/01/13(三) | 上機考 13:10-16:00 (INS203/INS201) |
一些沒有來得及做的練習
|
回
程式設計課程 首頁 製作日期: 08/31/2020 by 丁培毅 (Pei-yih Ting) E-mail: [email protected] TEL: 02 24622192x6615 海洋大學 電機資訊學院 資訊工程學系 Lagoon |