Learning to program means learning to manage your emotions in an alien environment
If you're coming to programming from a non-technical background, the first thing you should do is update your learning philosophy to make sure you don’t overwhelm yourself into quitting.
If you're coming to programming from a non-technical background, the first thing you should do is update your learning philosophy to make sure you don’t overwhelm yourself into quitting.
Although, I can’t say it guarantees success, the right frame of mind has helped in reducing the chances of me quitting out of sheer frustration.
The “learn -> do -> get-stuck -> learn” cycle
I believe that every satisfying learning experience happens when you can apply what you learn and see the results.
When it works, it creates a very rewarding cycle as shown below:
You can contrast programming with other non-technical disciplines in terms of how the learning cycle looks for them.
Learning cycle in Marketing
Let’s take Marketing as an example. If you’re a Content Marketer, your job is to create engaging content that engages as many of the target customers as possible. On a typical week, your job probably looks like this:
Writing or working with writers to create new pieces
Editing or working with editors to refine the pieces
Analyzing success of previous articles using tools like Google Analytics
Managing a schedule of future publications
Posting the content
Notice how there’s almost no learning involved in a typical work week. That’s because the tools rarely change. The English language doesn’t change, the art of writing well is timeless and even the analytics tools barely change on a weekly basis.
Even when learning is involved, the 'learn-do-getStuck-learn' stages cannot be as easily identified as in programming. This is because a content marketer gets generalised feedback on all of her actions in terms of engagement numbers.
You may pick up some new tactics to create more engaging content. For example, this one about creating “curiosity gaps”. But you can’t tell if it will actually improve the output of your work. Atleast not in the short-term.
I would argue that’s the case for any non-technical profession like content marketing, social media marketing, community management, podcast production, project management, customer support etc.
Learning cycle in programming
Contrast this with programming, where you get specific feedback for every action. A visual one if your feature works. If not, a detailed one from error logs.
Programming involves constantly finding yourself in the need to learn new things to make progress in your work. And not just as a new programmer. The tools are so vast and constantly evolving that you need to continuously learn new things as you work.
If you are switching from content marketing, know that this does not merely mean that you will have a sense of progress in the short term, but that you will get stuck more often than you are used to.
This makes programming more like playing a new video game
Ever played a new video game?
In the past couple of years, I have picked up 3 new games - Fortnite, Factorio and Subnautica.
All of them have a similar premise - you are (literally) dropped off in an alien land. You have no idea:
what enemies lie ahead
how to use the tools you have or
how to upgrade to better tools.
All you know is you need to survive.
When faced with such huge quantities of unknown, it quickly gets overwhelming, frustrating and hopeless. So, a big part of your success relies upon how well you manage your emotions in the alien environment.
The only good strategy is to – have a bias for action, not knowledge. This means:
Moving ahead with incomplete information
Being comfortable with the feeling of being stuck
Learning just what you need to get unstuck
Back to step 1
It’s the same for programming. All of this learning is scary, frustrating and overwhelming at times. But this is also what makes it fun!