Programming is the act of giving instructions to your computer to perform a certain task or execute instructions. There are hundreds of programming languages used in the professional industry and academia. One needs to be familiar and able to program with at least few programming languages to be successful. The best part about learning programming is that it is open for all. You do not need university degree to be a professional programmer. This is necessary even if future career is not related to computer programming but falls inside computer tech industry.

Knowledge and understanding of computer programming in C and C++ is one of the most fundamental skills for today’s students. You should learn C language first, and then pick up a language that is best suited for your need. Some other higher-level or scripting languages such as Java, C# and Python may sound easier to learn but you will be limited with less versatile in the long run if you don’t know C.

Why learn C First

Based on my teaching, research, and industrial experiences I prefer C language as the first programming language for every computer science student. Here I quote some of the people who prefers C as first programming language to learn.

The art of programming starts with C

Harvard University still uses C Programming as part of their CS50’s Introduction to Computer Science course along with other programming languages such as Python, SQL, and JavaScript plus CSS and HTML

Foundation

“C is one of the foundations for modern information technology (IT) and computer science (CS) and the base for almost all popular programming languages.”

Harry H. Cheng – University of California – Ten Reasons to Teach and Learn Computer Programming in C

Low Level Programming

“C is one of the most powerful “modern” programming language, in that it allows direct access to memory and many “low level” computer operations. C source code is compiled into stand-a-lone executable programs. C is sometimes criticized because it assumes the “programmer is always right” and allows many “questionable” programming practices.”

James de St. Germain – University of Utah – The C Language – why do we use C?

Old programming language

“Though C is simple it is one of the most powerful languages ever created.  Considering it was created over 40 years ago, it is still used heavily and is usually in the top 5 or 10 most popular and most widely programming languages in the world.

Learning C can actually make you a better programming in other languages like C++, Java, or C# by equipping you with a mental model of what the computer is actually doing when you run your programs.”

Tim Buchalka and Jason Fedin @ Udemy – C Programming For Beginners – Master the C Language

Lingua franca of working programmers

“Although C is becoming increasingly rare, it is still the lingua franca of working programmers. It is the language they use to communicate with one another, and, more importantly, it is much closer to the machine than “modern” languages that you’ll be taught in college like ML, Java, Python, whatever trendy junk they teach these days. You need to spend at least a semester getting close to the machine or you’ll never be able to create efficient code in higher level languages.”

JOEL SPOLSKY (Chairman and Co-founder Stack Overflow) – Advice for Computer Science College Students – Learn C before graduating

C Programming for Engineering

“The focus of the introduction was to give students the opportunity to exercise programming and modeling languages online and to evaluate their usage for future findings about the corresponding learning mechanisms.”

IEEE Xplore – Benefit of e-learning teaching C-programming and software engineering in a very large mechanical engineering beginners class

Build Mental Model

“C forces you to build a mental model of what the computer is actually doing when you run your programs, much like a teenager figuring out how the gear mechanism works by playing around with the clutch. As you ask why and keep digging for answers, your mental model will grow to encompass the process model, the CPU architecture, the memory hierarchy, the operating system, and so forth. It’s that mental model — rather than the C language itself — that will enable you to poke through the abstractions created by others, and write programs you never thought possible.”

Evan Miller – You Can’t Dig Upwards

Close to bare metal

“C gives you very little abstraction from assembly. Some C Compilers will even let you inline assembly. This can be very useful for thinking about how the computer works, which is important to know.”

Stack overflow – “C is a fundamental part of Objective-C” – Learn C first before learning Objective-C [closed]

OS Development

“The real problem here is that they assume that search engine popularity translates into language popularity. It’s not cause a bunch of hipsters want to learn how to make an iOS application that it’s actually going to become the programming language of choice for a majority of the developers.
C in combination with some form of assembly still holds the absolute first position in terms of how much its actually deployed. Every mainstream OS its core, bootloader, … was written in C and assembly.”

Slashdot – Objective-C Overtakes C++, But C Is Number One

Portability

“The primary design of C is to produce portable code while maintaining performance and minimizing footprint (CPU time, memory usage, disk I/O, etc.). This is useful for operating systems, embedded systems or other programs where performance matters a lot (“high-level” interface would affect performance). With C it’s relatively easy to keep a mental picture of what a given line really does, because most of the things are written explicitly in the code.”

Wikibooks – C Programming/Why learn C?

Old is Gold

“Nevertheless, there are some good reasons to learn to program in C. First, age has its advantages: C has been around for 30 years, and there is a ton of source code available. This means there’s a lot to learn from, and a lot to use. Moreover, many of the issues with the language have been clearly elucidated — it’s well understood, and you can find a lot of tutorials available. Plus, with C, you get lots of strong opinions mixed with insights that you can understand.”

Alex Allain – cprogramming.com – Why Should You Learn C?

C for programmers of other languages

“Are you going to need C in your day to day life as a Ruby programmer? No. But every once in a while a problem will pop up where knowing C will allow you to solve it better or faster than you otherwise could have. Knowing C gives you another option when faced in a problem that allows you to explore paths that are very different from what languages like Ruby make possible, especially when it is as easy to combine these languages in one program.”

Markus Wein – Why you need to learn C (Director’s Cut)

Procedural programming first

“C is not an object oriented language so you don’t get distracted by things like inheritance and polymorphism. I’m not saying these aren’t important concepts, it’s just that you can simplify things a bit by learning straight procedural programming first. In fact, once you’ve learned C, and written a couple of embedded programs on some single board computers, learning C++ is a natural next step. You will need to get someone to pry your fingers off the macros and preprocessor directives but other than that it will be straightforward.”

Tod Gentille, PLURALSIGHT – Why every programmer should learn C

C is like learning Latin

“one popular argument in favor of learning C is that it is a little like learning Latin — you may never need to use it, but it makes other languages quicker to learn and easier to master.”

Paul Rubens , CIO – What is the point of learning C?

Know what happens under Abstraction

Life is too short for going down the abstraction stack to the bare metal. Anyway, knowing what is under the hood is essential to understand what happens in the layers above

Francesco Nidito, Pisa University – Why You Should Learn C but (Probably) Never Use It

Embedded Systems

Arduino is making C popular among the Maker community. As a constrained platform, Arduino is a natural environment for C. C makes the most of the machine’s performance, particularly with real-time processing of input/output. And because it’s such a small language, you can become competent in basic keywords rather quickly, making small Arduino projects a gratifying introduction to programming.

Brian Sawyer and David Griffiths, on YouTube – Why should I Code in C?

Small footprint

C’s design is tied to its intended use as a portable systems implementation language. It provides simple, direct access to any addressable object (for example, memory-mapped device control registers), and its source-code expressions can be translated in a straightforward manner to primitive machine operations in the executable code.

DINESH THAKUR – History of C? Why we use C programming language

C is not going anywhere

“Yes. It’s easy to learn, there’s a lot of it still in use, and plenty of free or open-source compilers. While it may not get you a job, it will give you an excellent grounding in low-level programming. It’s not growing in popularity… but it’s not going away anytime soon either.”

David Bolton – Dice – Is C Still Relevant in the 21st Century?