Here is a summary of the recommended practices of a professional developer:
- Short Iterations: delivering working code every iteration makes it possible to decide deployment based on business reasons only
- Don't wait for definition: build code as part of the software definition
- Abstract away volitility: employ solid OO design and Design Patterns, separating volitle parts of the domain from involitle parts without creating strong coupling
- Commission > Ommission: The building construction metaphor for creating software is not a very good one. In construction, we have blueprints as the specifications. In software, not only do the design documents and UML diagrams represent the specification, but also the source code itself. And, looking at it this way, we can see that constructing buildings from blueprints is different from constructing software from source code as the former takes many months to complete whereas the latter takes only a few mintutes with a compiler. So, with software, you can refactor the specs many times, and recompile the code. With buildings, that is very expensive and almost impossible.
- Decouple from others and never be blocked (The Prime Directive)
- Avoid Turgid Viscous Architectures: avoid big yucky architectures that try to address world peace
- Incremental Improvement
- No Grand Redesigns
- Progressive Widening: start building small functionality as a small thread stretching from the front end to the back end, and then progressively add more to it.
- Progressive Deepening: start with UI, deepen to middleware, and then to backend.
- Don't Write Bad Code: Dahhhh
- Go Fast. Go Well.
- Clean Code: bad code slows the whole team down, so refactor mercilessly.
- TDD: QA Should Find Nothing; 100% Code Coverage; Avoid Debugging
At the end of the day, I attended another keynote by David Intersimone from Code Gear about the future of building software. It emphasized more and more automation of our tasks.
One lecture I liked was titled Advanced UI Programming (with SWT/JFace/RCP.) It was good to learn that asyncExec calls can finally be replaced by instantiating the new UIJob class recently added to the Jobs API. Also, they finally cleaned up the act on menus and menu item contributions in RCP. Now, they can be contributed in a way that yields a predictable order on the screen.
Another lecture I liked was titled Mastering the Graphical Editing Framework by Koen Aers. The presentation was super-focused on introducing the most relevant concepts from GEF to the audience. That was very helpful in giving newbies a good grasp on GEF.
Stay tuned for more on Day 3, during which I gave my two presentations related to user interface design and practical design patterns.