看板 EE_DSnP 關於我們 聯絡資訊
每年 DSnP 在度過冗長的 Linux introduction 之後, 就開始要上為期三至四週 (有時不小心更長) 的 C++ review。 每次要上 C++ review 之前,我心裡都會有點掙扎, 畢竟大家對 C++ 的認識程度實在是差異頗大, 講得太快,恐怕會有許多人吸收不良;講得太慢,對許多人又會覺得很冗。 要在短時間內教完 C++ 實在是不容易, 但更困擾的是要跟作業的進度配合實在是有點困難。 理想上最好是教完之後再出作業,讓大家練習, 但是這樣的話第一次作業恐怕會拖到第五六週才能出, 這樣後面的作業就會來不及了。 所以我後來決定先出作業,像是今天出的作業 1.2, 兩個程式小題內容包含了 "(copy) constructor", "call-by-reference", "return-by-object", "memory allocation/deletion", "functional object", "template", "inheritence" 等等議題, 這些可能要在未來兩三周才教得完, 我相信一定會有人會抱怨怎麼出還沒教的東西, 或者是覺得自己這樣摸索很浪費時間。 但是我想要跟大家溝通一下觀念: 我常常將學寫程式比喻成學游泳, 一方面是像學游泳一樣,光聽教練說怎麼游是沒有用的, 要多多練習才會有進步,而且是練習過了再來聽教練的話才更能體會; 另一方面是說,學游泳不像是學一些學科知識,一旦一陣子沒摸就忘光光了, 相反的,你一旦學會游泳之後,如果有一陣子沒有再游, 你只會忘記當初教練是怎麼教你的,但是你不會忘記的是怎麼去游的感覺, 也就是說當你再度下水之後,你會自然而然的 pick up 游泳的技巧。 所以重點是大家一定要動手寫一寫才會有感覺, 既然大家都修過計程了,上面講的那些 topics 大家以前應該都學過, 所以讓大家直接先寫作業,好處是大家可以 pick up 一下過去所學的東西, 抓到一些過去學 C++ 的概念,然後可以將不懂的地方稍微先預習一下, 順便回憶一下基本的語法, 這樣當我上課在深入講解的時候,大家就會比較有感覺, 然後接下來更難的作業出現的時候才能比較得心應手。 不過,我想在今天有點匆忙的教過 pointer 之後,一定有人會想問: 幹嘛學那麼多,像是一個 pointer,幹嘛將它與 [] 或是 &, ** 混在一起, 往後看,還有一大堆甚麼 const, static, 各種 constructors, 還有一堆當初計程很快飛過去的 polymorphism, template, operator overload 等等, 這樣不是自找麻煩嗎?我以後寫程式真的會用到嗎? 我只能說: 會的,如果你想寫一些比較大型,比較複雜的程式的話,你會需要它們的。 雖然我相信寫大型程式也可以不要用這些東西, 但是到時候你就會知道,面對一個亂七八糟的大型程式會有多痛苦。 就像是如果你的英文程度只會講一些 baby english,用一些 baby 用字或是文法, 那麼要你用英文來寫一個專業的文章你會寫得很痛苦, 而且看得人會更痛苦,完全無法抓到你的邏輯。 (研究生應該會會心微笑吧?) 當然,寫文章之於寫程式並不是一個完全貼切的類比, 但是我想表達的是,有了這些看似繁瑣,但是卻各有它的意義的語法, 你把他們學起來之後就像是多了許多的武器, 在你以後寫程式的時候你就會慢慢的了解他們的用處了。 所以,請你給你自己一些時間去慢慢消化上課的內容, 請務必提起精神來了解一下講義上所說的那些觀念, 請馬上開始寫作業,不要等到 deadline 之前。 我可以跟大家保證, 只要你有付出心血好好寫作業, 一定能讓自己跟 C++ 變得很熟, 等將來有一天你需要自行開發一個較具規模的程式的時候, 你就會真的了解當初為什麼要學這些了。 --- 忽然有感而發的寫了一堆,應該是直接被 end 吧? 那麼多人來修課實在是很難讓大家體會該如何來面對 DSnP 才是真正會有收穫的態度, 也很難照顧到一些可能會適應不良的同學。 我想我能做的大概就是不要急,按照正常的步伐來講課, 確定大家的作業都能好好地做完... 或者是明年來個限 80 人修課好了... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.11.13
LiHuN:推 我真的覺得學到很多後來很受用的東西 雖然當初滿混的.. 10/07 03:42
LiHuN:但即使只學到50%的內容也是滿懷慶幸了 哈哈 10/07 03:43
dryman:那些真的是很重要的觀念啊!! 10/07 07:35
angelicdream:真的很重要!! 10/10 16:01