Personally, I think 6.170 should be in C, or at least start in C, because you can't really teach the fundamentals of what is going on with OOP in a language which handles all of the fundamentals for you, and OOP in Scheme isn't the same (since Scheme doesn't have any static typing, so method tables don't make sense). Since Java (or CLU) takes care of implementing inheritance and interfaces, it's hard for someone who knows only Java to pick up C (to the extent of being able to do complex programs), because they don't know how Java does the things they rely on.
I'd also be pleased if the courses using microcontrollers switched to using gcc to compile C for avr, because it's completely standard C (with an obviously limited standard library).
Aside from that, the main part of learning new languages is really finding out their weird quirks: syntax errors can't be detected until they're reached, because symbols can be added to scopes at any time; NULL isn't equal to itself; allocating a new object is faster on the whole than modifying and reusing an old object; you need to escape things an implausible number of times.
Of course, the languages I've been asked to know for jobs are: C++ (back when C++ was a completely different language from what it is now), Scheme, Java, Haskell (which I didn't know), C (bit of C++, but not using any significant language features), Java again, C for microcontrollers and otherwise, and Java again. So my impression of real languages is Java, C, and maybe Scheme and Haskell.
no subject
Date: 2006-03-28 07:17 am (UTC)I'd also be pleased if the courses using microcontrollers switched to using gcc to compile C for avr, because it's completely standard C (with an obviously limited standard library).
Aside from that, the main part of learning new languages is really finding out their weird quirks: syntax errors can't be detected until they're reached, because symbols can be added to scopes at any time; NULL isn't equal to itself; allocating a new object is faster on the whole than modifying and reusing an old object; you need to escape things an implausible number of times.
Of course, the languages I've been asked to know for jobs are: C++ (back when C++ was a completely different language from what it is now), Scheme, Java, Haskell (which I didn't know), C (bit of C++, but not using any significant language features), Java again, C for microcontrollers and otherwise, and Java again. So my impression of real languages is Java, C, and maybe Scheme and Haskell.