Хабрахабр

Как Программисту 1С стать Java developer’ом

Несколько лет назад, когда я искал пути из программистов 1С в Java developer'ы — я бродил впотьмах, пытаясь нащупать дверь, в существовании которой был не уверен. Я пытался найти истории успеха, но кроме пары комментариев ничего не нагуглил. Мир Java выглядел огромным, а количество фрэймворков бесконечным. Было совершенно непонятно: что учить, что не учить, что нужно в работе, а что никто не использует. Если ты хочешь в Джаву, теряешься в бесконечных названиях технологий и фрэймворков и хочешь узнать какие же из них надо изучать, а на какие не обращать внимания — эта статья для тебя!

Некоторые начальные допущения

  • в этой статье мы не будем обсуждать вопрос «зачем?», будем только — «как?». Если ты сюда пришел — ты сам знаешь зачем.
  • я никогда не получал образования как-то связанного с ИТ, поэтому мои рекомендации — это рекомендации от человека и для человека, который на момент начала изучения Java никогда ни на чем кроме 1Са не писал. Если у тебя диплом по разработке ПО — часть рекомендаций может быть лишней.
  • я постараюсь нарисовать картину, отражающую какую-то среднестатистическую вакансию. Естественно, если ты хочешь в какое-то узкое, специфичное направление вроде big data или наоборот embedded — тебе лучше узнать об этом направлении подробнее.

Плохие новости

Во-первых, если ты решил предать 1С перейти в Java разработку — не жди, что путь будет легкий и быстрый. Скорее всего, при должном усердии, ты потратишь никак не меньше полугода на подготовку, плюс никак не меньше года, чтобы вылезти из джунов.

Как правило, это не меньше 2-3 лет практики, но в конечном счете все зависит от тебя. Во-вторых, готовься, что если ты сейчас топовый 1Сник — твой доход скорее всего восстановится когда ты станешь уверенным middle'ом.

У тебя может быть 100500 успешных проектов и вся стена в 1Сных сертификатах — это никого интересовать не будет. В-третьих, не жди, что твой 1Сный опыт тут кому-то интересен. Но тут есть ложка меда: даже если ты не топовый 1Сник, в вопросах SQL, скорее всего, ты потягаешься с Senior Java developer'ами. Ты будешь джуном, с тобой будут разговаривать как с джуном и у тебя будут задачи как у джуна.

Еще пара очень заезженных советов, которые ты уже слышал три десятка раз, но поверь мне, они работают на 100%:

  1. Тратить 1 час каждый день — это намного лучше чем тратить 7 часов раз в неделю. Если ты решил идти — иди. Без отговорок. Каждый день. Ладно, в воскресенье можешь отдохнуть.
  2. Если ё инглиш из нот вэл — улучшай его! Это тот навык, который тебе пригодится: мало того что почти все, что ты сможешь прочитать, будет на английском, так тебе еще и код на нем писать! Скорее всего, первое что тебе потребуется — это навык чтения и понимания прочитанного. С listening и speaking можешь повременить.

Подготовка. Основы языка

Тебе стоит выбрать язык. В интернете куча статей со сравнительными характеристиками. Также, можешь вбить названия языка в поиск hh – посмотри, насколько тебе понравится то, что ты там увидишь. Обращай внимание не только на бешеные зарплаты и пиво по пятницам, но и на количество вакансий, а главное на количество вакансий, на которые готовы взять джуна.

Все дальнейшие рекомендации будут даны в этом контексте, если ты выбрал другой язык — значительная часть написанного тут может потерять смысл, но общие идеи ты можешь почерпнуть. Я выбрал Java. Вероятно, тебе стоит посмотреть в сторону PHP, ибо Битрикс и переход на него может оказаться проще в плане административного барьера (там 1С, тут 1С, какая разница?..) и в плане отсутствия в языке всяких стримов и метод-референсов (хотя они дико кайфовые).

Что такое Java ME и Java FX вообще лучше не знать ) Если ты тоже выберешь джава — не забивай себе голову Java EE, тебе нужна только Java SE.

Я не советую тебе бросаться покупать двухтомник Хорстманна и тысяче страничный «Spring 5 для профессионалов» и пытаться все это вызубрить. Итак, с чего же начать? Начни с онлайн площадок по обучению программистов. Даже если ты расскажешь все это наизусть — знания не подкрепленные практикой выветрятся очень быстро. Дошел наверно до 15 уровня. Я решал JavaRush. Это заняло около 1-2 месяцев (с цифрами могу что-то наврать, дело было давно)

Не пугайся его названия — там можно выбрать уровень сложности и на простейшем тебе будут предлагать задачи уровня инвертировать строку. Затем принимайся за HackerRank. Хотя система оценок иногда дает сбой и бывают такие задачи на 30 баллов, что проще какой-нибудь hard на 60 баллов решить, но в основном ты должен справляться. Добейся, чтобы задачи среднего уровня (medium, баллов на 30) решались без проблем. Это займет тебя еще на 1-2 месяца.

