ДК
Джон КофиApril 13, 2020, 8:38 a.m.

Path to Programmers (C ++)

Hello. I am with you. I liked boxing and long-distance running, and I only thought about sports, but I trained as a sailor. I worked in aviation and became a C++ programmer at 29. I'll tell you how it happened.
By October 2017, I knew exactly as much about programming as I do now about quantum physics - nothing. Absolutely. "hello world" - never even heard of such a phrase. The time from the beginning of training to employment is one and a half years.

Why did you decide to schedule your studies? - because I know from my own experience how hard it is to find a good job in the CIS. I have not met places where there is career growth, work in engineering and related fields is normally paid, everywhere you are just a worker, everyone has one place for your ambitions, the desire to improve your skills, somehow grow.
I am especially writing this post with thoughts about fellow countrymen in Siberia and the Far East, since it is harder twice with a good job there, about people with disabilities who cannot live a full life, not only because of their physical limitations, but also because the fact that they do not have the opportunity to work in a normal position and feel confident that tomorrow you will not disappear, you are needed, you are appreciated. By the way, my colleague has a visual disability and works quite successfully. Therefore, for some, I'm sure my copy-paste study will do. I’ll describe it right away, then the rest.


What you need to get started: Internet access (maybe not permanent, just load the page), an old computer 10 years old is fine, higher education for employment is not necessary for 30% of vacancies in Russia. And about a year of time to study, if you are productive. Do not believe the tutorials "become a programmer in 1-4 months", it's impossible. The work of a programmer does not end with knowledge of the syntax of the PL (programming language).
In addition to PL, English is needed. If you have not decided where to start, then start with English.
I increased my knowledge by reading and translating texts, using the android application - Smart Book . And I downloaded a game on my phone, in which there is a lot of text, switched to English and in this way increased my vocabulary. Game - Exiled Kingdoms .

On October 10, 2017, I first came across "C ++ lessons", spent 40 hours in the first week.

Studies. Step by step

He spent from 2 to 10 hours on weekdays studying, did little on weekends and holidays, or did not even remember about it.
I started with this site - there are good puzzles.
At the same time, topics can also be studied here .

half year later
I solved all the tasks, except for the last level (I only managed 3-4 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 - #Simple Code . Explains very well, anyone can understand. * do not get carried away with video lessons - it is useless without practice.
Simultaneously with the solution of problems, after half a year of study, I decided to consolidate the theme of arrays by writing a console sea battle. It was difficult, at first the whole program was about 1300 lines in one .cpp file. Over time, during the training campaign, I improved the code and, as a result, the code in four .h .cpp files with a size of 500 lines got into the summary.

It's been almost a year since I started learning the Qt library. I wrote my own .fb2 file reader + 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 using signal-slot communication. Writing this program allowed me to learn SQL and some html markup. It also made it into the resume.

At this time, 2019 has already come, and I started sending resumes right on New Year's holidays (the reader-translator has not yet been written).
While writing it, I also got carried away with 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 interviews).

I have implemented: vector, single linked list, doubly linked list, unique_ptr, shared_ptr, auto_ptr. And after I dug into all this, I felt much more confident in interviews, it helped a lot.
All this was uploaded to github (it is easy to use the git, but the study can take a lot of time), as a result, the summary was the following - shameful sea battle, "project" reader-translator, implementation STL + smart_pointers (only on STL and SmartPointers I was asked questions, pointed out mistakes, asked to correct them right at the interview, it was interesting to discuss. No one paid attention to my other "scribbles").
+ I tried a little, quite superficially, to study the main patterns (at the interview, the question about patterns was always under an asterisk), orally I could talk about MVC, MVP (but I could not explain the differences), and 3-4 main generating patterns - here good site by patterns. This one is also beautifully designed.

Also, I listened to and summarized deep programming lectures .
And I learned about 15 different sorts (in fact, I knew 5 by heart - the rest only with the help of spurs).
A couple of forums on pluses helped me a lot in studying, I use them now - cyberforum , evileg .

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

