Everyone's perspective on the programming language they like best is different. In my case, it's difficult to say which I like the best but C programming language is definitely among my top 3. To make my case I shall present my top 3 reasons on why I find C so awesome.
I. C is one of the best languages to learn fundamental computer science concepts
I started my programming language study with QBASIC which is an easy-to-learn beginner-friendly programming language developed by Microsoft. However, as I started to learn deeper computer science concepts like pointers, non-linear data structures, recursion, etc., I wasn't able to implement those on QBASIC. I also tried Python which is another beginner friendly language, but still there were concepts like pointer which I couldn't do on Python. Then came C. Because of C’s direct one-to-one interaction with machine code , for me, C was the perfect language to learn these concepts and understand how computers actually work at a fundamental level.
II. C is the coding language choice for system programming
Today Microsoft windows, Android, iOS, MacOS, Linux, raspberry Pi, etc. are the major Operating systems running billions of devices world wide. All these OS have one thing in common. They are all written mostly in C, with some parts in assembly language.
To begin with, the C language was actually created to move one of the first major OS - UNIX's kernel code from assembly to a higher level language, in order to ease the kernel development process. As a result C was designed to have a complete set of requirements for system implementation. Due to it's extensive features, C could not only be used to develop system-level software, but also application-level software on top of it.
However, application development was still complex and prone to bugs such as memory leaks, undefined behavior and buffer overruns. In order to further simplify the application development process, higher-level languages such as Java, Python and ruby were built on top of C. These languages were easier, more secure and robust. However, in order to do this, they had to lose the support for pointers. As such sacrificing the ability for low-level memory handling.
At the hardware/software boundary, computer systems and microcontrollers map their peripherals and I/O pins into memory addresses. System applications must read and write to those custom memory locations to communicate with the peripherals. Therefore, unlike C, by not having the ability to manipulate arbitrary memory addresses, these higher level languages are unable to perform system-level programming.
Also, even compared to higher-level languages such as Rust and Go, which do allow system-level programming, C's direct interaction with the abstraction layer of the computer system means that it allows programmers to scale down a program and run with an even smaller amount of memory in comparison, which is crucial in system programming as many devices have very small memory cap.
Hence, C is still the best language when it comes to system-level programming.
There are many programming languages that boast of portability such as Java whose proud motto is "Write once, run anywhere". It's able to do this by using a runtime called Java Virtual Machine or JVM. However, JVM needs considerable resources just to run itself and with additional code to run on top of it, it can be unbearable on a bare minimum systems like embedded systems.
On the other hand, C has a very small runtime and has absolutely no runtime dependencies. In C, low-level memory resources can be accessed directly and effortlessly. As such, the code can be optimized for high performance. Also, C being the most popular system programming language, there is at least one C compiler for almost every existing architecture.
As a result, C code is going to be the fastest and most versatile code you can possibly write for embedded systems in most cases.
With these reasons, I think C is one of the most awesome programming languages out there. If you haven't had an opportunity to use C yet, I hope I was able to convince you to give C a try.
Want to make a technical deep dive into UNiD? Visit our GitHub.