One of the important recent realizations is the dramatic value of unit testing.
This is the process of building integrated tests into all the code that you create, and running those tests every time you do a build. It’s as if you are extending the compiler, telling it more about what your program is supposed to do. That way, the build process can check for more than just syntax errors, since you teach it how to check for semantic errors as well.
This is an intriguing idea, and tickles some of the ideas I've been having recently. Imagine a compiler/language built specifically to support UnitTesting and ReFactoring. Built in support could go a long long way. Not just a RefactoringBrowser, but a language specifically designed to allow safe refactorings using a browser. Not just a TestingFramework, but a language/compiler/IDE specifically designed to support this. -- RobHarwood
The excerpt above reminds me of the StructureAndInterpretationOfComputerPrograms idea of changing your language to the scope of the current problem you are solving within a program. This is, however, a very attractive goal. -- StevePeters?