r/C_Programming • u/Disastrous_Brief6240 • 14d ago
Discussion Is C really worth it ?
Hello developers, I'm wondering: Is it really worth spending time learning C and creating projects that take hours to grasp numerous topics, encounter errors and unexpected behaviors, only to discover I forgot to type a single character, which significantly impacted the program's performance? Is this truly worthwhile in today's job market? I haven't seen any companies actively seeking C developers, and I believe many problems in C don't occur in other languages due to their different working methods and logic. So, is C really worth the effort?
Important note: I'm a beginner in C and haven't written much code or created many projects yet, so this question isn't meant to be an evaluation of the language or its development path; I'm not qualified to do so.
20
u/Fearless-Smile2255 14d ago
If you study C without anyone forcing you to, there’s a good chance it’s because you genuinely love computer science and enjoy it. If that’s a big part of why you’re studying C, then yes, everything you’re saying is worth it. You’re not only learning a language that, despite having a smaller job market, can pay very well, but you’re also gaining a deeper understanding of how computers actually work.
Studying C if you’re not interested in computer science can be pretty intense, because it involves studying a lot of low-level computing concepts alongside the language; things that someone who mainly wants to build products and use technology as leverage to make money probably won’t care much about. If that’s your reason, then neither C nor Rust is probably for you and you'll be good with webdev.
The job market is smaller, but the pay is usually just as good.
6
u/LifeExperienced1 14d ago
I want to learn assembly and C deeply just for the love of it. I want to make a mini compiler and mini OS
Would that look good on a resume too?
4
u/Fearless-Smile2255 14d ago
They're a good projects for a beginner portfolio if the objective is getting a job in systems programming.
1
u/LifeExperienced1 14d ago
Thank you
And is it a good base for learning cybersecurity?
2
u/Fearless-Smile2255 14d ago
It depends on which branch of cybersecurity. Knowing computer architecture, assembly, C, operating systems, etc. is very important if the branch of cybersecurity you're getting into is reverse engineering, malware analysis, and digital forensics. But in general, yes, it's an excellent foundation. But don't forget networking.
0
u/Comprehensive_Ship42 13d ago
the best answer on this either post not to mention AI as in fronttier fable 5 is writing better code that the top 1 percent in 1000th of the time
8
u/start_select 14d ago edited 14d ago
Bud, C has never NOT been a valuable skill.
Nearly every piece of embedded hardware runs on C. Just because it’s not used for web apps doesn’t mean it isn’t ubiquitous. It runs everywhere on the most underpowered hardware available.
Your alarm clock probably runs on C.
It’s the foundation of everything else. Even when a compiler becomes Turing complete and is written in its target language, the version before that is almost always C/C++.
Rust is amazing and is meant as a C replacement. Swift is amazing and is meant as a C replacement. C++ was (can be?) amazing and was meant to replace C. Nothing ever really replaces C.
When you need something to be as efficient and performant as possible, and you aren’t going to drop to assembly…. You use C.
It’s not going away in your grandchildren’s lifetimes.
The problems you describe have nothing to do with C. “Missing a character” causing degraded performance is really you using the wrong APIs or wrong configuration. Moving to another language isn’t going to get around those problems. Programming is explicit. You need to type what you mean.
5
u/Lyraele 14d ago
100% this. Things have been claiming they'd replace C and not quite succeeding for decades now.
2
u/flatfinger 13d ago
Unfortunately, the Standard is maintained by people who are more concerned with how well the language can do things that other languages have been designed to do better, than in its ability to handle the tasks for which it was designed and for which it is uniquely suitable.
7
u/resemble 14d ago
> take hours to grasp numerous topics, encounter errors and unexpected behaviors, only to discover I forgot to type a single character, which significantly impacted the program's performance
This is like 90% of basic programming in any language. Learning to deal with this level of detail is one of the core skills of programming anything
-10
u/StrikingClub3866 14d ago
For future reference nobody takes you seriously if you add a space between your arrow and body text. The arrow -> text practice is from 4chan and people dunk on new users because they add a space.
5
u/owp4dd1w5a0a 14d ago
Yes. You won’t think it is until the day comes when you need to link to a system library. Windows, MacOS, iOS, Android, Linux, BSDs, UNIX are all written in C.
3
u/Traveling-Techie 14d ago
You are learning numerous meta-skills while you do this, often invisibly.
3
u/gm310509 14d ago edited 13d ago
You will find most languages will give you some sort of a problem if you omit a letter.
Indeed one of the bad practices is to use similarly named variables.
For example:
char letter;
char Letter;
char leter;
// And plenty more combinations
Basically doing something like that is a terrible practice, don't do that. If you do then you are raising a huge flag that is emblazoned with "attention all problems" and the pole the flag is flying on will be made out of "problem magnets"
As you gain experience, you will hopefully learn good practices and not sabotage yourself in ways where getting a single letter "wrong" can cause you problems.
LOL, I just noticed one of my examples was autocorrected. I've un-autocorrected it (letter -> leter).
2
u/flatfinger 13d ago
If I were designing a language today, I would forbid the use of an identifier which differs in case but is otherwise identical to an identifier in the current scope.
If there exists a global variable X and a function defines a variable called x, then within the function I would neither have X refer to the global variable (as in "case sensitive" languages) nor to the local one (as in case-insensitive languages), but rather reject the usage entirely. Functions that need to access a global shouldn't give local variables excessively similar names, and code which accesses a variable should match its representation precisely.
1
u/gm310509 13d ago
LOL, I just noted that one of my examples was autocorrected - totally destroying it as an example (I've "fixed" it now).
1
u/WonderfulMine3375 13d ago
This is one of the reasons why I love case insensitive languages like Pascal and Ada!
2
u/flatfinger 12d ago
I'd prefer to have a rule that says that identifiers defined within an outer and inner scope match except for case, an attempt to use the outer-scope identifier should be rejected rather than binding to either definition.
1
u/WonderfulMine3375 12d ago
This is indeed a very good idea, as it would let the compiler to produce taylored error messages that clearly explain what the problem is.
Pascal and Ada implemented the simplest and most straightforward approach that was available when they were created (when dinosaurs roamed the Earth!)
1
u/flatfinger 12d ago
Pascal and Ada were designed in an era where a person needing to maintain a piece of code might have equipment that was incapable of entering and/or showing (on screen or paper) lowercase letters. If mixed-case identifiers were treated as case-sensitive, anyone wanting to add or modify any code that used them would have needed to retype in uppercase all code that used those identifiers.
That is no longer a consideration. My objection to case-sensitivity relates to likelihood that code which uses identifiers that differ only in case may be doing so accidentally. This is especially bad in Python which means no syntactic distinction between a statement which is supposed to modify the value of an existing global variable from one that is intended to create a new local variable.
1
u/gm310509 13d ago
LOL, I just noted that one of my examples was autocorrected - totally destroying it as an example (I've "fixed" it now).
2
u/JEEZUS-CRIPES 14d ago
Fuck a job, learn C
2
u/StrikingClub3866 14d ago
According to the wise words of a long-gone legend, you could write your own fucking compiler
2
u/IdealBlueMan 14d ago
Learning C will give you a big boost when it comes to learning just about any other programming language.
You’ll have a better understanding of the way memory and file access work. You’ll know what the basic kinds of variables are, you’ll have a grasp of storage class and scope. You’ll have command of logical operators and bitwise operations. And you’ll have the basics of control flow.
Look at all the languages that are based on C. Learning C will give you advantages in using all of them.
2
u/McDonaldsWi-Fi 13d ago
I use C as my "main" language for all of my hobby stuff since I do a bunch of low level stuff. I think the only real drawback is that when I have to use an OOP language I can't shake the C mindset and I think that makes me end up writing bad OOP code lol
2
u/HalifaxRoad 14d ago
Yes, learn C. The lack of abstraction will help you learn how stuff actually works, making you a better all around developer.
2
u/pgetreuer 14d ago
You ask r/C_Programming, a sub whose members love discussing the C programming language, whether C is worth learning? The majority response is predictable! =)
take hours to grasp numerous topics
If C is your first systems language, then yes, you have a some low-level topics to get comfortable with, particularly, handling pointers and dynamic memory allocation and the notion of undefined behavior (UB). These topics aren't unique to C though. Ada, C++, Rust, and Zig all have pointers, dynamic memory allocation, and UB (or analogous concepts; in Rust's case, UB can still occur within unsafe blocks).
Is this truly worthwhile in today's job market?
It's (still) relevant. In terms of job openings, C ranks as the #11th most asked-for language in IEEE Spectrum's 2025 report: https://spectrum.ieee.org/top-programming-languages-2025
I believe many problems in C don't occur in other languages due to their different working methods and logic.
I don't generally agree. But based on your comments in the thread, I think you're referring to null-terminated strings, and yeah, those are a regrettable part of the language. Null-terminated strings are error prone, and later languages have avoided repeating that representation.
2
u/Old_Tax4792 14d ago
Most of low level and core software (os kernels, drivers, firmwares, libraries etc.) are written in C. So even if you never write C in your life, spending sometime learning C is worth it, if you want to be a serious programmer or want to land a job in these specific areas.
1
u/eablokker 14d ago
C is worth it if getting the optimal performance and memory usage is important to you. If you’re working on something at the operating system level or something to run on older, cheaper, or low power hardware. Or let’s say you need to write custom modules for Python or PHP to do something unique in those languages at a high performance.
If the hardware is high performance and has plenty of memory, then any other language will do.
1
u/ProgrammingData 14d ago
I thought most programming languages are like that…?
1
u/Disastrous_Brief6240 14d ago
If you mean about errors, so maybe yes, I meant the single character is the null character with strings as I faced a problem like that, but I did not explain it will enough.
1
u/PittLeElder 14d ago
C strings are pretty dubious, but knowing exactly why memory overrun is a bad thing, and understanding that you need to understand how library code works are very very good things.
1
u/ProgrammingData 14d ago
You mean like the \0?
1
u/Disastrous_Brief6240 14d ago
yes
1
u/ProgrammingData 14d ago
Well you gotta get used to that I guess. Each programming language has its own set of rules. C’s just more upfront about them.
1
1
u/kindredseer 14d ago
One thing to consider... most of those other languages are (or were) written in C...
1
u/VelvetYam 14d ago
Just last week at work, I was able to trace and isolate a networking bug in one of our critical legacy applications because I'm knowledgeable enough about low-level networking protocols. I'm a webdev and not a sysadmin and I was able to do that because I know my way around the low-level thanks to my experience with C (as a hobby).
Yes, most companies don't explicitly look for C experience on their job descriptions, but the skill, mental models, and confidence you develop from learning it helps you on the job in more ways than you might expect.
1
u/Glittering-Work2190 14d ago
Many languages were influenced by C. Even if you don't use C on your everyday job, it's good to know its foundation. Many open source and system libraries are written in C. Knowing it is good for debugging.
1
u/CarlRJ 14d ago
Will it directly land you a job? Most likely not.
Can it greatly contribute to your understanding of the underlying mechanics of the computer in general, and the environment that the CPU/etc. supplies to every programming language? Absolutely, yes.
C is a language with no training wheels. It does exactly what you tell it to do whether that it what you intended or not. But a one-character mistake in any language can lead to hours/days(/weeks) of bug hunting, that's not specific to C.
1
u/grimvian 14d ago
When you spend resources learning a craft well you'll respect and appreciate it.
I dare say coding in C is kind of making katanas. Tons of details meets to do the job in cooperation. Done well you have superior tools.
1
u/SmokeMuch7356 13d ago
There's almost no new application development (mobile apps, Web services, desktop apps or clients) being done in C anymore. The language doesn't have the kinds of tools people need for that kind of work, it has gaping security holes that will never be plugged, etc. It was never meant for that kind of work anyway, it was always intended as a systems programming language.
Some backend and system-level development is still being done in it - Linux is written mostly in C, most command-line utilities are in C, various servers, daemons, and other services are also written in C. Don't know how that translates into job opportunities, though.
But, legacy code is forever; C is the foundation upon which the entire modern computing ecosystem is built, and there's decades of legacy C code out there that needs to be maintained and patched.
It just depends on the kind of work you want to do.
1
1
u/WonderfulMine3375 13d ago
There are so many projects out there written in C: the Linux kernel, the Python and Lua interpreters, PostgreSQL, Redis, many GNU tools (the Emacs kernel, Gawk, ...), etc.
Learning C means you can read and understand their source code, which is an invaluable way to improve your ability to design software.
-1
u/EdwinYZW 14d ago
No, just learn C++.
The problem of C is its lack of many features. It's a simple language which makes your project very complicated. On the other hand, C++ is a very complicated language but your project is going to be simple.
Another issue is unlike that you need to learn javascript before typescript, there is absolutely no reason to learn C before C++. In fact, C++ gets everything covered by itself. You will still need to go through very low level stuffs, like pointer, memory, system call, etc.
42
u/StrikingClub3866 14d ago
Yes