| Jon Stewart on 15 Sep 2003 16:16:42 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [ALACPP] Advice for a teacher, please |
> We are about to enter discussions for curriculum changes, and my gut
> feeling is that the C class should go, with a little bit of C being
> incorporated into one of the other courses. It's 45 minutes a day, five
> days a week, for a full 10 months. My opinion is that this is entirely
> too much C for a curriculum in which the students are destined to move
> away from it. One thing on my side is that most of the students who took
> the C course last year (before I started working there) did not sign up
> for the more advanced course, but I would like more.
>
> I personally learned C++ from the get-go about 8 years ago when I began
> to study object-oriented programming, picking up some C along the way
> over the years, and I feel fine about it.
>
> However, I think I probably have the least industry experience of anyone
> on this list, so I'd like your expert input:
>
> How much C do you really need to get the most out of C++?
A moderate amount -- a very common usage of C++, and kind of what the
language is best used for, is to write a library in C++ and then create a
C wrapper API for it. You need to know some C to create that wrapper.
To respond to the more expansive topic, I think the most important
fundamentals of CS/Programming are perhaps given the least amount of
attention:
* Programming is fun.
* Programs should be elegant, simple, natural, neither clever nor
brute-force stupid. A well-written program reflects a well-organized
solution to a problem; "programming is understanding."
* Self-reliance, fearlessness, and determination are virtues.
While learning how a program stack works and how memory is arranged are
useful, they shouldn't be the focus of an elementary class -- they're
details when compared to the large problem of expressing a program
precisely and accurately in a formal language. So, I wouldn't teach an
intro class in C. I think I'd teach an intro class in Java, mostly. First,
because Java provides a pretty standardized environment (fewer accidental
details to worry about), second, the libraries let you build "real"
programs that can serve as motivation for students, third, Java's name
recognition and perceived utility also provides motivation, finally, while
it may lack some more advanced techniques for code re-use and flexibility,
Java does allow for elegant programs (as long as you avoid "web-apps" that
involve writing formatted i/o all over the place...).
I'd think the thing to do right off the bat is to take a simple Java
application, with windows and menus and the mouse, etc., and have them
modify it, just a tiny bit. From there, you can start to drill down and
present new material in a comfortable environment. From the beginning,
they get to see that they can produce a "real" program (which I for too
long considered a daunting task when I was learning CS). In addition, I
think it's useful to have a few assignments later on where the problem is
perhaps best solved by judicious use of the class libraries. Give them
some pointers to the class lib docs, show a few usages, and turn them
loose. I don't think you'll get full utilization of the library as the
result, but it'll encourage them to learn how to read documentation and
think for themselves ("how can I apply these tools to lessen my effort?").
Perhaps finally, I'd take some time out from Java every once in a while to
work in a different language. Perhaps use a functional language when
exploring recursion. A tangent in first order logic can be explored simply
in Prolog. String manipulation calls for regular expressions, and Perl, or
maybe Python, can help you out there. The goal isn't to teach them
proficiency in these languages, not at all, and I'd given them example
programs as a starting point and only discuss those language features
which they'd need. The goal is teaching them self-reliance and
fearlessness; "yes, this is different, but you can do it."
The second and third years could remain largely unchanged, C++, with an
emphasis on OO and various techniques. It would also be useful, I'd think,
to have them wrap their C++ with C and/or Python APIs. Having them use a
database in a program would also be a useful skill. And, of course, C++
can really excel at the traditional data structures topics, which are
often the focus of a second or third programming course.
My $.02.
Jon
--
Jon Stewart Advanced Los Angeles C++
stew1@xxxxxxxxxxx http://www.alacpp.org
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp