There is no golden measure on how to become a programmer, but I believe that it is worth sharing knowledge in this area and helping people who are at the crossroads of their careers and do not know what to do. This article is especially intended for people who are planning their first steps in IT, but I hope that every reader of this blog will gain something valuable.

Most people think that working as a programmer is associated with high salaries, remote work, and flexible working hours. There is a belief that the profession of a programmer is a job in which “you will not do a lot, but you will earn”. There is a lot of truth in this, but let’s not be misled by the first associations and impressions. Contrary to appearances, very often the requirements on job advertisements that we find on the Internet are minimal, the recruitment is quite successful, and during the interview, it turns out that we are not able to even reach the lower limit of earnings. It also happens that they offer us flexible working hours, and then it turns out that we have to work during the hours when clients are available, i.e. from 8 am to 4 pm.

So what do you have to do to become a programmer, if the only thing to do is to start programming? The difficulty is not to start coding and learn the basics of a given language. To be a good programmer, what matters most is good practice.

What is the path to becoming a developer?

Which of the following people do you think has the best predisposition to become a programmer?
– Woman, 25, wife of a programmer, education: production engineering
– Man, 32, professionally after the prison service
– Man, 26, graduated from IT technical college
– The man, 19, graduated from high school in humanities

Each of these people wanted to become a programmer, all of them succeeded, except for a man who graduated from a technical college in computer science. It would seem that a man with an IT technical college would be the best candidate for this profession because he already had some patterns from which he could learn programming.
However, he was discouraged by the fact that he was learning programming languages ​​at school, which were already rather relics, and he got the impression that the programmer job did not associate very well – there were still times when the public thought that programmers were locked in the basement. Even though his path seemed so simple, he gave up this profession.

In my case, it looked like this; I started math-physics-technology of computing in high school, then got into computer science studies, managed to get an internship, and finally got a job. However, I do not think that this is the only way to become a programmer. All the people I mentioned earlier had a much more difficult path, sometimes they were not even related to strict directions, but it turned out that with their motivation and willingness to acquire knowledge as “self-taught”, they managed to get a job offer as a junior. The conclusion is that there is no single path to becoming a programmer, it depends only on us how much time we spend and how good we will be “self-taught” to achieve this goal.

What speaks for being a developer?

Various profits for employees are very popular in the IT world. First of all, these are financial conditions, it must be admitted that the earnings in this profession are very good. Employers often offer employees a pool of various benefits, from business phones to fruit Thursdays or sweet Fridays. Subsidies for medical care or insurance are also popular. Such allowances support employees with minor expenses and are usually highly appreciated in this industry.
There is such a thing as the “Employee Market”, which means that it’s the employers who seek to hire a given employee rather than the employee seeking employment with a given employer. According to the European Commission, we still need programmers in Poland, it is a shortage of approx. 50 K programmers, and according to analyzes, this shortage is to be met only by 2030. Although every year we release about 12,000 young programmers from Polish universities, the demand for programmers, and the development potential in this direction continues to grow. Since technological progress is constantly moving forward, exact professions will be more and more popular, so the decision to enter the IT world is worth taking now because later it can be more and more difficult.
An interesting aspect is that Polish programmers abroad are considered good and relatively cheap specialists. Thanks to this, foreign customers are very eager to reach to us, which in turn is often associated with work on the development of a well-known product that gives a lot of satisfaction. (We wrote more about it here).

Where’s the catch?

If the IT industry is such a good solution, why do we have such a shortage of programmers?
For me, the catch is just taking this first step, and then learning is going downhill. If you are a programmer and you want to change the technology, the basics of language knowledge are enough, and then changing this technology is not so problematic. However, for people who are just learning to program, the choice of technology and the time spent on learning the basics of the language is crucial.

What’s so complicated about these first steps for a developer?

First of all, you have to change the style of thinking, personally, it was a bit of a problem for me at first. Depending on the language and technology, this thinking may differ. First of all, you have to think about everything in terms of the algorithm. For example, we take a pen and want to put it on the table, in reality, we do not see any major problem with it. If we want to translate this into an algorithm and program a robot to do the job, it would be very complicated. We have to take into account many cases of whether this robot will even reach the table, whether it will have something to put the pen on – or whether this table even exists. We must take care of all extreme cases that may occur so that the customer is satisfied with our product in the future. Therefore, in programming thinking, everything must make sense. When you learn Java, which bases all philosophy on an object, you have to think of everything as an object. This can be explained by the example of a guitar shop. Let’s think of this store as an object that may have some properties, that is, we can name it, it may be on a street. Without knowing anything about this guitar shop, by describing its properties, we can imagine this shop. In the middle of this store, in turn, we may have guitars that are other objects, or even employees who are also objects. All objects differ in properties, guitars may differ in the name or length of the neck, or in the function they perform.

