Krzysztof Witczak

How to start with programming in 2022

October 12, 2022

When I started my journey with programming around 2010, I didn’t know exactly how to start - I was simply grabbing some random books (back then - from library). The breakthrough happened when I discovered two YouTube channels - thenewboston and Stanford lectures of Mehran Sahami. Suddenly, learning accelerated so much - I felt I’ve discovered something special.

The goal of this post is to help you quickly find good quality resources that will help you start - so you won’t waste time like I did in the past.

My assumptions

You match one or more of the following:

  • you have no or close to zero programming experience;
  • you want to change your career to IT, ideally to web app’s development;
  • you are a student of a different degree than Computer Science;
  • you are looking for your first job in IT;

Prep I - Your time investment

How much it may take for you to land your first job in programming? Let’s clarify one thing: we’re talking about internship here.

  • If you are a parent, you have a daily job that you cannot resign from due to financial obligations, you don’t know anyone close who is a programmer and who can guide you/help you from time to time, but you have a self-dicipline, I’d argue you should aim for a 12-18 months of learning and preparation, where you dedicate around 10 hours each week just for that purpose.

    • I’d recommend dedicating whole one day from the weekend into it to achieve high focus, or if that’s not possible, try to split it into two or three sessions. Practicing daily for 1 hour won’t get you far - learning programming requiries deep focus, and as a rule of thumb that means around 4 hours of uninterrupted time.
  • If you have a financial reserves and you can resign from your current job, dedicate 8 hours daily into learning instead - I’d say it may take you 3 months.

    • It will be way more effective than the path above, you will feel more confident, your chances for getting the first job will be higher because of it and it’s also impressive for recruiters.
    • Why is it impressive? Because the biggest risk of hiring someone who transitions from one career into another is that they won’t be able to learn quickly enough and fill the gaps. If you are coming on the job interview and show up skills close to other candidates, but you’ve started just a couple of weeks ago - that dissolves the biggest fear of the company and becomes your adventage.

Prep II - Why internship? Is it worth it?

With every year there is more and more job offers for software engineers, but usually everyone is looking for experienced ones. As a result, experienced engineers are in a huge demand, but not many companies are interested into hiring juniors.

Dunning-Kruger effect

Junior engineers (usually 1-2 years in the industry) are in a phase in their careers where they are in the peak of “Mount Stupid”. Usually that means that after a couple of wins, their confidence becomes extremely high, they demand high salary increase (100% increase in a year is not uncommon) but often their knowledge is not yet at the desired level (for such salary). As a reason, companies treat junior engineers often like “buying a pig in a poke” - they become expensive and risky, and it’s never a good combo. It’s a better strategy to look for engineers with more experience, pay them more but also have less bad surprises.

You should be aiming at Internship which means someone who is not even on a junior level. That means the lower possible salary expectations in the industry, but it’s also known from the start that you have no commercial experience. It may mean worse financial situation for you in the beginning, but trust me - it will quickly grow. After a year or two in the company you will be a junior who has “entered” the company in the easier way and your salary will catch up.

Prep III - Important deadlines

Internship jobs are usually correlated with university schedules. In other words, companies are doing interviews for coding job internships before summer vacations, so when these start, students can immediately start summer internships. Usually, it looks like this:

  • February - April: early birds - most big companies fish out the best candidates from the market, often looking for many positions at once;
  • May - June: late birds - usually smaller (looking just for one-two position) or less organised companies, often more desperate to find someone quickly;
  • July: internship starts and lasts usually till the end of vacations;

    • If you’re not a student or you are a able to study & work at the same time, if you did a great job during the internship, you may receive a long-term job offer! That should be your goal! 🎯

Keep in mind that these requirement periods are difficult for candidates - you usually compete with hundreds of other people (just this year I was selecting 2 people from 115 candidates…) so be prepared to also send dozens of CVs between February and June 😔 Additionally, you should be prepared since February for the first interviews.

Prep IV - Fear of math

Many people are afraid, that if they are not good at math, they won’t make it.

It’s a myth - the vast majority of software engineers use only basic math in their daily job, easier than the level that you have in early high school. Obviously, there are positions where it’s the contrary (for example optimising game engines) but in such jobs, it is usually listed in the requirements, that deep algorithmic knowledge is necessary. However, I agree that despite higher math is not needed, it is important to have a skill of logical thinking, not being quickly discouraged when you need to understand something complex, have a skill of focusing on the problem, splitting it into smaller parts. I’d say a good methaphor on how programming looks like was described in CS50 in a lecture about algorithm of making a sandwich!

