Where to start to work as a programmer. Learning programming from scratch - a step-by-step guide for beginners

Perhaps for some reason you suddenly suddenly wanted to become a programmer. The good news is that once you understand the system, you can learn how to ace interviews and survive your first few months on the job.

The bad news is that there’s still no escape from the ABCs of programming, and in order to feel comfortable in your new position, you’ll have to urgently finish learning everything that you’re supposed to already know like the back of your hand.

Of course, this article will talk exclusively about my personal experience, which allowed me to get interviews even for top companies like Luxoft.

How I became a programmer

I first became acquainted with a computer at the age of 6. At the age of 13, I already had my own personal website. I did poorly at school and at university too. In my second year, my friend found a job as a Java programmer and strongly recommended that I do the same. The idea intrigued me. A plan was needed.

First step - resume

The first and main problem that beginners face is their resume. Without an adequate, catchy resume, you will not be invited to interviews. But what about those who have no work experience at all? In order not to go to HR empty-handed, my friend and I wrote into my resume a whole year of experience working on his project, which we supposedly worked on together.

Salary policy

Next important point in the resume after in-demand technologies and in English was the desired salary. Without thinking twice, my friend and I decided to play big and wrote an exorbitant sum of a thousand dollars at that time, which was supposed to weed out the “rogue companies.”

Shame and shame

The first interviews were a failure. They literally laughed at me. At the very first technical interview, where I was given a couple of problems on paper, I was figured out in no time. Someone even gave a fatherly recommendation for the book Thinking in Java.

First job

In the end, I was invited for an interview at a branch of a Danish company, where I answered fundamental questions and pleasantly surprised everyone with my English. I was hired as a Junior Java developer with one condition - for the first three months I would take the SCJP (Sun Certified Java Programmer) course, which would fill my gaps and make me a more prepared specialist. What could be better than a paid internship without having to work (betray your incompetence)? I worked in this company for six months, so that after a few months I could get promoted to a larger company.

