Войти в IT: Долгая дорога в Java

Друзья, рады представить статью из цикла «Войти в IT», который уже давно публикуется в корпоративном блоге компании DataArt. Это не «серьезные» технические статьи (такие тоже будут), а рассказы наших синьоров об их становлении в IT. Ведь иногда хочется просто взглянуть на индустрию глазами коллег и понять, как именно из молодых практикантов и «зеленых» джуниоров получаются эксперты мирового уровня. Что ж, дадим слово одному из наших героев.

— Всем привет! Меня зовут Родион Горковенко, и я... нет, не то, о чем вы подумали. Я — Senior Java Developer в компании DataArt. Хочу поделиться историей, как я дошел до жизни такой и, возможно, немного подсказать молодым специалистам, как выжить в беспощадных джунглях Java и стать полноценным цифровым хищником.

Введение (красивая заставка)

Сначала я программировал на C. Были и другие языки, но большую часть времени (несколько лет) я писал именно на C. Поэтому и моя карьера в IT началась с этого языка. Однако область применения его ограничена сравнительно низкоуровневым софтом — я писал на нtv для микроконтроллеров, когда разрабатывал электронику, и позже — для POS-терминалов.

Ответ на вопрос «куда двигаться дальше?» был для меня не очень ясен. Можно, конечно, было углублять изучение C++, но небольшой опыт работы в команде на C/C++ оставил несколько негативное впечатление. Альтернативой была Java. О ней я не знал почти ничего, разве что, пару тестовых приложений для мобильников с JavaME написал еще в институте — конечно, не разбираясь подробно в нюансах языка.

Что ж, в течение года посвященного POS-терминалам, у меня было немного свободного времени до и после работы. Гугление подсказало, что нужно скачать Java Development Kit (JDK) с сайта Sun (теперь java.oracle.com) и, в общем, можно начинать.

Изучение JavaSE (первый уровень, несложные монстры)

Тут отмечу, что наличие опыта в программировании очень полезно для изучения Java. Изучать ее в качестве первого языка — плохая затея. Java сразу бросает новичка в пучину целого ряда непонятных слов (пакеты, классы, методы, статические, абстрактные, ссылочные типы, коллекции — кто все эти люди?), в которой не очень легко найти дорогу если не знаком с аналогами из других языков.

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

Итак. Имея уже некоторый опыт и установленную JDK, можно садиться и пробовать. Да, можно еще скачать одну из популярных IDE — сред разработки, в частности, NetBeans, Eclipse или IntelliJ IDEA. Однако знатоки рекомендуют первые программы писать «в блокноте», т. е. во встроенном редакторе Far Manager или Midnight Commander, в Notepad++ или gedit, а компилировать и запускать прямо из командной строки. Это очень хорошая рекомендация тем, кто действительно хочет чего-то достичь, а не просто жаждет сдать программу злому преподу в институте/школе и отвязаться.

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

Что именно писать новичку? Сотни маленьких и бесполезных программ. Наша цель в этот период — освоить синтаксис, понять смысл классов, методов, полей — научиться работать с коллекциями, массивами, строками и т. п. Причем понять так, чтобы часть этих знаний из головы перекочевала на кончики пальцев.
Где взять идеи этих «маленьких и бесполезных программ»? Я пошел двумя путями:

Зарегистрировался на форуме javatalks.ru — думал, задавать вопросы буду, но на деле больше пытался отвечать на чужие (это, оказывается, здорово прокачивает скиллы а также позволяет быть в курсе важных событий J-мира).

Стал участвовать в минисоревнованиях на codeforces.ru — задачи двух самых нижних уровней (Div2 A и B) здесь вполне доступны «обычным» программистам, не страдающим бессонницей от словосочетания «спортивное программирование», хотя в целом подобные сайты, скорее, приучают писать быстро и безобразно... но несомненная польза — именно в смысле изучения «работы коллекций, массивов, строк, преобразований типов» и познания сотни приятных нюансов, где можно сделать глупые ошибки.

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

Можно также читать книжки. Например, Хорстманна или другие. Из тех, которые почти must-have для новичка, осмелюсь назвать две (это не самоучители или мануалы, а просто очень полезные, но неочевидные вещи):

