Refactoring JavaScript
martinfowler.com