What is a job as a programmer?
The profession of a programmer has obvious advantages that everyone knows about:
- Good salaries
From 100 tr. by regions of Russia, 250-300 tr in Moscow, abroad from 10 thousand dollars;
- Flexible schedule
A developer is primarily a remote work;
- Demand in the international market
This is one of the easiest jobs for immigration.
But not every person can become a developer, otherwise everyone would have retrained as programmers long ago. You always have to stay on the line. You cannot master any one technology, read a book, take a course, master Python perfectly and then earn 20 years from this. The industry and technologies are developing so quickly that the approaches, frameworks, programming languages that are relevant today will almost certainly completely change in 4 years, and if you drop out of the profession for a year, you will have to start practically from scratch.
For example, for students, leaving for the army is a very big problem, because a lot of things will change in a year of absence from the development world. This is not very critical. You can catch up quickly enough, but, in any case, you need to constantly stay on the trend line, constantly learn, study modern approaches, watch what is changing and how, and then you will be a successful developer who makes a lot of money.
And one more drawback, which few people talk about, is quite strong age discrimination. If you are a student, finding a job will be easy enough. If you are 30-40 years old, then you are welcome at any technology company. If you are in your 40s, it will be harder. But if you are over 50, then you most likely will not find a job anywhere. This is worth remembering, it exists.
How do you know if a job as a programmer is right for you?
It is not so important here what education you have, whether you graduated from college by profession. The main thing is that you have strongly developed perseverance. Why is this so important?
Imagine that you are given a task as a developer, for example, to move a button from the left side of the screen to the right in a mobile application so that it is convenient to press it with your thumb. You sit down and start doing this task. It will take you a little time to understand the application: where it lies, how it is assembled. It will take a little more to study the code that programs and displays this button on the screen. It will take very little time to make changes to this code and tell the compiler or mobile phone: "Please display this button not on the left, but on the right."
But then this code will most likely not work. And for the next few tries, it won't work. You will need to read a ton of documentation to figure out how button mapping works in Android or iOS. We'll have to try 10 different ways: find some work-rounds, prop it all up with crutches, write to the developer, look at the Android source codes and in 4-5 days, at best, or even later, this button will be displayed as you need.
All work consists of this: every day, every task. Every line of code that you write is highly likely to either not work or not work the way you want it to, and there will be no obvious reason why it doesn’t work. It takes an insane amount of time to figure out what's going on there, and how to get this thing to do what you want.
And the final result, in which everything worked, should bring you a lot of joy. This is the main motivator of the developer, which makes him go to work and do something from day to day. Perseverance will allow you not to break down, not refuse, not change your mind, not be distracted by coffee and social networks, but sit for hours on end and think why this thing doesn't work and how to make it work.
What kind of employers are there?
Freelance
As a rule, these are small tasks for little money. They can be done quickly enough. They are listed on freelance exchanges. The main exchange in Russia is freelance.ru. The main international one is upwork.com.
Exchanges are suitable for taking on some practical tasks that bring some benefit, for example, making your first money. It's simple enough. Nobody is going to read your resume, check if you have real experience, whether you can pull this task or not. This is a good place to get your hands on and start programming something, making money from it. In theory, there are people who have been doing this all their lives and earn much more money there than the employer.
But there are also disadvantages. The main one is that this is more like creating your own business than working as a programmer, since you spend a lot of time looking for orders, communicating with the customer, effectively aligning processes, and not much time is spent on development. And, as a rule, products for which tasks are given on exchanges use a rather specific technology stack. For example, a lot of tasks will be related to changes in the Wordpress blogging engine. It is rarely used in product development, even less often in companies, but there will be a million tasks on this topic on freelancing: fix some Landos, move a picture, write a plugin. This experience and these technologies are poorly applicable in work for an employer. It's hard to learn something on freelance because there is no team. There are no people you interact with,from whom you can learn something, who can test your work and share experiences. Therefore, freelancing is good for getting started, but not for professional work.
Studios / Integrators / Outsourcers
These are quite different companies, the activities of which are very different. There are both small and big players, but they usually share pros and cons.
From the pros:
- A large stream of completely different projects
You don't fall asleep in any particular project routine. These are different projects, they are constantly changing, you have the opportunity to constantly learn something new;
- Most of these companies have fairly clear processes.
They have algorithms for working with documentation, a built-in development process, interaction with a customer, they work well with estimates, they know how to calculate the economy, because this is their professional activity.
- High level
You can learn well how to develop software from them.
Cons:
- Not all companies are great
Top companies are really doing well. They have everything perfectly built, they have money, customers and interesting projects. But there are many niche companies with a small staff of 5-10 people, in which the processes are not so well-oiled, but in these companies you can easily get a job and learn something useful. You can learn how to develop software by working with them for six months, and move to another company for a higher-paying job.
- Little freedom
The customer, as a rule, knows what he needs. He has a design, he has a clearly defined task, he often comes with his own technologies. And despite the fact that it seems to you that it would be better to do otherwise, usually, such issues are not discussed.
In order to get into these companies, you need to know applied programming languages. For example PHP, Python, Java, Javascript.
This is a good place to start a career.
Startups / Small Companies
There are hundreds of such companies. A dozen new ones open every day, but nine of them will definitely close.
There are many advantages to trying to work in a startup:
- It's very exciting and fun;
- The easiest way is to make really big money.
In the early stages, often, the founder actively shares his shares, especially if the startup takes off and grows rapidly, then you will very soon become a millionaire;
- There is no Legacy in projects, there is no old code that makes you want to cry
- Lots of freedom
You can choose technologies and program the way you like. You can greatly influence the product.
But there are also disadvantages:
- 9 out of 10 companies are closed
Many of them will close during the first year without launching the product;
- Weak learning opportunity
As a rule, not the best specialists come to these companies, there will not always be something to learn there;
- Unpredictability
Often, the financial flow of these companies is unstable. You can work for such a company for some time and you will not be paid your salary for two months.
In fact, the fun outweighs all of these cons. But going to such a company without experience will not be the best decision. The stress level will be very high, and the level of practical knowledge, most likely, will not be enough to drag the project.
Banks / Enterprise
Pros:
- Stability;
- Good wage;
- Low level of responsibility
Nobody will ask you to recycle and be responsible for something big. Any large enterprise company is a master at spreading responsibility between a bunch of managers.
Minuses:
- Very low speed
You can cut a feature for a year or two without releasing it, because during this time it will lose its relevance. The salary, of course, will be paid, but this thing is very demotivating;
- Specific experience
As a rule, this is some kind of banking software. Basically, this is old code, which is not very pleasant and not very interesting to work with;
- It will be quite difficult to change the field of activity here.
First of all, because you will lose your salary. In Sberbank, they are always higher than in Yandex.
A great option for a first job if you land on an internship. In a large company during an internship, you can get a lot of useful information of an applied nature in a short time: about how software is developed, what tools you need to use. This experience, in any case, will be relevant.
Food companies
Pros:
- Actual technologies;
- Debugged processes;
- Team of professionals;
- High level of stability.
Minuses:
- It's hard to make really big money;
- Difficulty getting a job;
- A huge number of tools to deal with.
Each company has its own set of tools, and this experience will not be very relevant for the market and for moving to another place.
How to choose a language?
It depends on what you want to do and what company you want to go to.
PHP, for example, is a very popular language. It is used by a bunch of Russian and foreign companies, for example Facebook. But there is no point in learning PHP to get a job on Twitter, because it is not used there. If you want to go to Yandex, you need to learn Python or Java. Relearning from PHP to Java is not an easy process.
It is best to immediately determine for yourself 2-3 companies in which you would like to work. Find out which programming languages they use and learn them. Or, start from the language you like and then look for companies that use it.
What kind of developers are there?
Backend
This is the code that runs on the server. The backender, as a rule, communicates with the database, with external services and is responsible for business logic. For example, it allows you to register a user, save him in the database, write off money from him, send him some notification or SMS.
Typical languages: PHP or Python, as well as the less common Ruby.
Frontend
This is what you see when you visit the site. This is a piece from the layout. Layout is usually done in the HTML markup language, which tells how the content is displayed on the page, in what color it will be displayed. Javascript is responsible for how this page will behave, how it will be animated, where the form will be sent, what error will be displayed to the client if the phone number is entered incorrectly. Almost every programmer needs this knowledge. There are practically no areas where you don't have to deal with layout. This language is very good for a start, because wherever you go, it will be in demand everywhere.
Fullstack
This is a developer who knows how to create both frontend and backend. He alone can file both on the server side and on the client side, make it all work together, make the project work without any help. This is aerobatics. Such developers usually earn one and a half times more.
Mobile development
In fact, this is the same frontend, but different languages are used here. It makes no sense to delve into the programming languages that were used 5 years ago, such as Objective-C and Java. Swift and Kotlin are now used. All new applications are written in these languages, and old ones are rewritten for them.
GameDev
This is a separate area. Here, as a rule, C ++ and special libraries such as Unity, etc. are used. A developer who knows how to make a mobile application in Kotlin will not be able to write a game, because a completely different stack is used, completely different technologies.
Desktop
This is what runs natively on your computer. For example, browser, Word, etc. Most often used C ++, C #. Powerful applications are written in C ++. Sometimes desktop applications are written in Delphi because it is much simpler and cheaper.
1C
This is the most popular product in Russia. It is used, one way or another, in any Russian company. Its main disadvantage is that it is not used anywhere other than Russia. It is very narrow, it is very difficult to leave 1C, but there are a lot of vacancies and they are well paid.
DevOps
They are system engineers who set up computers. Now we need a lot of computers, products are complex. Facebook, for example, uses tens of thousands of servers, and in order to make them easier to administer, so that the code quickly rolls over from the computers of developers into the productive environment and quickly rolls over to users, engineers are needed who can transform, automate, and automatically commission tens of thousands servers. They do this with software tools. The most popular language in this area is Python and Bash. Studying python by any system administrator will raise his salary by at least one and a half to two times.
AI / ML / BigData / Cryptocurrencies
Most often, the developers of these areas use all the same languages. ML and data analysis is mostly Python and sometimes a little Java. Cryptocurrencies use C ++. The peculiarity here is that a good knowledge of mathematics and a deep knowledge of applied tools are required. An ordinary Python developer is unlikely to be able to retrain into an AI developer in a week, since a deeper dive will be required.
How not to choose language and direction?
- Don't focus on salaries
According to research published on Habr, the highest paid language is Eclipse. It is quite fashionable, youthful, positive and modern language. But what happens if you start teaching it today? Now there are only 11 posted vacancies on hh.ru. And even if you go to a place with a high salary, this does not mean that in a few years it will still be relevant. In this case, you may be unclaimed, and switching from one language to another is a rather complicated story;
- Don't choose fancy, exotic, limited or endangered languages
There are very few vacancies for exotic languages (Scala, Eclipse) and, as a rule, they are all for experienced developers. Obsolete languages are usually given at the institute / school, for example Pascal. They have no applied application, they are not in demand on the market. As well as not worth starting with 1C because of its limitations.
- Don't start with difficult languages
It's not a good idea to start with C / C ++. There is even such a meme on the Internet: learn C ++ in 40 days. It is a difficult language to learn. It takes a lot of time for you to start doing something and to be appreciated in the market. If you are going to go into game development, then there is no alternative, you will have to learn C ++. But, for example, you can get into Yandex as Java and Python developers.
Good start languages
- HTML / JavaScript
They are easy to learn. They are the easiest way to feel if programming is pleasant and suitable for you. Knowledge of these languages will be useful to you in any area chosen below;
- PHP / Python
They are also easy to learn. There are a lot of vacancies with a junior position. And over time, you will be able to use this knowledge as you move to steeper positions. You can make a career as a developer from junior to senior in 2-3 years, reaching high salary levels;
- Java / C #
If you need a stable high-paying job in a bank or an enterprise company, then these are the best languages to start. Java has been a very popular language over the past 20 years and will likely remain the most popular language on the market for the next 20 years.
Where is it easier to start?
- Create your own HTML page.
- 1-2 JavaScript, , .
- . «PHP ». .
- . .
- , . , - , . fill-time .
- Take your dream job. Most likely, the first time you will not succeed. The first job is usually stupid. But after six months or a year, you can already try your hand at the company that you like. Or start your own project.
How not to do it?
- You should not go into related professions: testing or tech. support
If you are already in this area, then, of course, it is worth trying your hand at development, but if you are a lawyer or just graduated from a university and do not know how to build a career, then you do not need to choose such a difficult and long path. Learn programming, applied tools and look for a programmer job right away. It is quite possible to do this in a short time;
- No need to get a job in an IT company for another position
For example, working as a courier in Yandex will not help you get a job there as a programmer;
- No need to bother with employment in a top company
Most likely, you won't be able to do it as your first job. You will waste a lot of time. It is best to start with simpler companies, where you will immediately have a salary, spend half a year there, and then move to the dream company, having practical experience behind your back.
The nuances of working as a developer
- The first job won't be long
It is not worth considering the employer in the long run. On average, developers move from company to company every three years. This is due to the fact that many companies do not know how to raise employees' salaries, so the easiest way to move up the career ladder is to simply leave for another company;
- It makes sense to move to Moscow and further west
Even if you find yourself in a remote job, it is advisable to move in the direction of development. This way you will grow much faster. And most importantly, it directly affects wages. The difference between the salary in the regions and in Moscow will be about 50%, and much more in the states if you move there;
- You shouldn't choose a narrow specialization
In the market, programmers with a wide range of skills are much more in demand than narrow specialists;
- Develop soft skills
This will give you the opportunity to effectively communicate in the company, understand each other. The more you grow professionally, the less knowledge of programming itself will be required, rather than the knowledge of how to effectively achieve results in a team;
- Understand your motivation
It will be easier for you to grow and choose the company you like if you understand your motivation well. This can make you happy in the first place.
How to prepare for an interview?
It doesn't matter what you know. If you pass 20 interviews, then you will be hired for the 21st. Regardless of whether you are a programmer, have practical knowledge or have never done it.
You can make a blank resume, you will be invited to different companies, you go through interviews, you will understand that you are being asked and from the 20th interview you will know what to answer these questions. It is worth starting with some simple companies where you do not really want to get a job and after a month start going to interviews in those companies where you really want to get a job. Most likely, they will take you and then everything will depend on you.
What do the Juns ask at the interview?
- Test
Almost all companies will ask you to do a test, it will definitely need to be done;
- Sample codes
It is better to do some freelance assignment or some pet-project in advance, work on it well, make it look beautiful;
- Prepare answers to questions about your experience and who you see yourself in 5 years
The best thing is to prepare a beautiful and true story so that it will be interesting to listen to. This is important because these questions make it clear whether you have any incentive to develop and what you generally spend your time on. When interviewing for the June position, the employer already understands that you really don't know how to do anything, the employer wants to hire a promising person, and these questions will just show how promising you are.
It is worth learning the basics on the following topics:
- Object Oriented Programming;
- Database. It is not necessary to learn a huge two-volume book on SQL optimization, but it is worth knowing how to make SQL queries in a basic form;
- Design patterns;
- Version control system (Git)
- Basic language capabilities. For example, how PHP packages are connected.
With this basic knowledge, you can solve some practical problems. These questions were relevant 5 years ago, are relevant now and will be relevant in the near future.