Джошуа Блох «Effective Java» (она тоненькая).
Роберт Мартин «Clean Code» (можно прочесть первую треть и бросить).

Итак, спустя 6 — 9 месяцев мной написана уйма ненужных утилит, простеньких игрушек и других приложений, представляющих интерес только для автора. На вопрос «Знаете ли вы JavaSE?» могу уверенно ответить «хорошо» (исключение составляет обычно, разве что, конкурентность). Достаточно ли этого для трудоустройства?

Изучение JavaEE / Web (продвинутый уровень, какодемоны, кибердемоны)

Чаще всего — нет. Большинство промышленных Java-проектов — корпоративные или веб-приложения, основанные на десятке-другом популярных технологий работы с веб-мордами, веб-ресурсами, базами данных и т. п. По объему все это, как минимум, раз в десять больше того, что мы на текущий момент успели изучить.

Поскольку почти все промышленные приложения предоставляют пользователю веб-интерфейс, нужно получить (если их нет) познания о таких вещах, как HTML, HTTP, CSS, возможно, JS — мало того, нужно с ними потренироваться. Это несложно, и руководств хватает с избытком. Главное, чтобы представление создалось ясное.

Java используется в веб-приложениях для создания на лету новых HTML-страниц и обработки поступающих от них HTTP-запросов. Понять этот жизненный цикл новичку сложно... ну, мне точно было сложно. К счастью незадолго до этого пришлось освоить азы PHP. Это было довольно удобно: потратив несколько дней и написав сколько-то десятков скриптов, составил представление, как работает web, — гораздо более целостное, чем за все предыдущие годы. Проще всего получить опыт и с PHP и с MySQL установив, например, XAMPP, включающий и сервер Apache httpd и PHP-интерпретатор и сервер базы данных и т. п. — и проштудировав какой-либо самоучитель (в моем случае www.softtime.ru/bookphp/gl1_1.php).

Теперь, переключившись на Java, я смог гораздо легче воспринять: ага, вот Tomcat, это сервер, отдающий страницы и обрабатывающий запросы. Вот JSP-страницы — ну, это очень похоже на PHP. К ним в паре идут сервлеты, это уже не очень похоже, но тоже понятно. Связь с базой данных — после опыта с PHP и SQL это уже нетрудно, благо примеров хватает. Удобно было использовать встраиваемую базу данных на Java под названием H2.

Нельзя сказать, чтобы я далеко проник в Java EE / web на этом уровне, но, поскольку изучение шло тяжеловато, начал искать место Java-разработчика. В большинстве компаний мне не отвечали, в несколько позвали побеседовать. Тут главное — не отчаиваться.

Кстати, на этом этапе вы, вероятно, уже будете работать в IDE, однако очень-очень важно освоить также средства автоматизированной сборки — хотя бы Ant, а лучше Maven. Также строчки о знакомстве с системами контроля версий (SVN, Git например) сделают ваше резюме более привлекательным для работодателя (он скажет: «Уф, хоть этому учить не нужно»).

Итак, я рассылал резюме и иногда ходил по собеседованиям. В двух местах предложили выполнить тестовое задание.

Тестовое задание — это: оно позволяет вам понять, с какими технологиями и задачами работают, а им — посмотреть, как вы пишете код и т. п. К сожалению, дают его редко. Из около 30 собеседований, пройденных мной за последние годы, задания доставались где-то в пяти.

В приложении к этой статье я приведу пример тестового задания для тех, кому не везёт на них.

Первое задание предлагало написать веб-приложение с несколькими страничками для отображения данных из нескольких таблиц и требовало «использовать JSF и Hibernate» — меня прошиб холодный пот, т. к. ни одна из этих аббревиатур не была мне знакома. Тем не менее, попросив две недели на выполнение, я с задачей справился (сейчас бы за 3 — 5 часов написал, думаю). Второе задание познакомило меня с использованием Java Mail, что тоже было хорошо.

Приглашение получил в обе компании — тут, пожалуй, повезло что незадолго до этого я почитал про Java Code Conventions и приучил себя оформлять код примерно «как все», чтобы не пугать потенциальных работодателей.

