Scott M. Anderson on 13 Sep 2003 15:16:41 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: [ALACPP] Advice for a teacher, please |
Having begun learning C++ 8 years ago, and then Java 4 years ago when I went back to complete my BS, I found Java to be the superior instructional language for introductory programming. The syntax is nearly identical , you can introduce concepts of OOD, use of libraries, etc. in a more streamlined fashion than leaping straight into C++. Although I did not learn the languages in this order, I imagine that someone with a decent grounding in Java would have no difficulty expanding their scope into the greater complexities and resources in C++. In fact, I believe that is the ultimate destiny of Java, to be the introductory OO instructional language of choice until the programming environment changes drastically again.
I would want to give them as much C as they would need to make the most out of C++, but it does not strike me that it needs exhaustive study. Again, I learned C++ without any C, so my perspective may be a little skewed. In my mind, Those who wish to emphasize the fact that when you program "x" in C++, you are really doing "y" and "z" in C are forgetting, IMO, the fact that you're REALLY doing "n", "o", "p" and "q" in Assembly and Machine. I just don't feel the "C++ lives on top of C" aspect needs that much emphasis, but, not being grounded in C without the ++, I'm perfectly willing to concede that I may be completely full of it on this point.
If we planned on getting deep into rewriting the UNIX OS, I could see an exhaustive year in C (which, by the way, is about 3-4 times as much class time as my University wished us to have in this language), but since we don't get into OS programming at our school, I don't see the point. I'd give them enough C toward the end of the first year of C++ to drive home whatever points about C++ were really necessary, along with enough to get them using the OpenGL API and do some fun graphics, but that's it. Less than a semester, tops.
Thoughts? Josh Dybnis wrote:
It's impressive that the school has set up a multi-year curriculum. It sounds like the problem is that most students don't make it past the first year. Now I don't have enough information to know why that is, I would guess that the students are not having much fun. It could be because the way it's taught (the right teacher can make sex education into a boring class for high-school students), but I think your gut feeling is right. Doing a year of C is probably killing their enthusiasm. Kids are motivated by results, and C is so low-level that it takes too much work to get results they will recognize. Give them something they can have fun learning. Find out what they use their computers at home for. Then find the programming tool that makes it easiest to build the kind of software they use. If they all do file sharing, teach them Java and have them build their own file-sharing system. If they play games, teach them a graphics framework like SDL with Python and have them build a game. If all they use on their computers is MS Office, for doing their homework (not too likely, but...), then have them build a word processor. If your students are motivated to spend two years programming, they will have no problem at all picking up everything for the AP in their senior year. Now I'm going to take the position of defending the C class. There are some basic concepts students should get down which apply to both C and C++. Like how the stack works, the difference between stack and heap, pointers, and others. These are hard concepts to get, and there is nothing in C++ that makes them any easier, but there is plenty in C++ that will muddy things. Doing C first and then C++ gives students a chance to see these fundamental concepts in a simpler context first. A big side benefit of doing C then C++ is that it gives them the opportunity to understand a high level system (C++) by mentally translating it into a lower level system (C). C++/C is not the only way to do this. It could be any high-level/low-level combination: C/assembly, Basic/C++, lisp/lisp (but I digress), etc. If they miss out on this, they will be missing out on the big picture in computers and a practical skill. -Josh Dybnis
_______________________________________________ alacpp mailing list alacpp@xxxxxxxxxxx http://lists.ellipsis.cx/mailman/listinfo/alacpp