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

TL;DR

Составляя резюме, старайся выделить знание именно тех технологий, которые требуются в вакансии. Описывая проекты, в которых ты принимал участие, не забудь указать свои обязанности и задачи в рамках проекта, не только связанные с написанием кода, но и бета-тестирование, unit-тесты, билд-скрипты, настройку сервера приложения, Jenkins’а или создание базы данных. Имей в виду, что тебе придется ответить за каждую технологию, которую ты указываешь в резюме, так что не стоит вписывать то, что ты совершенно не знаешь.

 

Подготовка к собеседованию

Теперь займемся подготовкой к самому собеседованию. Независимо от проекта и используемых фреймворков для начала нужно показать твердые знания Core Java. По Java существует множество всевозможных пособий и обучающих курсов, но лучшим пособием будет литература для подготовки к сдаче экзамена на сертифицированного программиста Java от Oracle, например OCA OCP Java SE 7 Programmer I & II Study Guide. Проверить знания на практике поможет ресурс или более серьезный, но тут придется немного раскошелиться. Как ни странно, может пригодиться YouTube. Неплохой курс на русском языке выложен на канале Golovach Courses. В понятной и доступной форме объясняются Java Core, JDBC, JEE и многое другое, также есть видео, посвященные прохождению собеседования. Неплохие ролики, освещающие самые популярные вопросы на собеседовании Java-программиста, выкладывает Александр Будников с пометкой IT Sphere Channel.

Если ты хочешь быть востребованным специалистом и получать хорошую зарплату, без Java Enterprise не обойтись. Изучение Enterprise Java лучше начинать с азов — с понимания, как работает сервлет и JSP. Тогда на многие вопросы ответ можно будет додумать логически, даже не зная его. Хорошая книга на эту тему — Head First Servlets and JSP издательства O’Reilly. В ней подробно рассматриваются устройство сервлетов и JSP-страниц, сессии, устройство веб-приложений, есть даже небольшое введение в MVC и другие паттерны J2EE. В конце книги тебе будет предложен небольшой экзамен, с помощью которого ты сможешь проверить свежеполученные знания.

Любой Java Enterprise разработчик должен знать Tomcat. Это самый простой, самый легкий и, пожалуй, самый задокументированный сервер приложений. Tomcat нужно не просто уметь запускать и вырубать. Попробуй развернуть веб-приложение, настроить удаленную отладку, разобраться с настройкой производительности, SSL.

Далее стоит изучать уже JBoss/WildFly — все-таки многие J2EE-технологии на томкате не работают. JBoss/WildFly бесплатный, вполне функциональный, и он частенько используется даже у серьезных заказчиков.

Какое веб-приложение обходится без слоя данных? Правильно, почти никакое, поэтому даже на проекты, использующие NoSQL-базы, не берут без хорошего знания SQL. На SQL придется писать часто и много. Слишком глубоких знаний от программиста Java, конечно, не ожидают, но JOIN’ы и методы нормализации нужно знать назубок. Неплохая книжка по SQL — «Изучаем SQL» Линн Бейли. Отличный интерактивный курс предлагает w3schools.

Дальше нужно разобраться с JDBC. Казалось бы, зачем учить то, что уже практически нигде в чистом виде не пользуется? Дело в том, что все ORM базируются на старом добром JDBC, и рано или поздно при возникновении проблем с БД с ним придется столкнуться. Кроме того, на собеседовании часто просят обосновать выбор ORM или JDBC на практическом примере, поэтому нужно осознавать все преимущества и недостатки первого и второго способов.

Из ORM наибольшей популярностью пользуется Hibernate. Так что с прицелом на будущую карьеру я бы советовала тебе разобраться в нем хорошенько. К счастью, Hibernate отлично документирован и снабжен кучей примеров на любой вкус. Из книг обрати внимание на Java Persistence with Hibernate Кристиана Байера.

