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


Your points about the role instructional technique plays are well-taken, but you're preaching to the choir. I have been an educator for twice as long as I've been a programmer, and ALL my curricula have a starting point at what interests the student most and applies directly to their everyday life.

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