I really enjoy writing C. It’s not without it’s faults, but writing C feels like a “return to basics” sort of thing, where you forget all of the complexity in modern language, and you just focus on telling the computer what to do, and I love that.
But I also think C isn’t really a good first language. The reason I think that is because when learning programming, it’s more important to understand how to think it terms of programs first, rather than how to think in terms of a particular programming language. Things like control-flow, variables, data, functions, etc are universal truths, which are true for all language (well almost all of them). And these are a lot of things to learn.
When learning these, what you don’t need is to add more complexity you have to parse.
Take for example the most basic program in C,
#include <stdio.h>
int main() {
printf("Hello World");
return 0;
}
For most people who come to C, this is the first piece of code that they see. Unfortunately this bit of code raises more questions than it answers. Most people end up asking the same question “what’s an include?” “what’s main?” “why are we returning 0?”, and so on.
Compare that to the most basic program in python
print("Hello World")
Which is for a beginner, wildly less complex. It still leaves a some questions for a beginner (“What are we printing exactly?”), but it’s a lot easier to answer 1 question, rather than 10, most of which don’t really have a beginner friendly answer at all.
I can understand why a lot of people are very attached to the first language they learn. For a large majority of them it’s usually C. Those that end up loving the language, tend to forget what they struggled with when they initially started their learning journey, and I think we can do better than that.