These tips are primarily focused on C. Also, these tips are intended for intermediate-to-advanced programmers. Some of these ideas may be applicable to other languages, and may be useful to beginning programmers as well. If so, please let me know.

There was a point in my career when I had a fair bit of experience, and was trying to learn more. Unfortunately, there wasn't much information about how to become a better programmer. What books that were available were mostly teaching beginners, or were teaching project management (software engineering).

Later, I had some time and I started writing a book on the subject. I could never quite finish it. However, I did manage to get into the form of a full-day lecture. That had a couple of problems. The first was that it only reached a small audience. (The other was that my throat couldn't take a full day of lecturing.)

So, instead, I decided to convert the course into this set of web pages.

I still intend to write a book using this material some day. So, please, use it for your own education, link to it, recommend it to your colleagues - but don't take it any further. Particularly don't incorporate it into your own book.

I've got a fair bit of experience programming; mostly system software - stuff like compilers, operating systems & device drivers, interpreters & virtual machines, etc. Its been mostly in C, but there are a fair number of other languages in the mix - including odd-ball stuff like Forth, Prolog, ML, Lisp and SIMULA, as well as assembler, C++, Python etc. At this point I've written well over 600,000 lines of code; it may even be as much as a million.

I've also got a some experience from the hardware end of things - I've done things like help design new micro-processors and port Linux to both embedded development platforms and large multi-processor systems.