I advise:

  • Don't go to paid programming courses - waste your money. Made such a conclusion from viewing some of them, according to numerous reviews. My wife's company hired one of these companies to train employees in Python - it's such a mess.
  • No need to hang out in video lessons, I went through about 250 lessons (one lesson from 10 minutes to 1 hour) - it took about a month and a half, count the lost time, 30 would be enough. See the explanation of those topics that you don’t understand and feel well, that you need to understand this in more detail.
  • Write more code, constantly solve problems, every day.
  • Once you get past the main topics, start writing your project.
  • Learning programming from books was unacceptable for me because it was too long and, in my case, it was completely unclear what the books were about, since I had absolutely zero knowledge in this area. If you do not have time, you want to get a job faster, then books are not your friend. Books are required in the future for advanced training. After getting a job, I read a couple, but still I prefer to study this area not in such literature, but by looking at various features on the network and applying them directly to the project. Books on programming are too tedious, boring for me, I master them with great difficulty. Although, thin. I can read literature and history without interruption all the time, if only there was time. In general, learning programming from books is of high quality, but it takes a long time and requires a lot of patience and perseverance, I have absolutely no patience and was limited in time - I wanted to be in time before 30.
  • learn C so that later you don't need to learn C++. In addition, there are no vacancies in C. C - deprecated.

On 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 :
https://purecodecpp.com - theory, practice
https://ravesli.com - theory
http://cppstudio.com/cat/285/ - mostly tasks
https://www.youtube.com/playlist?list=PLrCZzMib1e9qjGLjg83bCksf3N7FIy7jg - in-depth study of the pros
http://cpp-reference.ru/patterns/ - patterns
https://refactoring.guru/en/design-patterns/catalog - patterns (with visualization)
https://www.youtube.com/channel/UCtLKO1Cb2GVNrbU7Fi0pM0w - videos in which topics are explained in more detail.
https://www.cyberforum.ru/cpp-beginners
https://evileg.com - - forums where you can get help.

about Qt , if you, like me, decide to study it and want to really have a good, albeit superficial, representation by the beginning of work, then I advise you to understand the model / view architecture - model / view (by the way, not a bad there will be a start for studying patterns MVC model/view/controller, MVP model/view/presenter). This architecture is like a simplified MVP pattern.
Information here . There is not much of it, but it took me months to more or less confidently use all the benefits of Qt.
I did not know any of this before employment, but I advise you to study.

Summary

My resume in the form in which it hit my employer's desk. I did not change anything in it, except for the link to GitHub and the phone number.
He sent out resumes all over the country to increase the chances of employment. All interviews were done remotely. But as a result, I got a job without an interview in the city of residence. The employer was simply satisfied with what was on the resume.
Resume during the job search rewrote many times.

Key recommendations :

  • Do not list many jobs, for example, I deleted my experience of working abroad as a seafarer, because. the overall picture of the resume resonated strongly - it seemed as if a person was jumping from one extreme to another, then he was a sailor, then he went about his business, and then suddenly he was already in aviation and was looking for a job as a programmer. After I combed my resume for one area - an installer, there were about a third more responses.
  • Do not list part-time jobs/intermediate jobs.
  • Don't beg to be hired. I've seen this on many job applicants. Describe the essence, according to your resume, the employer must understand who you are as a specialist in the first place and you can also convey the main thing about yourself, for example, your character. I tried to convey the message to the employer through my resume that I was serious about becoming an expert in this field. The rest is of no interest to anyone.
  • Required link to github .
  • Business style in a resume and communication with the employer, in my opinion, is the most suitable.
  • Don't lie on your resume about what a great programmer you are. Everything will come up in the interview. The rest - you can embellish, no one will know. The veracity of my resume in that which does not concern programming is 80 percent. For example, the resume states that I have been engaged in IP for almost 5 years, but this is not true. I did this for exactly one summer, then everything was bent, because. in Siberia, the people simply do not have money for services. I continued to do the same, but already in Voronezh for my friend. And then just moonlighting with him from time to time. But who cares? The main thing is that for 3 years I was in the field of installation of everything related to IT. This is displayed. And 2 years before that he worked at sea, a month as a consultant with a provider, 2 weeks as a loader, 3 weeks as a consultant on the phone in a cargo delivery company, while studying 4 years as a bartender, a couple of months in tow in the port of Vladivostok, before employment 2 years in aviation I really wanted to make a career and in many other places over the past 14 years, but the employer does not need to know this - extra information that is not related to programming. Everyone lives in similar conditions and everyone is spinning as best they can, changing their profession - they are looking for money - this is the CIS, water does not flow under a lying stone. Therefore, I wrote the way I wrote and did it right.
  • List your accomplishments. If you are a cool artist, why not specify? You have achieved something, well done.
  • Don't point out your flaws.
  • High-quality photo for portfolio. Not my case, of course :-) , but, I was close to spending 5 thousand on a photo session for a normal photo in a resume.
  • Send out about 20 resumes a week. Sometimes, after bad interviews, he took a break (one was a month and a half) to improve his knowledge and then sent out again.

