Want to learn C? Get a grip on the basic programming concepts from scratch with Learn C from Scratch. Now for free!
C — old, but still relevant.
If you’re involved in programming at all, you’ve heard of C.
Created by Dennis Ritchie at Bell Labs between 1969 and 1973, C has been around the block. It was the first general-purpose programming language to have an extensive user base and libraries.
C’s age does become apparent when applied to, say, front-end web development or building complex web apps. But there certainly is a niche that C will always occupy. (We’ll get into that in a bit.)
Even if you specialize in a different programming language, you most likely know a lot about C. It has been described as the “lingua franca” of programming languages.
Lingua franca: A language that is adopted as a common language between speakers whose native languages are different.
Python (a fully object-oriented high-level programming language) is based on C. Almost all abstract languages are still C, deep down. There’s a reason why C is often the first language you learn when you’re getting your CS degree.
C is considered a middle-level programming language. For most people, it’s the closest you’ll get to writing machine code (without actually writing machine code). You can program a system, then turn around and design an application that runs on that system. This sandwiches C in between assembly language, and more high-level languages like Java.
It’s easy to think C is old, outdated, or easily replaceable by some newer, trendier language. But now is actually the best time to get a good knowledge of C under your belt.
C is the past, the present, and the future.
Look at the nearest gadget to you right now. It’s most likely powered by C. Your operating system is most certainly written — at least in part — in C. So are the drivers.
As the “Internet of Things” (IoT) continues to take prevalence in the world, a lot of it is powered by C. Firmware is inside everything nowadays. The portability of C means there are C compilers available for most hardware you can find.
It’s not just hardware either. Anything that handles huge amounts of data or requires optimal performance is usually written in C , due to its remarkably small runtime. The world’s most popular databases, like Oracle, MySQL, MS SQL Server, and PostgreSQL, are coded in C. Ditto for Apache and nginx servers.
Today’s blockbuster 3D movies are created with apps written in C (since they have to do many calculations per second, and need to run as fast as possible).
According to the TIOBE Index, C was showing a steady decline in popularity for years. In 2017 it shot up to #2, right behind Java, and has stayed there ever since.
One major reason why is because the automotive industry has latched onto C to build its self-driving car systems. All processing in autonomous vehicles is done in real-time and sometimes even in parallel architectures.
Since there’s so much C in the world, most newer languages have some way to interface with C. Its ABI is one of the easiest to interface with. Just the sheer amount of code out there written in C proves there will be a demand for C programmers for many years to come.
Replacing a system in C for an alternative would be much too costly, even for the most forward-thinking organizations. Theoretically, you could replace C with C++, or Go, or Rust, but there just isn’t enough of an incentive to switch.
You should learn C, even if you already specialize in another programming language.
Even if you’re a front-end developer, or more versed in object-oriented programming languages like Java/Python, there is still benefit to getting some C under your belts. Some reasons:
You want a deeper understanding of machines.
The lower the level of language you use, the closer you are to writing machine code. With C, you’re writing close to the hardware AND directly manipulating memory. Understanding how memory allocation works, or how C uses registers to hold data, can give you an extra edge in writing quality code (even if you don’t use C).
You’re a beginning programmer and want to pick up multiple languages more quickly.
Moving from one programming language to the next is a lot more smooth when you move up in abstraction. Highly abstracted languages are harder to learn if you don’t understand what’s being abstracted! With C, you learn the foundations of modern programming, and then work up from there.
You want more job opportunities in a growing field.
IoT is the future. You’ll continue to see an increasing demand for C programmers who can work with embedded technology. At the same time, there’s a low supply of C programmers right now. You don’t see a lot of boot camps or online courses for C, in the same way you do for Java, Python and the like. So, get in there on the ground floor.
What do you think?
Is C poised to enjoy a second wind? Or do you think differently? Comment below with any questions, comments, suggestions, etc.
Get started today
Check out this free, accessible course that will teach you C from scratch with hands-on practice and real-world problems. No subscription fees, no stress, no hassle. Learn C from Scratch
Top comments (4)
I learned C, when I was college around 12 years ago. After that, I never worked on it and move towards Perl, Python and other high level languages.
Other than the embedded systems, I am not sure where else C has its relevance.
Are there enough jobs/market available in C?
Thank you for sharing your experience! Certainly, every developer has a different experience with various languages depending on their work and investments, so it is valuable to hear different perspectives.
In regards to your question, I do believe that there is a strong market for C. And if the skills aren't used directly, they certainly do crossover into other languages. Since C is the foundation for other languages, it can bolster a career by making it easier to learn some of the languages that may be more marketable. C++, Java, C#, Haskell, and Python all interact with C in some way.
In general, C is great for embedded stuff (it's easier to port a C compiler than C++), open source software (OSS prefers C over C++, for example), and systems programming (especially templates that use C++). Just to name a few.
For me, "C" is effectively "portable assembly" and you always know what is happening in the CPU as a result of your code, it gives you a head for optimization in time critical tasks, it can be the difference between processes that take an hour to complete and ones that take 16 milliseconds.
pro tip: for time-critical C or C++, "objdump" the compiled code and "get a head for" the assembly language generated for the CPU.
Thank you for your addition to the article. I think your comment relates to the idea that C trains you to think more like a computer than other languages. The challenge that comes with learning C has a lot to do with this kind of thinking it requires.