Вітання. Із вами я. Мені подобалося боксувати та бігати на далекі дистанції, і думав я лише про спорт, але вивчився на моряка. Працював в авіації, а став програмістом С++ у 29. Розкажу, як так вийшло.
Про програмування до жовтня 2017 я знав рівно стільки, скільки зараз про квантову фізику-нічого. Абсолютно. "hello world" - навіть не чув про таку фразу. Час від початку навчання до працевлаштування – півтора роки.
Чому вирішив розписати своє навчання? - Бо знаю по собі, як важко знайти хорошу роботу в СНД. Місць, де є кар'єрне зростання, нормально оплачується праця в інженерії та суміжних областях я не зустрів, скрізь ти просто робітник, усім до одного місця на твої амбіції, бажання підвищити кваліфікацію, якось вирости.
Особливо цей пост пишу з думками про земляків у Сибіру та на Далекому Сході, бо там із гарною роботою важче двічі, про людей з обмеженими можливостями, які не можуть жити повноцінним життям не лише через свої фізичні обмеження, а й через того, що вони не мають змоги працювати на нормальній посаді і почувати себе впевнено в тому, що завтра ти не пропадеш, ти потрібен, тебе цінують. До речі, мій колега має інвалідність зору і працює цілком успішно. Тому, для деяких, я впевнений, чи підійде мій копі-паст навчання. Відразу опишу його, потім інше.
Що потрібно, щоб почати: доступ в інтернет (можна і не постійний, просто завантажити сторінку), старенький комп'ютер 10-річної давності підійде, вища освіта для працевлаштування не обов'язково для 30% вакансій у Росії. І близько року на навчання, якщо займатися продуктивно. Не вірте учням "стати програмістом за 1-4 місяці", це неможливо. Робота програміста далеко не закінчується на знаннях синтаксису ЯП (мова програмування).
Крім ЯП, потрібна мова англійська. Якщо ви не вирішили з чого почати, то з англійської і почніть.
Я підвищував знання за допомогою читання та перекладу текстів, використовував андроїд додаток -
Smart Book
. І скачав гру на телефон, у якій багато тексту, переключив на англійську і таким чином підвищував словниковий запас. Гра -
Exiled Kingdoms
.
10 жовтня 2017 року вперше натрапив на "уроки С++", у перший тиждень витратив годин 40.
Навчання. Крок за кроком
За навчанням проводив від 2 до 10 годин у будні, у вихідні та відпустку займався мало, або навіть не згадував про це.
Почав з цього сайту (https://purecodecpp.com) - там хороші завдання.
Одночасно теми можна вивчати і тут (https://ravesli.com).
через пів року
Вирішив усі завдання, крім останнього рівня (там 3-4 тільки зміг) –
тут
. Взагалі, на цьому сайті найкращий список завдань, а також гарне пояснення тем.
Коли тема зовсім до вас не доходить, раджу дивитися урок цього викладача -
#Simple Code
. Відмінно пояснює, чи зрозуміє справді будь-хто. *не захоплюйтеся відео уроками - марно без практики.
Поруч із рішенням завдань, через півроку навчання, вирішив закріпити тему масивів написанням консольного морського бою. Було важко, спочатку вся програма була близько 1300 рядків в одному .cpp файлі. З часом, під час навчання, я покращував код і, в результаті, в резюме потрапив код у чотирьох файлах .h .cpp розміром рядків у 500.
Минув майже рік, я почав вивчати бібліотеку Qt. Написав свою читалку. Перемикання між вікнами за допомогою кнопок, але без використання сигнального зв'язку. Написання цієї програми дозволило мені вивчити SQL та трохи html-розмітку. Це теж потрапило до резюме.
У цей час вже настав 2019 рік, і я почав надсилати резюме прямо на новорічні свята (рідер-перекладач ще не був написаний).
Під час його написання я також захопився реалізацією своїх STL контейнерів та розумних покажчиків (після першої провальної співбесіди зрозумів, що без 11 стандарту та глибокого розуміння STL робити на співбесідах нічого).
У мене були реалізовані: вектор, один зв'язковий список, двозв'язний список, unique_ptr, shared_ptr, auto_ptr. І після того, як я покопався у всьому цьому, почуватися став впевненіше набагато на співбесідах, сильно допомогло.
Все це залив на
гітхаб
(користуватися гітом легко, але вивчення може зайняти чималий час), в результаті, в резюме було наступне - ганебний морський бій, "проект" рідер-перекладач, реалізація STL + smart_pointers (тільки по STL і SmartPointers мені ставили питання, вказували помилки, просили виправити їх прямо на співбесіді, було цікаво обговорювати. На решту моїх "писульки" ніхто уваги не звернув).
+ я трохи, зовсім поверхово, намагався вивчити основні патерни (на співбесіді питання про патерни завжди був під зірочкою), усно міг розповісти про MVC, MVP (але відмінності пояснити не міг), і 3-4 основних патерна, що породжують- ось
хороший сайт
за патернами.
Цей
ще й красиво оформлений.
Також я прослухав і законспектував
лекції з поглибленого програмування
.
І вивчив близько 15 різних сортувань (насправді знав напам'ять 5 - решта лише за допомогою шпор).
Мені дуже у вивченні допомагали пару форумів з плюсів, користуюся ними і зараз-
cyberforum
,
evileg
.
За весь час навчання лише 6 разів звернувся для роз'яснення деяких тем до приватного репетитора С++ (близько 1500р. одне заняття), 5 із цих занять були по Qt (туго він мені давався тоді і деякий час після працевлаштування). Після нового року я почав відвідувати курси англійської. На місяць на індивідуальні заняття англійської витрачав приблизно 3000р.
Раджу:
- Не звертатися до платних курсів з програмування - даремно витратите гроші. Зробив такий висновок із перегляду деяких із них, за численними відгуками. Компанія, в якій працює моя дружина, вдалася до послуг однієї з таких компаній для навчання співробітників Python - такий там безлад.
- Не потрібно зависати у відео уроках, я пройшов близько 250 уроків (один урок від 10хв до 1 години) - на це пішло приблизно півтора місяці, вважай загублений час, вистачило б і 30. Дивіться пояснення тих, які погано розумієте і відчуваєте, що вам потрібно детальніше в цьому розібратися.
- Більше пишіть код, постійно вирішуйте завдання щодня.
- Як тільки пройдете основні теми-почніть писати свій проект.
- Вивчення програмування по книгах для мене було неприйнятним тому, що це занадто довго і, в моєму випадку, було зовсім не зрозуміло про що в книгах мова, тому що в мене були абсолютно нульові знання в цій сфері. Якщо у вас немає часу, ви хочете якнайшвидше влаштуватися на роботу, то книги не ваш друг. Книги обов'язкові надалі підвищення кваліфікації. Після працевлаштування я прочитав пару, але все одно волію вивчати цю сферу не в такій літературі, а дивлячись у мережі різні фічі і застосовувати їх вже безпосередньо в проекті. Книги з програмування - це надто нудно, нудно для мене, насилу осилюю. Хоча, худий. літературу та історію можу читати без перерви постійно, аби час був. Загалом, вивчення програмування за книгами – це якісно, але довго і вимагає великого терпіння та посидючості, у мене терпіння відсутнє абсолютно і був обмежений у часі – я хотів встигнути до 30.
- Вчити З, щоб потім вчити З + не треба. До того ж, вакансій із С немає. С- deprecated.
16 травня 2019 року я влаштувався на роботу після 6 співбесід (4 невдалих), був офер у Пітер, я вибрав місто проживання.
посилання
:
https://purecodecpp.com
- теория, практика
https://ravesli.com
- теорія
http://cppstudio.com/cat/285/
- в основному завдання
https://www.youtube.com/playlist?list=PLrCZzMib1e9qjGLjg83bCksf3N7FIy7jg
- поглиблений
http://cpp-reference.ru/patterns/
- патерни
https://refactoring.guru/ru/design-patterns/catalog
- патерни (з візуалізацією)
https://www.youtube.com/channel/UCtLKO1Cb2GVNrbU7Fi0pM0w
- ролики, в яких теми пояснюються більш детально.
https://www.cyberforum.ru/cpp-beginners
https://evileg.com
- форуми, де вам допоможуть.
з приводу
Qt
, якщо ви, як і я, вирішите його вивчати і хочете до початку роботи дійсно мати гарне, нехай і поверхове, уявлення, то раджу розібратися в архітектурі модель/вистава - model/view (до речі, непогане буде початок вивчення паттернів MVC model/view/controller, MVP model/view/presenter). Ця архітектура - як би спрощений патерн MVP.
Інформація
тут
. Її не так багато, але у мене пішли місяці на те, щоб впевнено користуватися всіма благами Qt.
Нічого я не знав до працевлаштування, але раджу вам вивчити.
Резюме
Моє резюме
у тому вигляді, в якому воно потрапило на стіл моєму роботодавцю. Нічого в ньому не змінював, окрім посилання на ГітХаб та номери телефону.
Резюме надсилав по всій країні, щоб збільшити шанси працевлаштування. Співбесіди все проходив по віддаленні. Але влаштувався в результаті без співбесіди в місті проживання. Роботодавця просто влаштувало те, що було у резюме.
Резюме під час пошуку роботи переписував багато разів.
Основні рекомендації :
- Не перераховуйте багато робочих місць, я, наприклад, видалив свій досвід роботи за кордоном моряком, т.к. загальна картина резюме сильно резонувала- здавалося ніби людина скаче з крайності в крайність, то він моряк, то своєю справою зайнявся, а тут раптом вже в авіації і шукає роботу програмістом. Після того, як зачесал резюме під одну сферу-монтажник, відгуків стало приблизно на третину більше.
- Не вказуйте підробіток/проміжні місця роботи.
- Не благайте взяти вас на роботу. Бачив таке в багатьох резюме претендентів. Описуйте суть, за вашим резюме роботодавець повинен зрозуміти хто ви як фахівець в першу чергу і також можна передати основне про себе, наприклад, ваш характер. Я намагався через своє резюме передати посил роботодавцю про те, що я серйозно налаштований стати фахівцем у цій галузі. Решта нікому не цікава.
- Обов'язкове посилання на гітхаб .
- Діловий стиль у резюме та спілкуванні з роботодавцем, по-моєму, найбільш підходящий.
- Не брешіть у резюме про те, який ви крутий програміст. Все обов'язково випливе на співбесіді. В іншому – можна прикрашати, ніхто не впізнає. Правдивість мого резюме в тому, що не стосується програмування - 80 відсотків. Наприклад, у резюме зазначено, що ІП я займався майже 5 років, але це не правда. Я займався цим одно літо, потім все загнулося, т.к. у Сибіру народ просто не має грошей на послуги. Я продовжив займатися тим самим, але вже у Воронежі на свого товариша. А потім просто підробляв у нього час від часу. Але кому яке діло? Основне- 3 роки я був у сфері монтажу всього, що пов'язано з IT. Це і відображено. А 2 роки до цього працював у морі, місяць консультантом у провайдера, 2 тижні вантажником, 3 тижні консультантом на телефоні в компанії з доставки вантажів, під час навчання 4 роки барменом, пару місяців на буксирі в порту Владивостока, перед працевлаштуванням 2 роки в авіації дуже хотів зробити кар'єру і багато де ще за останні 14 років, але це не потрібно знати роботодавцю - зайва інформація, що не стосується програмування. Усі живуть у схожих умовах і всі крутяться, як можуть, змінюють професію – шукають гроші – це СНД, під лежачий камінь вода тут не тече. Тому я написав так, як написав і зробив правильно.
- Вкажіть свої досягнення. Якщо ви крутий художник, то чому не вказати? Ви чогось досягли, ви молодець.
- Не вказуйте свої недоліки.
- Якісна фотографія для портфоліо. Не мій, звичайно, випадок :-) , але, я був близький до того, щоб витратити 5 тисяч на фото-сесію для нормальної фотографії в резюме.
- Розсилав приблизно по 20 резюме на тиждень. Іноді, після поганих співбесід, робив перерву (одна була півтора місяці), щоб підтягнути знання і потім розсилав знову.
Роботодавцю, на якого працюю зараз, я надсилав резюме в березні, воно було без відповіді. Подзвонили мені у травні.
Співбесіди
З чим я підійшов до цього етапу в IT - Стек знань (а може купа?), що стосується програмування: все основне в ООП, 11 стандарт плюсів, STL, поверхнево Qt (не умів користуватися навіть сигнально/слотовими з'єднаннями), основні запити SQL та git, патерни, про які писав вище.
Більш докладно (переписую те, що у мене на шпорах до співбесід було, на кожен пункт один-два аркуші): auto, decltype ; forward ; explicit ; noexcept; mutable; {deque, stack, queque, unordered_map} - вивчив навіщось всі методи цих класів звідси ; перевантажені функції/перевантаження операторів; шаблонні класи/функції; все про "віртуальність" в ОВП (функції, класи, суто віртуальні функції та ін); все про конструкторів (конструктор копіювання, делегуючий коструктор, що переміщає та ін); відключення копіювання у класі; move() семантика, посилання (lvalue, rvalue, xvalue, glvalue, prvalue); std::forward; винятки у деструкторі/конструкторі; де доречний try\catch; зіставлення хеш таблиць та map; static; defaul; override; mutable; reinterpret_cast; constexpr; volatile; передача тимчасового об'єкта за замовчуванням; основне про модульне тестування.
З уроків про поглиблене програмування, посилання на які давав вище- робота препроцесора, компілятора, компонувальника, пам'ять на низькому рівні, віртуальна пам'ять, виділення пам'яті на стеку/купі, malloc, new, глобальна пам'ять, inline, особливості роботи сучасних компіляторів загалом - що часто ваш код компілятор представляє і парсить зовсім в іншому вигляді, а не який ви написали, особливості передачі об'єктів за вказівником/посилання/конст посилання, тому вибір того, як передавати об'єкт, лямбда-функції, std::function , основне про касти, friend, функтори, final, ромбовидне успадкування, множинне успадкування.
Це тільки те, що у шпорах та записнику.
Багатопотокове програмування не зрозуміло зовсім (на парі співбесід запитували мої навички в цьому, я відразу відповідав "знаю трохи теорії, не користувався"). STL контейнера розумів без проблем-це зрозуміло, тк писав свої контейнери, але розумні покажчики все-одно використовувати не вмів, я просто добре знав теорію щодо них і як вони влаштовані всередині.
Етапи співбесіди
Так як я відправляв резюме по всій Росії, то й співбесіди, відповідно, проходили віддалено. Як це відбувається: вам дзвонять і просять приділити хвилин 5-15, спілкуються з вами на загальні теми і, якщо все добре, ви домовляєтесь про технічну співбесіду – це 2 етапи, але може бути й більше. До призначеної дати обклеював шпорами весь монітор стікерами з алгоритмами сортувань, на столі/підлозі/стіні/кріслі на 360 градусів навколо були наклеєні шпори. У шпорах було все + на колінах моя книжка з лекціями, на кожній сторінці я проклеїв нотатки-що на ній можна піддивитися. До речі, шпорами користуватися не встигали, можете їх писати, але не використовувати. Найшвидше згадати, ніж зорієнтуватися в цьому хаосі.
Про мій рівень англійської мене не запитали жодного разу, але я і не стукався в компанії, де була потрібна розмовна англійська.
Усі співбесіди проходили у скайпі без відео (напевно, так співпало у мене, мені здається, у більшості випадків співбесіди проходять із відео). Перші 20 хвилин вам розкажуть про компанію та ви про себе. Потім, з вами з'єднається тимлід і почне терзати вас, з найпростішого "що таке поліморфізм?, напишіть функцію складання двох чисел" і подібну базу, потім, раптово, попросить у вашу примітивну функцію додати якусь логіку і так все ускладнюватиметься протягом наступних хвилин 40-50. Все це буде змішане з питаннями з теорії. Далі, вам можуть надіслати тестове завдання, або його можуть надіслати до співбесіди, а може і не надішлють. Через тиждень після співбесіди, або проходження випробувань, буде зворотний зв'язок про результати.
Про тест-завдання: мені кілька разів на пошту приходили завдання від якихось незрозумілих компаній, як потім я зрозумів, це були певні таски, вирішення яких заллють собі в проект після рефакторингу. Простіше кажучи, вам скидають завдання в надії, що ви безкоштовно попрацюєте (начебто - "розпарсувати сайт", витягніть звідти такі дані і скомпонуйте їх так-то). Але є справжні тестові, я вирішував у DrWeb і ще в якусь компанію... вирішував, але не вирішив.
Про деякі співбесіди розповім:
Друга співбесіда
Моя друга співбесіда проходила до Нижнього Новгорода. Мені дуже сподобалося, як вони описали себе, їхній сайт, сфера їхньої діяльності і ті люди, з якими я спілкувався. На жаль, знаннями я не дотягнув, але загалом був задовільним. Після цієї співбесіди зв'язався з менеджером і пояснив, що мені сподобався контакт з ними, їхня компанія і я хотів би отримати другий шанс, щоб співпрацювати з ними надалі. Мені дали контакти того, хто проводив у мене тих інтерв'ю (не тим лід), і я зв'язався з ним по скайпу. Спочатку, я попросив його допомогти мені у навчанні за гроші, щоб він підготував мене до співбесіди у них, він не погодився. Домовилися на тому, що він дасть основні теми для вивчення і час від часу мені підказуватиме. Іноді я зв'язувався з ним, і він проводив мені невелику лекцію. Його нік був Елоу-Пукі. Якщо ти читаєш це, я тобі дуже вдячний, ти зробив 20 відсотків моєї підготовки до працевлаштування! Міцно тисну руку, не забуду твоєї допомоги. Після місяця навчання з ним було призначено наступну співбесіду і тільки на ній я зрозумів- вакансія не програміста, а тестувальника. Мене питали про щось незрозуміле, я не відповів нічого, засмутився, сказав спасибі Елоу-Пукі і почав готуватися до наступної співбесіди. Взагалі, не зрозуміло, як мене готували до плюсового розробника знаючи, що вакансія тестувальник. Дивний момент, але було так, як було.
Третя співбесіда
Третя співбесіда (до Москви, чи то в Нижній Новгород) була огидною. У них була включена камера, і я їх спостерігав за круглим столом. Відразу стало зрозуміло, що з моїм резюме ознайомлюються лише зараз, доти вони його не бачили. Після питання про мій вік всі питання щодо технічної частини не піднімалися вище 2+2, після того, як дізналися, що мені скоро 30 на обличчях з'явилися усмішки, коротше, я сильно був злий і чесно, якби був у них в офісі в такій момент, то неодмінно зробив би зауваження "чого смішного?", а може щось жорстке. Насилу дотерпів до кінця і перервав діалог під час стандартного "ми пере...(дзвонимо, напевно)". Пам'ятаю того вечора пробив рукою двері в кімнаті. Їхня поведінка була образливою.
П'ята співбесіда
П'ята співбесіда проходила до Пітера. Спілкувалися довго, напевно півтори години. Отримав велику насолоду від питань, співбесідному справді було важливо докопатися до всіх мінусів у моїх знаннях, запитував і низькорівневу роботу певних моментів, і реалізацію деяких моїх контейнерів, і покажчиків на гітхабі, просив виправити помилки, деякі моменти пояснював сам і я одразу записував собі в чернетку, щоб не забути. Через тижнів 2 був офер від них, але я так зрозумів, що все одно вони не були впевнені в мені на всі 100, хоча співбесіда пройшла гладко і я відповів на пару питань "із зірочкою".
Шоста співбесіда
Мені зателефонував Андрій (мій керівник) та запросив на співбесіду. Я відпросився з роботи на обіді, трохи хвилювався (адже віч-на-віч я ще жодного разу код не писав), але в цілому був впевнений, особливо, після попередньої співбесіди і знаючи, що в мене вже є містечко. У руках у мене були всі мої шпори і книжка (навіщо я це потягнув з собою не знаю), а в результаті мені просто розповіли про проект, роботу в цілому і "коли зможеш вийти на роботу?". Того ж дня написав на звільнення. Вибрав роботу у місті проживання, т.к. на початку невелика зп, відповідно-втрата по грошах і потрібен оренда квартири, плюс з дружиною не хотілося зовсім розлучатися на довгий термін.
Інші співбесіди були просто невдалими, розповісти особливо нема чого, я погано відповідав на запитання і був червоний, як помідор, через сорому.
Було також запрошення до intel Нижній Новгород, домовилися на 19:00 для невеликого діалогу по телефону. Подзвонили мені о 18:20 приблизно, коли я був за кермом, коли натиснув "відповісти" телефон завис, передзвонити не вийшло, у призначений час дзвінка також не надійшло... ну доля означає. Написав їм на мейл про цю ситуацію та попросив зв'язатися ще раз, але мені не відповіли.
Що хорошого в цій професії?
Безмежне зростання за кваліфікацією, упертися в стелю не вдасться. Кваліфікаційне зростання конвертується у фінансове. Зі знанням англійської відчинені всі двері. Комфортна атмосфера для роботи. Цінують твій робочий простір і не створюють зайвого шуму, який відволікає від роботи-раніше у мене постійно боліла голова на роботі, особливо напружувала музика, звідусіль радіо, а я люблю працювати в тиші, тепер із цим проблем немає. Можливість працювати віддалено, ось уже третій день карантину в регіоні і я вперше на віддаленні-не погано, іноді можна практикувати, але все ж таки віддалення не моє, в офісі продуктивніше, тому вдома доводиться переробляти, хоча, цей же час витрачається на дорогу в офіс . Ця робота відмінно підходить до інтровертів.
Поганого
Для мене тільки пару моментів-досвіду мало, все пізнається важко і постійне почуття, що ти тупий тебе не залишає, тому доводиться іноді переробляти (що мене не напружує), щоб надолужити завдання. Звідси випливає другий мінус-вже два роки з початку навчання я не тренуюся практично-не завжди вистачає часу, плюс сидяча робота, фізично я зменшив сильно.
Про мотивацію
Я не мотивував себе абсолютно. Раніше, я постійно мучив себе цими мотиваціями, цілями, ти повинен не здаватися, "лежати у бік своєї мрії" та іншим маренням!
На такій хвилі я не здійснив жодної своєї мрії та мети до кінця, просто перегорав. А в мене, повірте, їх було так багато. На цей раз все було інакше. Не думав ні про яку мету, її ніби не було, мотивації взагалі для мене не існувало, було одне впевнене, спокійне треба. І все. Треба щодня витрачати на навчання щонайменше 3х годин. На цій хвилі було легко емоційно. Мені не уявлялося це ніби ти повинен влізти в лямки і тягти цей вантаж, або ж пробиватися... ні. Нічого взагалі всередині не було, я просто, просто вчився, як у магазин ходити- адже це не мета і мотивація для цього не потрібна, просто шльопаєш в магаз і все. Ось і я – просто йшов.
Головне, що я засвоїв з боксу і це допомогло мені вивчитися, і налаштувати себе саме так-перемагає той, хто більше працює. Той, хто ставить у рингу перед собою якісь завдання, вирішує їх, кожну секунду чимось зайнятий, а не просто позує там, той і перемагає. І це проектується на все у нашому житті.
На закінчення, хотів би залишити
цей ролик
тут "поки ми працюємо, ми живемо".
Бувай.
Хорошая история, так держать!