В принципе, здесь можно закончить наше повествование — дальше мне уже подсказывали коллеги (и необходимость) — что изучать, что читать.
Первый проект я делал именно на JSF и Hibernate. Уже тут изучил основы Spring. Ну, а дальше — больше. Конечно, первый проект сейчас страшно вспоминать — ух, и начудил я в нём...

Главное — не забывать, попав на работу в компанию, что учиться надо и дальше, и больше. В Java множество невероятных и непонятных технологий. А кроме Java, есть и другие языки, и всяко-разные концепции, подходы, архитектурные решения и т.п. Я, пожалуй, был бы счастлив если бы знал «всё-всё-всё» хотя бы на 10%...

Приложение (редактор уровней)

Многие тестовые задания на позицию Java Junior сводятся к написанию небольшого веб-приложения. Будьте готовы, что оно займет у вас дни, особенно если вы не знакомы с какими-то технологиями и т. п.

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

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

Нужно хранить данные о:
клиентах банка (идентификатор, имя — адрес, возраст по желанию);
счетах (идентификатор, идентификатор владельца, количество денег);
транзакциях — переводах денег между счетами или их поступлениях / списаниях.

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

Задание часто содержит перечень технологий, которые следует применить. Типичные наборы могут содержать, например:
JSP (Spirng-MVC), Spring, Spring-jdbc и JQuery + UI для украшения фронтенда;
JSF, Spring и Hibernate;
JSF, EJB, GlassFish.

База данных может быть Postgres или MySQL, впрочем постарайтесь сделать так, чтобы работать можно было с двумя (например, с MySQL и H2), т. е. чтобы приложение можно было запустить со встроенной базой данных.

И так далее. Поизучайте гугл и форумы — обязательно найдете примеры заданий. Постарайтесь не забыть использовать Maven и в нем — плагины типа maven-jetty-plugin, чтобы приложение можно было максимально легко продемонстрировать, если попросят. Очень настоятельно рекомендую. Не забывайте сопровождать тестовые задания пояснительными записками.

Будьте грамотны или используйте spell-checker.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Статья в целом по делу.

Добавлю только, для начинающих:
куда бы вы не пошли, будет тоже самое.
почти везде — веб. неважно чем вы его будете генерить — HTML-CSS-JavaScript — учить придется. как и способы его генерации в выбранном мире языка программирования.

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

Системное окружение — тоже придется изучать. Не Maven так Composer. Не Composer, так RubyGems. не RubyGems так Cabal

так что выбирая — не пугайтесь мира Java. он везде такой, просто в других мирах принято «обманывать» новичков, мол у нас не как в джаве :)
кривая вхождения, да, разная. на php можно что-то делать сразу, пусть и код будет для пополнения говнокод ру
на Scala, Haskell — придется прочесть и вникнуть в парочку серьезных работ по типизации в ЯП

но в любом случае — везде будут свои заморочки, совсем нелогичного свойства («этого понять невозможно, это нужно зазубрить. просто исторически там сложилось»)
в тех же плюсах — придется вникать в опции компилятора для генерации кода для исключений, потому что их несколько реализаций, несовместимых. плюсовики о такой (р|г)адости промолчат обычно :)

Ну так и есть, как автор написал: приходишь на собеседование на позицию java junior, и тебя спрашивают по java 1,5 часа, а перед этим еще часа 2-3 по HTML,CSS, JS, SQL и тп. Вы хотите быть Java девом? А ну ка сверстайте мне на листике в клеточку нам интернет портальчик. Как не можете? Вы же Java dev! Мы ж вам готовы платить 300 уе в месяц! А покажите мне одним пальцем 400!
Тем кто только готовится учить Java: Java dev должен знать все не связанное с Java, и только потом уж java :-)

Возможны два варианта: либо вы случайно подали себя на позицию Java Developer, либо попали в неадекватную организацию. На Java dev вы все должны уметь что описали. На trainee — нет. Попробуйте пойти в первые 5 из ТОП-25 DOU и укажите позицию trainee.

