Refactoring: The Long Game
Channel: Legalize Adulthood
Date: 2018-10-17

Software is highly malleable.  No other engineering artifact offers us the option of infinite change even after production has begun.  This malleability can bring us joy or it can bring us pain.  The pain comes when a change brings about unintended consequences in the form of bugs.  The joy comes when we increase our ability to understand the code and reduce day to day drudgery.  Michael Feathers and Steve Freeman wrote entire books on how to change software without introducing pain.

In this talk, I'll discuss informally how we can focus on bringing the joy into our code with an eye on the long game.  We are all familiar with refactoring in the small that brings us better identifiers, better functions and better classes.  To go beyond small scope improvements, we need to think more broadly about our code in terms of design patterns and architecture.  I'll bring along my personal thoughts on how to engage yourself in productive long game refactoring.

Books:
"Design Patterns" by Erich Gamma et al.
https://amzn.to/2CPSGTD

"Refactoring" by Martin Fowler et al.
https://amzn.to/2pZ0ERT

"Refactoring (Ruby Edition)" by Jay Fields et al.
https://amzn.to/2CkJVji

"Domain-Driven Design" by Eric Evans
https://amzn.to/2EzYeDw

"Refactoring to Patterns" by Joshua Kerievsky
https://amzn.to/2ErrJaq

"Working Effectively With Legacy Code" by Michael Feathers
https://amzn.to/2CPgg2I

"Agile Principles, Patterns and Practices in C#" by Robert C. Martin
https://amzn.to/2EzVrtE

"xUnit Test Patterns" by Gerard Meszaros
https://amzn.to/2Cn24gv

"Implementing Domain-Driven Design" by Vaughn Vernon
https://amzn.to/2Cmm1nx


Links:
Agile Code Reviews
https://legalizeadulthood.wordpress.com/2009/07/17/agile-code-reviews/

Iterated Dynamics
https://github.com/LegalizeAdulthood/iterated-dynamics

Give Your Old Code Some New Love
https://legalizeadulthood.wordpress.com/2018/03/25/give-your-old-code-some-new-love/

Convert C to C++
https://legalizeadulthood.wordpress.com/2007/05/18/refactoring-convert-c-to-c/

Replace Integer With Boolean
https://legalizeadulthood.wordpress.com/2007/05/18/refactoring-replace-integer-with-boolean/

Guard Macro Body
https://legalizeadulthood.wordpress.com/2007/12/20/refactoring-guard-macro-body/

Reverse Boolean
https://legalizeadulthood.wordpress.com/2009/07/14/refactoring-reverse-boolean/

Split Module
https://legalizeadulthood.wordpress.com/2009/07/22/refactoring-split-module/

Sort Members by Visibility
https://legalizeadulthood.wordpress.com/2013/08/01/refactoring-sort-members-by-visibility/