Moreover, everything is moving forward. We must be aware that if we want to be good programmers, we must be up to date with news. A good example can be mobile technologies. Five years ago, Android mobile applications were based on Java. Since 2017 we have official Google support for Kotlin. And recently Flutter is very fashionable because it’s for Android and iOS. So a person who has been using Java for 5 years is already welded together in this technology and can only support some projects. If someone wants to be a good programmer, they have to capture new technologies regularly to be able to offer the client the right one.

Searching for meaningful content on the internet is another problem. When we start learning, there are enough of them, but once we know all the basics, it’s hard to find something more. Often, while watching tutorials or reading blogs, we only learn the basic cases, but not the extreme cases that can cause problems. If we want to be specialists in a specific field, we have to be very careful, because it often happens that the content is not refined.

Another aspect is the difficulty in getting a job for a junior. The summaries of last year’s one of the job portals show that when it comes to the IT industry, only 12% are occupied by offers for juniors. Employers prefer to hire experts with certain skills, or alternatively intermediate people with an appropriate skill-to-earnings ratio. Unfortunately, it is much harder for juniors in this respect, but if someone is good at what he does, he won’t have any problems with finding a job.

What are the qualities of a good developer candidate?

Based on these challenges, you can determine the character traits a good developer candidate should have.

  • willingness to learn – everything changes dynamically
  • willingness to share knowledge, soft skills – communication is very important when working in a team
  • the ability to assess your capabilities – let’s be aware of how long it will take us to work on the project
  • attention to the basics from the beginning – let’s protect ourselves from lack of competence
  • physical activity and ergonomics – let’s take care of our health, especially in the case of sedentary work
  • foreign languages ​​- knowledge of foreign languages ​​in this industry is a must, especially when we have contact with clients from outside Poland. Let’s develop in this.

Who can you be in IT?

The IT world is quite narrowly specialized, each niche is different and each of them has its separate environment and language. A mobile programmer, at the mid or senior level, will be able to make a good mobile application on his own, but if he were to create a website or the entire website, it would be at the junior level, or even lower.

How much specialization there is in the IT world can be well illustrated by a graph that shows how many frontend technologies there are, i.e. those that create the visual layer – user communication with the website.

IT frontend

Since all specializations differ so much from each other, do not be discouraged by this if, while learning, we come across a person who works in a language other than us and will not be able to advise us on anything but the basics of programming. It’s good to start learning with algorithms in Java or C ++ because that’s more or less what most programmers started with and they will be able to help you in this area. The most important thing is to code properly, regardless of the language, and to be aware of each line of code that is included.

What functions can you perform as a developer?

Not all functions that can be performed in IT are strictly programming. For example, you can be a Backend who, unlike Front-end users, cares about the logic hidden under the visual layer of the project. In turn, a Mobile developer can be a specialist in solutions for Android, iOS, or programs in hybrid technology. UX and UI designers are people who care about user experience and the intuitiveness of the application. Some people deal with artificial intelligence, there are DevOps Engineers, or people who deal with software architecture, or tests, etc.
The IT world is very wide and can accept everyone, you just need to find your niche in this world.

What does a programmer’s everyday life look like?

A programmer’s everyday life is very structured, we have various methodologies that help us maintain the right pace of coding. In our company, we use the Scrum methodology, which is currently the most popular among programming teams. It is based on a certain pattern of action that repeats itself every set period. We collect all the client’s ideas in one place, which we call the Backlog. The backlog is supplemented and updated regularly. The customer can add or remove any functionality from the list when he wants to, and he can report any errors in the existing software there. It is important to prioritize all ideas. We as programmers are tasked with estimating the list with the Backlog. Then the development team takes all these requirements and creates a Sprint from them, i.e. sets the time when developers deal with these tasks. Such a sprint usually takes about two weeks. During this time, Daily takes place, which is a meeting where we discuss what we have managed to do and what we have further plans. At such meetings, possible problems encountered during work are discussed, and the whole team is trying to solve them together. At the end of each Sprint, there are two more meetings: Sprint Review and Retro. Sprint Review is a meeting summarizing the entire sprint. During this meeting, we present to the client and the whole team our progress, i.e. what has been changed in the program recently. Retro is a meeting during which we discuss what was good in our work and what we did not like. It is very important during this meeting, to be honest about our feelings about the last sprint and to draw conclusions from it. Thanks to this, the entire team can develop in the right direction and achieve better and better work results. (Read more about estimating IT projects here).

