Не только меня в свое время, но и многих моих друзей и одноклассников сейчас всерьез волнует вопрос: хочу быть программистом, с чего начать? Целью написания этой статьи была не только неуверенность в себе моих друзей.
Я подозреваю, что количество людей, которые сейчас думают об этом же вопросе, достаточно велико, чтобы моя первая в жизни статья могла бы помочь в чем-то большему, чем паре друзей.
В чем проблема? Вам нужно составить резюме, в разделе «Профессиональные навыки» указать пару технологий, соответствующих желаемой вакансии, разослать по вакансиям и вроде бы все получается.
Но есть подводные камни: 1) Качество технического образования.
Несмотря на то, что моя специальность носит гордое название «Информатика», в 70% учебной программы знания по предметам устарели, а преподаватели либо просто пожилые люди, давно отставшие от современных технологий, либо все более маразматичные по поводу все.
И отсюда вытекает проблема студента, который хочет стать разработчиком, но имеет пробелы в понимании современных технологий, не соответствующий требованиям рынка труда.
Я уверен, что я не единственный, кто с этим столкнулся.
2) Неуверенность в себе и сомнение.
Новый разработчик часто просто боится идти на собеседование, считая себя неготовым даже попытаться.
Он может неправильно оценить степень своей подготовки.
И, наконец, этот же человек иногда знает только один способ устроиться на работу – например, курсы в конкретной компании.
Но ограниченный выбор (на тех же курсах есть ограничения по времени набора, требованиям, собеседованиям) только порождает ненужные препятствия и сомнения.
Результат – потерянное время.
3) Наличие или получение диплома не по специальности.
Хороший разработчик с техническим складом ума не обязательно должен иметь специальное образование.
Но программист-самоучка часто делает то, что ему нравится и то, что он видит. Отсутствие какой-либо последовательности в полученных им знаниях и пробелы в основах могут стать причинами отказов после прохождения собеседования.
Немного о себе: я студент пятого курса, работать начал в середине третьего курса, сразу на штатную должность в Automation QA. В своей предыдущей компании она проработала почти полтора года над двумя проектами.
В настоящее время я работаю младшим Java-разработчиком в Luxoft. Текущий опыт работы с Java: около 2 лет. В сегодняшней публикации я хотел бы предложить вам обзор всех известных мне путей, результатом каждого из которых может стать желаемая работа разработчика (проверенные на практике проиллюстрирую примерами).
Все истории, упомянутые ниже курсы компаний соответствуют Киеву, камни в саду образования - КПИ, факультет информатики и вычислительной техники (особенно большой валун для моей кафедры).
1. Курсы в той или иной компании.
Luxoft, Epam, Яндекс, Global Logic – это далеко не весь список компаний, которые приглашают вас на курсы, стажировки и учебные центры.
Многие учебные классы открыты в технических университетах.
Преимущества этого варианта очевидны: • бесплатное образование • работа с технологиями, востребованными на рынке труда, над интересными реальными задачами • последующее трудоустройство в той же компании • в случае смены места работы – неоспоримый плюс для других работодателей.
К сожалению, недостатков не меньше: • сроки набора студентов (часто либо с начала учебного года, либо весной).
Для тех, у кого не было времени, ждите и теряйте время.
• требования к заявителям.
Компаниям невыгодно набирать на курсы людей, далеких от ИТ, так как потребуется больше времени на их обучение и внедрение в реальные проекты, а значит, больше затрат. Поэтому они предпочитают сотрудничать с определенными факультетами технических вузов, а значит, меньше шансов попасть на работу к кому-то «со стороны».
2. Профильные курсы в образовательных центрах По этому запросу Google услужливо подскажет множество центров, школ и курсов, которые готовы превратить любого человека в чернового программиста.
Главное – желание и серьезный подход к тренировкам.
Преимущества этого варианта: • обучение IT-специальностям и технологиям, востребованным на рынке • высокая вероятность трудоустройства по окончании (у меня в команде было трое коллег, которые проходили одни и те же курсы Java в разное время.
По окончании двое были приглашены на собеседование в HR, а третий сам прислал резюме).
Впоследствии эти курсы стали для одного из них хорошим подспорьем в работе над новым проектом (в чем, например, мне, зная только Core, но не EE, пришлось разбираться самостоятельно).
• набирать всех, кто желает и готов учиться Минусы: • они не бесплатны.
Часто недоступна для студентов, чья стипендия в 2 раза меньше стоимости месяца обучения там.
• не все курсы одинакового качества.
При выборе центра руководствуйтесь отзывами реальных людей, а не рекламой и сладкими обещаниями гарантированного трудоустройства.
3. Первая работа в должности QA автоматизации Начну, пожалуй, со своего примера, ведь это была моя первая работа в IT. В общем, мне катастрофически не хватало практических знаний и минимального опыта для работы разработчиком, и меня взяли на должность тестировщика (простые вопросы про Java Core и сети).
Я оказался в проекте, в котором процесс тестирования клиента состоял из того, что команда Automation QA Android писала приложение, которое отправляло множество разных запросов к разным ресурсам, используя определенные шаблоны.
Еще у нашей команды был свой фреймворк с кучей утилит для анализа логов, tcp-дампов, поведения устройств, а я получил первый опыт разработчика в написании собственной утилиты для настройки ip-таблиц.
А еще понимание модели OSI, опыт работы с клиент-серверным приложением и, наконец, реализованный производственный проект, сам факт реализации которого помог в последующем поиске работы.
Именно поэтому я не считаю работу по автоматизации чем-то зазорным, примитивным или плохим шагом по отношению к работе разработчика — прежде чем сказать «нет», нужно хорошо понимать, с чем это связано.
На втором проекте в той же компании мне дали задачу покрыть старый функционал модульными тестами и разрешили немного провести рефакторинг.
Работа конечно скучная, но через несколько месяцев начались задачи по исправлению простых ошибок.
Таким образом я приобрел опыт работы с модульным тестированием (Powermock, Mockito) и умение быстро разбираться в незнакомых технологиях (тот же баг в JavaScript).
Выделю преимущества этого варианта: • при правильном выборе проекта - работа и обучение в одном пакете (никто не мешает вам одновременно общаться с разработчиками над собственным проектом, получать от них практические знания, самостоятельно что-то читать и писать в свободное время) • деньги.
Они очень мотивируют расти профессионально в работе с понравившимися технологиями.
Ну, я хочу жить не только на стипендию.
• опыт работы на производстве (использование Scrum, систем контроля версий, систем отслеживания ошибок (тот же JIRA) и т.д.).
В универе мне почти ничего подобного не рассказывали (до середины третьего курса точно), про Scrum что-то было на 4-м курсе, с C Git я познакомился только в этом году (спасибо преподавателю - Android-разработчик).
Это преимущество при поиске следующей работы и выполнении задач на ней (когда вновь принятому на работу джуниору не приходится ночью в панике пересоздавать какую-то ветку или искать, как изменить коммит, потому что сегодня конец работы).
спринт, а с тем же Git'ом или пониманием планирования задач это бардак.
• опыт работы с технологиями, которые затем можно будет выгодно представить и продать при рассмотрении позиций разработчика.
(Например, после моего первого проекта у меня будет достаточно знаний, чтобы подать заявку на должность в проекте с клиент-серверным взаимодействием) К сожалению, недостатков нет: • даже в случае глубокого погружения в программирование на должность QA, то вам нужно много поработать над правильным составлением резюме и презентацией своего опыта, чтобы вас пригласили на собеседование на должность разработчика.
Я не говорю, что это жесткое правило, читайте «это случается часто», а не «это жесткое правило».
Сейчас немного проиллюстрирую.
Первый пример — мой коллега Automation QA: он без особых усилий нашел новую работу разработчика в небольшой конторе, где предыдущий опыт не играл никакой роли.
Второй пример — я.
Действительно, этот минус мне открылся как неприятный факт при поиске работы разработчиком (меня не хотели приглашать на собеседование), но резюме я составил правильно (с указанием предыдущей должности, конечно, но кратко описываю все мои обязанности по двум проектам и общий опыт работы с Java).
Я также разослал его везде, где нашел, что значительно увеличило мои шансы попасть на как можно большее количество собеседований.
• риск остаться тестировщиком.
Не слишком обременительные обязанности, зарплата не ниже, чем у разработчика и простой код расслабляют. В этом случае подумайте о том, чего вы действительно хотите – много денег, интересных задач или ничего не делать.
4. Подготовка к поступлению в университет, образовательные проекты, работа в лабораториях.
В университетах есть много возможностей научиться чему-то путем усердного поиска.
Вам нравится создавать сайты? Написать\переписать\поддержать сайт факультета или кафедры.
Хотите программировать для Android? Напишите собственное приложение, которое вы, будучи студентом, хотели бы использовать.
Ищите лаборатории и образовательные центры при университете – это ваш первый опыт. Короче говоря, вам необходимо пересмотреть все возможные варианты в вашем ближайшем окружении.
Плюсы: • технический опыт (при наличии технически подкованного руководителя, качественное дополнительное обучение) • способность самостоятельно учиться новому.
Мой нынешний преподаватель по Android-разработке в качестве дипломной работы сделал приложение для студентов нашего университета с расписанием, преподавателями, картой зданий и университетским радио.
Несмотря на некомпетентность его менеджера в этом вопросе, он разобрался сам и после сдачи диплома без проблем устроился на работу Android-разработчиком.
Минусы: • будьте готовы к тому, что ответственность за начатый проект ляжет на ваши плечи, а преподаватель/руководитель может оказаться не компетентным, чтобы помочь вам технически, но очень дотошным как заказчик.
• забудьте об оплате своей работы (надеюсь, не нужно объяснять почему).
5. Проекты с открытым исходным кодом Здесь каждый найдет что-то для себя в соответствии со своими способностями и предпочтениями.
Выбрав понравившийся проект на том или ином языке, отличное начало — добавить в него простой функционал или воспроизвести его и исправить простую ошибку.
Это возможность работать над реальным проектом с опытными разработчиками, получая от них обратную связь и знания.
Чтение чужого кода учит не только компилировать его в голове, но и сразу находить «узкие места» или неправильную реализацию.
Плюсы: перечислены выше :) Минусы: • данный метод подготовки не может быть единым, а лишь как дополнение и закрепление знаний на практике.
6. Домашняя подготовка Сюда входит чтение технической литературы, онлайн-уроки, изучение документации и, наконец, целевая подготовка к собеседованию.
Лучший вариант домашней подготовки — одновременно вести собственный небольшой проект и читать литературу.
Несложно придумать приложение, которым бы вы пользовались сами, разделить его на задачи и заниматься ими по несколько часов каждый день.
Главное – начать.
А как писать - гугл может помочь, теперь новичок может найти ответ практически на любую возникшую там проблему.
Плюсов довольно много: • чтение книг и документации дает хорошую основу не только для прохождения собеседования, но и для дальнейшей работы • первый проект можно и нужно сделать общедоступным, критика со стороны других покажет узкие места и возможные пути изменения, доработки, улучшения • наличие готового заявления (пусть и небольшого размера) является аргументом для работодателя и возможностью для интервьюера оценить практический опыт соискателя (большой плюс) • возможность самостоятельно планировать время и решать поставленные задачи (не каждый разработчик может это сделать, увы) Минусы: • первые ошибки, из-за которых не удается найти решение, а также отсутствие опытного руководителя могут отбить желание вообще продолжать работу.
В этом случае стоит задуматься – чего вы сможете добиться в этой жизни, если откажетесь от незначительной проблемы? Хм, пожалуй, это скорее плюс.
• отсутствие руководителя может вывести требования, архитектуру или реализацию проекта в «дебри» 7. Комбинация вышеперечисленного.
Работая в Automation QA, никто не запрещает ходить по вечерам на курсы, или учиться и делать какой-то проект в университете, работать над задачами в Open Source проекте дома и читать книги.
Чем больше усилий вы приложите, тем больше у вас шансов получить желаемую работу.
Я думаю, что в любом сочетании все перечисленные выше варианты будут преимуществами.
Главный минус, который я хочу здесь выделить, — это откладывание поиска работы «на потом».
Постоянно следите за рынком, особенно за теми вакансиями, которые касаются интересующего вас языка или технологии.
Периодически ходите на собеседования, чтобы понять свой реальный уровень и прогресс.
Я признаю, что из многих вышеперечисленных правил есть исключения.
Но, как известно, они лишь подтверждают правила.
Теги: #младший разработчик #младший разработчик #программирование #резюме ИТ-специалиста #программирование
-
Dotnext 2015 В Москве: Расширяя Границы
19 Oct, 24 -
Почему Простым Смертным Ничего Не Понятно?
19 Oct, 24 -
Альтернатива Углеродным Нанотрубкам
19 Oct, 24 -
Квест
19 Oct, 24