Шрифт
Записки junior-программиста: как получить первую работу
Play

Записки junior-программиста: как получить первую работу

Не только я в свое время, а многие мои приятели и однокурсники сейчас серьезно обеспокоены вопросом: хочу быть программистом, как начать?

Целью написания статьи послужили не только сомнения в себе моих знакомых. Подозреваю, что количество людей, которые в данный момент думают на этим же вопросом, достаточно велико, дабы моя первая в жизни статья смогла помочь каким-то планом более чем паре друзей. В чем состоит проблема? Нужно составить резюме, закинув в раздел «Professional skills» пару технологий, соответствующих искомой вакансии, разослать по вакансиям и вроде как должно все получится. Но есть подводные камни:

1) Качество технического образования. Несмотря на то, что моя специальность носит гордое название «Компьютерные науки», в 70% учебной программы знания по предметам даются устаревшие, а преподаватели либо просто пожилые люди, давно отставшие от современных технологий, либо ко всему с крепчающим маразмом. А из этого следует проблема несоответствия требованиям рынку труда студента, желающего стать разработчиком, но имеющего пробелы в понимании современных технологий. Я уверена, что не единственная, кто столкнулся с этим.

2) Неуверенность в себе и сомнения. Начинающий разработчик зачастую элементарно боится пойти на собеседование, считая себя не готовым даже для попытки. Он может неверно оценивать степень своей подготовки. И наконец, этот же человек порой знает только один способ получить работу – например, курсы в той или иной компании. Но ограниченность выбора (у тех же курсов есть временные рамки набора, требования, собеседования) только порождают лишние препятствия и сомнения. Итог — упущенное время.

3) Наличие или получение диплома не по специальности. Хороший разработчик с техническим складом ума может не обязательно быть им по образованию. Но программист-самоучка часто делает то, нравится и то как видит сам. Отсутствие какой-либо системности в полученных им знаниях и пробелы в азах могут стать причинами отказов после прохождения интервью.

Немного о себе: я студентка пятого курса, работать начала с середины третьего, сразу на full-time на позиции Automation QA. В предыдущей компании отработала почти полтора года на двух проектах. В настоящее время работаю на позиции junior java developer в Luxoft. Текущий опыт работы с javа: около 2-х лет.

В сегодняшней публикации хочу предложить вашему вниманию обзор всех известных мне путей, итогом каждого из которых может стать желаемая работа разработчиком (проверенные на практике проиллюстрирую примерами). Все истории, упоминающиеся ниже курсы компаний соответствуют Киеву, камни в огород образованию — КПИ, факультету информатики и вычислительной техники (особо большой валун для моей кафедры).

1. Курсы в той или иной компании. Luxoft, Epam, Yandex, Global Logic — далеко не весь перечень компаний, которые приглашают к себе на курсы, в интернатуру и тренинг-центры. Много учебных классов открыты в технических университетах. Плюсы этого варианта очевидны: • бесплатное обучение • работа с востребованными на рынке труда технологиями на интересных реальных задачах • последующее трудоустройство в этой же компании • в случае смены работы – неспоримый плюс для других работодателей. К сожалению, минусов не меньше: • ограничение по времени набора слушателей (зачастую или с начала учебного года или весной). Для тех, кто не успел– ждать и терять время. • требования к претендентам. Компаниям не выгодно набирать на курсы людей, далеких от IT, поскольку на их обучение и ввод в реальные проекты понадобится больше времени, а значит – больше затрат. Поэтому они предпочитают сотрудничать с определенными факультетами технических ВУЗов, а значит — меньше шансов попасть человеку “со стороны”.

2. Профильные курсы в образовательных центрах По данному запросу Google услужливо подскажет массу центров, школ и курсов, которые готовы сделать из любого человека Джобса(зачер.) программиста. Главное — желание и серьезный подход к занятиям. Плюсы данного варианта: • обучение востребованным на рынке IT специальностям и технологиям • высокая вероятность трудоустройства по окончанию (у меня было трое коллег в команде, прошедших одни и те же курсы Java в разное время. По окончанию двоих пригласили на интервью hr, а третий сам отправил резюме). В последствии, одному из них эти курсы стали хорошим подспорьем для работы над новым проектом (в котором мне, например, зная только Сore но не ЕЕ, приходилось разбираться походу). • набирают всех желающих и готовых учиться Минусы: • они не бесплатны. Зачастую недоступны для студентов, чья стипендия раза в 2 меньше стоимости месяца обучения там. • не все курсы одинаково качественные. При выборе центра ориентируйтесь на отзывы реальных людей, а не на рекламу и сладкие обещания гарантированного трудоустройства.

