I did not learn C first, I learned BASIC first. Then I learned Pascal because C was "too hard" as a beginner language. All my intro classes in college used Pascal because it was a "good beginner language." I first learned C in a half-assed, self-taught sort of way and the experience was painful. I hated using C in my last few years of college. I didn't understand it properly because I hadn't chosen good books to learn from and hadn't had any good teachers. I was stuck thinking in Pascal/Basic terms and because I didn't understand some key fundamentals of C. I didn't even really understand the difference between C and C++.

But C is still a _good_ first language. And I don't mean "good enough" I mean that it has specific advantages and advantages relative to other languages including Python.

C is a small, mostly consistent language. So is Python (I'm certainly not saying Python is not a good beginner language), but C is smaller.

C compiles directly to machine code. There is a very clear, exposed path from C code, to binary code on the disk, to a process loaded into memory by the operating system and executed by the machine itself. These steps allow the beginner to see and practice the process that transforms a text file into an end-user application. Python caches a bytecode file without the user knowing, then executes that bytecode in its own environment that has abstracted most of the underlying machine.

C exposes the user to the underlying machine. Beginners don't need to be shielded from buffer overruns and manual memory management. In fact going for too long without introducing those topics practically ensures the programmer will never be good at it no matter what language they use. And it's not just memory management.

For a simple example of the ways C can be worthwhile to a beginner:

Learning how to use #includes is hard in C because it requires some understanding of the operating system, the compiler, and what software interfaces are.

If you don't know what '#include "goladus.h"' means, the extent it is related (or more importantly, not related) to "goladus.c", it means you probably have some fundamental misunderstanding about how the source is compiled and linked, and where the compiler looks for the particular files. Correcting that misunderstanding will result in big knowledge and conceptual gains. You see how the OS works with the software you write. You see how to reuse code and probably have some understanding of how it works at a binary level. OS knowledge will be valuable for anything else you use that OS for. The abstract code reuse concepts apply to most languages. The C-specific knowledge can be applied whenever a higher-level language like Python is capable of C extensions, and is also applicable to other operating systems.

In python, when you say "import goladus.post" it's easy and it works but it's basically magic if you don't understand the python module system. Understanding the python module system is worthwhile, but is fairly python-specific. Why doesn't 'import goladus.post.py' work? Or 'import "goladus/post.py"' Figuring that out isn't all that hard, but also doesn't give you any greater understanding about anything but Python's import syntax.