Should Modern Software Developers Still Bother to Learn C Programming?
In today's drop-and-drag world of WYSIWYG software development environments, is it really relevant for developers to bother with antiquated C programming. You bet it is!
A simple glance through any employment website, or even a peek at the local want ads, will let you in on a little secret. The world needs more software developers! But what kind of software developers are in the highest demand? The good ones.
What Makes a Software Developer Valuable?
There are literally hundreds of different programming languages in use today, and no one person can actually be good at them all. In light of this, if a hiring manager is searching for a senior software developer, what skills should they look for in a candidate? Some think they should look for a developer that has coded in their specific language for 20 years. Others think they should be targeting developers in their particular industry, like aerospace, accounting, or retail. These are fine choices if candidates with these skills and industry experience are plentiful, but they are usually nowhere to be found. The answer is to seek an individual with expertise in the fundamental languages, like C or C++.
Programmers with extensive experience in C and C++ are often used to coding with little or no help from an integrated development environment (IDE). In fact, many leading developers believe that an IDE only serves to make the software developer less intelligent by handling many of the difficult and confusing tasks. In my opinion, it is the ability to solve software development issues, regardless of available tools, that makes a software engineer truly valuable.
Focus on Programming Fundamentals
While it is nice to have someone that knows the particular language that is being used intimately, if that is the only language they know, they may not be suited well for the next project that comes along. On the other hand, if a developer knows how to fundamentally solve programming issues, they can generally apply this knowledge to any programming language in a very short amount of time. In the software development world versatility goes a very long way.
Actually, almost all programming languages perform exactly the same tasks:
- Variable initialization and assignment - Assigning variable names to memory locations
- Calculation - Performing mathematical calculations on values stored in memory
- Decisions - Executing certain blocks of code when a condition is true or false, and executing other blocks of code, or none at all, when the reverse is true
- Repetition - Repeating a sequence of instructions a certain number of times
- File I/O - Creating, editing, reading, and generally manipulating all sorts of files
- Common Data Structure Support - Providing arrays, lists, queues, and other objects to solve specific problems in the programming world
The list could go on and on, but I think you get the point. There is nothing new under the sun. Software developers of today are solving the same types of problems they were solving 40 years ago, just faster and with different tools. But the focus shouldn't actually be on the tools (programming languages) but on the knowledge of when, where, why, and how to use these tools.
C Programmers Have the Skills to Pay the Bills
If you run across a software developer with a lot of good C experience, which will most likely be in Linux, you can rest assured that they are intimately familiar with every aspect of computer programming, especially the really hard parts. Do you know why? Because they didn't have any fancy tools to do the hard stuff for them. They had to figure out how to handle these things on their own.
Since C programmers have to handle all of the mundane tasks of memory allocation, pointer referencing, and hundreds of other tasks that are virtually unknown to modern developers, they can almost always pick right up and be extremely valuable using any programming language or IDE. But if someone is only good at programming with a certain IDE, good luck asking them to write any low-level stuff like device drivers or assembly language.
In light of all of this, even with all of the technological advancements in programming languages and their respective environments, my advice to an aspiring software developer would be to learn C first, and then move on to other more high-level languages one have mastered C. You will find that you have a lot more opportunities than someone that has only bothered to learn the programming flavor of the day.