There are a lot of programmers that think C is not language worth learning. Let's review this. C was originally developed for the UNIX operating system by Dennis Ritchie. It's quite simple, is not tied to any particular hardware or operating system. If some platform has C compiler, it's worth attention. C is really general purpose language, so this way it's so common. This makes it easier to write programs that will run without any changes on practically all machines that have POSIX compiliant API's. The C language is a middle-level language as it combines the elements of high-level languages (structures, unions, enums, functions, conditionals) with the functionalism of assembly language. It's possible to simulate OOP in C and write an operating system. C allows the manipulation of nearly everything giving the programmer more control over exactly how the program will behave and more direct access to the mechanics of the underlying hardware, while keeping application fully portable. C is often quoted as cross-platform assembly. C is still one of the most popular programming languages out there at the time of writing it was 2nd language overall. Overall, C was first most common language from 1988 to 2013! It's Popularity is still growing. In the year of writing, C had the highest rise in ratings in a year. C is everywhere. Your keyboard is very propably powered by C, same as your fridge or even modem. Microsoft Windows was developed in C and has nearly 90% market share. Same as Linux, MacOS, iOS, Android and Windows Phone. The world’s most popular databases, including Oracle Database, MySQL, MS SQL Server, and PostgreSQL are developed in C. 3D movies are created with applications that are generally written in C and C++. The alarm clock that wakes you up is likely programmed in C. Then you use your microwave or coffee maker to make your breakfast. They are also embedded systems and therefore are probably programmed in C. You turn on your TV or radio while you eat your breakfast. Those are also embedded systems, powered by C. When you open your garage door with the remote control you are also using an embedded system that is most likely programmed in C. You park your car, go to the shop and use vending machine to get a soda. What language did they use to program this vending machine? Probably C. Then you buy something at the store. The cash register is also programmed in C. And when you pay with your credit card? The credit card reader is, again, likely programmed in C. There are many programming languages, today, that allow developers to be more productive than with C for different kinds of projects. There are higher level languages that provide much larger built-in libraries that simplify working with JSON, XML, UI, web pages, client requests, database connections, media manipulation, and so on. But despite that, there are plenty of reasons to believe that C programming will remain active for a long time. In programming languages one size does not fit all. Here are some reasons that C is unbeatable, and almost mandatory, for certain applications. Arbitrary memory address access and pointer arithmetic is an important feature that makes C a perfect fit for system programming (operating systems and embedded systems). A common language feature that system programming cannot rely on it's garbage collection, or even just dynamic allocation for some embedded systems. Embedded applications are very limited in time and memory resources. They are often used for real-time systems, where a non-deterministic call to the garbage collector cannot be afforded. And if dynamic allocation cannot be used because of the lack of memory, it is very important to have other mechanisms of memory management, like placing data in custom addresses, as C pointers allow. Languages that depend heavily on dynamic allocation and garbage collection wouldn’t fit for resource-limited systems. C has a very small runtime. And the memory footprint for its code is smaller than for most other languages. When compared to C++, for example, a C-generated binary that goes to an embedded device is about half the size of a binary generated by similar C++ code. One of the main causes for that is exceptions support. Exceptions are a great tool added by C++ over C, and, if not triggered and smartly implemented, they have practically no execution time overhead (but at the cost of increasing the code size). C is a lingua franca for developers. Many implementations of new algorithms in books or on the internet are first (or only) made available in C by their authors. This gives the maximum possible portability for the implementation. I’ve seen programmers struggling on the internet to rewrite a C algorithm to other programming languages because he or she didn’t know very basic concepts of C.