It's been about two and a half weeks since I finished my batch at the Recurse Center, and I have a confession to make: despite those three months being some of, if not the most educational months of my life, I haven't really learned very much since then.
That's not for lack of trying. Here's a pretty comprehensive list of things I've done, or half-done, in those two and a half weeks (look for the obvious pattern, and if you're feeling up to committing more time to this blog post than I would expect, contrast it with the list of things I did while at the Recurse Center):
- Read through several books in the You Don't Know JS Series
- Read about more advanced CSS usage, and about how Sass works
- Read about React testing
- Read, like, the first chapter and a half of CLRS's Introduction to Algorithms (but I'll be damned if I haven't carried it around everywhere like I know it backwards & front)
- Read, like, random bits of random chapters from Cracking the Coding Interview
- Read random articles about distributed systems & server configuration in preparation for hypothetical interview questions
- Read about how to use Vim, printed out a Vim cheatsheet, configured Vim (already switched between Pathogen and VimPlug and fiddled with my dotfile for hours), rattled on to everyone in earshot about how I was going to use Vim into perpetuity, installed Spacemacs for an hour and then uninstalled it, installed Atom for an hour and then uninstalled it, installed MacVim for an hour and then uninstalled it, and used Vim to write real code for a total of about 1.5 hours
And so, as I'm starting this week with an implacable sense of malaise (some of which is admittedly/definitely related to the process of looking for a job) and a strong gut-level feeling of having not scratched the itch to just learn something, anything, in many days, I decided to write the list above to make very plain to myself (and maybe others, but mostly myself) the most practical and important truth I learned at the Recurse Center: you learn by doing things.
Yet, as is obvious, I've spent a lot of time recently just reading about how to do things in abstract, with the hope of that somehow quickly filling many of the gaps in my (mainly frontend) programming knowledge.
The irony, of course, is that I spent the entirety of my Recurse batch quickly filling numerous other knowledge gaps by just doing, i.e. diving off the ledge toward solvable problems I could glimpse somewhere down in those gaps. And then, after crashing at the bottom of Postgres or Python or whatever, resetting figurative bones, getting my bearings, and flailing around for a while, I had both 1) tangible, tested, working code and 2) a satisfying sense of having thoroughly learned a thing--which, honestly, is what I'm always chasing, as it's one of the few states of being that makes me reliably and deeply happy.
As an aside, I'm not knocking the value of books/documentation/fiddling/tweaking--you have to reference things; you have to be bored and listless and unproductive sometimes; you can study examples; you can avoid basic mistakes people with more experience have already made. In short, I don't think I've completely wasted my time on the things I've been doing recently. (Okay, okay, the Vim stuff was a bit much.)
On top of that, I studied literature in college, and there are large swaths of my life from which no details persist in my memory other than whatever stack of novels or poetry books I was chewing through--not much learning by doing there.
What I was trying to accomplish through reading literature all the time, though, was more comparable to what I get out of a day of hiking through the mountains than, say, attempting to grok red-black trees or composing Vim keybindings: it was about savoring the moments and maybe, sometimes, having a little light blink on somewhere internally, giving a minor but language-defying insight into the human condition.
Those types of things (and it's possible this is just me) are not exactly what I seek through learning programming and programming-related topics, because those things aren't even learning, exactly--more like some sort of refined and/or heightened form of experience.
Basically, I think I've been confusing the methods I've successfully used to get to that experience--constant reading--with the methods I've successfully used to rapidly learn programming and things like it--constant writing & doing.
So, here's a list of things I'm going to try to do to in order to learn the things I want to learn:
- Refactor some existing frontend projects by styling them from scratch (read: no Bootstrap and the like--making all the decisions myself)
- Write test suites for some existing React apps
- Test and implement basic algorithms (probably in Python), and design some flexible functions to analyze complexity
- Code and/or whiteboard a few interview problems per day, under time constraints
- Do something with Docker and/or Ansible (…!?)
- Write all of the above in Vim (even if I'm not using it in the perfect, efficient way I for whatever reason immediately expect to be able to)
Maybe I'll report back, but I'm already confident this is the more effective--and more enjoyable--way to go.