structure of IT teams

Structure of IT teams

There is no perfect recipe for a good team, here what matters is the mentality of the people who are part of it and their motivation. The experience of given people is very important, therefore the team structure should consist of programmers from junior, through mid to senior. I have met with different companies and they had very different approaches to the subject. Some of these companies had only seniors because they felt they did not have time to train their juniors. Others, in turn, had more mids because they said it pays off in terms of the skills and costs they have to pay. I believe that, however, we should have as many opportunities to learn as possible and constantly strive to bring the projects on time. This is favored by great diversity in teams, in terms of experience and gender. You also have to be careful as a young programmer not to fall in love with the fact that you can write a few lines of code. This is well shown in the chart below (also known as the Dunning–Kruger effect):

programmer's career

Graphical illustration of the Dunning-Kruger effect on developers depending on their seniority and knowledge.
Image source: Junior developers: you’re not a junior anymore, Amando Abreu

He says that people who are unskilled in some fields tend to overestimate their abilities, and people who have high skills tend to underestimate this assessment. Being mid, I was subject to this effect, but only until I had someone above me, because this person, as a senior or an architect, was ready to choose the flavors that had to be captured. When I had to personally take over a project and got to know all the flavors, I realized that my skills are not that big and the field for learning is still really big. That is why the humility of each team member and the entire team together is so important.

What are the learning methods and tools?

There are different ways and techniques, but first, we will focus on common techniques that I learned in college. They used to be very funny, but years later they make quite a lot of sense. First of all, programming on sheets. The problem was stated and it had to be solved on a piece of paper. The task seems quite strange, why not write the code right away in the appropriate program? The explanation is that it helps you describe your idea and put it to the side. This approach supports programming thinking and can make it a lot easier even at work. With more difficult projects, in order not to waste time visualizing the idea in your head, it is sometimes worth writing everything down on a piece of paper. Block diagrams are also about knowing how to follow your steps one by one before you even start programming. Thanks to this solution, we can understand our code much better.
An example of using the “If” enclosure (a choice between two things): if I am Santa and I wonder if the child was polite or not, he writes it down on a piece of paper. This Santa Claus in an algorithmic way determines whether someone was polite or not and on this basis he can either give gifts or punish children with a rod. To illustrate what it looks like to write code quickly and expect results, there is a well-known picture of an unfinished horse drawing – it’s very famous among programmers. When starting work on a project, we try to do everything very carefully and carefully, but over time, we lack patience. Since we have more and more demands on ourselves, we start to write code anyhow. It is important to avoid such situations, let’s work well from the beginning to the very end.

There is a nice method not necessarily for learning, but more for verifying what code we are writing, it is a minor variation of the flowchart. It’s very nice to work with the other developer nearby, you can exchange information about the code. But it often happens that we are unable to work with another person who could help us with some problems. In such a situation, it may help us to explain what we have programmed, not so much to a person, but to any objects that we have at our fingertips. It has been assumed by programmers that the rubber duck understands the code best, but it can also be another object lying somewhere next to us. This technique is based on similar assumptions to the flowchart, only after the code has been written. When we have a problem, we try our best to explain to our duck, step by step, what the assumptions of the code we write were, what the given line means for us. Very often it turns out that, speaking once or twice, we have explained to ourselves what we have done and we suddenly see what was a problem or something that did not work in the code. In my opinion, this is a good way to learn to debug step by step. Debugging is a very useful activity, it is tracking changes in the code, in real-time – to eliminate errors.

There are also tools on the Internet, of various types, whether paid or free, that can help us a little in writing the code. For example, HackerRank – a website that helps to verify whether your code is good. It tests it in many cases, even those that verify the optimization of the code. It informs us about errors during programming and more or less tells us what the error was, but does not indicate exactly in which line it occurred. So it forces us to think and keep searching. I believe that it is a very nice code optimization tool and I recommend it to people who want to not only learn to program but also would like to improve their skills.

So what mistakes do we make as novice programmers?

