C is a difficult language to learn, but I think it is a language worth learning. It is a small language, but some of the concepts are very complex. It is a difficult language to master. It gives the user low level access to the hardware they are running on. C gives you more control over what the software is doing but this often means you need to write more detailed code. Even thought you may need to write more code C can produce small executable files. There is no garbage collector in C, so as a C programmer, you are responsible for managing memory. This control is good, however memory management can be problematic. It is easy to forget to clean things up and leak memory. It is also easy to mistakenly access un-allocated memory or memory you don’t own. This causes bugs, crashes, and sometimes security problems.
Because it gives so much control and programs can be designed efficiently C works well on small embedded micro controllers. Embedded micro controllers are things like the computers in your wireless router, TV, oven, or car.
Most Linux computers have a C compiler than can be installed from the package manager. On a mac, you may need to install the XCode command line tools. For Windows, you will need Visual Studio or MinGW. If you would like to try C without installing a compiler you can try an online environment like repl.it.
Make a new file called hello.c
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
}
Compile the code using gcc -o hello hello.c
Then run the file using ./hello

Puts you closer to the hardware. More control and you know exactly what the computer is doing.
Since C is so popular, almost every platform has a C compiler built for it.
What is a platform you ask? Linux, Windows, Mac. These operating systems can run on different architectures like Intel X86, ARM, AMD. Other embedded systems like say an Arduino don’t have an operating system and can be programmed in C.
The C compiler lets you write code and target different platforms. But the code won’t magically run on every system. But you can configure the compiler and configure the code to get it to run cross platform.
C really shines when you need code to run really fast. It also allows for absolute control of hardware which makes it great for writing device drivers.
Why is C difficult? You are responsible for managing memory. While this seems easy it can be the source of many headaches and bugs. You also need to be careful that you don’t write to memory you don’t own. This is part of the danger of C.
Pros and Cons
- Pros
- Control
- Good for embedded systems
- Static types
- Cons
- Difficult to master
- No garbage collector (developer must manage memory)
If you want to learn more about C you can check out the book “Programming in C” by Stephen Kochan or “Effective C” by Robert Seacord.