Из фреймворков по-прежнему лидирующие позиции (по предлагаемым вакансиям) занимает Spring. Лучшая документация по Spring, на мой взгляд, находится на официальном сайте. Там же тебя ждет множество примеров и разбор всевозможных нюансов фреймворков. Из неплохих книг, тем более на русском, советую «Spring 4 для профессионалов» Шефера, Хо и Харропа.

В основном на собеседовании по Spring затрагивают такие темы, как назначение фреймворка, задачи, которые он решает, простые вопросы по настройке, интеграция Spring с другими фреймворками, например Hibernate. Неплохо бы иметь внятное представление о Dependency Injection / Inversion Of Control, знать, что собой представляет container, что такое бины, жизненный цикл, scopes, уметь работать как с XML-инициализацией, так и через аннотации, разобраться с валидацией, ресурсами и, конечно же, Spring MVC.


Неплохо бы иметь внятное представление о Dependency Injection / Inversion Of Control, знать, что собой представляет container, что такое бины, жизненный цикл, scopes, уметь работать как с XML-инициализацией, так и через аннотации, разобраться с валидацией, ресурсами и, конечно же, Spring MVC

Не будут лишними и некоторые знания по работе веб-сервисов, понимание REST и SOAP. Неплохая статья на эту тему есть на Хабре. Пригодятся также знания по XML (без него совсем никуда в мире Enterprise), XPath и JSON.

Ну и конечно, веб-приложения. А какое из них обходится без HTML, CSS и JavaScript? Правильно, никакое. Знаний HTML достаточно на уровне курса от w3schools, в CSS частенько приходится править мелкие ошибки, так что необходимо хотя бы представлять, что там где. Еще надо знать сам JavaScript. Хорошо также уметь читать jQuery или AngularJS. А еще лучше — уметь его писать (вижу, как при этих словах буйно радуются Игорь Антонов и Илья Русанен. — Прим. ред.).

Часто на собеседовании дают небольшие задачи на алгоритмы, подготовиться к ним помогут книги Седжвика «Алгоритмы на Java» и Лафоре «Структуры данных и алгоритмы Java». Для оттачивания практических навыков рекомендую воспользоваться такими ресурсами, как Topcoder и Codeforces.

Ну и конечно, жизненно необходимо знание английского. В смысле, не «технический», «со словарем», «читаю свободно», «читаю свободно, но ничего не понимаю» :). С хорошим английским твои шансы найти хорошую работу возрастают в разы. Ты сможешь работать в международной команде, ездить в командировки, читать ТЗ и другую техническую документацию от иностранных заказчиков, твоя ценность как специалиста значительно повышается.

 

Собеседование

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

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

Если ты нацелился на конкретную компанию, сходи сначала на собеседования в другие компании со схожими требованиями. Так ты будешь чувствовать себя более уверенно, узнаешь свои слабые места и примерные вопросы и задачи, с которыми придется столкнуться.

 

Фриланс

Работа программиста хороша тем, что не обязательно вставать ранним утром, тащиться в офис, стоять в пробках, толкаться в метро, общаться с такими же милыми сонными людьми. Всегда можно работать дома, ну или на Канарских островах, в общем — где захочется и когда захочется. Тут есть два варианта: фриланс и удаленная работа.

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

Другое дело — удаленная работа. Тут придется постараться и пройти настоящее собеседование, правда, скорее всего, по скайпу или по телефону, но и заработок она дает стабильный, потому что контракт, как правило, заключается на год и больше.

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

В подготовке к собеседованию уже следует делать основной упор на практику. Отвечая на технические вопросы, лучше упоминать, где и как ты сталкивался с подобным и как решал проблему в той или иной ситуации. Не было такой задачи на практике? Расскажи, как решил поковыряться в свободное время в этих классах или фреймворках и что для себя из этого извлек. Так как работать ты будешь практически бесконтрольно, работодателю важно доказать, что ты умеешь самостоятельно организовываться, решать задачи и развиваться. Будь готов к тестовым заданиям. Но тут время работает на тебя. Сначала тебе приходится доказывать заказчикам, что ты достоин их проектов, а через несколько лет/проектов они уже будут выстраиваться в очередь.

