My dad was in the Navy. I asked him to tell me the single most important thing he learned. He said, “I learned how to fold my socks the right way.”
In the Navy there is only one way to fold your socks. Any other way, and it’s wrong. I believe they folded their socks this way so that there could be no other way.
Being forced to fold his socks this way simplified the process, removed the alternatives, and made him fast. He still folds his socks the same way to this day.
Why do we drill?
We run the drill so the process becomes second nature.
Soldiers run drills to take their guns apart, clean them, and put them back together again. The process needs to become second nature. Second nature means automatic. Automatic means you can do it without looking at the keyboard. Automatic means you can do it in your sleep.
Athletic Software Development
Practicing the right way takes it off the table. Practicing the right way removes it from the equation. Setting up a repository on GitHub, cloning it to the Desktop, committing the changes, and pushing the repository to GitHub should take mere seconds.
My first time took 45 minutes.
Once the process has become muscle memory, the process fades away and programmers can focus all of their energy on their code. They no longer think about the set up. They just do it and move on.
What I learned about IntelliJ IDEA
IntelliJ IDEA has tons of keyboard shortcuts. My favorite shortcuts are “psvm” and “sout.”
- pvsm – creates a public static void main method
- sout – creates a System.out.println method
What I learned about Java
I have been programming in Objective C and PHP for too long without switching languages. It pays to switch languages often to get accustomed to quickly switching between ways of thinking. I am planning to make a list of the ways to incorporate Java Collections into my programming repertoire.
What I learned about Athletic Software Engineering
CrossFit has the concept of a “Workout of the Day” (WOD), which is a short duration, high intensity set of exercises. In this class, I adapt this concept to software engineering education. My hope is that by focusing on the speed with which you implement high quality solutions to short development problems, you will:
- Gain fluency with your tools and technologies.
- Gain the ability to focus and enter the “flow state” during software development.
- Become more productive and useful in “bursty” development environments like startup weekends.
I believe that athletic software engineering is essential to simplifying/eliminating the process of collaborative software development from the process of actually writing working code. Some kind of code management is essential these days. Why not take advantage of it? The real problems come up when the tools get in the way of the output.
I believe that by practicing athletic software engineering more time can be spent tackling complex algorithms. Less time can be spent struggling with the configuration management tools.
Reflections on Completed WODs
- WODs that can be completed in record time have little teaching value.
- WODs that can be completed in record time reflect that the skills that have been mastered.
Reflections on WODs I did not finish
- WODs that cannot be finished pinpoint weaknesses.
- WODs that cannot be finished highlight areas of improvement.
Reflections on process of doing WODs repeatedly
I’ve been reading Ryan Holiday’s book “The Obstacle is the Way.” Holiday retells stories of historical figures that turned their obstacles into strategies for improvement. WODs turn obstacles into opportunities. I plan to continue working on the WODs I could not complete to pinpoint my weaknesses.
“The impediment to action advances action. What stands in the way becomes the way.” – Marcus Aurelius