HTML,CSS, JS, SQL
Базовые вещи, кроме JS, его можно копать до бесконечности.
А покажите мне одним пальцем 400!
Это вас спрашивали в одной из харьковских контор, угадал? :-)

Угадали! По поводу trainee... на Эту позицию... все то же + еще нужно и иняз закочить!

А покажите мне одним пальцем 400!
А как, или тут какой-то подвох?

Это нерешаемые задачи. Работодателю интересено на сколько человек нестандартно мыслит. Я как раз только «За» такие задачи. Смысл набирать одинаково мыслящих людей? Я написал ручкой «400» на среднем пальце левой руки и продемонстрировал интересующемуся. Вот только не знаю правильно ответил или нет:-)

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

«Если мы с тобой мыслим одинаково, то кто-то из нас не нужен».

Конечно. А уж если СТО мыслит как программист — то без него ваще отлично будет.

И это правда, надо же кому то фильтровать дебильные вопросы для собеседований, хотя бы технические. Особенно если и собеседовать еще приходиться самому

Мы ж вам готовы платить 300 уе в месяц! А покажите мне одним пальцем 400!
400 у. е. в месяц одним пальцем? Запросто!

По мотивам грузинского анекдота:

— Папа, я хочу учить Джаву!
— А ты знаешь питон?
— Нет, — сказал парень и ушел.
*через полгода*
— Папа, я хочу учить джаву!
— А ты знаешь пхп?
— Нет, — сказал парень и ушел.
*через год*
— Папа, я хочу учить джаву!
— А ты знаешь С++?
— Да, я знаю С++, питон, пхп, sql, и хаскель!
— ну и нахер тебе джава?

я тоже этого понять не могу.

Java как ЯП — проста.
Учебников, именно для студентов, ИТ предметов, полно.
в которых рассказывается о компьютерном программировании, а примеры для лабораторных работ на — Java

есть да, забобоны что Java не должна быть первым ЯП.
ну, рациональное зерно в этом есть.
первым языком должен быть Smalltalk!

но, это если мы обсуждаем — учебный курс для ВУЗа.

а если человек самостоятельно решил изучить, вечарами, после работы, то «академически правильно» у него займет с десяток лет :)

ИМХО, сейчас начинать изучение программирования «самому» стоит с js: открыл консоль браузера и вперед. Да и сам язык довольно прост.

К тому же такое знание не будет мертвым грузом.

Однако это к изучению программирования «вообще». А если цель — учить джаву, то лучше с джавы и начать.

Да и сам язык довольно прост.
Это если по верхам. А если начать вникать — джава будет нервно курить в сторонке.

А в этом самая прелесть. Ты можешь начать с простого и постепенно наращивать сложность. Так же учатся, да?

Нет. Будет слишком много необъяснимой мистики.

Что значит нахер, Папа?
Я просрал все детство изучая програмирование!
Но теперь я уже взрослый и мне хочется ip@tsa!!!

Очень хорошая статья. В принципе все что написано на 90% совпадает с личными наблюдениямию Java учится легко. Кому тяжело то идите в другие отрасли где будет легче. По джаве куча материалов разве что ВВС Radio не работает. Если есть способности за год-полтора можно достичь уровня джуна при занятиях не менее чем 10-12 часов в неделю. Указаный выше стэк можно прослушать на курсах за 4,5 месяца, но скажу сразу как минимум полученные знания надо попробовать применить самому по 2-3 раза как минимум это 6-8 месяцев с тем же уровнем занятости. Но все это при условии что вы понимаете что такое программированние и у вас способность к самообучению (без нее даже не думайте тратить на все это свое время). Патерны, базы данных системы сборки, репозитории, континиус интегрейшен, верстка, джаваскрипт+хтмль тоже прийдется ковырять так или иначе. Ну и английский устный +деловая переписка. Полтора года без отрыва от текущей работы и вы джун. Можете и быстрее если что-то из описасного у вас уже есть в списке. Можно и просто проскочить на собеседовании. Но не понаступав на грабли в каждом из описаного — будет не так просто, тем более задача не только устроиться но и удержаться

твой комментарий намного полезней чем эта статья)

Зачем Java когда можно прочитать книгу по пхп и на следующий день начать делать сайты на друпале

