27 ноября 2013 в 01:16

Путь к Java Junior Developer из песочницы

Java*


Здравствуйте.
Меня зовут Кислин Григорий. В начале ноября в Санкт-Петербурге закончился первый обучающий семинар «Java. Базовый курс», сейчас переименнованый в «Java. Junior Developer. Интенсив». Хочу поделиться с Вами полученным при его проведении опытом на тему обучения Java а также своим опытом трудоустройства на позицию Java разработчика.

Изучаем Java


Изучить Java — понятие абстрактное. Необходимо уточнение. Изучить все классы Java — нереально, точно так же, как и наиболее востребованные библиотеки для Java. Изучить синтаксис Java — проще. Достаточно прочитать книги по Java, например, классиков:
  • Брюсь Эккель «Философия Java»
  • Герберт Шилдт «Java. Руководство для начинающих»
  • Кея Хорстманна «Java 2»
  • Кен Арнолд, Джеймс Гослинг, Дэвид Холмс «Язык программирования Java»
  • Джошуа Блох. «Java. Эффективное программирование»

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

Вторая вещь после синтаксиса языка — наиболее часто используемые API. На начальном этапе это сервлеты, JSP, JDBC, JUnit.

Затем идет вещь, нужная любому программисту (не только Java) — кругозор. Сюда относится SQL, XML (xsd, xslt, XPath), HTML, JavaScript, Unix shell и пр.

Наконец, инструменты разработки. Общие: отладка в браузере (например firebug для FF), системы багтрекинга и контроля версий, СУБД, инструменты CI и Java: Ant / Maven, веб-контейнеры/серверы приложений.

И, как говорится, last but not leastIDE: создание проекта, кодирование, рефакторинг, дебаг, деплой, тестирование. Насколько вы им владеете, настолько быстрее, проще и качественнее будет ваш проект. По IDEA рекомендую познакомится с роликом Эффективная работа с кодом в IntelliJ IDEA.

Практика


Хорошо учится язык в процессе написания приложения среднего объема. Особенно если стараться писать его правильно- т.е. ~70% времени гуглить на тему лучшего решения каждой локальной проблемы и лучшего варианта кода. Для поиска особенно рекомендую ресурс stackoverflow.com, в ответах которого нужно будет отделить зерна от плевел. Особенно хорошо, если это не абстрактное приложение, а что-то нужное. Или, например, тестовое задание на работу. Вам круто повезет, если Вы знаете предметную область, хороший программист и Вас готовы взять на работу без опыта в Java — тогда Вы получаете опыт а вам еще за это платят. Здесь интересная классификация работы, зарплаты и получаемого опыта. Я бы только не стал сводить все к деньгам и карьере. Когда наберетесь опыта и будет возможность выбирать, можно кодировать для себя, для удовольствия. Ну и выгодно продать себя — это тоже часть игры в программирование, мера вашего профессионализма.

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


Совсем недавно на Хабре опубликовали хорошую статью про собеседование с позиции работадателя. Там тоже люди:) и чем более человеческие отношения у вас сложаться с собеседующим — тем больше шансов на успех. Ну и вообще — останется приятный осадок. Однако есть и такие собеседования, с которых я бы ушел с чувством, что мы мало подходим друг другу и хорошо, что мне не придется работать с таким начальником. Наконец, как только почувствуете достаточную уверенность, ходите на собеседования! (для людей с опытом, я бы еще добавил исследование рынка с позиции архитектуры, решений и технологий, с частотой пару раз в год и на позиции которые действительно интересны). Причем старайтесь из каждого вынести максимум. Если не знаете — не стесняйтесь поинтересоваться правильным ответом.
После собеседования сразу садитесь за гугл до полной ясности и не сидете сложа руки, ожидая результата. Продолжайте заниматься тем же, что и до него: обучаться и ходить на следующие интерью. Относитесь к этому как к процессу. В случае, если ответа не дали в означенный срок, не стесняйтесь позвонить и поинтересоваться результатом. В случае, если у Вас есть email собеседующего (например вам прислали тестовое задание), и вразумительного ответа от HR не дождаться, можно поинтересоваться результатом напрямую. Разумный срок для пингования — раз в неделю. Я где-то полтора месяца, ничего особенного не ожидая, раз в неделю сначала звонил, а потом переписывался с Yota. В результате меня передали в другой отдел, где условия оказались лучше тех, куда я изначально собеседовался.
При этом, все таки, основа любого собеседования на позицию Java-разработчика это ваши знания: общее понимание сути программирования вообще, java в частности и специфические вещи java. Например: «Сколько экземпляров синглетона может быть в одной JVM?» (необходимо произнести ключевую фразу- зависит от ClassLoader). Вот пример вопросов на собеседовании по коллекциям. Причем это далеко не все вопросы. Меня, например, спросили- почему берется не просто хэш ключа, а в нем еще перемешиваются байты? Вопрос скорее на общее понимание работы HashMap и сообразительность, ответ можно посмотреть в реализации HashMap. Конечно, все вышеперечисленное не потребуют от Junior. Но чем больше знаний у Вас будет — тем выше Ваши шансы.

Итоги


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

  • Преподает программист. С вопросами и задачами из собеседований и знанием Java не только по книжкам.
  • Практика. Лучше всего, когда на протяжении курса разбор теории идет вместе с разрабатываемым приложением.
  • Работа в IDE (пишу, потому что видел на YouTube курсы java в notepad).
  • Охват. Максимальное количество тем за отведенные часы (кроме собственно Java выделю важные темы: работа с XML, SQL/JDBC, сервлеты/JSP, JUnit). Конечно, не в ущерб пониманию.
    Для этого чаcть несложного материала (синтаксис, операции, типы, управляющие конструкции) слушатели изучают самостоятельно (и бесплатно).

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

