Three Essential Steps for Aspiring Programmers
Dylan | May 27, 2019
Self-taught developers have the additional challenge of building their own learning path. This lack of structure can easily become overwhelming and stifle passion and interest. Which language should I learn? Which book, course, or tutorial will teach me everything I need to know?
Step One: Choose a Language
The first language I stuck with was Python. Python is a fantastic balance between simplicity and capability for general purposes. Python’s extensive libraries allow the language to successfully tackle many programming challenges.
When I heard this recommendation as a beginner, I still wasn’t convinced Python was the best place to start. Maybe you have similar reservations, perhaps you’re thinking:
“Python is cool, but what if my eventual dream involves programming complicated video games using a game engine built on C++?” If that’s your dream, learn C++.
“But I’ve heard Python isn’t great at mobile development, what if I have a million app ideas waiting to be developed for Google Play?” If you’re passionate about Android Development, learn Java.
The important decision isn’t which language to learn first, rather the important decision is to select one language and stick with it long enough to begin solving real problems.
Whether you’re aware of it or not, choosing not to decide on a language has a detrimental impact on achieving your learning goals. Whenever you decide to learn something, you’re wondering if it’s the “right” thing to learn instead of focusing on learning whatever it is.
There are essential programming concepts that carry over despite language and specialization and mastering these concepts (regardless of language) will drastically reduce the amount of time necessary to learn another language down the road.
If you’re a beginner who still hasn’t committed to learning a specific language, pause now and choose to commit to one language. Don’t worry about making the wrong choice. The only wrong choice is refusing to commit to a language.
Step Two: Choose Learning Materials
If you’ve completed step number one, you’ve made a pledge to learn one language well enough to get at least a couple of projects under your belt. Congratulations! It’s locked in. Pat yourself on the back and take a deep breath, you’ll no longer be burdened by that difficult decision.
Now that step one is out of the way, how should you go about learning your selected language? To a certain extent, this is largely a matter of personal learning preferences. Do you prefer learning from textbooks, videos, written tutorials, and/or step-by-step interactive web services?
Perhaps you’ve never attempted to learn via any of these methods. In this case, some cautious experimentation might be required. I use the term cautious due to the same trap you had to overcome in step one.
Just like beginner programmers often get hung up on choosing a language, they’re also prone to second-guess their chosen method of learning. They may complete the first few chapters of a basic programming book before deciding the YouTube series posted on Reddit seems like a better place to start.
Resist the urge! Understand that at this point, the most essential part of becoming a programmer is to build a general understanding of the most basic principles. Get to know how a basic for-loop works in your chosen language.
If you spend too much time bouncing between resources, you’ll never actually make it far enough in any of them to learn all the essential pieces you’ll need to solve real-world problems.
The goal at this point really isn’t to become an expert, just to build a general understanding of the fundamental concepts of programming in your language. If you’re still afraid you chose the “wrong” language, remember that these fundamental concepts will carry over into any other language you decide to learn.
Step Three: Start a Project
As I’ve shared in previous posts and I’m sure I’ll share again in the future, I believe the absolute best way to learn how to program is by programming. Although this may appear obvious, it can be difficult to implement in reality due to any or all of the following reasons.
For most people, failure isn’t fun and most people make great sacrifices to avoid it. Unfortunately, what’s often sacrificed is personal fulfillment and happiness. You can’t fail if you don’t try.
The most important lessons arise from failure and debugging code strengthens your understanding of it. So much of programming originates from being able to “think” like a programmer and design solutions in a manner that harnesses the strength of computers.
The only way to develop this skill is by tinkering, experimenting, and even failing. What do you think reinforces the syntax of ending a line with a semicolon better, reading about it in a textbook a few times or having nasty errors cluttering your screen every time you forget?
The Tutorial Trap
Beware of the Tutorial Trap. Some beginners equate “learning” with tutorial completion. Copy and pasting code seldom teaches you much if anything. Programming is engineering efficient solutions to unique problems. Real programming is not simply copying code.
Now, some might think they’re learning more by typing the code themselves into their text editor from the tutorial. I would agree that consciously processing each line with the intent to understand what’s taking place is far better than mindlessly copying and pasting; however, this provides nowhere near the same learning value as learning through tinkering, formulating your own solutions, experimentation, and failure.
Lack of Creativity
Project ideas often arise out of inconvenience. “If I had a program or app to do this, it would free up so much time.” These types of projects might include writing a script to alphabetize the bibliography of your thesis.
Another source of project ideas stems entirely from the curiosity of your limitations. “I wonder if I could…” can become a high-interest project. Whether programming that little 2D game concept, building a bot to play Tic-Tac-Toe, or making a program to correctly identify handwritten numbers.
If you’re still drawing a blank, you can read about my first 5 projects that I completed as a beginner and if none of them interest you, there are massive collections of programming project ideas for every skill level readily accessible by Google Search.
Unsure How to Tackle the Problem
You’ve managed to find a programming project that interests you but you’ve only ever followed along with tutorials with their provided solutions. Now faced with the challenge of building a little Tic-Tac-Toe game to play with your friends, you’re completely directionless. The first step is to break the project down into smaller steps.
First, you’ll need a way to store each player’s moves. Then, you’ll need something to display the board and update it after a player takes a turn. Next, you’ll need a way for the player to make a move, whether it’s clicking on their desired square or typing in the square’s coordinates.
If you successfully completed step two and learned the basics, you’ll probably have a general idea of how to solve each of these smaller steps. At the very least, you’ll likely know which direction to explore. The first problem could be solved with a 2-dimensional array, the second by a function to print the board into the console or an external library like Pygame, and so forth.
Tie It Together
After completing these three steps, you’ll be well on your way but not done just yet! Step three is meant to be repeated over and over. This will enable you to build a portfolio while simultaneously learning a programming language and more importantly how to think like a programmer.