The Way to Programmers (C ++)

Hey. I am with you. I liked to box and run for long distances, and I only thought about sports, but learned how to sail. He worked in aviation, and became a C ++ programmer at 29. I’ll tell you how it happened.

By October 2017, I knew as much about programming as there is now about quantum physics — nothing. Absolutely. "Hello world" - did not even hear about such a phrase. The time from the beginning of training to employment is one and a half years.

Why did you decide to paint your training? - because I know for myself how hard it is to find a good job in the CIS. I haven’t seen places where there is career growth, normally paid for labor in engineering and related fields, everywhere you are just a worker, everybody has one place for your ambitions, a desire to improve your qualifications, somehow grow up.

Especially this post I write with thoughts about fellow countrymen in Siberia and the Far East, because it’s harder to work there twice, about people with disabilities who cannot live a full life, not only because of their physical limitations, but also because that they don’t have the opportunity to work in a normal position and feel confident that tomorrow you will not be lost, you are needed, you are valued. By the way, my colleague has a visual impairment and works quite successfully. Therefore, for some, I am sure my copy-paste studies will do. I will immediately describe it, then the rest.

What you need to get started: Internet access (you may not have it permanent, just load the page), an old computer 10 years old will do, higher education for employment is not necessary for 30% of vacancies in Russia. And about a year of time to study, if you deal productively. Do not believe the teachers "to become a programmer in 1-4 months", this is impossible. The work of the programmer does not end far on knowledge of the syntax of the PL (programming language).

In addition to YP, you need English. If you have not decided where to start, then start with English.

I improved my knowledge by reading and translating texts, I used the android application - Smart Book . And I downloaded the game on the phone, in which there is a lot of text, switched to English and in this way increased the vocabulary. A game -Exiled Kingdoms .

October 10, 2017 for the first time stumbled upon “C ++ lessons”, spent 40 hours in the first week.

Study. Step by step


He studied from 2 to 10 hours on weekdays, spent little on weekends and vacations, or did not even remember about it.

Started with this site - there are good puzzles.
At the same time, topics can be studied here .

half year later

I solved all the problems except the last level (3-4 could only be there) - here . In general, this site has the best list of tasks, as well as a good explanation of the topics.

When the topic does not reach you at all, I advise you to watch the lesson of this teacher . Excellent explains, really understand anyone. * Do not get involved in video lessons - useless without practice.

Along with solving problems, after half a year of training, I decided to fix the topic of arrays by writing a console naval battle. It was difficult, at first the whole program had about 1300 lines in one .cpp file. Over time, the training campaign, I improved the code and, as a result, the code in four .h .cpp files with a line size of 500 ended up in the resume.

Almost a year passed, I began to study the Qt library. I wrote my reader of .fb2 files + a small English-Russian translator was built in there with the ability to save my words for repetition, delete them, display one column of words, then another, as convenient. Switching between windows using buttons, but without the use of signal-slot communication. Writing this program allowed me to learn SQL and a bit of html markup. This also hit the resume.

At that time, 2019 has already come, and I began to send the resume right on New Year's holidays (the reader-translator has not yet been written).

While writing it, I was also carried away by the implementation of my STL containers and smart pointers (after the first failed interview I realized that without 11 standards and a deep understanding of STL, there is nothing to do at the interviews).

I have implemented: vector, one linked list, two-linked list, unique_ptr, shared_ptr, auto_ptr. And after I rummaged around all this, I began to feel more confident much at the interviews, it helped a lot.

All this flooded on github(it’s easy to use the git, but studying can take a lot of time), as a result, the resume included the infamous naval battle, the “project” reader-translator, the implementation of STL + smart_pointers (only on STL and SmartPointers they asked me questions, indicated errors, they asked me to correct them right at the interview, it was interesting to discuss. Nobody paid any attention to my other “scribbles”).

+ I tried a bit, quite superficially, to study the basic patterns (during the interview, the question of patterns was always under the asterisk), I could verbally talk about MVC, MVP (but I couldn’t explain the differences), and 3-4 main generative patterns — here’s a good site on patterns. This one is also beautifully designed.