The biggest problem is that we are looking for easy ways to implement something. Unfortunately, it is also known that if we want our code to be of high quality, we must write it properly, not quickly.

  • Stack Overflow development – This is a well-known developer portal, it comes in handy when we have bugs in our software and want to find help with that bug. Most likely, we will find a solution on Stack Overflow. Unfortunately, some people, usually those who learn, try to copy entire pieces of code from this site and do not pay attention to how it should work. However, it is important to try to analyze the code, line by line, because often such code errors can cause further errors. It would be even worse if the sticky code worked right away, so no one would think why it works, and then it would come out somewhere in the customer’s product.
  • learning examples without practice – The driver and passenger are good examples here. Being a passenger in a car, it is difficult for us to remember the route that we traveled even 3 or 4 times. If we are driving as a driver, we can drive once or twice and we associate a given route very well, even with only signs, bends, etc. The same is with programming from the examples alone. Many people think that looking at the examples and tutorials is enough for them, that they don’t have to implement the code, it is enough to remember how to do it. I have done it many times myself. Even though I knew more or less what to do, I had a problem recreating this code. There were times when I copied code from previous tasks and eventually it got to the point where I had a problem remembering what the structure of a pretty basic clause should look like.
  • premature optimization and going to extremes – Here I would like to give you my example. When I was still a junior, someone told me that there is a kind of icon called Icon Font that is a great solution because it does not take up much space and it is worth using. As a junior, I welded it together so much in my head that in fact wherever I could, I put Icon Font, because I thought that only this was the best solution. In fact, this behavior has obscured my technological development. I haven’t noticed that there is such a thing as vectors that you can convert to pictures on your phone. I was so locked into extremes that I couldn’t see anything else. To avoid such situations, let’s try to choose everything wisely and not go to extremes.
  • listening to advice – Many people in the IT world are very open-minded. If we don’t understand something, it is much faster to solve the problem by asking someone who knows the answer. I think most people think that it is better to explain something to someone and not to have to correct it later. Therefore, let’s ask if there is anything that causes us a problem, it can make it a lot easier for us and the whole team.
  • limiting yourself only to the Polish-language Internet – is the bane of novice programmers. Of course, the Polish Internet has valuable content, blogs, and tutorials, but foreign languages ​​are the basis for programming. So if we are looking for a solution to a given problem, we look not only at Polish websites. The best mentors, the best blogs, and other programming content are usually written in English. So if we want to use the best practices, we have to get out of the Polish Internet.

How is the recruitment process going?

If we already learn enough to apply for a job, what does the entire recruitment process look like? And how to act as a candidate in this process?

  • initial verification of the candidate – After sending the CV, verification takes place, e.g. based on the candidate’s profile on Linkedin. The employer checks if this person is real, has any code repository or application portfolio added. A very important element is the repository, i.e. a place where we keep some sample codes that we were able to program, it says a lot about the candidate. Let’s make sure that our CV includes repositories or links to sample applications that the candidate has created.
  • verification of soft skills – It is contact with a recruiter who verifies how we communicate, what languages ​​we know, how we talk about ourselves, and our motivation. It also checks if we know where we apply, because it happens that someone tries to apply to different companies and does not attach too much importance to it, and yet it is important to identify with the values ​​of a given company. At this stage, I even experienced the StrengthsFinder test. It’s a test that determines your innate talents. It shows which activities are the most natural for you, the easiest ones to perform, and where (how) you need to look for your potential.
  • technical task – In this part, the command is given, a specified time, and then the correctness of the task is assessed. It’s important to use the repository beforehand because usually the task is sent in this form (a link to the repo). It happens that it’s also live coding, it is probably one of the most stressful options in a job interview when someone verifies it on an ongoing basis.
  • verification of technical skills – This is a technical interview, usually based either on the candidate’s repository or on a technical assignment. Sometimes questions are also asked starting from the basics, heading towards more and more difficult topics.
  • decision and feedback – The last point is the decision of whether the candidate meets our requirements or not. Either way, with each option, let the candidate know what he did wrong and what he did right, what he can improve. This is important information that may be useful in your further job search. Remember that it is not worth getting discouraged, you can come across various interviews and different recruiters. The rule is that at the beginning you have to lose the first few recruitments to finally be able to present yourself well. After each unsuccessful recruitment, it is worth drawing conclusions and trying further.

Summary

A career in programming is not for all, and the path to becoming a programmer is not straightforward. However, keep in mind that many people have found success and satisfaction through coding, none of whom is more “destined” to be a programmer than you. You’ll be in a good place to pursue your passion if you keep that in mind and stay mindful of the reality behind the myths.

Build an IT career that suits your lifestyle, in a company where your voice matters. See our open positions >>