Do you also have a recommendation for learning the basics of C? I started with K. N. King's book and I'm now reading Head first C but other good resources are always welcome.
There are several conceptually distinct areas in learning C:
- The language in itself (I mean: reserved words, syntax, data types, expressions, control structures) is simple
- The division between interface (.h files) and implementation (.c files), and C pre-processor macros
- The standard C library
- How to build a program, starting with a single hello.c (immediate, working result), then extending to a 2 .c + 1 .h project, which is enough to learn about compiling and link editing
- How to structure larger projects (make and makefiles)
- What are static libraries and shared objects, and how to build them
This list is the beginning of your own map of the Land of Software Development. It consists in the 'core learning', you'll add much more to it depending on:
- The functional area in which you want to use C (e.g. systems programming, GUI development),
- The design of your application (e.g. software architecture, technical architecture),
- The interactions of your application with the rest of the information system (e.g. connectivity and interfacing, deployment, operations)
- And the context of your work (e.g. open source project, agile team).
I'd say any book will do as long as it suits your taste, and no single book has to cover all aspects.
Besides books, you can also learn from open source projects, both as a source of inspiration and as a starting point for experimentation.
The standard C library is documented in man pages and you have the header files on your system, so all you need on your desk is a 'cheat sheet' with all available functions grouped by theme.
For the rest, you're already aware of the importance of practice, so it shouldn't be a problem. What is really difficult when you start learning something is to figure out what you need to learn: you don't know what you don't know before you learn it... Hence the list at the beginning of this post.
You may also need to learn later about the GNU tools collection, used in a great many open source projects, and about CMake and meson, also widely used.