Hello world (programmers, code gnomes, script authors, and algorithm enthusiasts, one and all, zero to array.length),
Welcome back to the Late Night Code Club 🕯👩💻✨. Thank you for reconvening with me—I've had a writing break during a busy season, but I return to you feeling refreshed and reflective. Today I'd like to take a step back and talk about the purpose of this newsletter club and what I hope we'll do together here, and talk also about “code gnomishness” along the way.
These posts are primarily for folks who are navigating the wide, confusing valley between just starting to learn how to write code and becoming fluent in writing code. I have in mind complete beginners, bootcamp / college students and grads, and early career engineers, although of course more experienced engineers may find something of value here too.
However, unlike many other programming learning resources, my intention is not to write many technical articles or tutorials, although there may be some. Rather, my focus is to share encouragement, a wider perspective, and a bit of strategy and tactics for the day-to-day practice of programming to make this wide valley a less intimidating place to be.
It’s not an adventure without a few scrapes
I know learning how to code can feel utterly overwhelming and confusing. Even with a few years of experience and a lot of knowledge, the gap between fundamentals and fluency can feel endless. Many people use a "journey" analogy to describe this time, an adventurous trek through perilous and dark paths. Day-to-day this analogy may be helpful and feel accurate. You may have no idea where you are and only a vague idea of where you think you're going. It may feel as though you're walking in circles or walking backward.
I'd like to suggest another metaphor in addition to the journey. Yes, you are walking in circles. Yes, you are backtracking and even starting at the beginning over and over again after getting lost. Yes, it is stressful and confusing. But you aren't trying to get somewhere else, you're already where you wanted to be. You're writing code! You're programming! This is it, folks. You're spending ample time in the heart of your creative programming practice, there really is no other place to "get to." "The journey is the destination" is a clichéd phrase for a reason. What if there's no need to climb a new mountain, but rather it's time to tend to the soil at your feet? What if what feels like journeying day-to-day looks more like gardening month-to-month?
The Programming Garden
Welcome to the programming garden. As a code gardener, you're revisiting paths over and over again until they become familiar, not just passing through on your way to somewhere else but changing and improving them through your attention and practice. Your skills, experience, and fluency are like garden plants of all varieties along the path. The attention and repetition itself is what makes the garden grow, so if you feel like you're going in circles, as long as you're noticing new details along the way, that's progress. Be careful of plant blindness and the tendency to dismiss the mundane and familiar. The more you walk these paths, the more familiar they become, and the easier it is to take for granted how much growth there has been. Not much may change day-to-day, but each season brings a total transformation.
We tend to use "building" words to talk about our work as programmers. We're "engineers building" apps and planning "architecture." We also tend to treat learning as a necessarily painful "bootcamp" experience, one to trudge through as quickly as possible in a straight line no matter the toil and hardship. From time-to-time, I'd suggest hanging up the engineer's hard hat and the soldier's training boots and trying out another thinking cap. Perhaps another mode to adopt would be like a coding garden gnome—a jolly fellow who tinkers each day and tends to the garden. While builders and marchers are helpful modes, the gnome mode may be better suited for some moments on your "learning journey" when patient repetition and gentle attention is needed more than stubborn force.
How to be a code gnome
Move at an enjoyable pace
As frustrating as it is, there are times where nothing you do can make learning happen faster. The number of projects you're working on, the speed at which you write code, or the hours of video you watch don't correlate to the speed of learning. Often the best way to gain momentum is to slow down to a snail's pace and carefully take one step at a time. And yet, sometimes going fast and doing a lot is fun, and a great way to make progress. So rather than focusing on whether you should be going faster or slower, or doing more or less, find an enjoyable pace with the right balance between challenge and curiosity. The "right pace" is a mix of a wide variety of speeds and contexts that changes daily and hourly. There are times when you'll be ready to go fast and take on big new challenges, and times when you'll be ready to move more slowly and take your time. The most important thing is paying attention and adjusting to your current needs, which may take time and experimentation to understand.
"The reality of your own nature should determine the speed. If you become restless, speed up. If you become winded, slow down."
—Zen and the Art of Motorcycle Maintenance
“Wanting to be done with something isn’t a good reason to do it.”
–John Gordon
Watch what emerges
Maybe you don't need a highly structured "learning plan" and a detailed to do list of things to read and projects to build. Maybe you can have some rough ideas and general intentions, but it's enough to take some time to hang out in the code garden each day and see what happens on its own without any pressure about what you "should" do or what you "ought" to be doing. Take the time to be still, notice, and listen, otherwise you might overlook something important that leads to your next big learning moment.
Take the funny path
Take the route that's the opposite of the bootcamp. Bootcamps emphasize making the learning path as short and fast and possible at the cost of stress and anxiety. It's a strategy that can work, but the code gnome has another strategy. Take the path that seems the most interesting or the most fun, whether it's completely new or something familiar. Make the path into a game and find the funny and surprising things that happen along the way. "Funny" is a kind of magic, an intuitive ingredient for transformation that opens up possibilities and leads to unexpected places.
Bonus: try tree computing, or mushroom computing if you can find a mushroom big enough.
Until next time, code gnomes. Go and be jolly.