作者ric2k1 (Ric)
看板EE_DSnP
標題[心得] 寫在教 C++ review 之前
時間Thu Oct 7 00:57:06 2010
每年 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
1F:推 LiHuN:推 我真的覺得學到很多後來很受用的東西 雖然當初滿混的.. 10/07 03:42
2F:→ LiHuN:但即使只學到50%的內容也是滿懷慶幸了 哈哈 10/07 03:43
3F:推 dryman:那些真的是很重要的觀念啊!! 10/07 07:35
4F:推 angelicdream:真的很重要!! 10/10 16:01