Some of the best ways to learn programming
A lot 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, let’s begin:
To learn how to code you need to follow these steps:
- 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 possible ways, you can choose the right one for you. It also helps to choose technologies you should learn.
Website developer – this is supposedly 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 reels. 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 essential 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 programmatically. Add data, remove them, and change. Additionally it allows setting 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 coding 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 programming. 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 different 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 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.
Let us assume you already know what area you are interested in, shall we? What is next?
- 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 known 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 lose 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 cannot learn everything. You need to choose direction and stick to it. That way you increase your chance to succeed.
- Choose learning method
This point is very important and i will write why. Everyone has their opinion how a developer should learn. If you were looking for the answer online, you will find lots of ideas what is right. One would 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 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 be a proper or 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 teacher 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 let’s 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 is books and books. With a little bit of carefulness 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 author 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. Imagine 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 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?
- 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 accomplish?
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 something about our nature, that goals make life easier. Learning is not easy. Programming is 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.
- 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 learning programming. A lot 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 understanding of programming.
- Code yourself
I am following an 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 an animated GIF with what she did and puts it on LinkedIn. She writes what she has learned during the day. I love to follow her. She creates some brilliant mini-projects. Above of this, in early days I have also done 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.
- 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 application. 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 a Stack Overflow 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 the 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, 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.
- 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. Let’s 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, recreation 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 recreation talk without jitters. Finding a job is also something you need to learn.
So in halfway of the learning path start to look around for a job. Send CVs, schedule meetings, get used to it. Than your technical readiness will meet with recreation readiness and there won’t be any lags.
- 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 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 something more complete. This is important to continue learning and developing yourself while at work.
As an intern/junior you need to learn 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, they learnt nothing. They didn’t learn, because they didn’t want to go further. They wasted their time and that of the employer.