Since October of last year, I've been diligently studying programming, I've done so on and off over the past few years, but took a very in-depth course in October that helped put me into gear. I've also met a few people who have been willing to extend a hand and help me get a footing in the field and for that, I'm ever thankful.
But as I approach learning for a year, I was wondering: how do I know I'm getting better? Luckily, I stumbled upon this great essay from Julia Evans about celebrating tiny learning milestones that answered this exact question. Evans writes:
Hello! Today I want to talk about – how do you know you’re getting better at programming?
One obvious approach is:
- make goals
- periodically check if you achieved those goals
- if you did, celebrate
She goes on to explain the cons of setting vague goals like "learn a new programming language" or "write enough code that's useful for someone." Why do you want to write enough code that's useful for someone? What's the point of learning a new language? Does it do something you can't already do? The fact that these questions aren't clear leaves room for vague interpretations, and with them, unmet goals.
What to do instead
Instead of setting goals, Evans encourages celebrating tiny milestones. She explains the etymology of the word in that it's stones placed every mile along a path so that you know how far you've travelled.
Instead of something grandiose like "learn a new programming language", a tiny milestone might be using a new tool or fixing a new type of bug you've never seen before.
Some of my developing milestones
Here are some examples of my tiny milestones from the last year.
- Learned how to read API docs and make API calls
- Built a simple YouTube clone that lets someone search for a term and gets back the related videos
- Built a small calculator that helped me practice updating the screen on button clicks (something I've always wondered)
- Learned the basics of Tailwind
- Learned how to deploy a site on Vercel
- Learned how to read the vague errors Vercel gives and troubleshoot production errors that I didn't get in dev
- Implemented prettier and ESLint on my codebases to learn how to write cleaner code
- Understood the importance of git and how to use CLI tools for version control
- This is a bigger milestone, but built my blog using Next and Tailwind.
Why I felt stuck
Getting into development can be very intimidating because of the abundance of information out there. There are so many programming languages you can start with and varying advice about where to start depending on what website you read. Most of the time once you get started, everything is so abstract that you're not really sure how it all comes together. Once I finally stuck to a course (this one) and got over the initial confusion by just telling myself "Keep going and it will all make sense" everything seemed to click!
Now that I know enough jargon to understand some of the abstract concepts, most of my tiny milestones happen by accident. For example, this weekend I was trying to write a function to check if something was true and if it was, return an object with certain key-value pairs and if it was false, return an object with different key-value pairs. Writing the function was easy enough, but then I was confused on how to actually access that object later when I needed the results of the function. I did some research and understood I had to call the function and then just chain the key of the property onto the function. Now I'll know how to do this in the future.
I may have learned something like that in a tutorial, but it didn't stick because I didn't have to really learn it.