Based on my bitter, but still invaluable experience, I will give a list of recommendations that will help fellow adventurers find a job as a programmer relatively quickly.

  1. Summary. It must be properly formatted and written exclusively in English. If you don’t have enough experience, then you can (and should) invent it, but you should prepare to be responsible for every word written in your resume. For example, if you have JMS (Java Message Service) written there, then at least you should go through at least one tutorial and play with JMS, make some examples, even if it’s a banal “Hello, world!” Now it will be more convenient to show off, you really “worked with JMS”.
  • Learn the ABCs of programming. If you can still afford to “swim” at the deep levels of some complex technologies like Struts and Spring, then incorrect answers to basic questions will never be forgiven. If I wake you up at night, you should be able to talk about OOP, inheritance, encapsulation, polymorphism and other basic concepts, and also be able to explain it all with examples.
  • Practice. You can learn to program only by programming. This is painful and unpleasant (if you are not a programmer), but there is no other way. The only way to stop being afraid of interview problems is to solve them at home yourself.
  • Read books and take tutorials on Java only in English Absolutely all programming terms are easier to understand in the original language, that is, in English. Reading technical literature on Java in Russian is disrespecting yourself. Why? Because to understand something along the lines of “...the table module is in many ways an intermediate option, a compromise with respect to the transaction scenario and the model subject area“, you need to truly be a genius, which you are unlikely to be.
  • Finally learn English! First of all, this concerns spoken English. It's hard to count great amount intelligent programmers, who, as far as I remember, were rejected for one single reason - an unsatisfactory level of spoken English. No, if you, of course, are going to work as a programmer somewhere in a domestic company, then your language level will not play an important role. But if you want to get a job in an international company, then God himself ordered you to learn the language. Your English level will translate into hundreds of extra dollars in salary increases.
  • Know the market. Look around for vacancies, read the requirements, ask your programmer friends how much they earn. Use services that will allow you to get a more complete picture of the IT market. You would be surprised to know how large the number of talented programmers are who earn half as much as they could, simply because of their laziness and unwillingness to keep their nose to the wind.
  • Bargain. There is nothing wrong with haggling over your salary. Your argument in a dispute can be either good English or a job offer in another company. The last argument works especially well: “Yes, but Luxoft is offering me $300 more, why should I agree to your terms? Maybe we could find a compromise?” At one time, I managed to negotiate an extra hundred dollars to my salary a couple of times, and after a year, this hundred dollars gave me an additional $1,800 in income out of the blue. You must understand that even for small foreign IT companies, an extra hundred bucks is like a drop in the bucket.
  • Find yourself a mentor. It’s good if you have a more experienced friend who can help with advice and answer even the most stupid questions. Thanks to his experience and moral support, you will progress in programming faster than on your own. If you don’t have a mentor, then it’s a good idea to take some programming courses that will not only give a more complete picture of what a programmer does, but will also allow you to meet more experienced people. Who knows, maybe one of them will want to become your mentor.
  • Start your project. Even if it is an example of the worst coding practices and you never finish it, at least you will have something to do that will make you want to understand programming and learn new technologies. In addition, you will have an additional topic for intimate conversations during interviews.
  • Look for a job in the summer. First, when everyone is on vacation, companies are more likely to be short-staffed and are more likely to be called in for an interview. Secondly, since your competitors-applicants are also on vacation, your chances of being noticed by HR again increase.
  • Never give up. Even if you feel like you're failing the interview, it's important to persevere and keep trying to solve the problem, no matter how difficult it may seem. Who knows, maybe at this very moment you are being tested for diligence in your work!
  • Avoid tasks on the computer. There is no way to see through a non-professional faster than to immediately throw him into the programming heat. Your task is to try to translate all conversations into high level, where general approaches and concepts are discussed, but not a specific implementation in solving a particular problem. If you are given paper and pen and asked to write down the solution, then ask for the opportunity to draw it diagrammatically. Thus, by moving away from the syntax of a specific language, you will not only save yourself from some annoying errors, but also show that you are able to think abstractly without going into so much detail.
  • Be the first to speak. Avoid situations where there is a pause in the air, during which another insidious question may be brewing in the interviewer’s mind. As soon as there is any hitch, start telling something that you know well. Try to impose your game on the interviewer.
  • Try to tell the truth. If you have never written PL/SQL procedures, then it is better to say so directly. This may be a disadvantage for you, but you will save yourself from having to get out of your own way by answering a question about which you understand nothing. An experienced interviewer will sense your knowledge gaps a mile away.
  • Beware of small companies. Small companies tend to have small teams. The fewer people on the team, the faster they will figure you out. Your goal is a large and clumsy corporation, where you can buy yourself some time.
  • Follow the dress code. If you show up to an interview for a programmer position in a smart suit, it will arouse more suspicion than if you show up in shorts or a threadbare sweater. It would also be a good idea to put on glasses, saying, “I’m such a bookworm.”
  • Of course, someone in the know might point out that the above recipe is more of a way to become a coder than a programmer, and he would be right somewhere. However, the thing is that you will never find a vacancy with the title “Bad Coder Wanted.” Everyone needs programmers. Preferably senior. Those who have more than five years of experience working on corporate projects and who are equally fluent in several programming languages, at the same time have a thorough understanding of DBMS, can write bash scripts, stored procedures, are fluent in Linux, TCP/IP, have leadership qualities, and stress resistance , communication skills and a host of other skills, “without which it’s impossible.”

    Such people exist, I have seen them myself. But there are too few of them to fully cover the needs of the ever-hungry market of IT specialists. And this means that you always have a chance, such an adventurer you are.

I did not study to become a programmer, although I always wanted to become one. At first I generally entered a specialty related to computer hardware, but it turned out that it was not very interesting, so I transferred to optoelectronics.

The study was related to image processing: this is not programming at all, but still closer to what I wanted. This is a computer-related specialty.

I always kept in mind that I would work as a programmer. That's what happened in the end.

I found a job advertisement in

I started actively looking for a job as a Java programmer in my fifth year, but first I decided to do an internship at some company. I saw an advertisement for an internship on the MAI public page on VK. To be honest, this was the first time I heard about Jet Infosystems. I found information about the company on the Internet, everything seemed interesting to me, and I left a request on their website.

As it turned out, there were many applicants—hundred and a half applicants. They took quite a long time to select. First we were invited to a general meeting, then we passed a theoretical test and completed several practical tasks.

Then, for those who did it successfully, another interview was arranged. Only after that we all got into the training group, and then I received an invitation to work as a Java developer. But that, as they say, is a completely different story, and that’s not what I want to tell you.

I've only read one book on programming

You can say that I am self-taught.

I am sure that programming is an area that you can understand on your own without long theoretical lectures at the university.

Before I started seriously learning to program in Java, I only read one book about programming. It was a “C++ in 21 days” course.