Also, I listened and outlinedlectures on advanced programming .
And I learned about 15 different sortings (in fact I knew by heart 5 - the rest only with the help of spurs).

Two forums helped me a lot in learning, I use them now - cyberforum , evileg .

For the entire time of training, I turned to a private tutor C ++ (about 1500r for one lesson) to clarify some topics only 6 times, 5 of these classes were in Qt (it was tight for me then and some time after employment). After the new year, I started attending English courses. I spent approximately 3000 rubles a month on individual English lessons.

I advise:

  • - . , . , , Python — .

  • , 250 ( 10 1 ) — , , 30. , , .

  • , , .

  • - .

  • , , , , . , , . . , - , . — , , . , . , . , - , , - 30.

  • , ++ . , , .

May 16, 2019 I got a job after 6 interviews (4 unsuccessful), there was an offer in St. Petersburg, I chose the city of residence.

links :

purecodecpp.com - theory, practice
ravesli.com - theory
cppstudio.com/cat/285 - mostly tasks
www.youtube.com/playlist?list=PLrCZzMib1e9qjGLjg83bCksf3N7FIy7jg - in-depth study of the advantages
cpp-reference.ru/patterns -
refactoring patterns .guru / ru / design-patterns / catalog - patterns (with visualization)
www.youtube.com/channel/UCtLKO1Cb2GVNrbU7Fi0pM0w - videos in which topics are explained in more detail.
www.cyberforum.ru/cpp-beginners
evileg.com - forums where you can be helped.

Regarding Qt , if you, like me, decide to study it and really want to have a good, albeit superficial, representation by the beginning of your work, I advise you to understand the model / view architecture - model / view (by the way, the beginning for studying is not bad patterns MVC model / view / controller, MVP model / view / presenter). This architecture is like a simplified MVP pattern.

Information is here . It is not so much, but it took me months to more or less confidently use all the benefits of Qt.

I did not know anything of this before employment, but I advise you to study it.

Summary


My resume in the form in which it hit the table to my employer. I did not change anything in it, except for a link to the GitHub and phone number.

A resume was sent out across the country to increase job opportunities. All interviews took place remotely. But he settled as a result without an interview in the city of residence. The employer was simply satisfied with what was on the resume.

I copied my resume during my job search many times.

Key recommendations :

  • , , , , .. - , , , . , - , .

  • / .

  • . . , , , , . , . .


  • , -, .

  • , . . — , . , — 80. , , 5 , . , , .. . , . . ? - 3 , IT. . 2 , , 2 , 3 , 4 , , 2 14 , - , . , , — — , . , , .

  • Indicate your achievements. If you are a cool artist, why not point out? You have achieved something, well done.

  • Do not indicate your flaws.

  • Quality photography for the portfolio. Not my case, of course :-), but, I was close to spending 5 thousand for a photo session for a normal photo in a resume.

I sent out about 20 resumes per week. Sometimes, after poor interviews, I took a break (one was about a month and a half) to tighten my knowledge and then sent it again.
I sent the resume to the employer, for whom I am working now, in March, it was unanswered. They called me in May.

Job interviews


With what I came to this stage in IT - the Knowledge Stack (maybe a bunch?), Regarding programming: everything is basic in OOP, 11 plus standard, STL, superficially Qt (couldn’t even use signal / slot connections), basic SQL queries and git, the patterns I wrote about above.

In more detail (I rewrite what I had at the spurs for the interviews, for each point one or two sheets): auto, decltype ; forward ; explicit ; noexcept; mutable {deque, stack, queque, unordered_map} - for some reason I learned all the methods of these classes from here; overloaded functions / operator overload; template classes / functions; all about “virtuality” in OOP (functions, classes, purely virtual functions, etc.); all about the designers (copy constructor, delegating costructor, moving, etc.); disable copying in the class; move () semantics, references (lvalue, rvalue, xvalue, glvalue, prvalue); std :: forward; exceptions in the destructor / constructor; where try \ catch is appropriate; mapping hash tables and map; static defaul; override; mutable reinterpret_cast; constexpr; volatile default temporary object transfer; basic about unit testing.

