Ask HN: How do I learn C properly?
It sounds like you&#x27;re not asking, &quot;How do I learn the language?&quot; but &quot;How do I know I&#x27;m doing it right?&quot;<p>I think Gustedt&#x27;s book is superb if you&#x27;re just trying to learn the language, and it does a good job of presenting the   most up-to-date standard.  I admire the K&amp;R as much as anyone else, but it&#x27;s not exactly an up-to-date language resource at this point, and it doesn&#x27;t really provide any guidance on the design and structure of systems in C (that&#x27;s not it&#x27;s purpose).<p>You might have a look at Hanson&#x27;s <i>C Interfaces and Implementations: Techniques for Creating Reusable Software</i>.  That&#x27;s focused on large projects and APIs, but it will give you a good sense of the &quot;cognitive style&quot; of C.<p><i>21st Century C</i> is very opinionated, and it spends a great deal of time talking about tooling, but overall, it&#x27;s a pretty good orientation to the C ecosystem and more modern idioms and libraries.<p>I might also put in a plug for Reese&#x27;s <i>Understanding and Using C Pointers</i>.  That sounds a bit narrow, but it&#x27;s really a book about how you handle -- and think about -- memory in C, and it can be very eye-opening (even for people with a lot of experience with the language).<p>C forces you to think about things that you seldom have to consider with Javascript, Python, or Go.  And yes: it&#x27;s an &quot;unsafe&quot; language that can set your hair on fire.  But there are advantages to it as well.  It&#x27;s screaming-fast, the library ecosystem is absolutely gigantic, there are decades of others&#x27; wisdom and experience upon which to draw, it shows no signs of going away any time soon, and you&#x27;ll have very little trouble keeping up with changes in the language.<p>It&#x27;s also a language that you can actually hold in your head at one time, because there&#x27;s very little sugar going on.  It&#x27;s certainly possible to write extremely obfuscated code, but in practice, I find that I&#x27;m only rarely baffled reading someone else&#x27;s C code.  If I am, it&#x27;s usually because I don&#x27;t understand the problem domain, not the language.