So why do people often talk about math? That’s because algorithmic exercises used to be the most popular interview practice. First of all, all students have it on their Computer Science courses, it’s fundamental of computing. Exercises are usually fairly quick, you can do most of them in 10-15 minutes so they are ideal to quickly verify candidates. They verify algorithmic knowledge, intelligence, work under pressure, debugging skills, your ability to quickly come with new ideas and generally - your problem solving skills.

However, the industry switches away from them. Why? Because algorithmic knowledge is not that important anymore in majority of the jobs, you usally have days or weeks to complete your tasks instead of 15 minutes, and you can validate the rest of the skills in less stressful ways. Additionally, these exercises usually favour students after computer science, while senior engineers often cannot do these tasks anymore because they never used any complex algorithms in the last 5 years of their job. That’s why the interview process for senior engineers these days covers usually discussions about their past experiences.

And here’s the important part: if the candidate has no previous experience (like you) then companies may have not many other options left on their table, unless you provide them yourself (see side project chapter later in this article). Sometimes they may come back and try a simple algorithmic exercise with you during the interview, assuming that you have no vast programming experience, but they are curious how you will try to solve a “coding puzzle” or a problem in front of you. We will cover how to prepare for this part later.

Note: If you are trying to get a job at Google or any of the other FAANG’s this topic becomes way more important and you cannot ignore it ;)

Step I - Check if you like it first

In 2022 we have a lot of amazing websites which can let you verify in just a couple of weeks if you like programming or not - before you fully commit your private time, change your daily schedules or even resign from your job. It’s a wonderful chance that many other careers don’t have and you should use it.

Before doing any bigger changes in your life, try giving around 10 evenings to any of the pages below and see if you enjoy solving the little puzzles they propose, writing simple scripts directly in the browser (so simple, you don’t need to download or setup anything!), or learning about fundamentals of programming.

  • Quick course on KhanAcademy about Programming and second one about Computer Science. They will take you a couple of hours each and should leave you interested, especially since you will write some simple code in the browser! Ideal for starters.
  • Explore free tier of CodingCademy. If you like it, you can buy access to longer career paths, but leave this decision for later. Best about it: it’s focused on practice and writing code from day 1.
  • This one may be the biggest but also the best - freeCodeCamp - has a lot of exercises, all for free, some of them even involve reviewers. You’ll gain access to community of other people just like you, tutors - feels reallike like a camp or university.

    • I suggest to invest a couple of hours into it and decide later on if you want to complete it or not. It’s really long, free course and people often drop off before completing it.
    • If you decide to finish it, you’ll gain certification, which is way more valuable than the ones from Udemy or Coursea - but keep in mind - it’s a long path.
  • A new website which I didn’t personally check yet but may be a great 80/20 approach, I like it’s program so I think it’s worth mentioning - fullStackOpen - it focuses on technologies which are the most important ones for the first job around creating web apps.

Step II - Select the technologies (programming languages)

Many authors concentrate on this topic, but I don’t think it’s that important unless you select technology which is not popular. I’d recommend browsing TIOBE index or the last StackOverflow survey to make your choice, but for 2022 the two safest choices, in my opinion, are JavaScript or Python. Ideally just test a couple of different languages using tools from Step I.

Picking more popular technology means more job offers, more resources to learn, more questions being solved for us and safe years of career in the future. Less popular technology may mean less competition from other software engineers, higher salary, but at some point you may be forced to switch to another technology.

Step III - Get familiar with programmers tools

It’s actually not that much. Besides your computer with a browser:

  • GitHub account - set up your account there and publish ANYTHING you work on, your exercises, side projects, anything. Even minor but consistent activity will give you big favour during the first interviews if you show your profile to the public.

    • You will need to learn what git is and how to use it - it’s fundamental skill of a software engineer. It may look complex but you need just fundamentals - learn on how to publish your changes and what is a version control system, why is it needed.
    • Good resource can be found on git website right here, but it is a such a popular concept that you can find answers anywhere, especially on YouTube.
  • Stack Overflow - this is where you will find answers to most of your problems.

    • Create account there. Learn how to find answers to your questions, it’s one of the most important skills of a software engineer.
  • VS Code - you will code in this, it’s the simplest free tool available now. It’s your IDE.

    • You may look for plugins and other additions to this program but at this point it may not be that important; however it may make work more pleasurable.
    • Try to learn shortcuts from the start, practice using shortcutfoo.
  • Terminal. These days you can work with terminal on any system, but the two most popular ones are:

    • MacOS
    • Linux (Ubuntu may be a good start)
    • What I recommend is to either install Linux as a secondary system on your laptop (it’s free), or use older laptop and install Linux on it, or use VirtualMachine with Linux. You can also learn on Windows but you will quickly notice during your more advanced lessons that you cannot avoid Unix based systems, and that it will be required at work anyways.