I won’t say that I didn’t like it or that everything seemed too complicated and unnecessary, but I still settled on Java. By the way, now at work I have to program not only in Java, but also in the “plus”, so there is no useless knowledge.

Why did I choose Java?

  • In my opinion, Java is perhaps the only programming language that does not take much time from the beginning of learning it to obtaining the final product. Perhaps I am the kind of person who wants to quickly “feel” the result. Pure theory doesn't really appeal to me.
  • I had a specific goal in front of me. I understood that it would be extremely difficult for me to get a job as a programmer; at a future interview I would need to show at least something and say: “I have no work experience, a diploma is not exactly what I need, but I have this - look.” But luckily I got a job through an internship.
  • Now there are a huge number of different guides for developing applications for the OS. So here everything literally matched for me: there were enough materials for training, and there was the possibility of obtaining an easily tangible result relatively quickly.

In short, after a short course in C++, I took up some kind of Java tutorial for beginners. I don’t remember what it was called, I only remember that I stopped reading it before I even got to the middle. I wanted to “get away” as quickly as possible.

Then I saw a lot of guides for beginners and I can say for sure: there is no fundamental difference between them. They are about the same. To find something, you just need to type “book for java starter” into the query and off you go.

I found many answers to my questions in this telegram channel.

There are few Russian-language programming sources on the Internet. Deal with it

Yes, and one more important thing. You need to come to terms with the fact that in the Russian-language segment of the network there are quite a few books and resources on programming when compared with the number of English-language sources.

Of course, in programming without knowledge of English at a good level, there is simply no way. So for those who are familiar with English at the Google Translator level, I can only advise one thing: improve your English first. Everything else comes later.

Of course, not everything is so sad: there is “Google Developer Tools” in Russian. But in any case, this is not where you need to start.

I know that there are various online programming courses - paid and free - but it turned out that I could do without them. Which once again speaks in favor of my original argument that programming can be learned without anyone's help.

Where did I start to "fail"

Having understood a little about Java for Android, I started little by little with typical application examples - from simple to more complex. By that time, I already knew what kind of application I wanted to eventually create.

I was helped by a friend who suggested writing an educational application for schoolchildren. I thought and nurtured the idea for a long time. I looked through the list of existing ones and made sure that there were few similar applications, after which I started developing them.

Probably the most difficult thing for me was to find good topic for a full project. I don’t know if this is a drawback or not, but I’m built in such a way that if the topic is good, if I like the idea and I’m excited about it, I don’t have problems with motivation. There are no problems with motivation - there are no insurmountable difficulties at all.

What resources can help a beginner?

  • stackoverflow.com.

There, with a probability of up to 90%, you can get a comprehensive answer to the question you encounter in development.

  • Repository with sources Github.com.

He really helped me learn from other people's examples.

  • YouTube

There are many screencasts there that very quickly allow you to understand a particular technology.

I developed my first application in a month

In short, I made the application in literally a month. The most useful sources of knowledge were Developer.android.com and the same Stackoverflow.com. The most interesting thing is that the routine process of uploading an application to Google Play took two whole months. Although, perhaps, everything lasted so long because after development my passion cooled a little. A little later, I developed a web version of the application after reading the book Beginning Java EE 7.

I would not like to end my story with some banal phrase about the fact that “everything is in our hands” and “you just need to want it.” Of course, not everyone, and I understand that I still got a job as a programmer thanks to some luck: what would have happened if I had not come across this post on VK?

In addition, I do not want to in any way diminish the importance of a university education and say: “Why is all this necessary? Look, everything worked out just like that.” Need to. The university actually gives you a lot and, perhaps most importantly, instills the habit of learning.

And yet: you can learn to program on your own. Now I know this for sure.

This article is not a coding tutorial. And not a post about “which programming language to choose.” If you want to understand how interested you are in learning about the world of code, then the more important question is: what is programming? What does programming look like from the inside? Are I and programming compatible?

The principle of “logic, not mathematics”

One of the biggest misconceptions new programmers have is that programming is full of mathematics. If you think that programming will make you remember your school knowledge of trigonometry, algebra, etc., then you are wrong. This kind of math is rare in programming.

From experience, “purely mathematical” things include, for example, the order of operations in an expression and the coordinate system. Nothing too complicated. On the contrary, there is a lot of logic. The need to think ahead, understand what order to do things in and how to control that flow, permeates every aspect of programming. If you have a knack for logic, then it will be easy for you to start coping with programming tasks.

