Emergent Design
Today I happened to attend a talk by Scott Bain, author of Emergent Design: The Evolutionary Nature of Professional Software Development . And incidentally today is my first day blogging. So I took the liberty of using the theme of book as concept of my blog.
Talk was mostly based on principles and practices which any sane developer would atleast try to follow. But the emphasis of the talk was to summarize the above book and give some concise examples on how to achieve the result in a much easier way. I felt the concepts a bit natural for me now because of my slow transition into ROR (a.k.a Ruby on Rails) which you would see my future posts will mostly focus on. ROR drives developers to follow the famous (or infamous with merb lurking around) Convention over Configuration. This means all the developers using rails follow similar practices making the process of sharing knowledge easier. And not to mention hacking around a code, expecting a particular behavior from the code and many more. Just to reiterate rails has done an excellent job in establishing concrete practices, thanks to DHH and rails core for this.
Coming back to the talk, the entire message was focussed on following Open-Closed Principle of design. This according to the author can be achieved by following,
- Pattern-Oriented software development: This does not mean complicating code by designing it exactly to the pattern but to understand why the pattern was created in first place.
- Test Driven Development (TDD): All folks should know about this by now. To learn more go here.
Though the talk sounded to me somewhat mundane, I am excited to know how deep the book goes and how it would change my perspective. But before I buy I would love some reviews
. So the lesson I learn is follow patterns to the extent they need to be followed, follow TDD in a more disciplined way and constantly evolve code. As Scott mentioned this can be done by following some simple steps like,
- Refactoring code to fit good practices and not change existing behavior (am I defining Refactoring here?)
- Add documentation
- Change method/variable names to intended meaningful name