A lots of people ask me, how to learn programming from scratch. From this answer you will learn, how to do it. I am programming for 20 years. I am sharing my experiences and of people, that i have helped in this career path development.
The answer was originally written on my blog and received 30 000 views and 1 000 votes on Wykop — polish reddit like site. Enjoy!
A lots of people ask me, how to learn programming from scratch. Every day i read comments of such kind. For example, someone is working in different area, and wants to become software tester. Or, he/she works in IT, but wants to jump on a new level and start programming. All these people have one thing in common. They want to start the programming journey. But this area is so broad, they don’t know how to start. And everyone tells other things about how to do it.
From this answer you will learn how to start programming from scratch. You will also receive some advice that will help you in the progress. So, lets begin:
To learn how to code you need to follow these steps:
1. Look around
Currently programming is a very broad area. So it’s good to look around and see in what directions you can go. Because if you know them, you can choose the right one for you. It also helps to choose technologies, you should learn.
Website developer — this is supposably the most popular interpretation of a “programmer” in the world.
But programming is not only about Wordpress websites. It is much much more. Programming is divided into several reals. First, i will give you three examples of frontend realms. Frontend programming is programming of something that the user / client sees. An interface. In short words:
Desktop app programming — like above, but it is about programming applications you can install for example on a Windows system. This group differs from the previous one. It uses other technologies. For example programming for Windows can use C# language and .NET Framework.
Mobile app programming — it is about writing apps installed on mobile devices. Mainly on devices with Android and iOS operating systems. Programming for Android uses mostly Java programming language and for iOS: Swift language. For each system there are different frameworks. There are also frameworks for both systems.
These were examples of frontend reals. Now lets move on to backend realms. Backend is, more or less, programming something, client / user does not see, but is essencial for the system to work:
Database programming — databases like MySQL and MSSQL. Database is, more or, less, an advanced spreadsheet. Database stores thus more data, and allows to manipulate it programatically. Add data, remove them, change. Additionally it allows to set up different ways of handling data. For example reject incomplete data, or gather data from different tables. Database systems use their variations of SQL language (for example T-SQL for MSSQL). The language allows to code various operations on the data. There are also databases that don’t use SQL language. They use a mystical name: NoSQL.
Backend programming — backend developer processes data between database and frontend, or between different systems that need to cooperate. Almost every programming language can be used for backend purposes. But since backend has specific use cases people tend to use different languages than for frontend. For example: PHP, Ruby, Python, Java, but also JavaScipt.
Most of programmers divide into frontend and backend developers. But there are also fullstack developers. Fullstack developer is a person, who knows frontend and backend technologies. He/she can take care of everything to set up an application: database, backend and user interface.
But these are not all realms. And in most of such overviews other realms are omitted. We have more and more advanced devices, sensors, that provide data to information systems. These need to be programmed also. This is called embedded programing. Embedded programming is done mostly in C and C++ languages, because these languages give the programmer access to low level abstraction. It saves resources of these small devices.
Another thriving realm of programming is data analysis. Developers of data analysis use large data sets in companies and prepare results for business conclusions to be made upon them. Such programmers use diffent sets of languages, including Python and R (yes, this is a name of a programming language, just a letter R. Where is the world coming to right?).
Another realm is legacy programming. Legacy developers know technologies that were used to build systems, but are not popular anymore. They support legacy systems, that need to function, but were build years ago.
There are a lots of other programming reals. I won’t write about all of these here. But it is possible to find them.
This is the end of this point. Why it is so important? If you know what area you are interested in, you can choose technologies, you should learn. And it is easier to learn a few of technologies than 200 of these.
Lets assume you already know what area you are interested in, shall we? What is next?
2. Choose technologies
To move further you need to make an informed decision about technologies you should learn. But honestly it is hard to get a good advice about it. You could ask someone, or go to studies or a bootcamp. But either way, you will end up learning: a) what is popular b) what is know by the person who teaches you c) what uses person who answers. And often it is not a good choice. But i have good news. You can do it better and do it good.
Read about what technologies are used by companies that work in area, you are interested in. Search for job offers, see what technologies reoccur. Don’t loose enthusiasm because there are 20 technologies there. It’s a fiction. People write things that are not required later for the job.
Often, i read that people know a little bit of this, a little bit of that. And they still don’t know how to become a programmer. They are lost. It’s totally true. Programming is a very broad area, and you can not learn everything. You need to choose direction and stick to it. That way you increase your chance to succeed.
3. Choose learning method
This point is very important and i will write why. Everyone has their opinion how a developer should learn. If you was looking for the answer online, you will find a lots of ideas what is right. One will advice to use YouTube videos. Other will tell book is the way to go. Other person will tell a bootcamp is the best. Software developer learns from a documentation! Some developers say also, that college education is useless. I am sad about such statements.
You don’t know what is best. And it’s completely natural. Everyone tells different things. Personally i could recommend ebooks and video tutorials, because i like these. But this would not a proper nor helpful answer.
In reality, it does not matter how you learn. As long as you learn. And do you remember how did you learn at school? How did it look like? Did a teach ask you to learn a little bit of this, a little bit of that. Things that have no connection between? No. And in school you learn complicated stuff. Stuff that didn’t matter to you. But everyone remembered a little bit from this.
It’s because learning in schools is systematic and methodical. Step after step. The system was developed through hundreds years of experience. If you think it is not good enough: ask yourself: how to make a potato battery? This system is that good!
You are interested in learning programming. The best thing you can do for yourself is to choose a method that is methodical and systematical. So lets answer to ourselves, what is the most methodical and systematical method of learning? Obviously it is a high school education. High school teaching staff knows methodical and systematical education very well. It will be hard, but you will learn programming.
Another way to learn are books and books. With a little bit of carefullness you will find a book that teaches stuff step by step. From easy to difficult things. From A to Z. But you need to like to read.
Video tutorials and online courses — these can be great if the autor prepared it methodically — it will help you with learning. Especially if you like to watch and learn.
Bootcamp — an intensive programming training. You can also benefit from this. It is a good solution if you like to work with people in a group.
Only thing i want to make you aware of to not use non-methodical, non-systematical and incomplete ways to learn programming. Imagin you learned 50% of a topic from a YouTube video course (because it’s free). But there is no latter part. You search for other course. But in other course there are things you don’t know. Also some things you know. And topic is explained in totally different way. It is so down-spirit! So for starters: content that covers topic from A to Z.
Reaching soon the end of this point i wanted also to notice one issue that is extremely important. I read that people advice beginners to use english content to learn. These people don’t know what they are doing. When you are a beginner — don’t make your life hard. If you have content in your native language — use it. Why you should learn programming in foreign language? It is an utter garbage. You could also learn spanish from german book while speaking english, or polish from canadian book while speaking japan. is it possible? Yes. But why?
4. Set a goal
Setting goals is often omitted in planning a work career. People start to learn one course, than stop, then go to a bootcamp while the time inevitably passes. After several months you don’t remember what you have learned before. It seems you learned something, but what precisely did you acomplish?
To make learning easier it is a good idea to set a goal. For example you can swear you will read a 800-page long book in a month. Or, you will end up graduate studies, or find a junior developer job in 6 months.
Everything goes better, if you will set a goal. It is someting about our nature, that goals make life easier. Learning is not easy. Programming i not easy. Learning programming is off the charts. That is why a goal is so important. And satisfaction from reaching it gives motivation for further work.
5. Learn systematically
When you already have a goal, next step is to make a learning schedule. Every day one hour. But every day, always one hour. And not to take another video tutorial or read an article, but to learn something meaningful.
Is there a way to make it easier? Mind focus is required to learn programming. A lots of mind focus. Try this out. Announce to everyone: at 6pm i will learn programming for an hour and please don’t disturb me. Switch off the phone, log out from Facebook. Give children to parents-in-law. Give dog to a neighbour.
Observe how much you will learn! You need to cut yourself off from the world, to really grasp the understending of programming.
6. Code yourself
I am following a awesome beginner software developer on LinkedIn. She found a great way to practice programming. Every day she puts up a goal to code something. For example: one day: simple calculator. Next day: simple page with movie covers. She creates a animated GIF with what she did and puts it on LinkedIn. She writes what she have learned during the day. I love to follow her. She creates some brilliant mini-projects. Above of this, in early days i have also did what she does. What every good software developer i know did. Devising tasks and programming. This is how you become a software developer.
Obviously, it is easier when you are studying, working, or joining a bootcamp, or having a book with example tasks. Because you don’t need to figure out tasks on your own. This is also a good method. But sometimes such tasks are boring, don’t force you to go outside of your comfort zone. And what if you figure out a task by yourself? Than you will hit some obstacles, that will pinpoint what you should learn to go further with your practice.
7. Ask for help
Since we are talking about problems. It is hard to articulate with what you have problems in early programming days. For example, when a bug occurs in an appliction. How to translate the problem into words? How to ask for it? Sometimes is so hard, people don’t know what phrase to put into a DuckDuckGo search. Years ago it was easier. There was StackOverflow and support groups, where you was able to ask any question. You could count on help from others.
Today you can face such answers like “search the internet”, or “this was asked before” or “again”. This is frustrating. Unfortunately. Internet is filled with answers. What advanced software developers don’t comprehend is that it is hard to name a problem if you are beginner programmer. Even if they had exactly the same problem! I can assure you of this!
Thus, i strongly urge you to ask questions. Find a nice place on the internet for software developers, or find a mentor. And ask ask ask. Sometimes you will stumble upon a hesitation. But it shall not bring you down. And if so, find other place that is nicer.
The more you will ask, the easier it will become to articulate what you have problem with. While the time will pass, your questions will become better and better, answers will show up faster and faster. And later, you will discover, some problems can be solved just by the act of formulating a proper question.
8. Find work fast
I often read that people postpone searching for a job until they learn something more. And half of year passes by. Software development is a field where you need to renew your knowledge all the time. Lets say you have learned 3–4 technologies that you need. You start to search for a job, and get into trouble. You could search a job for several months! And while doing it, you will forget half of things you have learned.
So my advice is that you should start searching for a job more or less in the halfway of your learning path. For several good reasons. First of all if you take an intern position, or junior job, your employer assumes you know almost nothing. Secondly, recrutation process takes time itself. Before you will fine tune your CV, before you will learn premade, available online, test questions time will pass. It will pass while you will sharpen your recrutation talk without jitters. Finding a job is also something you need to learn.
So in halfway of the learning path start to looking around for a job. Send CVs, schedule meetings, get used to it. Than your technical readiness will meet with recrutation readiness and there won’t be any lags.
9. Ask for more complicated tasks
Now you have a work position. But the biggest trap of programming is ahead of you. Since you have a job, you can put books on shelves and just do what you are asked to be done.
It is not like this! Be aware, that often interns/juniors are not asked to do complicated tasks, but very easy. You will notice soon, these take less and less time to be completed, and start to become boring. If you won’t do anything about it, you loose time. You can learn new things. Not run around in circles.
Above of that, your employer sees when intern/junior stands still. I am am employer, it is as clear as the sky. And no one wants to have timeless internet/junior.
So, when you see, you are getting better, ask your supervisor for more complicated tasks. He/she should know to give you someting more comples. This is important to continue learning and development at the work.
As an intern/junior you need to learn a lots, a lots of more. I am 100% sure you don’t want to become one of these guys on the internet that say intern/junior position didn’t give them anything, learned nothing. They didn’t learn, because they didn’t want to go further. They waster their and their employer time.
10. Master new technologies
Programming is an awesome field, but it changes all the time. What you have learned today, will become outdated in one year. And obsolete in 5. When you will find a job, and feel comfortable with it, master something new. Expand your skills. Don’t stand still with your professional development. If you quit studies, maybe it’s worth to go back. Attend a bootcamp, read a book, participate in an online course. Whatever that will allow you to be up to date with technologies.
It is all you need to learn to start programming from scratch. This was a really long article, and i am really amazed you have reached the end of it. I am sure 99% of people didn’t do it. It looks like you care about becoming a software developer. Caring is 99% of a success. I wish you all the luck. Programming is awesome and gives a lots of professional satisfaction. Don’t loose your heart for it. Go on. Step by step.