作者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