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.|