Welcome to our two-part series on techniques to successfully learn computer programming. Our previous post discussed the importance of creating the right mindset. This will clear away friction and point you in the right direction. Once you’ve done that, it is time for action.
What next steps are best, to propel you down the road in a journey ‘from n00b to ninja’?
1. See the big picture and understand the why
When you start learning a new area, you are exposed to hundreds, even thousands, of details. Without an understanding of the overall system, these details won’t make much sense on their own. So, before you dig in on any details, make sure you can describe – in common words – the big picture surrounding that particular spot.
As an example, let’s say you want to build web systems and are learning Python. Before digging into Python syntax, you should solidify your understanding of how web clients and web servers interact. Having a good feel for what web servers do will give you great instincts – before even getting started – about what your Python code will need to accomplish, and hence which details really matter.
Here’s a more advanced example. To best understand Git commands related to software branching, we need to first understand the following questions:
- What is a software branch? (a separate copy of the source code)
- What do they do? (allow you to make changes, isolated from the changes of others)
- Why would you want or need one? (without a branch, disruptive changes by others slow you down; with a branch, you ‘work in silence’ and combine with others later)
- What eventually happens to branches? (all changes in a branch must be integrated back into the ‘mainline’ one change at a time, or else be discarded)
I’m intentionally using an example that may very well be unfamiliar to some readers because I want to illustrate the power of the big picture when learning a new subject. Even if you haven’t yet used branches, understanding their general purpose up front should help you categorize the different features (creating branches, checking code into my branch, moving my changes to the parent branch, etc). In general, an overall context increases your ability to understand and retain new details in that area.
2. Focus on one idea at a time
Those that have mastered their craft (be it writing software or sculpting marble) tell us that the key is to understand the small aspects and do them with high quality every time. In your quest to learn to program, you want it to become second-nature, so identify the most important basic tasks, pick one, and use it over and over with slight variations. Don’t move on to the next ‘basic’ until you understand the current one, inside-out.
Example: when first learning to translate ideas into code, you might create a list of building blocks such as variables, loops, conditionals, functions, parameters, and arrays. These concepts are essential to everything else, so it makes sense to focus on one at a time (loops, let’s say). Create small snippets of code that use (and even misuse) loops in every way you can think of, and step through this code line-by-line. Don’t move on until you can predict exactly how the code will behave in all circumstances. Drawing a parallel to how musicians learn, time spent ‘in the woodshed’ focused on practicing just one thing at a time is what leads to that one thing feeling as natural as breathing in and out.
3. Combine building blocks; become a lego master
OK, let’s say that you’ve become really comfortable with every basic concept on your list. You feel like you know as much as possible about each area individually. Now what? Now start using these basics like the reusable building blocks they are.
In the example given above, now you should combine loops with conditionals with arrays. As before, you would combine these ideas in as many different ways as you can think of until you can predict every last aspect of how they behave.
Another example might be: after learning 1) how to store information into a database and retrieve that information in various ways, as well as 2) how to communicate data between web clients and servers, now it is time to put these together. Create a set of client pages and server code that can receive input data from users and push this into the database, and conversely retrieve different sets of data from the database and display them in your client web page in various ways. Guess what – you’ve just created a full-stack web system!
Using multiple ideas (called integration, in learning science) deepens your understanding and eliminates gaps. Before, you may believe you know these ideas well, but after explicitly combining them in this way – using them like a lego master – they will really become yours.
4. Work with others
Once you’ve become familiar with the fundamentals of a technical area, you’ve formed some good ideas about how to use these basics to solve problems. Remember that there are many ways to solve any problem, and by working closely with others, you learn other approaches. So, the next step in your journey toward mastery is to find a kindred spirit that shares your interest and make them a partner in your learning experience.
Here is the important part: focus on working together, not just working in parallel. When you really rely on a partner, you get a close look at his/her strengths – so take advantage of this and learn from them. If your partner always starts with database design, while you tend to begin with user experience (as an example), don’t just agree to disagree; talk it out. Probe until you understand their thinking (e.g. changing the database later can be disruptive) – and encourage your partner to do the same. Often, both ideas are valid, and you’ll likely be asked a question you’ve never considered. Together you may even create a completely new approach. In any case, both of you are deepening your understanding.
Once you and your ‘learning buddy’ understand each other well, then guess what? It’s time for you to move on, to someone new. To become – and remain – a master, you should always look for the next opportunity to learn and grow.
5. Keep challenging yourself
At this point, you will probably feel great about your campaign to conquer a new area. You’ve worked with different ‘kindred spirits’, and you have a collection of deep and broad skills that you can use in flexible ways. Remember that gaining a new expertise is not a one-time push; it’s an ongoing endeavor. Mastery can atrophy over time, so don’t let that happen. Even experts look for new ways to challenge themselves.
Find interesting local Meetups and talk with other experts. Go to hackathons. Think about interesting unsolved problems in your area; seek others that are trying to solve them and see how you can help. Contribute to open-source projects – including frameworks themselves. Look for volunteer teaching/mentoring opportunities: these deepen your understanding as you help others. Be on the lookout for emerging technologies to integrate into your toolset.
As you incorporate new technologies, repeat this five-step cycle, in shorter and shorter cycles. Keep the overall big picture in mind; start with isolation; follow with integration; work with others; find the next area and push toward it. With this pattern, you can flexibly incorporate new technologies and use familiar ones in new ways.
To summarize this two-part series: at the beginning of a journey toward becoming a software developer, willpower is your strongest asset. With this and a roadmap (perhaps created by a coach), you must stay focused on specific actions to move forward.
These actions including 1) creating a mental map of the system and keeping it constantly in mind, 2) focusing ruthlessly on new aspects in isolation, then 3) integrating these with your existing knowledge base. Keep moving forward by 4) proactively seeking out and working with others, and 5) always looking for new venues and ideas to stretch yourself.
Create a system, and stick with it – you can do this. You’re a ninja in the making! If you are looking to quickly turn those intentions into actions, consider attending Coding Dojo where we can take you to the next level.