Имей ввиду, что это хорошая книга, но она покрывает Java целиком (только язык, не фреймворки) и даже те ее части, которые почти нигде не используются. Теперь пора читать Хорстманна. И еще, если будет туго, в первом томе пропусти многопоточность и вторую половину дженериков — этого могут не знать даже мидлы, для джуна не страшно. Моя рекомендация: в первом томе забей на разделы связанные с UI и на весь второй том. Тебе нужна версия 1. Еще важно не попасть в ловушку версий: книга, которая называется Java 2 — это древность. Или ориентируйся на дату издания: 2015 год и позже подойдут. 8 или 9.

В целом, больше 60 баллов подниматься не нужно, потому что там начинается не столько прикладное программирование, сколько «искусство ради искусства». Я надеюсь, во время чтения Хорстманна ты не бросишь HackerRank, может, даже решишь пару задачек баллов на 80-100. И еще, имей ввиду, что большинство сложных задач — это классические алгоритмические задачи, которые ты можешь гуглить: смысл упражнений на хакерранке не в том чтобы придумать с нуля алгоритм, который уже давно придуман, а в том чтобы узнать о самом существовании алгоритма и реализовать его. Но если ты чувствуешь в себе силы — иногда бери hard, лишним это не будет.

Продолжение подготовки. Фреймворки, инструменты и практики.

После всего этого, ты почти готов пойти на собеседование. Осталось совсем чуть-чуть:

  • еще раз обрати внимание на коллекции и на сложность поиска в них. Эту тему мусолят все. Не пытайся узнать все подряд: лучше хорошо знать базовые коллекции (ArrayList, LinkedList, HashSet, HashMap, может еще TreeMap), чем знать три десятка, но «по верхам». Т.е. ты должен понимать, как коллекция работает внутри. Есть хороший канал на ютубе, там все разжёвывают для джунов. Прямо так, как тебе и нужно. Вбиваешь в поиск «урок по java коллекции» — первая ссылка на него. Там же есть видео под названием «что нужно знать перед собеседованием». Ты не должен знать прямо все что там перечисляют, ты все-таки джун, на мой взгляд, если ты осилишь 2/3 тем — будет ок.
  • что такое спринг (тебе нужен Spring Core и Spring Boot) — там понаверчено немало, но 95% практики использования — не сложнее хэловорлда. Ты должен понимать базовые концепции, вроде того что такое IOC и зачем это вообще и уверенно владеть 1-2 способами объявления и инжекции бинов (не xml). Возможно, тебе стоит еще попробовать сделать несколько REST-сервисов на Spring Web: там нет ничего сложного, но будет определенный плюс.
  • как писать тесты (посмотри на JUnit и Mockito) — в 1Се в принципе нет такой практики как написание тестов. В Java код без тестов — это не код, потому что код считается нерабочим, до тех пор пока нет доказательств обратного.

Когда я говорю «посмотри на [frameworkName]» — я имею в виду: сделать, по крайней мере, несколько домашних проектов с использованием соответствующего инструмента. Скорее всего стоит начать с того, чтобы попробовать каждый фрэймворк отдельно на уровне хэло ворлд, потом стараться собирать их в одном проекте, несущем хоть какую-то «полезность». Кажется неплохой идеей (хотя я так и не делал) — чтобы проекты были как-то привязаны к работе. Может быть просто полностью переписать задачу, которую ты пилишь на 1Се на Джаву, может быть сделать себе какой-то помощник для 1Сной деятельности. Например, если ты пилишь REST обмен с поставщиком на 1Се — реализуй сторону поставщика на Java для тестирования 1Сной функциональности: просто принимай запросы и складывай куда-нибудь.

Это просто инструменты, стоит набить руку — и уже перестаешь их замечать. Все твои домашние проекты должны собираться Maven'ом и версионироваьтся Git'ом. Бесплатной версии тебе должно хватить. В качестве среды разработки советую тебе взять Idea, по моим наблюдениям ее сейчас используют почти все.

Я считаю, что базовый курс брать не стоит, поскольку все что там будут объяснять не стоит того, чтобы тратить на это время и деньги. Если ты не стеснен в средствах — можешь посетить какие-нибудь курсы по Java разработке. Возьми курс по Spring Core или JUnit: с одной стороны ты получишь знания, пообщаешься с будущими коллегами, с другой — тебе не будут 3 дня разжевывать, что такое цикл.

Тебя обязательно спросят про SOLID и паттерны. Где-то между делом, надо почитать теорию программирования. На мой взгляд, хватит такого набора: Интерфейс, Билдер, Прототип, Синглтон, Декоратор, Прокси. Паттерны (они же шаблоны проектирования) — это весьма интуитивно-понятные вещи, хотя на Википедии описаны так, что чёрт ногу сломит, лучше читать не настольно заумные статьи.

Идём на собес!

Работодатели

Есть несколько основных типов работодателей, о которых тебе стоит знать.