The principle of “catching a falling star”

Programming can be looked at as running many “processes”—as if forcing the computer to “do the work for you”—and managing those processes. In programming, a process often produces a result. The result can be a file, but it can also be something simpler, such as a string, or a number.

The problem with working with processes is that if you don't do anything with their results, they simply dissolve. Literarily speaking, they “go into oblivion”, are never recreated, very similar to stars that sparkle in the sky and disappear. In other words, you need to “catch them.”

If you create something with a process, you have to grab it or you'll lose it. This is where variables come into play - as a way to "capture" the results of a process. This principle greatly helps to understand what programming is in the early stages of learning. And if you catch it early, you will find it very useful.

The "dictionary" principle

There are many "types" in programming. Think of types as the building blocks of a programming language. One type is a string, or a collection of characters inside quotes. Both "apple" and "orange" are strings. They can, for example, be combined and made “apple-orange”. Numbers are a different type. Numbers can be added, subtracted, multiplied (among other operations). Then there are “arrays” - a set of objects in a certain order. ["First", "goes", "before", "second"], for example, is an array with the first element "First" and the last element "second".

But perhaps one of the most powerful types is the hash, or key-value pair. Hash has many names. In Ruby this is "hash". In JavaScript it is called "object". Perhaps Python gave it a better name: “dictionary.” If you think a little, a dictionary is a set of keys (words) indicating their meanings.

But why does this matter? It turns out that such a structure is often needed to store data. For example, you can package information about a person this way:

("first_name" => "Jonathan", "last_name" => "Richards", "nationality" => "British" )

There are keys “first_name” (first name), “last_name” (last name), etc. These are like properties or attributes of a person. You can also add “hair_colour” (hair color), “age” (age), or “gender” (gender). And each of these keys has a meaning. A significant part of programming involves defining the formats of data structures. And key-value pairs are becoming the most valuable weapons in your arsenal, so it's useful to understand how they work as early as possible.

The “matryoshka” principle

Programming is full of objects that are inside objects inside other objects. When programming, you often find yourself trying to structure data, and often those structures contain other structures within them.

Let's add the “siblings” property to the previous example:

("first_name" => "Jonathan", "last_name" => "Richards", "nationality" => "British", "siblings" => ( "brothers" => , "sisters" => ["Fiona", "Mary"] ) )

You will see this principle throughout your programming. In HTML, some elements contain other elements:

In computing, objects are mainly programs or files. This is an extremely useful principle. In programming, you will often hear the terms "in" and "out" - input and output. The reason is that the task is often to receive input (input), process it (process), and make changes (output). Processing is done by processes (active bits) that are controlled by your code. Passive bits are data that processes operate on. It's all like turning minced meat into sausage.

The "dog, cat and fish" principle

(or the principle of cause and effect)

Imagine that you have a room. In this room there is a cat and a fish in a bowl. The fish behaves as usual. At a certain moment, 2 things happen: the dog enters the room, and the cat leaves the room. At the same time, the fish begins to sing. Question: What made the fish sing?

There are many possibilities to consider. We can assume this happened because a dog entered. And we can assume that the reason is that the cat came out. Or maybe the reason is a combination of both events. Perhaps both events have nothing to do with it. But the fact is that 18:17 is the time when a fish turns into a witch. Maybe all the fish sing. Some of these options may be true.

What's really important for a programmer is to be able to isolate the causes of change. You'll encounter situations like this as long as you code. In such situations, we might want to ask ourselves: can we simulate the dog coming in without the cat coming out (this might clarify a lot); can we simulate a cat leaving without a dog entering; can we completely replicate the environment (eg time 6:17 pm) to see if it influences fish singing, independent of dogs and cats? And so on. It is important to use a methodology to determine the reasons for change. This ability will help you over and over again as long as you code.

Abstractions, or the “pizza” principle

This is one of the trickiest principles. Imagine a pizzeria. Every day the chef prepares pizza with different toppings. Each pizza is prepared in a certain order: first you prepare the dough, then you leave it, then you put it in the pan, add tomato sauce, toppings, cheese, and finally bake it.

But naturally, the chef does not prepare each pizza from scratch in the order described here. It would take years. Instead, he prepares everything in advance, and when it comes to Neapolitan, all he has to do is take the base (which is already formed), add tomato sauce, anchovies and cheese, and then bake in the oven.

