How to Learn to Code and Don't Quit as a Beginner
Tags: python, codenewbie, beginners, career
Published: 2021-01-04 19:51:35

Programming is a skill and just like any other skill (playing guitar, riding a bike or skateboarding) it requires practice. But how to approach learning how to code to have initial advantage over other aspiring programmers? In this article I will share with you tips, that every beginner should try to apply in the coding practice to minimize chance of quitting and maximize the learning outcome.

**Originally posted [here](https://codersbible.com/how-to-learn-to-code-and-dont-quit-as-a-beginner/), on my blog [Coders Bible](https://codersbible.com/).**

These tips come directly from my own experience. I believe that following at least a few can yield amazing outcomes. I reapplied all of them a few years ago, when as an established software engineer I decided to shake things up a bit and learn completely new technology (iOS programming). I noticed higher motivation and surprisingly quick learning results. Hence, you might consider these tips tested in action.

## Why?
In his classic [TED talk](https://www.youtube.com/watch?v=qp0HIF3SfI4) Simon Sinek argues that strong inner “why” is the exact reason for great leaders inspiring meaningful actions. Don’t worry, I will not tell you to write your life mission on the wall or repeat it every day before you go to sleep. All I’m advising is to spend a little time asking yourself why do you even want to bother. What’s the point? Try it on your own first, but let me tell you there are at least [17 highly motivating reasons to learn how to code](https://codersbible.com/why-should-i-learn-to-code-17-reasons-to-learn-programming/). This should help you get through during these not-so-rare days when we lack motivation to do anything. 

My top 3 reasons for which I got into programming are:

**having freedom**
Most of the software companies allow you to have up to 3 days of remote work per week. In healthy organizations, taking vacations is never something managers look at with contempt. Additionally, working hours are always flexible and the focus is not put on being mindlessly chained to your computer 8 hours a day, but rather on delivering real results.

**seeing results of my work immediately**
I graduated from the Faculty of Mechanical Engineering, where I was learning about pumps, gears, millers, pistons...I’m boring myself just writing about that. But unexciting classes weren't my biggest problem. I was consuming a lot of theory about all these big machines only to have around few hours every month to see them in action (even less time to try them myself). My friends at the Faculty of Civil Engineering had similar issues. They wanted to finally see real results of their careful calculations and planning, but due to the nature of this industry they weren’t able to. Software is not like that: learn theory, practice, apply it in code, compile and BOOM - you see the output on your screen almost immediately. Experiencing results of work in such quick manner helps to stay motivated and even amazed at things you can build with your own hands.

**receiving attractive salary**
This probably is the most obvious. Average salary of software engineer is considerably higher than for most other career choices. I want, however, to show you exactly how much higher. Under [this link](https://www.levels.fyi/) you’ll find compensation for developers in many of the top tech companies. For example at Google, as you gain experience and expertise, you get promoted through levels with symbols like L3 (Software Engineer II), L4 (Software Engineer III), L5 (Senior Software Engineer) etc. By clicking on the tiles on the website, you’ll see average yearly salaries (most of them are verified). If you wish to take a look at other parts of the world [here is the link](https://www.codingame.com/work/blog/hr-news-trends/average-software-engineer-salaries-2020-top-paying-countries/) to great article backed by data with top paying countries. And if you would like to go even further and find your country, then I can highly recommend [this report](https://www.salaryexpert.com/salary/browse/countries/computer-software-engineer) from Economic Research Institute.

## Choose a programming language
Programming language is a tool used to develop all this magnificent software helping us every day. Different tools are used for different purposes. For example Android mobile apps are usually built using Java or Kotlin. iOS mobile apps utilize Swift or Objective-C. And to create websites you can learn a bit of JavaScript (among others). But wait a minute! You’re just starting out. It’s not so easy to create a mobile or web app, because there are many other technologies you need to grasp (HTML, CSS, JSON, XML, React, Node, Android Framework, iOS Framework etc.). To not get discouraged by this complex variety you should start from something simple, yet powerful like Python!

[In this blog post](https://codersbible.com/3-big-reasons-to-learn-programming-in-python-as-a-beginner/) I described 3 top reasons to learn programming in Python as a beginner. Python is easy to learn, has a big community and you can build amazing things with it (some of the fields utilizing Python are: Web Development, Artificial Intelligence, Machine Learning, Data Science and Cybersecurity). Once you learn how to code in Python it’s extremely easy to change language to something else (like Java or JavaScript) or simply stick to it and e. g. create websites. My personal programming journey has begun with Python. Later, I smoothly transitioned to Java only to end up in the Android development world using Kotlin. Python helped me immensely. If you want to quickly try Python NOW take a look at [this free lecture](https://codersbible.teachable.com/courses/python/lectures/27715471) from my course called [“Learn Programming With Python for Absolute Beginners”](https://codersbible.teachable.com/p/python).

## Programming basics - know what to look for
Have in mind that whenever you are beginning to learn something new (like coding) there are 2 main knowledge categories to consider: 
* **You know that you don’t know** about a certain aspect of a skill (for example you are aware of the fact that there is something called variables in Python and you don’t know how to define them just yet, but you know you should).
* **You don’t know that you don’t know** about a certain aspect of a skill (for example you’ve never even heard of classes in programming, so it’s obvious that you don’t know how to use them, but, what’s even more dangerous, you also don’t know that you really should learn them as soon as possible).
The second category is tricky and can pose a challenge when reviewing content of a book or online course before deciding to buy it.

To help you, I’m listing topics that every quality resource designed to teach absolute beginners how to code should mention about. Alternatively, you can check the curriculum of my online course by scrolling down on [this page](https://codersbible.teachable.com/p/python).
1. Variables.
2. Basic and advanced operations on different data types.
3. Type conversion.
4. Boolean operations.
5. If statements.
6. For loops.
7. While loops.
8. Nesting of loops.
9. Methods and functions.
10. Functions scope.
11. Collections: lists or arrays, sets, dictionaries.
12. Operations on collections.
13. Classes.

## Learn to code with fun projects
If there is only one thing for you to remember from this article, it’s that **having programming projects is crucial in standing out from the crowd of other junior developers**. This is exactly why people are looking for online courses or other resources, which are heavily focused on practice (assignments, capstone projects). There is a plethora of websites offering cool ideas for beginners like [this one](https://www.upgrad.com/blog/python-projects-ideas-topics-beginners/), but before you choose to commit and write your first line of code be sure that your project has these traits to keep you motivated:
1. It’s fun (time really does fly by as you're having fun).
2. It’s not too complicated (it should challenge you, not make you depressed).
3. It’s made for somebody (make something even a tiny bit useful for you or your friends).

Personally, I’ve coded a lot of side projects. **The two that I’m about to mention are intermediate or maybe even advanced (I created them years after learning how to code)**, but for me they had all necessary traits:

**Boardly - an app for meeting local board game players**
One evening in 2018 I decided to help board game players. This amazing community had troubles meeting each other on a regular basis and deciding which games to play. Boardly allowed them to quickly find local board game buddies. Thanks to this project I’ve had an incredible opportunity to meet a ton of passionate people. Boardly also helped me to get a new job.

**BeerAI - an app for recognizing beer labels using AI**
This was a side project, which later became the basis of my engineering thesis ([here is my engineering thesis about AI](https://github.com/matdziu/Engineering-Thesis/blob/master/GOTOWA_PRACA_DYPLOMOWA.pdf), first few pages are in Polish, but the rest - over 30 - is in English). The idea was to create a convolutional neural network in Python and train it to recognize a beer brand based on a photo of the label. It worked! It was supposed to help beer-geeks choose their beloved beverages easier.

## YOU choose the programming teacher
Whenever you choose an online programming course, bootcamp or a book, what you’re effectively doing is choosing a person behind it. It’s hardly surprising since this teacher will be present in your life, in some shape or form, for the next few weeks or even months. It’s like a date, so while doing research pay attention to the way the knowledge is transferred, tone of voice, energy, promised transformation (especially important) and professional background. This can be easier if the author shares an excerpt of his or her work in the form of a blog, free chapter or free online course module.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bz1f2mgu0n5x8k6w8ioc.png)
Above is the transformation I designed for students of [my programming course](https://codersbible.teachable.com/p/python).

## Join a community of programmers
In [one of the lectures](https://codersbible.teachable.com/courses/python/lectures/27715505) of my course I talk about [StackOverflow](https://stackoverflow.com/). StackOverflow is the most popular Q&A website for programmers. Over the years it accumulated an incredible amount of knowledge in a ridiculously simple form. One person asks a question and other people answer it. Later, the community votes for the best answer and chooses the correct one. All of that is publicly available and easy to find using Google. But this is not the only community that can help you along your IT journey. 

Facebook groups about coding can become your preferable way of finding first job, learning about IT news, asking questions or looking for recommendations about tutorials, online courses and books. Use Facebook search option and type “programming”, “Python” or “Java”, then switch results to groups. You can also visit some groups directly like [Coders Bible Support Group](https://www.facebook.com/groups/codersbible/). 

Lastly, never neglect the power of face to face contact and networking. Use [Meetup](https://www.meetup.com/) to learn about new technology events organized in your city. They are often filled with people eager to give you advice. Organizers usually take care of finding 2-3 speakers, which are willing to share knowledge on stage.

## Correct mindset when learning how to code
I’ve recently stumbled upon [this](https://www.youtube.com/watch?v=5MgBikgcWnY) TED talk and I think, that the most important thing I learnt from it was this:

> The major barrier to skill acquisition isn’t intellectual...it’s emotional.

Learning something new is hard and most often we quit not because we are not smart enough, but because we are not resilient enough in the face of adversity. Your mind plays tricks on you and here are few of them to watch out for while learning programming:

**frustration barrier**
Frustration barrier is the unpleasant feeling we get when we are starting to learn something new (and we obviously suck at it then), but instead of commiting, we spend time looking at somebody who is a master of that skill. When I was learning to play guitar, looking at Jimmy Page's concerts made me feel like a complete idiot and forced me to quit a few times. But the way to overcome this is by having a certain learning schedule. Set a goal of learning programming for at least 4 hours a week. Uninterrupted, focused, deliberate practice no matter what. This shifts focus from comparing yourself to others to comparing yourself to...yourself from a few days ago. Frustration barrier is bigger in our minds than in reality and each of us can wait it out with a little bit of will power.

**distractions**
Instagram, Snapchat, Facebook, Netflix, YouTube, Gmail and more. How to fight notifications coming from these apps and websites? The answer might surprise you: turn them off! Make it harder for yourself to get distracted by physically separating yourself from the source of distraction. When you want to focus on learning how to code between e. g. 10 AM and 11 AM, then to prepare yourself for this session sit in a quiet closed room, turn off your phone entirely and use a plugin like [BlockSite](https://chrome.google.com/webstore/detail/blocksite-stay-focused-co/eiimnmioipafcokbfikbljfdeojpcgbh) to disable certain websites. When you realize you drifted off either way, be gentle to yourself. Notice that and bring attention back to learning. You’ll get better with time.

**learning is a new procrastination**
[In his article](https://medium.com/the-coffeelicious/why-learning-is-a-new-procrastination-104b53107e8b), Max Lukominskyi says that “Knowledge is worthless unless it is applied.”. And later adds: “You consciously postpone the first step justifying this by your eagerness to broaden the knowledge and learn new things. You put the start date off justifying this by your desire to pick up new skills that would help you succeed faster. You procrastinate over chasing your own aspirations because doing the things on your own and creating your own story of success is far more complicated than reading about someone else’s one.”. That’s why books about programming are tricky, since they usually provide you only with theory whereas the thing that you need as soon as possible is practice! Keep that in mind while learning to code and always look for proper balance between consuming knowledge and applying it.

## Are you ready for a job in IT?
I often get asked by aspiring programmers “When will I know if I’m ready for my first job?”. I’m not the one to ask. The single source of truth that determines if you are ready is the job market itself. Want to know what you should learn to get an internship? Read requirements from 10 entry job advertisements available in your country. Want to know if your CV is well designed? Send 10 CVs to potential employers and if none of them replies, then you’re probably not there yet. Want to know if you have necessary knowledge? Have few interviews or programming tests (even the ones available online) and ask for feedback. I know it’s important to look for guidance and, don't get me wrong, you should do it too. But the ultimate answer to your questions lies in trying for yourself. Even if you don’t feel you’re ready. So my final advice is to have constant contact with the job market in your country. Despite feeling a bit awkward :)