Привет. В данной статье я поделюсь своим опытом становления программистом от зарождения идеи до первых офферов, а также расскажу об опыте прохождения собеседований на позицию С/С++ разработчика в Санкт-Петербурге и выводах, сделанных мною в процессе. Данная статья будет полезна преимущественно студентам, ищущим свою первую работу программистом, либо свитчерам, то есть людям, имеющим желание "войти в IT", а именно в разработку ПО.
В данной статье не будет разбора часто встречающихся вопросов на собеседовании начинающего разработчика - таких статей навалом. Будет описан лишь субъективный опыт.
Предыстория
Как можно понять из заголовка, на момент начала своего пути в IT-мир я являлся студентом-юристом 3 курса заочного отделения. Планировал становиться адвокатом. Поработав в одном из районных судов Санкт-Петербурга полгода, понял, что не хочу быть ни то что адвокатом, я вообще не горю желанием выбрать юриспруденцию делом своей жизни, хотя опыт был замечательный и показательный. С счастьем уволившись из суда и с пониманием того, что нужно менять что-то в жизни, я наткнулся на так кстати вышедшее видео своего знакомого, Александра Григорина. Александр имеет два красных диплома (инженерия + юриспруденция), неоконченное высшее образование по программированию, а также ведёт просветительскую деятельность (канал на ютубе + авторские курсы). Первоначально я интересовался контентом на его канале как юрист, однако тот факт, что он является специалистом в обеих отраслях, позволяет ему как никому другому трезво оценивать плюсы и минусы этих направлений.
Обучение
Вдохновившись тезисами Александра, я начал путь в неизвестную мне до сего область. Из бэкграунда у меня - только неплохое знание английского, что оказалось очень кстати и, субъективно, важнее чем, например, тот же матан (я говорю о среднем программисте, понятно, что если у вас мечта создавать игровые движки или писать нейросети, то матан понадобится). Сначала я начинал с видео на ютубе, но проблема такого подхода была в том, что передо мной было распутье - множество языков и технологий, и каждый расхваливает свой стек. Иными словами - не было фундаментального подхода. И здесь я снова обратился к Александру, у которого начал проходить курс по основам программирования для начинающих. Основное преимущество курсов Александра в том, что они дают фундаментальную подготовку, позволяющую получить основополагающие для сферы программирования знания. Александр не углубляется в конкретные технологии/языки программирования, а даёт прочный фундамент - основы программирования, структуры данных, алгоритмы, работа процессора, работа с памятью. В то время как всякие Geekbrains, Skillbox и прочие лохотроны делают акцент на конкретных технологиях, причем на самых простых аспектах этих технологий, геймифицируя и упрощая всё до предела. Александр сторонник того, что путь в программирование нужно начинать на примере языка C. Да, это может быть больно для некоторых, но я так же считаю, что это необходимо.
Учеба на заочном только благоволила моему обучению. Пройдя курс для начинающих и выполнив ряд финальных практических задач, которые даются в конце курса, я прошёл и курс для продвинутых. Параллельно я осваивал литературу, рекомендованную Александром, и которую я на сегодняшний день осилил почти от корки до корки и могу рекомендовать сам:
Грег Перри и Дин Миллер. Программирование на С для начинающих. Данная книга имеет один, но большой недостаток - в ней много опечаток, но мы с Александром нашли практически все из них и создали таблицу, сверяясь с которой можно читать книгу. Основная задача этой книги - подготовить читателя к безболезненному прочтению следующих двух книг;
Стивен Прата. Язык программирования С. Лекции и упражнения. 6-е издание. Очень сильная книга, которая даст серьёзную базу по Си. В конце каждой главы - теоретические и практические вопросы по каждой теме;
Стивен Прата. Язык программирования С++. Лекции и упражнения. 6-е издание. Аналогичная книга по плюсам, фундамент ваших знаний. Основной минус этой книги, который, тем не менее, касается только бумажного варианта - цена. Я прочитал эту книгу наполовину в электронном виде, но всё же понял для себя, что бумажный вариант гораздо удобнее;
Макс Шлее. Qt 5.10. Профессиональное программирование на С++. Знание C и C++ уже само по себе достойно уважения, однако, к сожалению, этого недостаточно. Очень желательно также знать по крайней мере один фреймворк. Для меня этим фреймворком стал Qt - как мне объяснили более опытные коллеги, Qt - это быстрый старт. Я не совсем согласен с этим утверждением, потому что быстрым он не будет - это гигантский фреймворк, который изучается годами, однако его основы выучить вполне реально за 3-6 месяцев, и эта книга - хорошее подспорье для этого. Из минусов - книга является больше справочником, чем учебником, поэтому нужно будет обязательно "доедать" информацию из роликов на ютубе (только не Гоша Дударь...), статей, а самое главное - документации. И документация у этого фреймворка - одна из лучших в мире.
Однако чтение серьёзной литературы по программированию имеет недостаток - это долго. Обучение программированию это всегда испытание силы воли, и чтение книг по типу Прата - субъективно, самая сложная его часть, но это того стоит. По причине того, что Прата рассматривает только 11 стандарт С и С++, а также потому, что даже у него не рассматривается всё что нужно, требуется комбинировать чтение с просмотром тематических уроков на ютубе и чтением статей, всё желательно на английском.
Уже к концу прочтения первой книги Стивена Прата я почувствовал в себе силы. Я проявил инициативу и написал совместно со своей девушкой программу для факультета пищевых биотехнологий ИТМО, на котором она училась. Программа занималась вычислениями характеристик пищевых продуктов, состоящих из 1-5 компонентов, и была написана на Си, а позже и на С++/Qt с графическим интерфейсом. Программу оценили и даже предложили запатентовать (хотя программы как таковые не патентуются в РФ).
Одновременно с этим я стал подрабатывать на том, что решал лабораторные и курсовые по программированию на C/C++, а через полгода стал подрабатывать репетитором по C/C++/Qt. В общей сложности мне удалось поработать более чем с 50 людьми всех возрастов - от школьников и студентов до свитчеров, которые хотели прикоснуться к IT. Например, у меня была женщина 30+ лет из Германии, которая получала второе высшее образование по информационным технологиям в местном университете, на первом курсе у неё был довольно серьёзный курс по языку Си, и я помог ей не вылететь из университета, поскольку обучение давалось ей довольно тяжело.
Первые собеседования
Ходить на собеседования я стал довольно рано - прошло где-то около года после начала обучения. Да, для стека С/С++/Qt это - рано, если вы начали с более высокоуровневых языков, возможно вы можете начать ходить на собеседования чуточку раньше. Тот факт, что я рано начал ходить собеседоваться - это не хорошо и не плохо, вы просто должны понимать, что такие собеседования принесут вам ранний ценный опыт, однако шансы успешного их прохождения стремятся к нулю - знания не уверенные, опыта нет, портфолио нет. Названия компаний я упоминать не буду, если очень нужно, можете спросить лично. Также стоит сказать, что в промежутках между собеседованиями я постоянно делал тестовые задания - какие-то успешно, какие-то не очень. Это важно, поскольку, во-первых, это часть вашего портфолио, во-вторых, рано или поздно у вас накопятся все типовые задания по своему стеку, и вы будете иметь возможность предлагать работодателю ознакомиться с любым из уже реализованных заданий. Как показал мой опыт последних собеседований, чаще всего работодатели идут навстречу.
Важность качества резюме
Спойлер: те два оффера, которые я в итоге получил, были от компаний, которые сами меня нашли. Многие IT-ютуберы и просто айтишники советуют прямо-таки спамить своим резюме направо и налево, чтобы найти свою первую работу, даже если ваше резюме подходит на 10 процентов. Я сторонник иного подхода - качество важнее количества, а не наоборот. Смысл откликаться на кучу вакансий, даже не посмотрев условия труда и прочее? Опять же, если у вас более высокоуровневый стек, чем мой, вы можете спамить своим резюме ввиду того, что порог вхождения у таких технологий ниже, однако я считаю, что если ваше резюме не идеальное - толку от этого будет не много. Я бы не получил этих офферов, если бы моё резюме не было бы идеальным, потому что мне бы даже не прислали тестовое задание.
Резюме - это ключ к тестовому заданию, а в некоторых случаях и сразу к собеседованию. Собеседование - уже само по себе маленькая победа - даже если вы не получите оффер, вы получите опыт.
Собеседование №1: поспешишь - людей насмешишь
Первый раз на собеседование позвало крошечное оборонное конструкторское бюро на севере города. Что сразу смутило - по сути это офис на первом этаже многоэтажного жилого здания, что, как по мне, странно. Дальше - больше. HR-менеджер сразу повела к программистам. Меня привели в тесную комнатку с двумя бородатыми плюсовиками 40+ лет, один из которых меня собеседовал, а второй полностью игнорировал моё присутствие, будучи погружённым в код. Судя по всему, эти два человека - вся команда. Знакомство с собеседующим программистом меня просто убило. Первое, что он у меня спрашивает - не православное ли у меня имя. Я серьёзно. Далее он продолжил задавать странные, неуместные вопросы, например, что означает мой ник на гитхабе. После чего он ткнул меня носом в заранее распечатанный код с моего гитхаба. Там была ошибка времени выполнения, которую я не заметил. И только после этого последовали общие вопросы по теории C++ и Qt, из которых я ответил примерно на половину. Тем не менее, странный дядька сказал, что "пока всё мимо". Естественно, ожидать успешного собеседования было бы проявлением высшей степени наивности.
Выводы:
Тщательно проверяйте код, который выкладываете на GitHub, чтоб не пришлось краснеть на собеседовании;
Среди программистов бывают очень странные люди.
Собеседование №2: лживое дело хило
К моменту второго собеседования я был в процессе изучения фреймворка Qt, однако не сильно им владел, и решил немного схитрить - указать в резюме, что я имею полгода опыта стажировки с использованием этого фреймворка. Также я имел в этой конторе работающего знакомого, который рассказывал мне о текущем положении вещей. Эта контора занималась гособоронзаказами. Это был самый разгар коронавируса, поэтому меня не пустили на территорию предприятия - спустились ко мне сами.
Ко мне вышли 3 человека - главный программист, специалист по персоналу и директор компании. Учитывая ещё и тот факт, что я соврал в своём резюме, градус тревожности и неуверенности был на пределе. Естественно, речь зашла о моём липовом опыте. Что-то я ответил, но выглядело это, конечно, неубедительно. Несмотря на то, что я ответил на остальные их вопросы и решил задачки с листа, казалось, всем было очевидно, что я лукавил. Естественно, оффера не поступило.
Выводы:
Не пытайтесь обмануть в тех, кто гораздо опытнее вас. Даже если у вас получится, вы можете оказаться в очень неблагоприятной для себя среде.
Собеседование №3: знай себе цену
Третье собеседование проходило необычно - по телефону. Моё резюме нашёл тимлид оборонного предприятия и предложил собеседование дистанционно. В назначенное время я практически идеально ответил на все вопросы, однако после второго собеседования потерял самообладание и начал говорить о том, что я не такой опытный. В итоге он не взял меня. На мой вопрос "что не устроило?" он ответил - "всё устроило, но у трех других есть опыт. Поэтому выбрал двух из этих трёх".
Выводы:
Не нужно говорить о своих недостатках на собеседованиях, даже если вы не уверены в своих силах. Синдром самозванца есть у большей части программистов, а особенно у тех, кто не имеет профильного образования или является свитчером. Ваши недостатки сами всплывут в процессе, не помогайте собеседующим в их нахождении.
Собеседование №4: формализм и бюрократия
И снова гособоронзаказ. Дело в том, что стек C++/Qt - это де-факто стандарт в российских оборонных предприятиях, наряду с Astra Linux и допуском к гостайне. На этот раз - древнее совковое предприятие на севере города. Набиралась группа стажёров для отдела инженеров ПО, поэтому собеседование было групповым, со мной вместе собеседовались студенты и магистранты ИТМО или других местных учебных заведений. Поскольку собеседование проходило на позицию стажёра, то оно ограничивалось вопросами из разряда того, как я хорошо знаком с той или иной технологией. Изучив моё резюме, мне доложили, что, по их мнению, я уже готовый специалист, а не стажёр. Естественно, к тому моменту я уже не лукавил в своём резюме.
Спустя некоторое время случилось следующее. По сути, я получил первый оффер, приехал для заполнения документов. Спустя некоторое время мне перезвонила HR-менеджер и заявила, что я им не подхожу, поскольку у меня не профильное образование, и, как оказалось, они берут только с профильным. До этого я, руководствуясь советами старших коллег, убрал из резюме специализацию своего обучения. Однако данная ситуация показала, что можно напороться на контору, где формализм и бюрократия выше здравого смысла. Кстати, очень хорошо, что я туда не попал - платили копейки (25 тысяч) и ездить далеко, но на тот момент меня это не заботило.
Выводы:
Если вы свитчер или просто не имеете профильного образования, перед собеседованием выясняйте адекватность конторы - критично ли для них профильное образование. Вообще, я бы советовал делать это даже начинающим программистам с профильным образованием, потому что, как правило, если для компании это критично, туда лучше не идти даже дипломированному специалисту - вместо печенек и дружного коллектива вас будет ждать дресс-код и запрет на выезд из России минимум на 5 лет, и прочие "ништяки".
Собеседование №5: государева служба
Знакомый предложил попробовать свои силы в одной небезызвестной государственной конторе, с представителем которой он находился в хороших отношениях. Если говорить обобщённо, занимаются киберпреступлениями. Собеседование проходило в ресторане быстрого питания, куда мне сказали подъехать. Дефолтные вопросы по основам. Что примечательно - по большей части отговаривали от работы, оплата для программиста смешная, на работу иногда нужно будет приезжать ночью, и прочие приколы "государевой службы". А в процессе и вовсе выяснилось, что требуется наличие военного билета с группами годности "А" либо "Б", у меня была "В". Я, конечно, мог бы пройти военную комиссию ещё раз, но тогда появился бы риск в любой момент отправится отдавать долг родине. В общем, мягко говоря, сомнительное удовольствие.
Выводы:
Я бы выразился так - не так сложно найти первую работу, насколько сложно найти подходящую первую работу. Об этом мы ещё поговорим далее.
Собеседование №6: держись своего стека
В этот раз меня собеседовал представитель одной очень известной в мире фирмы по изготовлению бытовой техники. Вакансия - разработчик встраиваемых систем. Я сразу понимал, что не подхожу. Из требований - разговорный английский, знание встраиваемых систем и божеское владение языком Си. Во время самого собеседования собеседующий сразу начал меня отговаривать от этой работы, мол, есть куда менее сложные способы войти в профессию, чем данная позиция. И он был прав. Да, я знал язык Си, но во встраиваемых системах знание этого языка - только верхушка айсберга. Речь шла о том, чтобы подтянуть английский до разговорного, а также разобраться во встраиваемых системах за очень короткий промежуток времени. Однако я сказал, что попробую, после чего он направил мне тестовое. И это было первое тестовое, по которому я после нескольких дней гуглежа и чтения различных стандартов встраиваемых систем не смог написать ни строчки кода, что было вполне закономерно.
Выводы:
Собеседования не зря сравнивают со свиданиями. Если вакансия тебе явно не подходит по стеку или по условиям, не надо тратить время. Хотя, конечно, некий опыт получить можно. Кстати, в обратную крайность тоже впадать не стоит - если по первому взгляду кажется, что вакансия идеально вам подходит, не стоит возлагать на неё большие надежды, откликайтесь на неё как на все остальные, иначе, в случае отказа, разочарование будет сильнее, а оно в свою очередь может подорвать уверенность в своих навыках, что может привести к тому, что вы будете деградировать или вообще забьёте на обучение.
Собеседование №7: первый оффер
Меня нашла очередная оборонка - довольно известное, крупное предприятие далеко на севере города, я бы даже сказал, уже за городом. Ехать мне туда было максимально далеко, но я не отказался от тестового, состоящего из 20 вопросов по своему стеку. Спустя некоторое время мне перезвонили и сказали, что тестовое их устроило, и позвали на собеседование. Интересно было и то, что меня позвали собеседоваться на должность старшего(!) специалиста. Ради интереса я поехал на встречу. Это был режимный объект, повсюду ходили военные. Меня встретила довольно милая девушка, которая предложила мне ответить на её вопросы. Это был первый раз, когда мне пришлось общаться сначала с сотрудницей отдела кадров. Удивлялась, почему к этому времени уже дипломированный юрист пришёл собеседоваться на позицию старшего разработчика программного обеспечения на военном предприятии. Как позже выяснится, этот вопрос в этом месте мне зададут ещё не раз...
Сразу выяснился неприятный момент - все программисты на предприятии имеют вторую форму допуска к государственной тайне, а значит не имеют права по своей воле покидать пределы Российской Федерации в течение 5 лет с момента увольнения(!) с предприятия, а во время работы могут выезжать из страны только с разрешения МВД и работодателя. Вскоре подошли 2 программиста, выяснились новые приколы - нужно быть на рабочем месте в 9 утра, а выйти с рабочего места до 5 вечера - нельзя. Учитывая сколько мне туда ехать, нужно было бы вставать в 7, а то и раньше, что для среднего программиста дикость.
Через час после собеседования, уже когда я был на подходе к дому, мне позвонили с оффером. Только вот незадача - нужно срочно пройти полиграф. Сегодня. Потому что в следующий раз его будут проводить только через неделю. Как мне объяснила HR-менеджер, если не пройти полиграф сегодня, будут рассматриваться другие кандидаты. В общем, пришлось разворачиваться и ехать туда, откуда вернулся. В это время над городом была сильная грозовая ячейка, и пока я ждал автобус, молния ударила в метрах 10 от меня. Первый оффер затуманил рассудок. Когда я приехал, перед процедурой полиграфист стал недоумевать, почему юрист устраивается на позицию старшего специалиста по разработке специального программного обеспечения. Честно говоря, я немного недоумевал вместе с ним. Во время самой процедуры звучали типичные вопросы из разряда: употреблял ли я наркотические средства, завербован ли я, имею ли я умысел в краже конфиденциальной информации или иной деструктивной по отношению к предприятию деятельности и прочее. Кстати, справедливости ради стоит сказать, что данная контора предлагает бесплатно второе высшее образование на базе предприятия, что может быть для кого-то важно.
На следующей неделе ещё интереснее. Меня попросили ещё раз подъехать на предприятие для общения с новыми сотрудниками службы безопасности. Видимо, вызвал подозрения. Одновременно с этим я понял, что не хочу иметь дело с этим предприятием за 45 тысяч рублей в месяц, указанных в моём резюме, о чём сообщил ещё до встречи. В связи с этим был привлечён программист с предприятия, чтобы зачем-то ещё раз проверить уровень моих компетенций. Встреча открылась с сотрудницы отдела кадров, которой я должен был пояснить, почему меня не устраивает 45 тысяч рублей. Сославшись на дальнюю дорогу и не очень благоприятные условия труда, она была совсем не против поднятия зарплаты, однако как выяснилось, она не принимает этого решения. Для чего я тогда с ней общался? Не понятно. Далее пришёл тот самый программист, который должен был проверить меня ещё раз. Он дал мне тест, который уже был решён мною в качестве тестового задания для этого предприятия, а я показал ему файл на телефоне с уже решённый вопросами. В общем, кооперация между собой у них "на уровне". Судя по реакции программиста, он также понимал степень абсурдности происходящего. Расписался на моём резюме что был здесь и ушёл. Далее меня посетил очередной сотрудник безопасности с абсурдными вопросами - где работает девушка, где работает мама, снова вопрос про то, почему юрист устраивается программистом. Затем пришёл другой сотрудник, видимо, уже главный. И снова задавал те же самые вопросы... Я уже откровенно смеялся. В процессе общения главный сотрудник безопасности также обратил моё внимание на ответственность за разглашение государственной тайны, и отличие такой ответственности от таковой за разглашение коммерческой тайны. Дав ему понять, что мне это и так известно, он удалился. Наконец, подошли две девушки, действительно принимающие решения о моей зарплате. Общение представляло из себя натуральный торг, удалось договориться на 55 тысяч рублей в месяц. На этом это эпическое собеседование, длящееся более 4 часов, закончилось.
Собеседование №8: второй оффер
Данное собеседование происходило в один день с вышеописанным, когда приходилось приезжать для повторной проверки службой безопасности. Это было собеседование в скайпе, вакансия - удалёнка, разрабатывают программные комплексы для криминалистической экспертизы вычислительных устройств. Честно говоря, несмотря на все минусы вышеописанной конторы, я всё ещё был под впечатлением от оффера, я и не думал отказываться и по той причине, что мне было просто неудобно - много людей потратили на меня кучу времени и пошли на уступки (как я понял потом, это может быть связано с тем, что мало кто хочет там работать из-за перечисленных условий). По этой причине я проходил собеседование как попало, особо не нервничая, ведь у меня уже был оффер, о чём я и сообщил в конце собеседования и попросил не медлить с решением.
На следующий день мне перезванивает HR-менеджер этой компании и делает второе предложение о работе. Предложена более конкурентоспособная заработная плата, нежели в той оборонке, при этом не нужно ездить за тридевять земель. На какое-то время это ставит меня в тупик. До этого момента я слышал мнение о том, что удалённая работа не подходит младшим разработчикам по некоторым причинам (что, как оказалось, полная ерунда). Взвесив все за и против, я всё же делаю выбор в пользу удалёнки.
Итог
Если говорить о двух последних офферах, основной совет следующий - не бегите сломя голову туда, куда вас позвали, сначала пройдите все запланированные собеседования, соберите офферы, и выберите самый удобный для вас, невзирая ни на чьи интересы, кроме своих. Собеседование - это не экзамен, а оценка как соискателя работодателем, так и наоборот.
Подводя итоги всего мероприятия, с момента начала обучения и до получения первого оффера прошло немногим больше двух лет. Учитывая то, что 1 месяц из этих двух лет я отдыхал, а потом 5 месяцев писал диплом и готовился к государственной итоговой аттестации на юрфаке, то бишь фактически программировал всего полтора года, а также учитывая сложность стека, можно считать, что результат неплохой.