I sent a resume to the employer I work for now in March, it was not answered. They called me in May.

Interviews

With what I approached this stage in IT - Knowledge stack (or maybe a bunch?), with regards to programming: everything basic in OOP, 11 plus standard, STL, superficially Qt (did not even know how to use signal / slot connections), basic SQL queries and git, the patterns I wrote about above.

In more detail (I rewrite what I had on the spurs for interviews, one or two sheets for each item): auto, decltype ; forward ; explicit ; noexcept; mutable; {deque, stack, queque, unordered_map} - learned for some reason all the methods of these classes from here ; overloaded functions/operator overloading; template classes/functions; everything about "virtuality" in OOP (functions, classes, purely virtual functions, etc.); all about constructors (copy constructor, delegating constructor, move constructor, 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; matching hash tables and map; static; default; override; mutable; reinterpret_cast; constexpr; volatile; passing a temporary object by default; basic about unit testing.

From the deep programming lessons referenced above - preprocessor, compiler, linker, low-level memory, virtual memory, stack/heap allocation, malloc, new, global memory, inline, modern compilers in general - that the compiler often presents and parses your code in a completely different form, and not the one you wrote, the features of passing objects by pointer / reference / const reference, based on this - the choice of how to pass an object, lambda functions, std:: function , cast basics, friend, functors, final, diamond inheritance, multiple inheritance.

It's just what's in the spurs and the notebook.
I didn’t understand multi-threaded programming at all (at a couple of interviews they asked me my skills in this, I immediately answered “I know a little theory, I didn’t use it”). I understood the STL of the container without any problems - this is understandable, since I wrote my own containers, but I still couldn’t use smart pointers, I just knew the theory about them well and how they are arranged inside.

Interview stages

Since I sent my resume all over Russia, the interviews, respectively, took place remotely. How it happens: they call you and ask you to spend 5-15 minutes, talk to you on general topics and, if everything is fine, you agree on a technical interview - this is 2 stages, but maybe more. By the appointed date, I pasted the entire monitor with stickers with sorting algorithms with spurs, spurs were pasted on the table / floor / wall / chair 360 degrees around. Everything was in the spurs + my lecture book was on my knees, on each page I taped notes - what you can peep on it. By the way, I didn’t have time to use spurs, you can write them, but not use them. It's faster to remember than to orient yourself in this chaos.

I was never asked about my level of English, but I never knocked at a company where conversational English was required.

All interviews were held on Skype without video (probably, it coincided with me, it seems to me that in most cases interviews are conducted 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, from the simplest "what is polymorphism?, write a function for adding two numbers" and a similar base, then, suddenly, he will ask you to add some logic to your primitive function and so everything will become more complicated in during the next 40-50 minutes. All this will be mixed with theory questions. Further, you may be sent a test task, or it may be sent before the interview, or it may not be sent. A week after the interview, or passing the tests, there will be feedback on the results.

About test tasks: several times I received tasks from some incomprehensible companies by mail, as I later realized, these were just certain tasks, the solution of which would be uploaded to my project after refactoring. Simply put, they give you a task in the hope that you will work for free (like "parse the site", pull out such and such data from there and arrange it in such and such a way). But there are really real test ones, I solved it in DrWeb and in some other company ... I solved it, but I didn’t solve it.
Here are some of the interviews:

Second interview

My second interview took place in Nizhny Novgorod. I really liked how they described themselves, their website, their field of activity and the people with whom I communicated. Unfortunately, I did not reach my knowledge, but in general it 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 the contacts of the person who conducted those interviews with me (not a team leader), and I contacted him via Skype. First, I asked him to help me in training for money, so that he would prepare me for an interview with them, he did not agree. We agreed that he would give the main topics for study and would prompt me from time to time. Sometimes, I contacted him and he gave me a little lecture. His nickname was Yelou-Pooky. If you are reading this, I am very grateful to you, you have done 20 percent of my preparation for employment! I firmly shake your hand, I will not forget your help. After a month of training, the next interview was scheduled with him, and only at it I realized that the vacancy was not a programmer, but a tester. I was asked about something I did not understand, I did not answer anything, got upset, said thanks to Elou-Pooky and began to prepare for the next interview. In general, it is not clear how I was prepared for a plus developer knowing that the vacancy was a tester. A strange moment, but it was the way it was.

Third interview

The third interview (in Moscow, or in Nizhny Novgorod) was disgusting. Their camera was turned on, and I watched the three of them at the round table. It immediately became clear that they were only now getting acquainted with my resume, before that they had not seen it. After the question about my age, all questions on the technical side did not rise above 2 + 2, after they found out that smirks appeared on my faces soon 30, in short, I was very angry and honestly, if I were in their office in such moment, he would certainly make the remark "what's funny?", and maybe something harsh. With difficulty, he endured to the end and interrupted the dialogue during the standard "we re ... (call, probably)". I remember that evening I broke through the door in the room with my hand. Their behavior was offensive.

Fifth interview

The fifth interview took place in St. Petersburg. We talked for a long time, maybe an hour and a half. I really enjoyed the questions, it was really important for the interviewee to get to the bottom of all the minuses in my knowledge, he asked both the low-level work of certain points, and the implementation of some of my containers, and pointers on github, asked me to correct errors, explained some points myself and I immediately wrote down for myself in a draft, so as not to forget. After 2 weeks there was an offer from them, but I understood that anyway they were not 100% sure of me, although the interview went smoothly and I answered a couple of questions "with an asterisk".

Sixth interview

Andrey (my manager) called me and invited me for an interview. I took time off from work at lunch, I was a little nervous (after all, I had never written code face to face), but in general I was confident, especially after the previous interview and knowing that I already had a place. I had all my spurs and a book in my hands (I don’t know why I dragged this with me), but in the end, they just told me about the project, the work in general, and “when can you go to work?”. On the same day, he wrote to leave. Chose a job in the city of residence, because. at the beginning, a small salary, respectively, a loss in money and you need to rent an apartment, plus I didn’t want to completely part with my wife for a long time.

The rest of the interviews were just bad, not much to say, I didn't answer questions well and was as red as a tomato because of shame.
There was also an invitation to intel Nizhny Novgorod, agreed at 19:00 for a small dialogue on the phone. They called me at about 6:20 p.m. when I was driving, when I pressed "answer" the phone hung up, I couldn't call back, I also didn't receive a call at the appointed time ... well, fate means. I emailed them about this situation and asked them to contact again, but they did not answer me.

What is good about this profession?

Unlimited growth in qualifications, it will not work to hit the ceiling. Qualifying growth is converted into 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 - I used to have a constant headache at work, music was especially annoying, radio was everywhere, and I like to work in silence, now there are no problems with this. The ability to work remotely, it’s already the third day of quarantine in the region and I’m working remotely for the first time is not bad, sometimes you can practice, but still remote work is not mine, it’s more productive in the office, so I have to process at home, although the same time is spent on the road to the office . This job is great for introverts.

Bad

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

About motivation

I didn't motivate myself at all. Previously, I constantly tortured myself with these motivations, goals, you must not give up, "lie in the direction of your dreams" and other nonsense!
On such a wave, I did not fulfill any of my dreams and goals to the end, I just burned out. And believe me, I had so many of them. This time it was different. I didn’t think about any goal, as if it didn’t exist, there was no motivation for me at all, there was only one confident, calm, it was 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 imagine it as if you had to climb into the straps and drag this load, or break through ... no. There was nothing inside at all, I just, just learned how to go to the store - this is not a goal and motivation is not needed for this, you just slap into the store and that's it. Here I am, just walking.
The main thing that I learned from boxing and it helped me learn and set myself up that way - the one who works the hardest wins. The one who sets some tasks for himself in the ring, solves them, is busy with something every second, and not just posing there, he wins. And this is reflected in everything in our life.

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Илья
  • May 3, 2020, 11:05 p.m.
  • (edited)

Хорошая история, так держать!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
OI

C++ - Test 001. The first program and data types

  • Result:40points,
  • Rating points-8
AD

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
Last comments
ИМ
Игорь МаксимовNov. 23, 2024, 12:51 a.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiNov. 1, 2024, 2:37 a.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 8:19 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 7:51 p.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 11:02 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii Legotckoi
Evgenii LegotckoiJune 25, 2024, 3:11 a.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 7:04 p.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 3:49 p.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimOct. 25, 2024, 9:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks