Over the past year, I've been trying to compile enough information for a book or at least an in-depth web site or article about smarter programming. Sadly, I find myself too often distracted by other things to give it the attention I believe the subject deserves. So, I'm instead going to assemble what I have written to date into sections that seem logical to me and present them here for your review and comments, if you desire. One thing to keep in mind: I am a programmer by profession, not a writer, so my prose is unlikely to be spectacular and is, in fact, likely to be cumbersome. Hopefully, I'll receive some constructive criticism that will help me to greatly improve the content here.
Before I go too far, I should probably provide my definition of smarter programming. As a rule, I do not mean to say anything about the basic algorithms used, nothing about eliminating those last few cycles from a tight sort routine. Instead, I am writing about the layout, structure and general sensibility of the source code itself, especially as relates to the codes readability, comprehensibility and maintainability. A large part of the software world is to add, remove and/or alter a function in an existing program or system. Smart programming makes those functions as easy as possible. My other rule, which is probably the most important of all the rules I follow is that rules are meant to be broken -- but only with forethought and a good reason.
One of the primary reasons I got started on this was the responses I received to a letter I [unintentionally] had published in Dr Dobbs Magazine a while back. It seems that many people are interested in improving the quality of their code. Since I most definitely enjoy complaining about the bad code I've been required (or attempted on my own) to maintain over the years, I thought collecting my thoughts and sharing them with anyone interested could be theraputic for myself, and may even prove beneficial to the software development/maintenance community.
My personal focus is primarily on the C programming language. Similar and derivative languages should be able to use many of the ideas with little or no modification. As your language of choice varies more and more from C, you may find yourself needing to interpret, adjust, add and delete concepts that I present. One of my purposes in sharing this online is to get feedback about how these ideas may be applied to other languages. I'm also interested in feedback that may offer additional ideas that might be incorporated into this set as well as refinements to any ideas already presented here. Oh, and examples of horrible source code are always welcome, but please, no one send me a copy of any linux (or other open source project) sources; I've already seen them and found too many examples to use.
Step one is here now... everything I've written, possibly hectic, disorganized and probably more than a little rambling is available in a single large HTML page here. I'll be adding an email address in January 2005 and possibly a moderated mailing/discussion list (or more, if appropriate) for the ideas here. Please hold (and consider) your comments until those outlets are available. Thanks and enjoy!
-- Steve Valliere, December 14, 2004
NEW! - Oct 20, 2007 - I've got myself a blog. So far, I tend to post in bursts, several in a day or several days in a row, then a week or three of silence. I've got to build the proper habits, and I'm trying. Initially, most of my topics will be things that frustrate, upset or otherwise irritate me during the day. Recent posts have been about software licensing, written English, and content. The place is called Stuck in a Vent partly because I'm venting my anger and partly in honor of a crazy old song from the Total Control basement. In upcoming entries, I expect to whine about drivers, selfish people, and programming standards, among other things. Please visit!