Если Вы собираетесь (или продолжаете) изучать Java, то надеюсь, что Вам было небезинтересно:).
Спасибо.

PS: Перепост из песочницы, куда я попал за ссылку на курс. Отдельное спасибо пользователю Хабра, возвратившему мне инвайт.
Григорий Кислин @gkislin
карма
18,0
рейтинг 0,0
Ведущий Java Enterprise тренингов
Самое читаемое Разработка

Комментарии (14)

  • +7
    о чем это?
  • +1
    Рисунок в начале поста отжигает.
    Почему радиобатоны, а не чекбоксы? Удалить 2 резюме нельзя?
    Чем отличается кнопки «Смотреть»/«Редактировать» от ссылки на поле ФИО? Там нельзя посмотреть и/или отредактировать?
    Судя по картинки — ни один батон не выбран, но при этом кнопки «горят», говоря о возможных действиях, допускаю что батончик отмечен ниже, но в данном случае придирка уместна.
    Поле ФИО называется «Имя». Бордера у 0 столбца нет.

    И последнее: Что за браузер с архаичным плагином дополнительной строки поиска с поисковиками?
    • НЛО прилетело и опубликовало эту надпись здесь
    • +3
      Рисунок в начале поста отжигает.
      Почему радиобатоны, а не чекбоксы? Удалить 2 резюме нельзя?
      Чем отличается кнопки «Смотреть»/«Редактировать» от ссылки на поле ФИО? Там нельзя посмотреть и/или отредактировать?
      Судя по картинки — ни один батон не выбран, но при этом кнопки «горят», говоря о возможных действиях, допускаю что батончик отмечен ниже, но в данном случае придирка уместна.
      Поле ФИО называется «Имя». Бордера у 0 столбца нет.

      Ох эти junior'ы :)
    • +1
      Наверху- скриншот разрабатыемого на курсе приложения. Радиобаттон- потому что нет множественного редактирования.
      • 0
        Так правильно же не так.
        Нет множественного редактирования? Уберите кнопку «Редактировать» и делайте данную возможность при редактировании элемента.
        А в данном случае получается что нет и множественного удаления элементов.

        Исходя из приложения — курс не учитывает UX, UI… Даже наоборот.
    • 0
      И последнее: Что за браузер с архаичным плагином дополнительной строки поиска с поисковиками?

      Это некропостинг. но не сдержался: как можно не узнать огнелиса?
  • +1
    Брюсь Эккель «Философия Java», как мантру называют в ответ на вопрос что почитать про Java.
    ИМХО именно с этой книги начинать не стоит.
    • 0
      Помню когда изучал- мне нравилась. А счас проглядел — многие вещи достаточно мутно написаны. Что порекомендуете?
      • 0
        Чтобы вы понимали, я в качестве хобби решил изучить Java, и не считаю себя даже junior. Философия очень хорошая и полезная книга. Но прочитав примерно половину, я понял что нужен более практический подход. «Полный справочник по Java 7е издание». Герберт Шилдт.
        Читаю вообщем-то по диагонали, потому что в свое время уже было много прочитано по Delphi и фортрану.
        По плану прочитать «по-быстрому». Начать писать. В процессе возвращаясь к книге, чтобы теория не отходила от практики. А потом… прочитать философию и переписать еще раз.
  • 0
    «Сколько экземпляров синглетона может быть в одной JVM?» (необходимо произнести ключевую фразу- зависит от ClassLoader)

    Это неверный ответ, вы тут подразумеваете «синглтон» как «единственный экземпляр класса в класслоадере». В более общем смысле: «In software engineering, the singleton pattern is a design pattern that restricts the Instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system» (из Википедии).

    Иными словами, синглтон — это паттерн, а вот реализовать его можно по-разному. Например, через статические классы. Или через enum. А можно и через Spring (там, кстати, по умолчанию все бины — синглтоны). Еще бывают кластерные синглтоны (когда существует единственный экземпляр объекта на кучу JVM).

    Про перемешивание байтов в HashMap не знал. С другой стороны, за 10 лет программирования на Java не встретилась ни одна задача, где подобное знание пригодилось бы.
    • 0
      Синглетон- паттерн, реализовать можно по разному — совершенно согласен.
      Если говорить про обычный (статические классы, enum, Spring) — то их количество в JVM зависит от того ГДЕ вы их инстанциируете. Простейший пример- в веб-контейнере в каждом war может быть по своему экземпляру синглетона. В чем по вашему ответ неверен? И какой будет — верный?
      • 0
        Правильно, синглетон — это единственный экземпляр в каком-то контексте. Контексты бывают разные — например, весь JVM, либо classloader, либо веб-контейнер. А может быть и http request, например. Или Thread. То есть вопрос «Сколько экземпляров синглетона может быть в одной JVM?» изначально лишен смысла, пока не указан контекст.

        Класслоадер — один из контекстов. А может быть и Spring. Можно загрузить несколько спринговых контекстов внутри одного класслоадера — а внутри каждого контекста будет свой синглтон.
  • 0
    Автор прав, практика довольно востребована сейчас, особенно на фоне огромного кол-ва теоретических кусов.

    Можно попробовать пройти Java практику на этих встречах. Сейчас они принимают регулярную форму.
    Более структурированный формат делают в командном Java обучении

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