You and Jimi Hendrix
The long answer goes something like this: if you want to be able to improvise without falling flat on your face, you need to have rock-solid technique. Hendrix couldn't have done what he did with wah-wah pedals and overdriven amplifiers if he couldn't first play scales and arpeggios; as one "artist" after another has shown over the last forty years, people who try to do the former without mastering the latter are just making noise. The same is true of jazz greats like Parker and Coltrane, and of classical musicians like Yehudi Menuhin.
I think it's true of programmers as well. I don't think I code nearly as well as Hendrix played guitar, but I know people who do. They don't actually put everything they care about under version control, and they certainly don't always write unit tests before writing code. However, they're fluent enough with those practices to decide when not using them is the right choice.
More importantly, good programmers have done things the right way for so long that they revert to good practice out of habit when they're stressed and tired. That's the real reason I push novices so hard to do things the right way every time: when the deadline is just hours away and nothing is working, throwing away your workflow and reverting to feral coding is exactly the wrong strategy. Practicing arpeggios might not seem like fun when you're starting out, but getting the fundamentals right will make anyone a better programmer, just as learning how to play a twelve-bar blues will let pretty much anyone sit in with the local bar band.
Note 1: much of my thinking about improvisation in music, programming, and teaching was shaped by Ted Gioia's thought-provoking book The Imperfect Art.
Note 2: several of the people who reviewed this post on GitHub had comments too good not to share:
- "You don't have to strive to be Jimi Hendrix, but if nothing else if you can at least master a few chords you can play in a punk band and still rock."
- "I see inspired instructors burning their laptops on stage at the end of the git lesson..."
- "I see fire marshals :-) How 'bout just inspired instructors typing behind their backs?"