How to switch to a career in programming
Is it actually possible?
The writer of this post is an example that you can change your job and become a programmer if you really want to. I have a degree in music and was working as a system administrator for years before I changed my job. In 2019 around half of the applicants in this field didn’t have a major in IT. Now the situation is mostly the same, which can be easily explained by how things are on the labor market in the country.
What's with the labor market?
For many years demand for programmers has been exceeding supply. Companies are ready to welcome you, even if you don’t have a degree and have almost zero experience. The only thing they need is you being able to solve the business’ problems. It’s often riskier to have no worker at all than a less competent one. HR specialists are constantly looking for new programmers. Small companies and startups inflate salaries. Larger companies offer internships to create a specific breed of employees they need and have them work for the company as long as possible. No wonder that in such a situation their top ten requirements don’t include having a degree in the field.
What's with higher education?
Higher education doesn’t always give you the skills and knowledge needed for the future job. Nevertheless, nowadays universities and colleges are gaining influence over the IT industry. There are strong higher education institutions, whose graduates rank highly at international programming contests. Every year several awesome mathematicians graduate from universities and they successfully get headhunted by the companies working mostly in Data Science. But that’s only a tiny fraction of students. It’s almost impossible to learn something more practical, such as mobile as well as front- or backend development. These topics usually are not listed in the curriculums and, even if they are, the whole program might get outdated too fast. The IT field is progressing at such a rapid pace and there are so many technologies to master that you would probably need a specialized curriculum for every language and every framework. Is self-education really the only way to get a job for both graduates and the self-taught?
Courses
That would’ve been surprising if nobody had tried to occupy this market. It’s getting busier now and it's anybody’s guess why it hasn’t happened earlier. Many courses are telling you that they’ll teach you some technology in a year or even faster. Their prices are almost the same and sometimes they ask for full payment in advance. The reviews from the students who had finished some of those courses were mixed. Yes, they teach you something, but not everything you need. Yes, they provide practical projects, but not the real ones, and you have to organize everything by yourself. They claim that they guarantee you employment, but the whole concept is extremely controversial. You need to learn a lot to get a job. How can you guarantee a job to everyone who took the course, if you know that the final results of the studies depend on how hard a particular person worked? By the end of the course, you will be given a chance to get a job, but you would also have such a chance without the help of the course. Would this investment be worth it? I’m sure it would, providing you still wanted to be a programmer. What you have to keep in mind is that you should question every word you see in the advertising. Nobody will make a programmer out of you, but they can show you in what direction to move.
Coding bootcamps
This thing is relatively new but sounds promising. You visit a “coding camp” and study with experienced and motivated teachers day and night for several months. Sounds awesome! But, on the flip side of the coin, it’s veeery pricey. So, if you have plenty of money and need a kick in the butt to start, this format is right up your alley. Sometimes you really need something like that. Especially with good teachers and fellow-students. But don’t expect more than just an incentive from this crash course. Ten weeks are not enough to learn everything you might have planned, even if the only thing you do is study. Unless you’re a genius. But if you are, what the heck are you doing in this place?!
Shortage of good programmers
Abundance of studying options leads to a bubble. In the 2000s companies were ready to employ any inexperienced newbie. The idea was that if the person managed to learn some things without any help, then he or she would be able to get the missing knowledge through the work tasks. Now the situation is different: the market is getting flooded with graduates, course-takers and the self-taught. Nobody needs as many Juniors as there are. Being a programmer is trendy. Some time ago there was a shortage of specialists of any kind, but now, because of the increasing competition, it’s way harder to get a job for a person with close to zero experience. “What should I do then?” you ask. There are two options. You can be better than others, develop some strong skills, and become a strong Junior, or you can learn how to make something special, something than nobody can. But what special?
Programmer's competencies
Employers usually don't care about how good you know a certain language. Yes, at the interview you might be asked about the language features, but they do that mostly out of curiosity and to challenge you. For example, you can be asked how to create an immutable variable in Python. Is it actually possible? Is it even important? Well, it’s very likely that you’ll never encounter such a task at work. But then, what exactly do you need to know?
First of all, what they need from you is your ability to work with particular development tools the company uses. A certain web-framework the project was developed with, the libraries you need to use with the code, unit-testing approaches. If you try to look for the vacancies available with the desired language, you’ll see there a list of technologies your prospective employer needs. The requirements will be different for web-development, machine learning, or embedded systems development. Funnily enough, all of them may use the same language!
Then you need to know the field the project is being developed for. This is not as important as the previous thing, but with it you can make up for the lack of development tools knowledge. Medicine, logistics, finance, HR — anything can come in handy. Usually it takes a lot of time to understand the fundamentals of the field. If you have some experience in it, that might be your advantage. You don’t know some framework well, but you know the language and the field you’re gonna work for? Perfect, we need such people too.
Well, this is the thing that is special about you. Try to think about what you were doing before and what you were successful at. What you think about as something insignificant in IT might turn out to be your biggest advantage.
What you already know
What was your previous job?
A designer? You can start with Python scripts for 3D Max.
A geodetic engineer? You can try development in the geosphere (geolocation, navigation, maps).
A linguist? Look up natural language processing. Your knowledge might come in handy there.
An accountant? There are many web-services connected with finances, you can try them out.
A musician? You can develop apps for hearing aid devices.
There are many opportunities. Any specialist can use their skills in IT. Of course, not any specialist wants to switch to a developer, but if you’ve got your mind set on it you can use the skills you already have. It pays off not only because it’s easier to find a job in a familiar field, but also because if you know how everything works, you think less about what to do. Any developer’s working process usually includes two steps: to understand the task, the field and the terms of the subject, and to code. The first step is likely to take more time than the second. So if you can skip the first step because you already understand everything, you can move along, but in a slightly different direction.
How to jump on this bandwagon?
Your previous experience is your biggest advantage. However, there will be some drawbacks too. For example, it might be tough to compete with young professionals on equal terms. The companies are interested in young people more as they can be adapted to the environment and conditions of some particular company. It’s very likely to be cheaper in the long term than hiring the experienced ones. The young are more energetic and enthusiastic and have more time for self-education. They grasp corporate culture faster. Still, such traits are typical not only for young professionals. If you have all of those along with your experience, you can keep up with the young.
You can move forward towards your dream job step by step. At first, try to get into the IT at least. If you are familiar with what the company does, you can apply to an analyst’s position and get the requirements across to developers. This needs some extra knowledge, but it's way easier to get that knowledge than to learn programming from scratch. If you work in an IT company, it means that you are now closer to being a programmer, but you have to be aware of the peculiarities of the field. Search the internet, look up the books about the chosen field and your future employer will be really satisfied to see what you know about it.
Some pitfalls
The most common issue with self-education is the lack of time. We all have a lot of things to do, there are even more of them every year. We have families. We don’t have enough time to study. We are not ready to sacrifice our social life even for the sake of such a goal as a new job. Moreover, we financially support our family, which might get impossible during the changes. I had the same problems, and this is why I was kinda slow to change my job, but I did it anyway. What you can do is move forward at your pace, trying to find a little bit of time, as often as possible. You don’t need to quit your job right away to learn how to code. You probably won’t be able to study hard from the very beginning and there’s always a risk to get stuck and come back to the job you’ve quit. It’s not only about time.
You all remember that we had to memorize poems at school. It’s almost impossible to memorize one in a day and remember it forever. You need to practice it a little, wait for a while for it to sink in, have a rest, and then practice again. And after that you need to repeat it over and over again, so you won’t forget it. The whole process usually takes several days. You can memorize more than one poem at once using this technique. So here’s a rule: you can’t memorize a poem in a day, but you can seven in seven days. You digest new information little by little, and you can’t speed up this process. The same works for physical activity. You need lots of time and patience if you want to run fast or increase the number of push-ups and pull-ups you do.
Learning how to program is basically the same as learning anything else. There is no universal plan. I would recommend that you start studying several times a week for 2 hours, where one hour is devoted to the theory (books, articles, etc.) and another hour is about practice. When you feel like it, you can work harder at the weekends. But never work hard at the first stages: you’re very likely to burn out that way. Such an approach might also nipи your enthusiasm in the bud, and you won’t come back to studying unless you recover your energy. Programming is intellectual work: it uses both your brain and nervous system, which are connected to all the other parts of your body. Don’t put yourself under pressure, it might undermine the whole self-development process.
Love what you do!
You won’t go far otherwise. If you don’t like the whole process, you won’t get successful in it. Let’s say you’ve already started studying but don’t really like it. Don’t fret, continue your search. There is a whole lot of other jobs, you don't have to be a programmer. You can, of course, learn it, but wasting your life on something you don’t enjoy is not the best idea. What’s also important is that your enthusiasm determines how fast you learn. Try to remember what you liked as a child and find something about what you would feel the same.
Yesterday I was trying to solve a challenging problem: I was thinking about how to design classes and functions I need, googling and reading about others' decisions. I tried to use their best practices, it didn’t work out, so I decided to find my own way. And then, at some point, it worked out! Oh, how excited I was!
Перевод с русского на английский сделан Анной Можаевой.
Translated from Russian by Anna Mozhaeva.