Как стать Java разработчиком за 1,5 года
Меня зовут Сергей, мне 40 лет и сейчас я работаю Java разработчиком в немецкой компании. Мы занимаемся разработкой программного обеспечения для пивоварен оценки финансовых и кредитных рисков. Это моя первая работа в качестве разработчика. До этого я работал в сфере IT-поддержки и системной интеграции. Первого февраля 2019 г. закончился мой шестимесячный испытательный срок, и у меня на руках бессрочный контракт. Я хочу поделиться своим опытом, как можно самостоятельно выучить Java так, чтобы получить работу.
Это мой рабочий стол. Пить пиво в рабочее время у нас разрешено, мы же в Германии ;)
Моя первая статья: «IT-эмиграция с семьей. И особенности поиска работы в маленьком городе Германии, когда ты уже там»
Моя вторая статья: «Получить работу в Германии станет проще».
Disclaimer
Скажу сразу, что всякие варианты «выучи яву за 10 дней» (21 день, 30 дней и т.д.) — это утопия. Нет никакой красной таблетки, чтобы быстро попасть в матрицу. Но за год-два параллельно с основным местом работы — вполне реально.
Что у меня было в активе, прежде чем я начал изучать Java
Сначала я хотел назвать статью «Как стать Java разработчиком за 1,5 года с нуля», но передумал. Я ведь пришел в программирование не из совершенно другой области, а из IT. Но работал я не в разработке, а в поддержке. Вероятно, дальнобойщику будет не так просто повторить мои шаги, чтобы стать программистом. Хотя, если у моей жены получится в свои 34 переквалифицироваться из чистого гуманитария в разработчика (или тестера), то напишу еще одну статью.
Стоит сказать о том, что я уже умел, когда решил стать разработчиком.
В университете в течение 2-х семестров мы изучали программирование на Си и С++. Ничего особенного или каких-то глубоких знаний. Сдали — забыли. Далее, будучи студентом, я писал какие-то простенькие программы на Delphi для себя. И всё. Это было более 20 лет назад.
Дальше моя карьера выглядела так:
- Системный администратор
- Системный инженер
- Зам. руководителя отдела
- Руководитель
- Инженер тех. поддержки
Непосредственно программированием я вообще не занимался.
Онлайн-курсы.
Я начал со следующих специализаций на coursera.org:
Java Programming and Software Engineering Fundamentals — 4 месяца
Я прошел следующие онлайн-курсы:
После этой специализации я уже более-менее разбирался в языке, но писать самому программы было еще нереально. Последний capstone-проект я не сделал. Мне было сложно. И у меня, честно говоря, пропал энтузиазм. Я сделал перерыв.
Object Oriented Java Programming: Data Structures and Beyond– 5 месяцев
Через месяц я решил всё-таки вернуться к занятиям снова. Я пошел на специализацию из пяти курсов:
Последний capstone-проект я также не осилил. Но предпоследний курс в списке «Mastering the Software Engineering Interview» помог мне неплохо подготовиться к последующим собеседованиям. А еще я смог написать свой первый простенький парсер простого сайта на чистом HTML. Уже было неплохо, но не впечатляло.
How to Code — 3 месяца
Следующим шагом были эти два странных курса на edx.org:
Я написал «странных», потому что там вообще речь не идет о Java. Авторы курса используют специальный язык программирования Beginning Student Language (BSL). Я где-то прочитал, что они мега-полезные. Наверное, эти два курса помогли мне лучше понять некоторые приемы написания программ и стали хорошим подспорьем для написания Unit-тестов в реальной работе. Но, если быть честным, их можно пропустить.
Data Structures and Algorithms — 2 месяца
Потом я снова вернулся на coursera.org и начал новую специализацию, сотоящую из следующих четырёх курсов:
Но осилил только первых два. На остальные даже не стал записываться. Параллельно с этими курсами я начал читать книгу OCA, о которой речь пойдет дальше.
Топтание на месте
В тот момент я понял, что топчусь на месте. Прохождение новых курсов не давало такого ощутимого количества новых знаний, как это давали первые. Т.е. знания вроде прибавляются, но это никак не приближает меня к получению работы. Я не понимал, как с такими знаниями можно вообще найти на работу. Я всё также не мог написать ничего, что было бы сложнее парсера. Ну как так-то??!?! Я даже пытался написать свой сервис парсинга сайтов с блэк-джеком и путанами, но уже после недели разработки мой проект превратился в кашу из классов. И я уже сам не мог разобраться в том, что я там понаписал. Кроме того, мне всё ещё были непонятны некоторые аспекты функционирования языка. И это после того, как я уже потратил примерно год на все этих курсы!!! Двенадцать онлайн-курсов и целый год времени, Карл, вы только вдумайтесь в это. На самом деле, это был провал. Я был уверен, что за год я смогу стать разработчиком благодаря этим курсам. Я заблуждался. Мне нужен был план Б.
Альтернатива
Я стал искать курсы, которые бы помогли мне получить какие-то практические навыки, востребованные в реальной работе. Но ничего толкового не было, либо стоило приличных денег. Те же курсы от отуса стоят 50000 за шесть месяцев и отзывы на них противоречивые. Я не был готов к таким расходам. Я был готов впахивать самостоятельно и искал, как это можно сделать бесплатно или совсем недорого. В итоге все онлайн-курсы, которые мне попадались, делились на две категории:
- Первая рассчитана на новичков или людей с нулевой подготовкой. С их помощью ты достигаешь уровня «три с минусом». Это я! Это про меня!
- Вторая для «хорошистов» с опытом работы, которые хотят стать «отличниками». Вроде таких: «Как писать микросервисы на Java для высоконагруженных проектов с использованием WildFly Swarm». Что это вообще такое???
А между ними зияющая пустота. Ну где я и где все эти микросервисы??? Получалось, что для «троечников» вообще ничего нет. Или есть, но за хорошие деньги. И как стать «хорошистом» бесплатно, без регистрации и СМС, вообще непонятно.
Сертификация Oracle
Тогда я решил стать сертифицированным разработчиком на Java. Потому как фраза «Я профессиональный программист на Java» звучит очень круто и должна сразить будущего работодателя наповал!!! Во всяком случае, тогда я так наивно думал.
OCA: Oracle Certified Associate Java SE 8 Programmer — 2 месяца
Для этого я купил книгу:
На освоение этой книги у меня ушло примерно 2 месяца. Она реально открыла мне глаза на многие аспекты и заставила понять, как работает язык в деталях. Это было хорошее продвижение вперед. Но не в поиске работы, а в понимании языка Java. На экзамен я шел с уверенностью, что сдам его хорошо, и я его сдал. Я набрал 84% при необходимых 65%. Я был безмерно горд собой.
Стоимость экзамена $245. В России он стоит немного дешевле.
OCP: Oracle Certified Professional Java SE 8 Programmer — 4 месяца
Я с энтузиазмом принялся за вторую книгу тех же авторов:
На освоение второй книги я потратил уже 4 месяца. И это оказалось реально сложно. Два раза я делал перерывы по одной неделе, потому как понять лямбда выражения или многопоточность мне было действительно непросто. Также меня убивало обилие классов для ввода и вывода. Все эти NIO и NIO2, которые так похожи и которые нужно было знать. Что там базовый класс, что производный? Это был настоящий кошмар. В итоге я назначил дату экзамена за месяц, потом перенес его на две недели, потом еще на две. Меня поджимали сроки, на горизонте маячило собеседование. И мне нужен был этот сертификат. Я не стал переносить экзамен в третий раз и пошел с тем, что имел. В отличие от первого экзамена, я уже не был уверен в хорошем результате. Я вообще не был уверен, что смогу его сдать. От былой гордости не осталось и следа. Объем информации для понимания и запоминания во второй книге раз в пять больше чем в первой. Но я сдал и этот экзамен. К счастью, тестовые задания в книгах оказались сложнее, чем те, которые были на экзамене. Но это был прорыв… для меня. Прорыв в плане знаний и понимания того, как работает язык и какие инструменты он предлагает.
Стоимость экзамена также $245.
Могу сказать, что эти две книги мне дали больше, чем все те онлайн курсы, что я прошел ранее. Но я не знаю, смог ли бы я вообще сдать эти экзамены, если бы не прошел предварительно курсы. С помощью этих экзаменов я перешел на уровень «три с плюсом». И это было уже что-то. Но я всё также не был способен самостоятельно реализовать какой-нибудь интересный проект. WTF???
Я понял, что я достиг максимума от того, что я мог получить сам, и изучать язык дальше было бессмысленно. Более того, я понимал, что мои знания, которые я с таким трудом получил, без практики очень быстро улетучиваются. Тянуть было нельзя, и я занялся подготовкой к собеседованию и приобретением навыков, которые могут потребоваться при устройстве на работу.
Что нужно, чтобы получить работу?
Нужно пройти собеседование и техническое интервью! Про подготовку к собеседованию писать не буду. Это тема для отдельной статьи. Напишу только про те знания, которые нужны, чтобы пройти техническое интервью.
Подготовка к интервью — 1 месяц
Я купил следующую книгу:
Настоятельно ее рекомендую. Она поможет подготовиться к техническоой части собеседования. На неё я потратил примерно месяц. Многие задания были непонятны, поэтому я нашел еще один экземпляр на русском, и когда мне было совсем непонятно, я смотрел в него.
Дополнительные навыки
К этому моменту я уже активно мониторил рынок вакансий в своём городе и выбрал компанию, в которой хотел бы работать. У них была вакансия Java Developer. В вакансии в числе желаемых навыков стояли знания Oracle SQL, GWT, Eclipse, SVN, Maven, Jenkins. Мне не нужны были глубокие знания всех этих технологий, мне нужно было простое понимание, что это такое и как оно работает. Чтобы на собеседовании можно было сказать, мол да, я знаком, но не глубоко.
Oracle SQL — 1 неделя
SQL я уже неплохо знал, так как по долгу службы приходилось делать много произвольных отчетов для руководства. Но это был T-SQL от Microsoft, а тут требовался SQL от Oracle. Пришлось купить книжку, чтобы вспомнить основные моменты и понять разницу.
Эту книжку я пробежал быстренько за неделю. И понял, что я на 70% готов сдать еще один экзамен. Но мне было уже не до этого.
SVN — 1 неделя
SVN распределённая система управления версиями. GIT или SVN используется в большинстве компаний, которые занимаются разработкой ПО. Курсов по SVN я не нашел, поэтому решил взять короткий курс по GIT: «Version Control with Git», чтобы быть в курсе темы. Я даже подумал, что если спросят про SVN, то скажу, что имел дело с GIT. А потом на месте сориентируюсь. Если вдруг будет что-то непонятно, то всегда можно будет сказать, что в GIT это немного по-другому. И это, кстати, сработало.
GWT — 3 дня
Следующая технология из списка — GWT. Потратив несколько дней на поиски информации, я понял, что с этим Фреймворком от Google мне просто не разобраться. Если упрощенно, то можно писать сложные сайты на Java, а этот Фреймворк преобразовывает твой код в HTML + JavaScript и отображает в браузере без всяких надстроек и дополнений. Слишком всё круто. GWT я решил пропустить.
Eclipse — 3 дня
Eclipse — среда разработки, основной инструмент разработчика, с которым я имею дело каждый день. Каких-то специальных курсов я не брал. Посмотрел несколько видео на youtube, понял основные приемы. Попробовал всё сам руками.
Maven, Jenkins — 15 минут.
На эти две вещи времени просто не осталось. Собеседование было уже утром, поэтому я просто прочитал 2 статьи в википедии и лёг спать.
Время
Мной было потрачено примерно 18 месяцев, 2 недели, 6 дней и 15 минут на получение знаний и навыков, необходимых для получения места разработчика. Этим я занимался по вечерам, тратя 1–3 часа в будние дни. И около 5–6 часов на выходных.
Деньги
Я готов был тратить свое время и не готов был тратить деньги. Но потратить их всё же пришлось.
Курсы:
- Все онлайн курсы я прошел бесплатно Бесплатно. Как это сделать на coursera.org я писал тут.
Книги:
Экзамены:
Дополнительные расходы:
- Проезд в другой город на экзамены, т.к. в моем нет сертификационных центров — 120€.
Итого: 702€
Совсем бесплатно, к сожалению, не получилось. Книги покупал на английском, т.к. экзамен тоже на английском.
Результат
Этих знаний хватило, чтобы пройти собеседование и подписать контракт в достаточной крутой немецкой компании. Я бы даже сказал, что их хватило с запасом.
Их также хватило, чтобы пройти шестимесячный испытательный срок и получить постоянное место в штате разработчиков.
За эти 6 месяцев работы в качестве разработчика я закрыл более 1000 заявок на разработку, доработку и исправление ошибок в коде совершенно разных подсистем и модулей. И ни от одной заявки я не отказался «потому что я не смог». Да, мне приходилось и сейчас приходится разбираться в новых вещах, искать информацию, вникать в детали. Что-то я делаю медленно, но мне это интересно и процесс идёт. А ещё за это хорошо платят!!!
Но не надо думать, что я очень умный. Я самый простой парень, который просто решил изменить свою жизнь к лучшему. Я такой же, как и ты. А если смог я, то сможешь, и ты!
На самом деле, чтобы стать разработчиком, у меня ушло не 1,5 года, а два. Но это по моей собственной глупости (читайте об этом в моем телеграм-канале). Непосредственно на яву я потратил 1,5 года. Но необязательно повторять мои ошибки. Думаю, что можно достичь того же результата за более короткий срок. Выкидываем всё лишнее и получаем примерно такой путь:
Часть первая — 5 месяцев
Берем следующие курсы специализации Object Oriented Java Programming: Data Structures and Beyond на курсере:
Параллельно читаем книжку:
По результатам сдаем экзамен.
Часть вторая — 2 месяца
Берем следующие курсы специализации Data Structures and Algorithms:
Параллельно читаем книгу:
Часть третья — 4 месяца
Читаем книжку:
По результатам сдаем экзамен.
Часть четвертая — 1 месяц
Смотрим, что конкретно хочет работодатель от соискателей, и тратим по одной неделе на каждую из 4-х самых нужных технологий, программ или Фреймворков (Git, Eclipse, Maven, Spring и т.д.). Плюс изучаем предметную область, в которой работает работодатель, его продукты, если есть и т.д.
Итого год. За год — вполне реально.
О том, как я изменил свою жизнь в 40 лет и переехал с женой и тремя детьми в Германию я пишу в своем телеграм-канале @LiveAndWorkInGermany. Пишу о том, как это было, что хорошо и что плохо в Германии, о планах на будущее. Коротко и по делу. Присоединяйтесь — будет интересно.