3. Первая работа на позиции automation QA Начну, пожалуй, со своего примера, ведь это была моя первая работа в ІТ. В целом, практических знаний и минимального опыта для работы разработчиком мне катастрофически не хватало, а вот тестировщиком взяли (несложные вопросы по Java Core и сетям). Я попала на проект, в котором процесс тестирования клиента заключался в написании командой Automation QA Android приложения, отправлявшего по определенным паттернам много разных запросов на разные ресурсы. Так же у нашей команды был свой фреймворк с кучей утилит для анализа логов, tcp dump'ов, поведения девайса, а я получила первый дев-опыт в написании собственной утилиты для конфигурирования ip-tables. А еще понимание модели OSI, опыт работы с клиент-серверным приложением и наконец – пройденный production-проект, факт наличия которого помог в последующем поиске работы. Именно поэтому не считаю работу automation чем-то зазорным, примитивным или плохой ступенью к работе разработчика – прежде чем сказать «нет» нужно хорошо разобраться, в чем она будет заключаться. На втором проекте в этой же компании мне дали задачу покрыть старый функционал unit-тестами, разрешили немного порефакторить. Работа конечно скучноватая, но после нескольких месяцев пошли задачи фикса несложных багов. Таким образом, получила опыт работы с Unit тестированием (Powermock, Mockito) и навык быстро разбираться в незнакомых технологиях (тот же баг в JavaScript).

Выделю плюсы данного варианта: • при правильном выборе проекта — работа и обучение в одном флаконе (никто ведь не мешает параллельно общаться с разработчиками на своем же проекте, получать от них практические знания, самому что-то читать и писать в свободное время) • деньги. Очень мотивируют расти профессионально в работе с понравившимися технологиями. Ну и хочется жить не только на стипендию. • опыт работы production (используя Scrum, системы контроля версий, системы трекинга задач (та же JIRA) и т.д). Вот в университете мне почти ничего такого не рассказывали (до середины третьего курса точно), что-то там о Scrum было на 4-м, C Git познакомилась только в этом году (спасибо преподавателю — Android-разработчику). Это преимущество при поиске следующей работы и во время выполнении задач на ней (когда только устроившемуся junior’у не придется в панике под ночь пересоздавать какой-то бранч, или искать, как поменять коммит потому что сегодня конец спринта, а с тем же Git’ом или пониманием планирования задач непорядок. • опыт работы с технологиями, который потом можно выгодно подать и продать, рассматривая позиции разработчика. (Например, после своего первого проекта мне хватит знаний претендовать на позицию на проекте с клиент-серверным взаимодействием) Без минусов, увы, никак: • даже в случае глубокого погружения в программирование на позиции QA, потом нужно немало попотеть в правильном составлении резюме и подаче своего опыта, дабы пригласили на собеседование на позицию разработчика. Я не говорю, что это жесткое правило, читайте «такое часто бывает» а не «это жесткое правило». А теперь немного проиллюстрирую. Первый пример – мой коллега, Automation QA: без особых усилий нашел новую работу разработчиком в небольшой конторе, где предыдущий опыт не сыграл никакой роли. Второй пример – я. Действительно данный минус открылся мне неприятным фактом при поиске работы разработчиком(не хотели приглашать на интервью), но я правильно составила CV (указав предыдущую позицию, разумеется, но кратко описав все свои responcibilities на двух проектах и общий стаж работы с Java). А еще разослала его везде куда нашла, существенно повысив шансы попасть на как можно большее к-во собеседований. • риск остаться тестировщиком. Не слишком обременительные обязанности, зарплата не ниже чем у разработчика и простой код расслабляют. В таком случае подумайте, чего вы вообще хотите – много денег, интересные задачи, или не делать ничего.

4. Университетская подготовка, учебные проекты, работа в лабораториях. В ВУЗах есть масса возможностей чему-то научиться, хорошо поискав. Нравится делать сайты? Напиши\перепиши\саппорти факультетский или каферальный сайт. Хочешь кодить под Андроид? Напиши свое приложение, которым сам, как студент, хотел бы пользоваться. Поищи в университете лаборатории и образовательные центры – вот и первый опыт. Словом, нужно пересмотреть все возможные варианты в непосредственно своей в среде обитания. Плюсы: • технический опыт (в случае наличия технически подкованного руководителя качественное дополнительное обучение) • умение самостоятельно обучаться новому. Мой нынешний преподаватель разработки под Android сделал в качестве своей дипломной работы приложение для студентов нашего университета с расписанием, преподавателями, картой корпусов и университетским радио. Несмотря на некомпетентного в данном вопросе руководителя, он разобрался сам, и после сдачи диплома устроился Android-разработчиком без особых проблем. Минусы: • будьте готовы к тому, что ответственность за начатый проект ляжет на ваши плечи, а преподаватель\руководитель может оказаться не компетентным помочь вам технически, но очень дотошным как заказчик. • забудьте об оплате своего труда (надеюсь, не нужно объяснять, почему).

5. Open source проекты Здесь уж каждому по способностям и предпочтениям. Выбрав понравившийся проект на том или ином языке, отличное начало — дописать в него несложный функционал либо отрепродьюсить и пофиксить несложный баг. Это возможность поработать над реальным проектом с опытными разработчиками, получая от них feedback и знания. Чтение чужого кода учит не только компилировать его в голове но и сходу находить “узкие места” или некорректную реализацию. Плюсы: перечислила выше :) Минусы: • этот способ подготовки не может быть единым, а лишь как дополнение и закрепление знаний на практике.

