How to teach yourself Programming

Jackie
7 min readMar 16, 2021

An action plan based on my personal experience

TL;DR

  1. Decide what you want to learn
  2. Have a long term vision, a medium term plan and a daily schedule
  3. Invest in online courses if you can, it saves you a lot of time
  4. Try to get hands-on experience as soon as possible
  5. Study data structures and algorithms as if you’re preparing for an interview (even if you’re not)
  6. Go about achieving your goal: apply to jobs, build your business or start your freelancing journey
  7. The learning never stops

In March 2019, I realised programming is one of the most powerful skills one can have and decided to start learning how to code. I’ve put together this guide based on my own experience in hopes that it can help other self-learners out there.

Some context on my programming journey

I have a bachelors and masters in Mechanical Engineering with focus on numerical simulation. I did simple matlab coding during university. I finished my studies in 2018 and got accepted into an aerospace engineering graduate program at Rolls-Royce.

One of my closest friends used to be a FAANG software engineer and he gave me a lot of guidance on how to learn programming.

At work, I started to volunteer to write python scripts to automate data analytics tasks while I was working in Aerodynamics. After 7 months of starting to learn at home, I managed to do my last graduate placement at a development team, thus getting my first official CV-worthy software engineering experience there. I continued to study at home and 1 year after starting, I got an offer to join another team at the company as a software developer.

In 2020, I also started building a web application with 2 friends (edgesheet.com) and got to learn a lot about the cloud, serverless architectures and scalability.

While I wrote this guide to apply to anyone, it is still based on my own personal experience and I had a lot of help during my learning process thanks to my friends. Please make sure to think critically and adapt this advice to fit your own situation. We all start from different levels of experience, the only competition should be with ourselves :)

The learning guide

I wasn’t 100% sure if I wanted to become an aerospace engineer who could also code, a full-on software engineer, or a data scientist. I decided to start by learning web development, since this is an area where you can easily start building projects right away.

  1. Decide what you want to learn

There’s data science, web development, blockchain, cybersec, etc — if you don’t know yet, I suggest starting with web development. What you’ll learn will be useful in all the other areas as well.

2. Have a long term vision, a medium term plan and a daily schedule

Dreams without goals are just dreams.

Decide on a goal — this should be your why. Ask yourself why you want to learn programming. Doing it for the money and career prospects is totally fine in my opinion, but you might have a bad time if you don’t enjoy it. Your why has to be strong enough to withstand all the frustrations and difficulties.

Study plan — create a study plan and set some milestones for yourself. Create small goals you can cross along the way.

Daily schedule — I suggest setting aside at least 1h everyday to study programming. Make your schedule work for you and your lifestyle and adapt it when needed. Remain flexible but disciplined.

I learned while working a full-time job and commuting for 2h every work day. Through planning and organisation, 1h a day should be possible for everyone.

After 1 year, you’ll have at least 365 hours of coding practice under your belt. That beats the sh*t out of 0.

3. Invest in online courses if you can, it saves you a lot of time

This links back to your study plan. There are many study plans available online and you can simply copy someone else’s plan. But when it comes to the content itself, I found that filtering all the information on google takes way too long. There are many free learning sources out there, however the ones I tried seemed to lack proper hands-on projects, so I decided to buy myself some better guidance and got a 1 year Codecademy subscription.

You can check Coursera, Udemy, Codecademy, EdX, Educative and many other websites that have plenty of good quality courses, some of them for as low as $10 during flash sales. Make sure to check the contents, the reviews and the teachers’ experience before making a purchase.

The other advantage of these courses is that some of them will even show you what you didn’t know you needed to learn — things like using the terminal, bash, git, writing tests, and other things we don’t know about when starting out.

4. Try to get hands-on experience as soon as possible

It’s important to learn the basics before working on real projects. However, I suggest not spending too many months on tutorials and exercises.

The truth is, one learns how to code by coding. And from my experience, nothing will teach you better than real life projects.

If you have friends who also code, try to build something together. Hands-on experience can come from building a personal project, getting a beginner’s job or internship, a freelancing gig or contributing to open source.

The goal is to learn and get some coding momentum going. If you can build something to add to your portfolio/CV at the same time, that’s great.

5. Study data structures and algorithms as if you’re preparing for an interview

Studying data structures and algorithms is an essential step in learning programming, independently of whether or not you’re expecting to do a coding interview. This will teach you how to think and solve complex problems in efficient ways. While getting into your first programming language, you will naturally learn some of these straight away, such as arrays, strings and hash maps. However, from my personal experience, it’s better to study this thoroughly once you have gained some momentum in coding.

If you have to google how to do a for loop, it will be very difficult to solve leetcode questions and you will get really frustrated.

6. Go about achieving your goal: apply to jobs, build your business or start your freelancing journey

Once you feel like you can write clean, structured code, you have a good overview and understanding of your field and you are proficient in data structures and algorithms, I believe it’s time to try to go after your initial goal. If you’re applying to software companies, you will probably need at least one or two good projects on your resumé in order to be invited for an interview.

Try to fail fast and learn from your failures. And remember that they are just as much part of the process.

7. The learning never stops

I don’t think you have to learn all the new frameworks and technologies that come out. However, it is good to stay in the tech loop by reading tech blogs and news. An easy way to do this is to simply follow tech companies and reliable news sources on Twitter — or any other account that provides good quality, informative content.

Keep in mind that 70% of programming is googling how to do stuff and reading documentation so you can implement features and work with things you’ve never worked before. I used to find this really scary, but the truth is once you’ve worked with 2 or 3 APIs and frameworks, you’ll start recognising the patterns and you’ll be much faster at learning and implementing.

Extra helpers

I get asked frequently about my own schedule and courses I did so I’ll leave some snippets below. Most of what I know about the cloud, system design, scaling systems, devOps and testing was learned hands-on while building my own app EdgeSheet.

In addition, I’ll end this story with some book recommendations:

  1. Designing Data Intensive Applications by Martin Kleppman — this is an amazing book that will make you understand how complex distributed data systems really are.

2. Clean Code by Robert C. Martin — principles behind good quality code.

3. Building Microservices by Sam Newman — everything related to service-oriented architectures, a type of software architecture that’s used a lot in bigger web projects.

4. Design Patterns by E. Gamma and others — a classic about object-oriented programming and common implementation patterns.

Some Courses and Career Paths I did on Codecademy (1). Career paths range from 200h to 300h, whereas courses are much shorter.
Some Courses and Career Paths I did on Codecademy (2). Career paths range from 200h to 300h, whereas courses are much shorter.
20h Data Structures and Algorithms course I did on Udemy

--

--