The important thing to understand here is that the cook only needs to know the ingredients for each specific pizza, but otherwise all pizzas are similar to each other. Programming looks very similar, you use "abstractions" to store more general data (like the crust of a pizza) while separating it from more specific data (the toppings).

Let's turn pizza making into code. First let's start doing it wrong. Let's make a method make_a_napoletana_pizza (make Neapolitana pizza):

Make_a_napoletana_pizza

It will have 5 steps (make the base, add tomato sauce, add anchovies, add cheese, bake):

Make_the_base add_the_tomato_sauce add_anchovy add_cheese bake

Great. But what if we want to make a salami pizza? We will be forced to write a completely new method make_a_salami_pizza (make salami pizza), which will have much in common with the current method, except that it will add salami instead of anchovies. This is somewhat expensive. The programmer's approach is to "abstract" the common parts of pizza-making techniques and account for the different, specific ingredients. We can do this with an "argument" that is "passed" to the method.

That's what it means. Let's imagine that our make_a_pizza method is called with the "toppings" argument. The method will look something like this:

Make_a_pizza(toppings)

And it will work like this:

Make_the_base add_the_tomato_sauce add_toppings(toppings) add_cheese bake

In line 3 we take the toppings defined earlier and add them to the pizza.

Now that we've defined a general method for making pizza, we can simply call it and specify the ingredients we want. Everything happens automatically. In other words, we call make_pizza(salami), and when the method runs, the salami will become toppings and will be added to the pizza when the method reaches the 3rd line. By simply changing the toppings, you can create 2 different pizzas using one method. It's as economical as when the waitress simply writes "1 x salami, 1 x vegetarian" on the order form and the cook knows everything he needs. In programming this is called "abstraction".

So there you have it: seven principles that are typically learned in the first 3 years of programming and that make a significant contribution to understanding the art of coding. If you are starting your journey, these principles can help you too.

Irina Davydova


Reading time: 13 minutes

A A

Everyone chooses the profession of “programmer” for their own specific reason. One decided to simply change his specialty, the second is forced to learn another profession, the third does not understand himself without codes, and someone goes into the profession simply out of curiosity.

One way or another, everyone starts from scratch. And before you start from scratch, ask yourself, do you really need this profession?

The essence of a programmer’s work - main specializations, pros and cons of the job

The essence of a programmer’s work depends on the specialization and the company.

However, sometimes a programmer is both a “Swede, a reaper, and a trumpet player.” But this, as a rule, occurs in small companies whose bosses save on specialists.

The main categories into which all programmers can be roughly divided according to their activities:

  • Application specialists. Tasks: software development for games, editors, accounting/programs, instant messengers, etc.; software development for audio/video surveillance systems, alarm systems, etc.; adapting programs to fit someone's specific needs.
  • System specialists. Tasks: developing operating systems, creating interfaces to databases, managing a computer system, working with networks, monitoring the operation of created systems, etc. These specialists earn more than anyone else in their field, due to the rarity and specificity of the profession.
  • Web specialists. Tasks: working with the Internet, creating websites and web pages, developing web interfaces.

The advantages of the profession include the following advantages:

  1. A very decent salary.
  2. High demand for good specialists.
  3. Opportunity to get a prestigious job without education.
  4. The opportunity to earn money remotely while sitting at home on the couch.
  5. Opportunity to work remotely for foreign companies.
  6. Creative profession (however, creativity often depends on the wishes of the customer).
  7. Comfortable conditions that large companies provide to their specialists (free drinks/buns, special places for recreation and sports, etc.).
  8. Possibility of obtaining an “option”. That is, a block of shares in the company. True, only after serving a certain period of time in the company.
  9. Expanding your horizons. As you develop in your profession, you have to get acquainted with a variety of areas of life and delve into a variety of systems - from office work and accounting, etc.

Minuses:

  • Working “all day long” is common in this profession.
  • This work will be boring and monotonous for many people.
  • The interests of the specialist and the customer do not always coincide, and what is obvious to the programmer, as a rule, cannot be explained at all to the client. This leads to conflicts and stress.
  • Emergency operating modes are not uncommon.
  • The need to constantly develop, learn new things, and have time to evolve with the IT sphere. In just a few years, programs become outdated, and new ones have to be written.

Video: How to become a programmer?

Necessary personal and business qualities, professional skills and abilities to work as a programmer - what do you need to know and be able to do?