From the lessons on in-depth programming, the link to which was given above - the work of the preprocessor, compiler, linker, low-level memory, virtual memory, allocation of memory on the stack / heap, malloc, new, global memory, inline, features of the work of modern compilers in general terms - that often the compiler presents your code and parses in a completely different form, and not the one you wrote, the features of passing objects by pointer / link / link const, based on this, the choice of how to pass an object, lambda functions, std :: function , the main thing about castes, friend, functors, final, rhomboid inheritance, multiple inheritance.

This is just what is in the spurs and notebook.

I didn’t understand multithreaded programming at all (I asked my skills in a couple of interviews, I immediately answered “I know a little theory, I didn’t use it”). I understood the STL of the container without problems, it’s understandable, maybe I wrote my containers, but I couldn’t use smart pointers anyway, I just knew the theory about them and how they are arranged inside.

Interview stages


Since I sent resumes all over Russia, the interviews, respectively, took place remotely. How this happens: they call you and ask you to take 5-15 minutes, talk with you on common topics and, if everything is fine, you arrange a technical interview - these are 2 stages, but maybe more. By the appointed date, the whole monitor was glued with spurs on stickers with sorting algorithms; on the table / floor / wall / chair 360 degrees around, spurs were glued. In spurs was everything + on my lap is my lecture book, on each page I taped notes- that you can peek at it. By the way, I did not have time to use spurs, you can write them, but do not use them. Faster to remember than to navigate in this chaos.

They never asked me about my level of English, but I didn’t even knock at a company that needed conversational English.

All interviews took place on Skype without video (probably it was the same for me, it seems to me that in most cases the interviews are with video). The first 20 minutes will tell you about the company and you about yourself. Then, the team leader will connect with you and begin to torment you, with the simplest “what is polymorphism? Write a function for adding two numbers” and a similar base, then, suddenly, ask you to add some logic to your primitive function and everything will become more complicated in for the next 40-50 minutes. All this will be mixed with questions on the theory. Further, they may send you a test task, or they may send it before the interview, or they may not send it. A week after the interview, or passing the tests, there will be feedback on the results.

About the test tasks: I received emails from several obscure companies several times, as I later realized, these were just certain tasks, the solution of which will be poured into my project after refactoring. Simply put, you are thrown off the task in the hope that you will work for free (like “parse the site”, pull out such and such data from there and compose it in such and such a way). But there are really real test ones, I decided in DrWeb and in some other company ... solved, but did not decide.

I’ll talk about some of the interviews.

Second interview


My second interview was in Nizhny Novgorod. I really liked the way they described themselves, their site, the scope of their activities and the people with whom I spoke. Unfortunately, I did not reach the knowledge, but in general was satisfactory. After this interview, I contacted the manager and explained that I liked the contact with them, their company and I would like to get a second chance to cooperate with them in the future. I was given contacts of the one who conducted those interviews with me (not Tim Lead), and I contacted him on Skype. At first, I asked him to help me study for money, so that he would prepare me for an interview with them, he did not agree. We agreed that he will give the main topics for study and will prompt me from time to time. Sometimes, I contacted him and he gave me a short lecture. His nickname was Elu-Puki. If you read thisI am very grateful to you, you made about 20 percent of my preparation for employment! I shake my hand firmly, I will not forget your help. After a month of training, the next interview was scheduled with him, and only on it I understood, the vacancy is not a programmer, but a tester. They asked me about something incomprehensible to me, I didn’t answer anything, I was upset, said thanks to Elou-Puki and began to prepare for the next interview. In general, it is not clear how I was trained for a positive developer knowing that a job is a tester. A strange moment, but it was as it was.I was upset, said thanks to Elu-Puki and began to prepare for the next interview. In general, it is not clear how I was trained for a positive developer knowing that a job is a tester. A strange moment, but it was as it was.I was upset, said thanks to Elu-Puki and began to prepare for the next interview. In general, it is not clear how I was trained for a positive developer knowing that a job is a tester. A strange moment, but it was as it was.

Third interview


