One thing C does is force you to think about how the computer actually uses memory.  So many languages abstract away the memory management and you end up with stuff like java programs that constantly and aggressively thrash the hell out of the processor cache by creating and (later) destroying objects for everything they do.  Cache misses are one of the biggest performance killers on modern CPUs.  You also see programmers do stuff like add characters to a string one at a time, even though each addition creates a whole new string and discards the old one.<p>If you do stuff like that a lot you can easily end up wondering why your program is so slow even though the profiler says that there are no standout slow parts.  Everything is just uniformly slow because their coding style doesn&#x27;t consider the amount of work each statement maps to at the machine level.