6. Домашняя подготовка К ней относится чтение технической литературы, онлайн — уроки, изучение документации, наконец целенаправленная подготовка к интервью. Лучший вариант домашней подготовки — параллельное ведение собственного небольшого проекта и чтение литературы. Придумать приложение, которым пользовался бы сам, разделить на задачи и каждый день по несколько часов разбираться с ними — не сложно. Главное начать. А как писать — Google в помощь, новичку сейчас там можно найти ответ практически на любую возникшую проблему. Достаточно много плюсов: • чтение книг и документации дает хорошую базу не только для прохождения интервью, но и на будущей работе • первый проект можно и нужно выкладывать в открытый доступ, критика других покажет узкие места и возможные пути изменения, доработки, улучшения • наличие готового приложения (пусть небольшого) — аргумент для работодателя и возможность для интервьюера оценить практический опыт претендента (большой плюс) • умение самостоятельно планировать время и решать поставленные задачи (это умеет далеко не каждый разработчик, увы) Минусы: • первые ошибки, которым не удастся найти решение, и отсутствие опытного куратора, могут отбить желание продолжать вообще. В таком случае, стоит задуматься — а чего ты вообще можешь добиться в этой жизни, если опустил руки от мелкой проблемы? Хм, пожалуй, это больше плюс. • отсутствие куратора может завести требования, архитектуру или реализацию проекта в “дебри” 7. Комбинация перечисленных выше. Никто не запрещает работая Automation QA ходить по вечерам на курсы, или учась и делая какой-то проект в университете, дома пилить задачи в Open Source проекте и читать книги. Чем больше вы прилагаете усилий, тем больше имеете шансов получить желаемую работу. Думаю, что в любой комбинации плюсами будут выступать как раз все перечисленные выше варианты. Главный минус, который хочу здесь выделить – откладывание поиска работы «на потом». Постоянно мониторьте рынок, особенно те вакансии, которые касаются интересующего вас языка или технологии. Периодически ходите на собеседования, дабы понимать свой реальный уровень и прогресс.

Я допускаю, что во многих приведенных выше правилах найдутся свои исключения. Но, как известно, они лишь подтверждают правила.

📎📎📎📎📎📎📎📎📎📎