The third interview (in Moscow, or in Nizhny Novgorod) was disgusting. They had a camera turned on, and I watched the three of them at the round table. It immediately became clear that they were getting familiar with my resume only now, before that they had not seen him. After a question about my age, all questions on the technical side did not rise above 2 + 2, after they found out that I soon had grins on my faces, in short, I was very angry and honest if I had been in their office in such moment, I would certainly make a remark “what’s funny?”, or maybe something hard. With difficulty I endured to the end and interrupted the dialogue during the standard “we are re ... (calling, probably)”. I remember that evening I punched a door in my room with my hand. Their behavior was offensive.

Fifth Interview


The fifth interview took place in St. Petersburg. We talked for a long time, probably an hour and a half. I enjoyed the questions very much, it was really important for the interviewer to get to the bottom of my knowledge, I asked about the low-level work of certain moments and asked for the implementation of some of my containers and pointers on the github, I corrected the errors, I explained some points myself and I wrote down myself in a draft so as not to forget. After 2 weeks, there was an offer from them, but as I understood it, they were still not 100% sure of me, although the interview went smoothly and I answered a couple of questions “with an asterisk”.

Sixth job interview


Andrey (my manager) called me and invited me for an interview. I took leave from work at dinner, was a little worried (after all, I had never written the code face to face), but overall I was sure, especially after the previous interview and knowing that I already have a place. In my hands were all my spurs and a book (why I dragged it with me I don’t know), but in the end, they just told me about the project, work in general and “when can you get to work?” On the same day I wrote for dismissal. I chose to work in the city of residence, because in the beginning, a small sn, respectively, loss of money and I need to rent an apartment, plus my wife did not want to completely part for a long time.

The rest of the interviews were simply unsuccessful, there was nothing special to tell, I did not answer the questions well and was red as a tomato because of shame.

There was also an invitation to intel Nizhny Novgorod, agreed at 19:00 for a small dialogue by phone. They called me at 18:20 approximately when I was driving, when I clicked “answer” the phone hung up, I couldn’t call back, there wasn’t a call at the appointed time either ... well, fate means. I wrote them an email about this situation and asked to be contacted again, but they did not answer me.

What good is this profession?


Unlimited growth in qualifications, it will not work against the ceiling. Qualification growth is converted to financial. With knowledge of English all doors are open. Comfortable atmosphere for work. They value your workspace and do not create unnecessary noise that distracts from work - before, I always had a headache at work, music was especially annoying, the radio everywhere, and I like to work in silence, now there is no problem with it. The ability to work remotely, this is the third day of quarantine in the region and I’m on a remote site for the first time, it’s not bad, sometimes you can practice, but still it’s not mine, it’s more productive in the office, so you have to process it at home, although it takes the same time to travel to the office . This work is great for introverts.

Bad


For me, only a couple of points - experience is not enough, everything is learned with difficulty and the constant feeling that you are stupid does not leave you, so you sometimes have to process it (which does not bother me) in order to catch up with tasks. From here follows the second minus - for two years now since the beginning of my studies I haven’t been practicing practically - I don’t always have enough time, plus sedentary work, physically I have reduced a lot.

About motivation


I did not motivate myself absolutely. Before, I constantly tormented myself with these motivations, goals, you should not give up, "lie in the direction of your dreams" and other nonsense!

On such a wave, I did not realize any of my dreams and goals to the end, I simply burned out. And believe me, there were so many of them. This time it was different. I didn’t think of any goal, as if it didn’t exist, there was no motivation for me at all, there was one sure, calm, necessary. And that’s it. Every day you need to spend at least 3 hours studying. On this wave it was easy emotionally. I didn’t think it was like you had to get into the straps and drag this load, or break through ... no. There was nothing at all inside, I just, just learned how to go to the store, it's not a goal and you don’t need motivation for this, you just slap in the store and that’s it. So I just walked.

The main thing that I learned from boxing and it helped me to learn, and to set myself up that way, the one who works the most wins. Anyone who poses some tasks in the ring, solves them, every second is busy with something, and not just poses there, he wins. And this is projected onto everything in our lives.

In conclusion, I would like to leave this video here "while we work, we live."

Till.

All Articles