Comment Teaching Experience (Score 1) 913
I am currently teaching a Java course. It is at a community college. The faculty considered Visual Basic to be a prerequisite (apparently, VB has some very limited OO support, although I personally have no expertise in VB). The worst part about this is that a VB programmer can write most basic toy programs by drawing them on the screen. And getting them out of that nice pre-digested world can be quite frustrating.
I really think the students should learn C as a first language. Teaching the syntax plus all the oo stuff is just too difficult (especially in a six week summer course). I would rather have had more time to concentrate on the syntax, and what is going on behind it, than trying to wrap inheritance, polymorphism and runtime binding in with it as well.
What I would really like to do is teach a C course where the last portion of the course talks about OO design in C. Once you've done inheritance in C, and the student understands how difficult it is just to support a simple single chain of inhertitance, then they can appreciate what the C++ and Java language bring to the table, plus they can understand why C++ tries so hard to work with MI whereas Java eschews it.
A real big problem I have with teaching Java as a first language is that the user gets no direct experience with the common data structures. Try asking the linked list loop interview quetion to someone who's never had to implement a linked list. Heck, the Java book I'm using talks about writing network code and windowed applications before even discussing a data type more complicated than an array!
As for assembly language, I learned it before C, but consider this to be optional. I think you can really get some great ideas about how the machine works by deconstructing C code and seeing how the compiler turns C into assembly. This is probably just my predisposition towards embedded development talking!
I really think the students should learn C as a first language. Teaching the syntax plus all the oo stuff is just too difficult (especially in a six week summer course). I would rather have had more time to concentrate on the syntax, and what is going on behind it, than trying to wrap inheritance, polymorphism and runtime binding in with it as well.
What I would really like to do is teach a C course where the last portion of the course talks about OO design in C. Once you've done inheritance in C, and the student understands how difficult it is just to support a simple single chain of inhertitance, then they can appreciate what the C++ and Java language bring to the table, plus they can understand why C++ tries so hard to work with MI whereas Java eschews it.
A real big problem I have with teaching Java as a first language is that the user gets no direct experience with the common data structures. Try asking the linked list loop interview quetion to someone who's never had to implement a linked list. Heck, the Java book I'm using talks about writing network code and windowed applications before even discussing a data type more complicated than an array!
As for assembly language, I learned it before C, but consider this to be optional. I think you can really get some great ideas about how the machine works by deconstructing C code and seeing how the compiler turns C into assembly. This is probably just my predisposition towards embedded development talking!