Они же аутстаферы. Первый — это бодишоперы. Они нанимают людей, а потом перепродают их во всякие Сбербанки. Самые известные представители: Luxoft и EPAM. Зачастую, уровень требований там ниже, а зарплата выше. Бодишоперы сажают своих сотрудников прямо в офис заказчика и их почти нельзя отличить от сотрудников заказчика. Но тебе же не это надо? Но и работать ты будешь в не бог весть каких условиях: это не самые привлекательные проекты, на которые конечный заказчик не смог набрать разрабов с рынка, про трудовой кодекс они будут знать весьма отдаленно, а сам ты не будешь полноправным сотрудником там, где ты будешь работать (всякие плюшки и корпоративы будут проходить мимо тебя).

Такие, как правило, стараются держать разрабов подальше от заказчика и занимаются новыми проектами. Аутсорсеры — это конторы, которые нанимают конечные заказчики, но предмет продажи там — не люди, как у бодишоперов, а реализация задач. Это весьма достойное место работы, но туда с таким опытом как у тебя попасть будет не просто, но не невозможно.

Бытует мнение, что тут работать лучше всего: зарплаты большие, плюшек много, задачи интересные, коллективы профессиональные. Продуктовые компании — это конторы типа Яндекса и, прости господи, Касперского, которые продают свой код как конечный продукт, как коробку. Когда ты слышишь про бесплатный английский и пиво по пятницам — скорее всего это про них.

Тут может быть все сильно по-разному: как правило, в банках есть огромное страшное легаси, на которое никто не хочет идти и новые-модные-стильные-молодежные проекты, на которых вакансии еще как-то закрываются. Дальше идут банки и страховые. Хотя, иногда их самомнение может зашкаливать, типа «mission-critical система — не место для джунов». Сам понимаешь, тебе в первую группу. Не обращай на них внимания, такие далеко не все.

Естественно, этот список не описывает полностью всего рынка труда, есть еще всевозможные стартапы, retail и много-много кого.

Во-первых, не надо врать про опыт. Поверь, даже если тебя «случайно» примут за мидла на тех.интервью — в работе ты все равно будешь джуном. Поэтому в резюме не стоит выдумывать, что ты уже работал Java developer'ом 15 лет, пользуясь тем, что в названии твоей предыдущей должности не было упоминания 1С. Но кое-какие ходы, для преодоления HR-барьера, предпринять можно. Не выпячивай свое 1Сное прошлое. На паре последних мест работы можешь написать просто «Программист» или «Developer», а буквы «1С» закопай куда-нибудь в описание. Тим-лида ты этим не проведешь, но HR может купится.

Напиши полгода подготовки как отдельное место работы (оно должно быть в самом верху), с пересечением по сроку с последним местом работы. Во-вторых, было бы ошибкой держать твоего будущего работодателя в неведении о том, как ты занимался самоподготовкой. Дай ссылку на профиль на хакерранке. Назови это «Java developer», место работы — «самоподготовка» или «домашние проекты» и перечисли технологии, которые ты попробовал.

Не советую говорить «надоело нянчиться с бухгалтерами» или «не хочу, чтобы моя зарплата обрушилась вместе с курсом рубля» и тем более «хочу свалить из этой грё...». В-третьих, придумай убедительную причину почему ты хочешь в Джаву. Лучше всего заходит тема с развитием: мол, там уже все повидал — надо двигаться дальше.

При этом те, кто из институтов — без семьи и детей и готовы жить на работе и жить работой и им не надо платить ипотеку. В-четвертых: ты джун и таких как ты, каждый год из институтов выпускают сильно больше, чем есть вакансий джунов. Из этого следует, что тебе нельзя задирать ожидаемую зп. Ок, на твоей стороне опыт, но это не релевантный опыт и его не будут рассматривать как большую ценность. Если ты не можешь прожить на зарплату джуна — подрабатывать 1Сником на четверть ставки — неплохой вариант на первый год.

На мой взгляд, 1-2 тех.интервью в неделю — приемлемый уровень, чтобы и успевать переваривать полученный опыт и не слишком затягивать поиски. Ходи по собесам, запоминай вопросы, находи на них ответы, затем опять ходи по собесам.

Работа джуном

Самое важное тут — это Тим лид. Ты должен был познакомиться с ним на тех.собесе и «он должен был выбрать тебя и ты должен был выбрать его» (с). Очень важно почувствовать эту химию. Это человек, каждое слово которого в следующие несколько лет, ты должен слушать, запоминать и выполнять. Этот человек будет тащить тебя к вершинам Java разработки и посвящать тебя в самые глубокие нюансы этой магии. И от него, может быть даже больше чем от тебя самого, зависит, насколько крутым разрабом ты станешь и как скоро.

Путь в тысячу миль начинается с одного шага. Итак, мой юный 1С-ник, если раньше ты знал «зачем?», то теперь еще знаешь «как?». Дерзай!

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»