habrahabr.ru/...rt/blog/234003 мне показлось что там меньше яда...

Потому что есть минусы в карму. В итоге вместо критики вежливый ропот.

не согласен. там критика также часто «лайкается»

Учу Java для автоматизации тестирования ПО. Данная статья для меня как демотиватор )

Видимо снобизм senior-ов из дата-арт зашкаливает. Пруф: dou.ua/...ollarov-bolshe (перл сеньйора с 2-мя годами ОР на тот момент)

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

написали бы лучше про интернатуру в вашей компании

МНЕ было интересно и надеюсь станет полезно.

Аха-ха. Хитер, ой хитер Родион. Так жестоко будущих конкурентов запутать.
Короче, джуны, что не осилили простыню жизнеописания, вот вам короткая выжимка:
1. Вы имбецилы, поэтому даже простую как бревно Джаву не поймете, сначала надо выучить Питон.

2. Если вы оказались настолько имбецилами, что после изучения питона не пошли работать, а решили учить теперь Джаву, то берите SE (чистый SE хоть кто-то юзает?) и 6-9 месяцев хреначте не пойми что. Ну, фигню всякую. Кстати, IDE юзать нельзя, а то за месяц управитесь.

3. Ещё не сдохли от голода? Ну тогда надо учить веб. Не, выж имбецилы(походу это лейтмотив), EE сразу не потянете. Идите учить Похапе.

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

Итого, года через три, если вы ещё не плюнули, и не пошли работать в Ашан, вы сможете сходить на первое собеседование.

Ну может автор не спешил с изучением :)

О, перепис 23-річних сеньорів у лайках.

Можливо, усе-усе тут правда — Родіон не розповідає про свої особистісні характеристики ( Здрасті, я — флегматик, інтровертний інтроверт, IQ = 100500 і т.п.) . «Складно звонишь» — як казав один кіногерой Джигарханяна, але ось у цій темі dou.ua/...ms/topic/10713 не так давно чоловік збирається на позицію джава-практиканта САМЕ в DataArt і дуже переживає за свій інгліш. А тут — на тобі:

...надо подтягивать английский. Хорошие новости, впрочем, в том, что английский для нужд программиста — пара сотен слов и общие представления об азах школьной грамматики: два настоящих времени и страдательный залог.
Це і є рівень не нижче intermediate?

Ещё раз, как личный путь — нет вопросов (хотя и ничего необычного — классическая болтанка в поисках призвания).

Но как совет — бред чистой воды. Все равно, что ехать из Киева во Львов через Одессу, с заездом в Харьков

9 месяцев на Java SE еще и без Concurency, имея несколько лет опыта в С и опыт С++? Ооооххх

а что это СЕ ? кажись на базовый курс жава со стендфорда где в конце нада написать соц сеть у меня ушло 3 недели включая все лабы. Тока я не знаю это было СЕ или не СЕ

чистый кор. Синтаксис да фреймворк коллекций. Ну и че там еще. 9 месяцев на это потратить — это надо очень не хотеть учить

Почему бы просто не скачать туториал по руби и через неделю колбасить наравне с Java сениорами?

Есть еще короткая и более структурированная дорога:
1.Почитать что требуют компании для поступления к себе на интернатуру.
Читать здесьи здесь
2.Подучить требования.Обычно там не сильно много,допустим, чтобы пройти обучение в NetCracker,по той же джаве,нужны базовые знания ООП и баз данных.
3.Выложиться на интернатуре на 200% и получить свою первую работу.

это конечно все хорошо) но что делать дальше? Как войти? Такое впечатление, что новички сейчас никому не нужны, всем подавай мин. 1+ экспирианса, а где его взять? замкнутый круг...

В інтернатуру же ж!

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

Извините, можно поинтересоваться, чем она будет полезна?

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

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

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

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

P.S.: Если же Вы спрашиваете с колокольни академии, то, имхо, лучшим мотиватором для меня был бы получить первую работу по окончании. Но я знаю, что наши курсы сейчас и близко этого не дают, а вот на незнающих реалий жизни новичка, будет работать.

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

Подписаться на комментарии