We could probably debate forever which programming language is best to learn first — it could depend on your goals and other considerations. Mac developer Evan Miller, however, makes a strong case for learning C first, likening it to learning to drive a manual car rather than an automatic.
Photo by dullhunk
As Miller puts it:
Python is convenient, and in many ways, a great advance over the C programming language. However, just as teaching teenagers to drive automatic transmission is a practical guarantee that they will never learn stick, advising neophytes to learn Python is creating programmers who will never bother to learn how to code in C. And that, I believe, is a bad thing.
He writes that knowing C is definitely not a requirement for a productive career in software, but that learning a language like Python isn't challenging enough for the kinds of people who might become the best programmers — those who would dig deeper and figure out how computers work:
C forces you to build a mental model of what the computer is actually doing when you run your programs, much like a teenager figuring out how the gear mechanism works by playing around with the clutch. As you ask why and keep digging for answers, your mental model will grow to encompass the process model, the CPU architecture, the memory hierarchy, the operating system, and so forth. It's that mental model — rather than the C language itself — that will enable you to poke through the abstractions created by others, and write programs you never thought possible.
Just some food for thought. (Harvard's CS50, by the way, starts with C, and it is a head-banging yet great experience.)
You Can't Dig Upwards [Evan Miller]