Here's a quick overview of some of the techniques I use to write, program, and otherwise live my life:

Agile Design: I was originally a major proponent of heavy up-front design (after graduating from the "keep hacking until it's done" school of thought). However, now I've relaxed that a bit to use a more balanced blend of up-front design and quick iterations.

Design By Contract: I'm not a huge fan of unit testing (heretic!), but I am a huge fan of Design by Contract. In essence, I assert every method parameter, every return value, as well as class invariants on public methods.

Pervasive Asserts: I also throw in asserts all throughout my code, wherever a hint of doubt exists that something might get off track. For example, I generally assert that every pointer is valid before dereferencing it (even though technically this isn't necessary, as it'll throw a null-pointer exception, but I do it anyway), assert that a list contains something before I remove it, assert that a list doesn't contain something before I add it, etc.

Standard Template Library: I love STL. I don't like how it fragments the heap and does wasteful copies, but I don't worry about these until I get to optimization.

Powered by QwikiWiki v1.4 -