The main qualities of a good programmer

A good programmer should...

  1. Love your job. And not just to love - to be sick of it.
  2. Love to learn and teach from scratch.
  3. Be very hardworking, diligent and patient.
  4. Be prepared for constant routine work.
  5. Be able to work in a team.

What knowledge does a future programmer need?

You should start by studying...

  • In English.
  • Computer devices and physics of all processes.
  • Programming languages.
  • Software development methodology.
  • Software testing methodology.
  • Version control systems.

Programming language – which one to start with?

You will also need to study...

  • Java. More popular than Python and a good choice for a beginner. But more complex than Python.
  • PHP. Designed for the web, but will be useful to any beginner.
  • C and C#. Very complex languages, you can leave them for later.
  • Ruby. A good option for a second language.
  • Django. He will teach you how to program correctly. Similar in complexity to Python.

Much depends on the chosen direction.

For example…

  1. A web programmer will benefit from knowledge of HTML, CSS and JavaScript.
  2. For desktop programmer - APIs and frameworks.
  3. For mobile application developer - Android, iOS or Windows Phone.

Where to study to become a programmer from scratch - educational institutions in Russia, courses, distance learning, online learning?

If you don’t have friends who can teach you the profession of a programmer from scratch, then you have several training options:

  • Self-education. The most difficult path to programming, which lies through studying sites, applications, books, etc.
  • University. If you have just graduated from school and dream of getting a prestigious profession as a programmer, enroll in the appropriate faculty. You will still gain basic knowledge through self-education, but the “crust” will help you get closer to your cherished goal faster. Choose technical universities, having studied the training programs in advance.
  • Personal teacher . If you can find a mentor among programmers, self-learning will be faster and more effective. Look for mentors on online forums, at IT parties, thematic conferences, etc.
  • Courses. They can teach you this or that programming language in simple courses that can be found even in small towns. For example, " Educational IT portal GeekBrains", « Specialist" at MSTU Bauman, « Computer Academy STEP", MASPC.

You can get a higher education as a programmer in…

  1. MEPhI.
  2. Russian Plekhanov University of Economics.
  3. Moscow State University of Civil Engineering.
  4. MSTU Bauman.
  5. State University of Management.

Video: 7 mistakes beginner programmers make

Useful online resources and books for learning to be a programmer

  • habrahabr.ru (articles on IT topics, information on a variety of topics). This resource is known to every programmer.
  • rsdn.org (books, current issues, useful forum, filling knowledge gaps, materials in Russian).
  • sql.ru (excellent convenient forum, useful literature and even job offers).
  • theregister.co.uk (news from the IT sector).
  • opennet.ru (news, useful articles, forum, etc.). A resource for professionals.
  • driver.ru (driver library). Useful site for beginners.

Learning Resources:

  1. ocw.mit.edu/courses (over 2000 courses on various topics).
  2. coursera.org (more than 200 courses, free).
  3. thecodeplayer.com (step-by-step guides for beginners).
  4. eloquentjavascript.net (resource for introduction to Java Script).
  5. rubykoans.com (for anyone learning Ruby).
  6. learncodethehardway.org (learn Python, Ruby, C, etc.).
  7. udemy.com (paid and free courses).
  8. teamtreehouse.com (over 600 lessons).
  9. webref.ru/layout/learn-html-css (for mastering HTML and CSS).
  10. getbootstrap.com (exploring the features of Bootstrap).
  11. learn.javascript.ru (learning frontend and Javascript).
  12. backbonejs.org (for front-end developers).
  13. itman.in/uroki-django (for learning Django).

Free learning sites to help beginners:

  • ru.hexlet.io (8 free courses in C and PHP, JavaScript and Bash).
  • htmlacademy.ru (18 free courses for layout designers).
  • codecademy.com (popular courses on languages, tools, etc.).
  • codeschool.com (more than 60 courses (13 free) on HTML/CSS and JavaScript, Ruby and Python, iOS and Git, etc.).
  • checkio.org (for learning Python and JavaScript).
  • codingame.com (learning through video games, 23 programming languages).
  • codecombat.com (learn JavaScript, Python, etc.). An educational game that is also accessible to those who do not yet speak English.
  • codehunt.com (training to find errors in code).
  • codefights.com (a training platform through tournaments on which you can get an interview at a decent IT company).
  • bloc.io/ruby-warrior# (learning Ruby and arts/intelligence).
  • theaigames.com (development of programming skills - an exciting online gaming simulator for a programmer).
  • codewars.com (a collection of educational interactive tasks for those who have a minimum of knowledge).

