In response to ShadowNode:

C assumes you know what you are doing. If you do not, go back to Pascal or Basic and learn how to program.

Nope. C assumes that you won't make mistakes, and everybody makes mistakes. Assuming you don't is pure hubris that will bite you severely, for even the most godly hacker will still have to go through debugging.

Garbage collectors are for lazy programmers.

Garbage collectors spare you the work of manually freeing memory. But I suppose masochists dislike them...

C give you basic, flexable data types. If you want something more complex, build it.

Yeah, were would we be if we could save time by not having to reinvent the wheel all the time? A better answer would be: use any of the widespread, free libraries that provide advanced data types.

C is weakly typed. Another Good Thing(TM). Data is data, I should be able to do with it what I like. A programming language should not get in the way, if it does, it's little more than a toy, as Pascal is.

Again, see the first point. Weak typing increases the likelihood of fatal and hard-to-find bugs, and it's quite possible to retain flexibility with strong typing by using explicit casting.

Good programmers should be able to optimize better than a compiler.

Flat-out wrong. Good optimization requires intimate knowledge of processor details, and that's not something a programmer should have to worry about. Furthermore, if you put such optimizations in the source, you make it less portable.