A Guide For New Programmers (Part 2)
11 min read
First things first, if you haven’t already done so, be sure to read my first post in this series for a little more context.
Otherwise, jumping straight in where I left off...
How I learn new things and continue to develop my programming skills
Back to the bootcamp
One of the first things that was drummed into us from Day 1 of the coding bootcamp was that it’s not really the language or framework you’re learning that’s important. It’s much more about meta-learning i.e. learning about learning, and more specifically, learning how you learn.
I can’t say it clicked immediately. When I first started, I was learning all sorts of new things I’d never come across before - command line, git, Ruby, Ruby on Rails, APIs, for loops, switch statements, MVCs etc. and it just seemed like there was an overwhelming number of things to learn, for say just Ruby alone! Forget about learning how to learn, I just needed to buckle down and learn about Ruby!
And whilst yes, there is an element of having to do that in the early days, I soon reached a point where I realised:
- I was never going to be able to memorise all of these things;
- Programming languages and frameworks follow certain patterns; and
- There’s this thing called Google and the Internet which helps you find the answers and things you might need.
Why meta-learning is so useful
To give you a concrete example, I started by learning Ruby as my introductory programming language. You learn about:
- Types like strings, integers and booleans;
- Data structures like arrays and objects; and
- Data flow using if statements and loops (amongst, of course, a whole host of other things).
I spent a lot of the early days perusing the Ruby documentation, learning about how you manipulate data with the various methods and notation. This was 100% time well-spent as it taught me a lot about the lower level workings of the language, which is useful as a beginner. However, in the years since, I’ve stopped programming in Ruby and now use Python and JavaScript as my day-to-day programming languages... so what’s one to do? Read through all the Python docs and JavaScript docs? Take another bootcamp for those languages?
Well maybe yes, if your role requires you to learn a particular language for its very specific features, but I’d guess that for most people this isn’t the case. When I first had to code in JavaScript and Python, guess what? They’ve both got concepts of types, data structures and data flow as flow. When I sat down to work on my first Python repo then, rather than having to spend days reading Python docs and practicing methods, it was really more about recognising core programming and software development concepts, figuring out the initial questions to ask, and then using the internet to find relevant resources and iteratively improve on the phrasing of those questions to get me closer to the potential answers I needed.
It’s similar with frameworks by the way. I started with Ruby on Rails, where I learnt about concepts like Model-View-Controller (MVC), relational databases (Postgres) & ORMs, and how routing works. Since working with Python, I’ve had to learn FastAPI and Django. And this was all for a new job I accepted, which meant I didn’t have the luxury of taking my own sweet time to learn them - I had to figure out how to get up to speed ASAP (and not least because I had a probation period to pass lol). 🙈
People learn best in different ways, so once again, the only thing I can do here is communicate what I did (and continue to do), to learn quickly and level up. One quick aside before I start - you can of course, choose to stick with the same programming language / framework and gain expertise in one thing. Just always be aware that technology and how we develop software moves extremely quickly, with languages going in and out of fashion, and different problems requiring different languages to solve them. I’d also say that the meta-learning skill can be applied to other areas in your life, where you might be trying to learn something new. e.g. I’m teaching myself how to play the drums and it’s been brilliant.
Julia’s method
Here are the steps I tend to go through whenever I want to learn something new. To help communicate what might be fairly abstract ideas, I’ll use two examples: (i) learning a new framework like React; and (ii) learning how to play the drums.
Step 1: Figure out the core concepts that underpin the foundations of what you’re trying to learn
This step is essentially about trying to get a list of the fundamental concepts that underpin what you’re trying to learn, as quickly as possible. What’s the minimum set of ideas / core concepts you need to understand, to be able to deliver something that works? Filtering out the unnecessary allows you to focus on what will help you make the most progress in the shortest amount of time. Making progress quickly keeps you motivated to keep learning.
- Resources I tend to use for this step
- Short YouTube videos to get a quick demo / lay of the land.
- “Experts” who’ve been there and done that, like senior developers and industry influencers - ideally someone you know and trust.
- Paid coaching - can be expensive, but potentially saves a lot of time as you don’t then have to filter out bad information yourself.
- Examples
- React: understanding component lifecycles and props vs. state, so I can get a parent and child component rendering on screen with dynamic information. 👩👦
- Drumming: learning how to count beats and get basic limb independence for the snare drum, hi-hat and bass pedal, so I can play an 8-bar beat for a classic rock song. 🎶
Step 2: Practice those concepts in “real world” scenarios
Once you’ve identified what you need to learn in the first instance, begin actively practicing them. You can start by reading about it or watching videos, but try to move on to actual “doing” as quickly as possible, as it forces you to think about how to do something, which in turn aids with better retention.
What I also try to do is practice in different environments, with each progression getting me closer to a “real world” application. Why? Because real world problems force you to think more realistically about what you’re trying to do, and what you need to learn next to get there. i.e. it guides you to learn with context (which I’ve found to be so much more effective, vs. learning from set examples). Sandbox problems are great to start, but you’ll reach a plateau in your learning if you stay there.
Playing around in different environments also gives you the chance to apply your knowledge in different contexts, which helps build your mental model of how something works. It’s also immensely satisfying to be building something that solves a real problem, as opposed to just working on something for the sake of it. 🙂
- Potential resources
- If you’re learning a new programming language, HackerRank / CodeWars / LeetCode.
- Reading through your company’s code repo and working on tickets (can be intimidating, but it’s effective).
- Similarly, find relevant open source repos, read through the code, and contribute what you can.
- YouTube videos for finding ideas of what you can build and walking you through the steps (but do this actively, rather than just sitting back and watching).
- Examples
- React: the usual - build your own To-do app or a weather app. 😉
- Drumming: pick a song you want to play, and start jamming. 🤘🏻
Step 3: Structured learning
If you’ve been learning in real-world environments, you’ll soon begin to realise how much there is that you still know nothing about. It’s really easy to start losing hope at this stage, but don’t! Take heart - this is a great sign of progress because it shows you’ve been pushing your boundaries and dealing with real world complexity, which is, of course, not going to be easy.
The important thing to note here is how to structure your learning so you don’t get bogged down in trying to pursue too many things or the wrong things. This starts with developing the skill of asking the right questions, because once you know what those are, it’s generally pretty easy to find the answers by using Google or YouTube search. It will be an iterative process, which gets easier over time, the more your mental model builds.
What I’ll tend to do is the following:
Come across an issue to solve. Keep Googling until I find potential solutions that solves the one issue I’m trying to solve.
Along the way, I’ll make a note of topics I come across, which I don’t know / understand, and that I want to do further reading on. However, I won’t spend a lot of time on those yet, as it’s easy to get bogged down, without even knowing how crucial it is to know those things at this stage.
I’ll continue just Googling and learning only the things necessary to solve my immediate problem. Each new puzzle solved adds to my mental model of how I think [React / drumming / whatever] works. After a while, when I feel like there’s too much on my “to learn” list, or if I’m finding it hard to piece together new information to add to my mental model, I’ll look at finding a learning resource that deep dives on the topic, in an organised way.
I’ll try to choosing a resource that’s active, rather than passive, because once again, it really helps things stick if you’re actively working through an issue. What I’ll generally find at this point is that I’ll be able to speed through materials, as there’ll be a lot that likely just serves to confirm (or correct) your mental model of how something works. At other points, you’ll hopefully get “a-ha” moments that allows groups of ideas you were struggling with to unlock and make sense.
Potential resources
- Paid learning platforms like Udemy and Skillshare.
- Free learning platforms like freeCodeCamp and Coursera.
- Courses from industry experts from platforms like Frontend Masters.
- Books on a subject matter.
Examples
- React: Kent C. Dodds Epic React course ⚛️
- Drumming: Going through the Drumeo Method course 🥢
Step 4: Continuous learning
By this point, you should have gotten a good understanding for the new skill you’re trying to learn. You’ll also have realised there’s still a seemingly infinite number of things that you don’t know...so the learning doesn’t stop.
This step should actually underpin all of the previous steps, as I’ve found that it helps keep my learning current and relevant, along with giving me new ideas and resources that helps further propel my learning. It’s all about consuming materials to diversify my sources and serves as unstructured learning, to fit around what I might be doing in the previous steps e.g. whilst I’m bored, going for a jog or commuting.
Here’s an ordered list of the resources I tend to use (from most to least used)
- Podcasts
- Books
- Newsletters
- Blog subscriptions
- YouTube channels
Examples:
- React: JS Party podcast, The Opinionated Guide To React book, React Status newsletter 📕
- Drumming: Kristina Schiano YouTube, Drumeo 🥁
Miscellaneous tips
- Take breaks when you’re not actively thinking about what you’re trying to learn and allow your brain to go into diffuse thinking mode. Ideally do something physically active, move your body and get a sweat on.
- Get adequate, good quality sleep.
- Stay hydrated.
Phew, that was a long post! Once again, this is just my method, and what I’ve found works well for me. If you’ve got any suggestions, or have found specific methods that work for you, I’d love to hear from you. Also, if you have any feedback on how I might make my post clearer, give me a shout.
Up next: What I’d do if I was starting out today.