It usually takes from six to 12 months to learn the basics of programming on your own.

How to quickly find a job as a programmer and start earning money - advice from experienced people

Naturally, you simply won’t be able to get a job in a normal company without work experience.

That's why…

  1. Read books, study websites and educate yourself, but now start writing your very first lines of code.
  2. Create and complicate your own tasks based on the material you have covered.
  3. Look for your first projects, even for “funny money”, write it down in your “resume”.
  4. Look for work on Russian-language freelance exchanges (ru) and on English-language exchanges (upwork.com) too - there are more chances of getting it there.
  5. Start with small projects that you can handle.
  6. Don’t miss out on the open source option (such projects always lack people).
  7. Help “for a pretty penny” (or even for free, for experience) to programmers you know. Let them give you simple tasks.

  • Be sure to write: your work experience, a list of languages ​​and technologies you speak, education and contacts.
  • We don’t cram the entire list of our qualities and talents into our resume. Even if you play the button accordion masterfully, you shouldn’t write about it on your resume.
  • Design your resume to be creative but relevant.
  • You should not fill out items like “your goals and ambitions” or “where do I see myself in 5 years.” It is enough to write what you did before and what you would like to do now.
  • Don't write about languages ​​and technologies that you know only by name. You should only write in your resume those in which you swim like a fish in water. For everything else there is a magic phrase - “there was a little experience.”
  • If you are proficient in Delphi, do not forget to mention that you also know C#, Jave or another language, because no one really needs a “Delphi programmer” (Delphi is the basics with which every graduate is familiar).
  • Do not mention work that was not in your specialty. No one is interested in this. Also, no one cares whether you have a driver's license or a car. You are not going to get a job as a courier.

Programmer career prospects and programmers' salaries

The average salary of a programmer in major cities of the country is: from 50,000 to 200,000 rubles.

For Russia as a whole - from 35 thousand to 120000.

The profession is on the list of the most in demand - and the most handsomely paid. Even a modest specialist can earn enough to buy a sandwich with caviar, but a professional will definitely not need money.

From an intern to the head of an IT department, the path is not that long, and the salary at the very top can reach $4,000 monthly. Well, then you can move to the leadership of a large project (approx. - software development), and here the salary already exceeds $5,000.

Today it is difficult to imagine our life without such things that have already become everyday things like laptops and personal computers, smartphones and consoles, terminals in supermarkets, automated banking systems, etc. This list can be continued for a long time, but they all have one thing in common - it is programmers who insert the “brains” into these modern smart devices.

But, before choosing this profession, you need to clearly understand where to start in order to achieve success in this difficult field.

Anyone who has basic skills, knowledge and a great desire can become a programmer. In addition, you need to decide in which direction of programming you would like to work most. In this case, there are three main directions.

1. Web programmers are the simplest line of work. Includes:

  • Layout designer creating templates (website design);
  • Server programmer creating a website script.

2. Software Programmers (medium level of complexity) are divided into:

  • Software developer;
  • System program developer.

3. Programmers developing games for PCs, mobile phones, consoles - the most difficult area of ​​work.

How long do you need to study?

It all depends on the desire and intensity of obtaining theoretical knowledge and practical skills. However, there is an unwritten rule that everything can be learned in one year. The main thing is to have the desire to learn and constantly gain new skills. As for the age at which one can master this profession, there is also a question of determination. Some at the age of 18-20 have no desire and vital energy, while others, being of retirement age, easily achieve the goals they have set for themselves.

What knowledge and qualities are needed?

Young people who want to connect their lives with programming at school age should understand that the education they receive while sitting at their desks will significantly facilitate their task of mastering this profession.

From the school curriculum, special attention should be paid to the following subjects:

  1. Higher mathematics. In addition to the ability to carry out ordinary calculations, this is one of the few school subjects that forces you to think, analyze, develop abstract thinking and build personal conclusions. These are the skills a person should have;
  2. English language. In this case, at least an “intermediate level with a dictionary” is required. Ideally, this means good knowledge of a technical language and the ability to translate specialized texts. After all, for the most part, you will have to study and use documentation, purchase various software, and also negotiate with foreign counterparties with a confident command of the English language;
  3. Computer science (programming theory). It is necessary to have an understanding of data types and the basics of working with databases, basic operators and programming languages ​​(in the school curriculum these are Pascal and C++), as well as the basics of object-oriented programming;
  4. Physics. Many people believe that knowledge of this subject is absolutely useless to master the profession of a programmer. But this opinion can be called erroneous. After all, this area of ​​work can be closely related to physics. For example, creating a simulator of a space or sea ship, as well as computer games that are as close to reality as possible. Knowledge about the incidence and refraction of light, the creation of real movement and drifts of a car in various weather conditions, the realistic display of water, smoke or fire, etc. may become necessary.