Step IV - Go deeper

First of all, complete the course of your choosing from Step I, maybe even do additional one from other resources listed. Than go through the things below:

  • If you have a lot of time, lectures from Stanford or legendary Harvard CS50 (link to 2022 edition) can tell you a lot of theory knowledge and interesting home assignments. It’s also a great community of people that you can reach online, feel like you’re a part of it.
  • Browse GitHub for resources about internship preparation, how to polish your CV, how to apply, and how to prepare for behavioural and culture fit questions. You need to stand out.
  • Study on CodeWars to practice your coding puzzle solving skills - do it daily for 2 months and you will nail any internship live-coding exercise.
  • Consider joining a community of people in a similar situation like NerdsFamily or mentioned freeCodeCamp above.
  • Do a sample project exercises from pages like OdinProject.
  • Consider creating your own personal knowledge management system. There are many guides online, the key thing is that you will be learning a lot of new things in a short period of time, and if you will store your notes effectively, it will help you a lot to quickly find what you need, whenever you need. Once you get a job, it will be important for your mentor to see that they don’t need to repeat things over and over again to you. It’s expected that you won’t get everything on the first time, but if they will see that the knowledge doesn’t stick, it’s a bad sign. Help yourself with a great note system.

Step V - Your biggest advantage - Side project

One thing which can win you an internship almost without you even speaking is your GitHub account, presenting your side project. After your first 1-2 months of learning you should create your “pet project”, which may be about anything.

  • This may be a bigger tutorial from the web which you started to improve, extend, add new thing into it to try how they work.
  • This may be a project from the scratch which will be a copy of any existing website in the world. It may be very simple, not-scalable, not written in best practices - that’s OK - you’re learning through this project.
  • This may be a project which will relate somehow to your previous job or your hobby (a system that you’ve always missed, or that existed but was bad). Usually the simplest programs will be related with any organisational matters (website which allows you to manage people, resources, items etc).
  • Finally, it may be a portfolio of smaller projects, touching specific problems.

    • The advantage here is that you may make the project more conscise, more planned, they solve specific problem instead of being a “bag of everything”.
    • The disadvantage is that if you will have a lot of projects but they will be very tiny as a result, they will look less impressive, it may not be visible to the recruiter that you’ve solved multiple different problems across different repositories, they may think you’re repeating the same, simple exercises (unless you explain it).

Treat it as your playground to try out your new skills, show your knowledge. Document it nicely. Publish any changes on GitHub, and publish it often. If you will be displaying a project that was not updated for the last 6 months, it may look like you’ve stopped learning… and what was the biggest fear of the company who recruites interns? Exactly. If you can deploy the project with your custom domain (so it will be accessible to recruiters directly through the browser), this is ultimate win. This project itself is way more important than your CV.

What I don’t recommend initially

  • Udemy courses or Coursea - from my experience they are usually too long, repetitive and you can learn quicker using different resources. It’s also easy to fall into the trap of listening/watching without doing any actions, and “Certification of finishing Udemy course” in CV means nothing to the recruiter - it’s too easy to obtain to be meaningful - because you can usually obtain it just by watching, and not doing the work.
  • Buying a book too quick - do it once you are done with 1-2 web courses mentioned above, maybe when you are in the middle of Step IV. You will know what to buy - right now (early) you probably won’t buy a good book and you won’t understand much from it, and it’s a big commitment of time. Focus on practice, not theory - once you will do a couple of coding puzzles, you’ll absorb the theory much quicker.
  • Going on an expensive Bootcamp which takes a couple of weeks. Why? Because it makes not ideal impression during the interview - self-learners simply look better when compared to people who “received everything on the silver plate” during Bootcamp. Additionally, since Bootcamp is expensive, people after it usually are looking for a quick investment return which causes a bad relationship with the first employer and collegues.
  • Spending hours on reading official documentation. Usually these are written for experienced software engineers and they don’t explain much of the context - instead they focus on delivering what’s important, on densed form. That will be great later, once you get a job, but initially it may be overwhelming and won’t give you much in return.

Summary

It’s not an easy thing to do, but it’s doable and not so long ago I met a person who resigned from their past job and in 3 months they’ve found new work, in a new field - in IT (👋 Kacper). The biggest problems that people struggle with, are not related to technology itself. Instead it’s:

  • Lack of time, and dedication - they try to work and do this after hours and it makes the process too long;
  • Lack of discipline - like with everything in life, it’s a difficult period in time which requires mental effort, you will feel tired, puzzled - it’s normal;

I wish you the best of luck - you can make it, you can go through this difficult phase! In case you’d like to know more - don’t hesitate to reach me on LinkedIn.