I have tried to distill the techniques and tricks I have developed over the years into a set of tips. Hopefully, these will be useful to people trying to become better programmers.
Any comments, advice, additional tips, what have you, can be mailed to the author.
This is a work in progress. As time permits, I will keep adding new ideas.
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.
Also known as, why should I listen to you.
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.