Required qualities for work:

  1. Possession of extraordinary and logical thinking;
  2. Mathematical thinking;
  3. Ability to manage time (not forgetting about constant self-learning);
  4. The ability to divide one large task into subtasks;
  5. The ability to choose the right goal and have the desire to achieve it;
  6. Ability to work in a large team. You can’t handle large projects alone, and small projects are not particularly in demand. It is necessary to discuss unclear issues with more experienced colleagues and fill knowledge gaps;
  7. Ability to learn quickly. Technologies do not stand still. Therefore, in addition to existing work on your projects, you need to constantly monitor and be aware of the latest changes in the field of information technology.

Minimum knowledge and skills

According to engineers and programmers at Google, every self-respecting specialist in the field of programming must have a number of minimum knowledge and skills in order to become a professional in the future. And so, what you need to know to become a high-level specialist:

  • Learn the basics of computer literacy using distance learning courses from Coursera or Udacity;
  • Gain knowledge of programming in at least one language (Python, C++, Java);
  • Learn other languages ​​(PHP, Java Script, HTML, CSS);
  • Learn to test code;
  • Learn to understand algorithms and data structures;
  • Gain knowledge in discrete mathematics;
  • Study the features of operating systems;
  • Gain knowledge about artificial intelligence;
  • Learn to create compilers;
  • Gain knowledge of cryptography and parallel programming.

When starting practical work, the above-mentioned experts advise:

  • Create your own website, server or robot;
  • Develop part of a large system, understand the documentation and codes, and debug the program;
  • Start working on a big project as a team. This will allow you to learn faster and get used to team interaction;
  • Constantly improve your knowledge and skills;
  • Begin the work of teaching others.

Where can I get the necessary knowledge?

You can obtain the necessary theoretical and practical knowledge in the field of programming yourself in several ways:

  1. Learning from books and magazines. This option can be called standard and proven over many years. However, in order to save on the purchase of “paper media”, you can download the most relevant information on programming issues from Internet resources. Many practitioners argue that the perception of the studied material is better from paper sources. And the need to manually write many different codes will allow you to gain some self-confidence and get rid of the passive way of writing program codes like “copy and paste”;
  2. Training video courses. They are a good alternative to books and magazines. The books are mostly written in boring and not always understandable language, without the opportunity to ask the author a question of interest. If you watch video lessons, everything is much easier. The main thing that is necessary is to repeat all the actions that are shown on the monitor. And if difficulties or incomprehensible moments arise, you can always ask your question to the author on the forum. Another positive aspect of such training is the independent implementation of a number of actions described in the lesson. Yes, this occurs in the form of a clear repetition of the operations carried out in the video. But it is precisely this procedure that gradually develops the ability to independently create scripts, applications and programs.

Having obtained a sufficient level of knowledge, you can evaluate your strengths and compete on various specialized sites for programmers. In addition, to obtain new and useful information, as well as communicate with “colleagues,” it is recommended to visit Internet forums.

Conclusion

Changes in IT technologies, including programming languages, occur all the time. It is necessary to try to keep up with the times, study various literature devoted to a specific area of ​​​​work. Constantly searching for different ways to solve problems will help improve professional knowledge. Communication with colleagues or simply people related to programming will allow you to quickly find the right ways to complete assigned tasks.

There is nothing wrong with constantly using reference books on programming languages, because you can’t keep everything in your head, and there are things that you don’t have to keep. It is worth approaching the solution of any problem (even the simplest at first glance) thoroughly and slowly. When first applying the acquired theoretical knowledge in practice, you need to learn how to develop your own solution algorithm. It is necessary to take on small programming problems as often as possible and gradually hone your skills. Later, with acquired experience, the programmer will be able to afford, in addition to his main job, to conduct additional paid seminars and consultations, as well as recruit students. I hope such difficulties did not frighten you, and you will continue to move towards your goal.

Publications on the topic