Конечно, абсолютно без опыта работы найти фриланс или удаленку практически нереально. Но у этой проблемы есть несколько вариантов решения. Можно присоединиться к команде open source разработки. Там ты поучишься быстро вникать в чужой код, придерживаться стиля написания проекта, заставлять себя работать. Можно попроситься в команду фрилансеров, ну или сделать свой проект.

Альтернативным вариантом приобретения опыта могут быть курсы программирования при больших компаниях (не путать с курсами программирования от обучающих школ). Большинство крупных компаний понимают, что в условиях нехватки специалистов самое простое — это выращивать их. Многие проводят курсы бесплатно, некоторые за деньги, но это инвестиции, которые в будущем окупаются. Хорошо зарекомендовав себя на таких курсах, ты практически с 90%-й вероятностью трудоустроишься в эту компанию по окончании. Если же что-то как-то не сложилось, то проекты, выполненные на курсах, подойдут в качестве опыта работы для резюме. Старайся выходить за рамки поставленной задачи, придумывай свои дополнения и улучшения программе, которую нужно написать, обязательно пиши тесты, и твои старания не пройдут даром. Впоследствии эти программы можно будет выложить в открытом доступе, чтобы демонстрировать потенциальному работодателю.

Поиск работодателя

Для начала нужно определиться с потенциальным работодателем. На сегодняшний день в Сети есть множество ресурсов по поиску работы. Можно глянуть раздел с вакансиями на форумах программистов. Вакансий там меньше, но, как правило, они интереснее, хотя и спрос с кандидата будет больше. Ну и конечно же, друзья-программисты. Они могут много рассказать о тех компаниях, где работали или работают, и свести тебя с отделом кадров. Частенько они это делают с удовольствием в погоне за бонусами за привлеченных сотрудников.

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

 

Работа на чужбине

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

Собеседование в иностранную компанию обычно проходит в несколько этапов. Какой-то структурностью они особо не отличаются, иногда вопросы перескакивают с одной темы на другую. Главное — не волноваться, как говорили небезызвестные пингвины, «улыбаемся и машем». Не нужно смотреть на собеседника мрачнее тучи и хмуриться при виде неизвестного вопроса. Если что-то не понял в вопросе, обязательно переспроси, но максимально вежливо и дружелюбно. Старайся рассуждать вслух над каждым вопросом, привыкай, что, пока ты будешь писать код, кто-то будет пялиться в монитор. Обязательно расспроси про компанию, про проект, про команду, приготовь список вопросов заранее. Иностранные компании могут позволить себе выбирать сотрудника, поэтому на качественную самопрезентацию надо обратить самое пристальное внимание. Если ты разослал резюме в кучу компаний, а ни одна так и не позвала на собеседование, не отчаивайся. Устроиться на работу за границу можно и через местные аутсорсинговые компании, у них всегда имеется парочка вакансий с переездом ближе к офису заказчика.

 

Не расслабляйся

Ну и напоследок, устроившись на работу, не забывай, что удел программиста — учиться всю жизнь. Старайся посвящать немного времени каждый день ознакомлению с новыми фреймворками и технологиями, обсуждай их с коллегами, посещай время от времени конференции, посвященные Java или технологиям, с которыми приходится работать. Неплохие конференции, посвященные Java-технологиям, — Joker и JPoint. Создатели фреймворков, например Spring, часто проводят бесплатные вебинары по нововведениям, на них легко подписаться на сайте компании. Столкнувшись с «магией» в проекте, старайся разобраться, почему заработало / не заработало, это поможет углубить знания фреймворков и их взаимодействия без отрыва от работы. Есть идеи собственных проектов? Реализуй! Периодически просматривай вакансии, чтобы быть в курсе технологий, пользующихся спросом.

3 комментария

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Как работает Linux: от нажатия кнопки включения до рабочего стола

Лучший способ понять, как работает операционная система, — это проследить поэтапно ее загр…