I have to comment on starting with C. Although I do get your point that starting with its horror will help you move on once its mastered, I do feel however that C tends to scare newbies away and give them unnecessary headaches. Just take a look at a simple Hello World program :
#include <stdio.h>
int main (int argc, char* argv)
{
printf("Hello World");
return 0;
}
Basically, the first piece of code a new student will see would include concepts such as preprocessors, macros, functions (int main), return values, ... And the first scanf will include pointers and references.(Most teachers
omit talking about them on a first course ... why the hell did they chose C then?).
Take a look at Python's Hello World :
print "Hello, World!"
That's it. Such an easy syntax would help teachers and students focusing more on the basic algorithmic points while still giving the actual code to play with. From this point, I'd always prefer starting with a high-level language than the
almost-high-level C.
I always felt that C/C++ (especially C), shouldn't be taught to everyone. Do programmers really need all this? Most people are into developing user-interactive high end applications (how else would you explain .NET's success?). I think you could get around while knowing only Java (think of JEE) or any other high-level language. The popularity of C in academic fields (as it is still the most widely taught language), will always puzzle me.
Now for those of you about to tell me about "C's almighty power" and how it's more efficient than other high level languages and stuff, I'll just say that the only real time I use C is when I try to compile the kernel; the rest of the time Pyton and bash (I love bash! ) are more than enough for me.
In my opinion, the first programming language should vary whether you want to be a kernel hacker, a desktop application developer, a compiler coder, or a web developer (who needs C when you have php, right?). It's about choice and variety so why do unis almost invariably start with a Java/C/C++?
I remember that back when I was at ESIB, they taught us procedural programming on a C++ compiler as a starting language (for two years !). So yeah my experience was completely twisted, (took me years to get rid of those stupid reflexes) and I think how to introduce programming is a key choice for coding teachers.
Anyways, this is just my humble opinion, just following on the last comment by xterm. I'm sorry if I'm sometimes a little aggressive, but I'm kinda going through a anti-C phase.