C is one of the most common languages taught at university, even though more modern languages like Java and Python are considered easier to learn. Why is that? Well, learning C is considered a good foundation for learning fancier languages later, as you get a better idea of what is going on behind the scenes by doing some things yourself. It's also widely used, forming the majority of code written to create Windows, Linux, Mac, databases, embedded systems and more.
In this article, we're going to share 10 essential resources for improving your C skills. Whether you're a new programmer who has mastered the basics of C, or you're moving into C from another language, we hope these tutorials, guides, references and projects are helpful.
Book / Online, Kernighan and Ritchie
The C Programming Language (or the K&W book, as it is sometimes known) has been recommended as a reference for C programmers since time immemorial. The first edition was released back in 1978 and co-written by the original designer of C; an updated version was released ten years later to cover (then-new) ANSI C. What the book lacks in style and modernity, it makes up for in authority. If you are going to call yourself a C programmer, you should probably have The C Programming Language downloaded onto your PC or sitting on your bookshelf.
Book / Online, Jens Gustedt
As the name suggests, this freely available book covers modern C programming, with up-to-date references (as of 2018) that should make it a bit more understandable than The C Programming Language. It's divided into several levels, from introductory to advanced. If you're an intermediate programmer, it's worth skimming through the opening encounter, acquaintance and cognition levels to make sure you fully understand each before you get into experience and ambition.
Learning from books and working on toy code can be very helpful when you're starting out, but you're learn a lot by actually taking on complete project as well. This resource includes a categorised list of project-based tutorials, allowing you to build your own game, operating system, programming language, video player and so on. If that sounds a bit daunting, don't worry—there are plenty of smaller, easier projects to tackle as well.
Online, Harvard University
This well-respected online course taught by Harvard University introduces a range of Computer Science topics, including quite a lot of C. The course is offered for free, and includes nine long programming assignments (10-20 hours each) and one final project. If you complete the class, you can get a signed certificate to prove it.
Project, Richard Schneeman
The best way you can learn C is to actually write real projects… but if you don't have an idea to get started on, what should you do? CodeTriage could be the answer, as this simple website points you towards real open source projects that need your assistance. Find a project close to your heart (or just click on one randomly), check out its list of issues and try to solve bugs and answer questions. Even if you don't always succeed, the experience of working in a greater project is still quite edifying.
Online, Steve Summit
This resource is a slightly more readable HTML version of frequently asked questions on the comp.lang.c Usenet, covering all sorts of standard and interestingly weird questions asked by journeyman C programmers. This one is a bit esoteric, but it's somehow comforting to see C learners twenty years ago encountering the same problems as modern students.
Online, Peter Ranieri
This free book, available online as a PDF, is a compilation of the shuttered Stack Overflow Documentation. It is an exhaustive reference, which can take you from the earliest stages of learning C into more advanced topics such as threads, atomics, memory management and so on. There's also a section on common C programming idioms, develop practices and pitfalls. Bookmark this one and refer to it often.
Online, Linus Torvalds
If you're going to take style advice from anyone, why not the creator of the Linux kernel Linus Torvalds? This brief document outlines a perennially popular style of laying out your C code, ensuring that the code you produce will be similar to others and therefore more readable.
Codewars is a very interesting idea: a kind of programming dojo, where you take on other students in challenges to complete challenges called kata to rise up the kyu ranks. The site supports a wide range of languages, C included.
Book / Online, Mecklenburg
If you begin using C for real projects, pretty quickly your compilation stage will begin to outstrip a single line that begins 'gcc', and that's where a makefile comes in handy. This is an entire tome on the topic, but reading at least the introductory elements can be a useful way to get to grips with this essential skill for C and other languages.
Did you find these C resources handy? Got any more to add? Let us know in the comments below.
Rojenx is a leading concept artist who work appears in games and publications
Check out his personal gallery here