I really liked this metaphor for coding that @keenencharles recently wrote about, regarding eating your coding ‘vegetables’:
I’ve noticed there comes a point where stumbling along can only get you so far. When you don’t know the fundamentals you’re always limited in what you can achieve. So you either lessen your ambitions or learn enough to get past it. But after making progress to your goal through stumbling it’s hard to go back to the studying phase. You just want to keep going……What this has shown me is there’s a balance I need to find when learning any new topic. Experimentation and fun vs learning the fundamentals. You need to have your vegetables eventually.
I spent the last month just charging ahead blindly with Ruby on Rails, picking up just enough, just in time. So what Keenen wrote resonated because I’d been feeling the same with regards to my progress with coding. I mean, I like to just dive in and learn as I go, but along the way, I found myself struggling with even fundamentals like understanding how to read the code syntax, writing in proper structure, and even knowing how to describe what the issue is when I face a bug/difficulty. I lack the correct words and the correct words to describe the words. So it definitely feels like it’s time to eat my coding ‘vegetables’ and learn some more fundamentals before charging ahead again!
It’s not that I’m dropping my overall approach though - it remains demand-driven, just in time for just enough. I see it as adaptive cycles of proactively failing forward versus passively learning backwards. Now that I have had some imperfect experience making a rough MVP, I begin to see where my knowledge gaps are, which in turn allows me to target my learning by looking backwards at what I struggled with. Patch up those gaps, and then off I go again into my next bullish charge ahead with just enough. This approach often feels uncomfortable and disconcerting, because you’re failing a lot and you always feel inadequate. Imposter syndrome runs high. But that’s how I prefer to do it. Whatever I learn feels more directly applicable into real-world coding, I’m not trying to front-load my knowledge too much only to discover that I didn’t need them at all, and I’m certainly not bored out of my wits.
This approach is not for everyone for sure, and definitely not for aspiring professional developers. But for makers who are more into being able to create things and put them out into the world, I can’t think of a better way that so congruently aligns adaptive learning with fiery passion and personally-meaningful productivity.