Пособие для будущего Java разработчика. Основы Java

Disclaimer. Эта статья не претендует на то, чтобы быть истиной в последней инстанции. Эта статья — квинтэссенция личного опыта автора. Автор путем проб и ошибок, путем синяков от собственных граблей, велосипедов и хеллоувордов сам прошел и проходит и дальше через этот ад под названием саморазвитие. Не пытайтесь повторить это дома. Haters gonna hate. Элвис жив.

Впервые пишу статью, поэтому попытаюсь объяснить все максимально доходчиво. У каждого программиста — не важно, Java или любого другого языка — есть шанс оказаться в конце паровоза. Если перестаешь учиться, читать книжки, туториалы и смотреть курсы — рано или поздно придет момент, когда ты поймешь, что уже ничего не соображаешь ни в новых фреймворках, ни, тем более, в нововведениях последних версий Java (бей тревогу, если тебя уже пугают лямбда-выражения и stream API в Java 8).

Как-то тихим субботним вечером ко мне в skype постучался старый приятель, который 2 года назад устроился джуном, и сообщил мне «приятную» новость о том, что он уже метится на сеньора. В нашей славной СНГ уже и 19-летние тех. лиды — не редкость, поэтому меня эта новость особо не удивила. Я поздравил с его намерениями и попросил прислать код любого домашнего проекта. Ну, а дальше вы, наверное, сами догадываетесь...


Поэтому эта статья для тебя, мой дорогой друг, и для всех тех, кто хочет как минимум стать уверенным junior/middle разработчиком. У меня не было ментора, но были хорошие люди в проектах, которые помогали советами и best practice. Этот путь, мой юный падаван, каждый должен пройти сам.

Сегодня я расскажу про саму Java. Когда человек пишет в резюме, что он знает Spring, Hibernate и еще тучу других фреймворков, меня инересует скорее то, насколько уверенно он плавает в самой Java. Эта информация всегда в приоритете.

Beginner

Я не пытаюсь с пеной во рту доказывать, что нужно помнить каждый метод I/O API, как «Отче наш». Куда более важно понимать, как организована ООП-составляющая Java.

Брюс Эккель — настоящий эстет этого дела, он достаточно увлеченно, со всеми нюансами и тонкостями описал это в своем труде «Философия Java» (и не только ООП!)

Когда я был еще сопляком интерном и ревностно смотрел на то, как многие коллеги пишут прекрасный код, мне все советовали «Философию Java» Брюса Эккеля. Для человека, который вообще пытался понять, какая же Java красавица, мне было сложно оценить ее величие в кругу философов. Я чувствовал, что нахожусь в кругу взрослых. Вроде бы и понимал верхушку айсберга, но чего-то постоянно не хватало. Мне на помощь пришел старый добрый Хортсманн, который хорошо был переведен на русский язык. Поэтому для любого начинающего Java разработчика, на мой взгляд, двухтомник Хортсманна — самое идеальное пошаговое руководство. Есть еще Шилдт. Выберите любой для вас удобный вариант.
(кстати, серия книг Хорстманна «для нетерпеливых» — очень интересная, рекомендую)

Как правило, эти книги советуют любому начинающему. Еще есть небольшие туториалы от самой Sun/Oracle.

Это всё понятно, но у меня есть кое-что на десерт. Сама жемчужина познания Java, как это ни удивительно, совсем рядом. Более того, я, с чувством гордости и небольшой ухмылкой, скажу вам, что это знание находится прямо перед вашим носом, сразу после того, как вы установите ваш первый JDK. Угадали? Имя этой жемчужины — src.zip. Грубо говоря, сорсы ☺. Исходный код Java SE. Да-да, именно, лучший способ изучения Java — исследовать элегантные sources самого языка.

Более того, я открыто заявляю, что именно sources в Java помогут научить:
— писать красивую и понятную документацию
— писать приятный и чистый код
— понимать best practices и паттерны, которые используются повсеместно в JDK. Стоит только вспомнить Декоратор, который применяется в java.io
— ну и, само собой, прикоснуться к таким легендам Java-вселенной как Brian Goetz, Joshua Bloch, Doug Lea, непосредственно изучая их код в JDK, и т.д

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

Вы также можете углубиться в изучение Java, если попросту будете использовать ваши примеры в Debug режиме. Наблюдая в дебаггере вашей любимой IDE за структурой объектов и потоков, которые будут выполняться в ваших примерах из книжек, вы можете существенно улучшить свое понимание внутренних процессов.

Super Low Level

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

Стыдно признать, но так было и со мной — читая «Философию Java» 7 лет назад как первую книгу по Java, я думал, что нахожусь в дремучем лесу, не зная его. Я был тревожен и переживал, что, программирование — это не мое. К счастью, мне посоветовали youtube канал одного парня, который рассказывал о программировании на java с самого нуля. Это канал — theNewBoston, и вот плейлист его курса. Можно еще попробовать курсы от Lynda.com.

Ну, и самое элементарное, что мне приходит сейчас в голову (кроме детских книжек по программированию) — это серия подробно иллюстрированных книг по разработке Head First от O’Reilly и сама книга «Изучаем Java» (Head First Java).

Если это вам тоже покажется непонятным, тут два варианта: либо вы плохо стараетесь/не хотите стараться понять/изучить, либо я разговариваю с котом (:

Intermediate

Давайте наберемся храбрости и попробуем спуститься на уровень ниже. Если бы на собеседованиях спрашивали только основы по Java, мир состоял бы исключительно из добрых людей, верно? Но увы, это не так. Боюсь, ответив тишиной на вопрос «Что вы знаете о CountdownLatch?», вы не произведете должного впечатления. Кто-то плюнет в монитор и скажет, что никогда и не использовал этот-как-его-там-Latch и знать не знает, что это такое, а работает уже сеньором, и, может, будет прав. Но давайте попробуем быть честными в первую очередь по отношению к себе и попытаемся пролить свет на следующий интересный момент в карьере каждого разработчика.

Есть ли смысл учить что то новое, если это не используется в проекте?

Поверьте, таких ребят больше, чем вы можете себе представить. Пройдя интервью и попав на работу джуном/миддлом, наш экспонат просто-напросто расслабляет булки сразу после того, как внедряется в работу. Может быть, всё было бы так, если проект — это 24/7 система по охране китайской стены. К сожалению, жизненный цикл любого «современного, не такого как у всех, супер интересного» проекта у разработчика не длинной в вашу жизнь. Сразу после того, как проект закроется и ваше самолюбие вылетит из уютного бизнес-центра с печеньками и приветливой девушкой на рецепции, наступит «легкое похмелье», и далеко не от того, что вы перебрали прошлым вечером, а от того, что поймете, что вам потребуется куда больше времени, чтобы подговиться к следующему интервью, где в требованиях будут присутствовать уже новые фреймворки и тайные стороны Java, о которых вы даже и не догадывались.

Как кто-то сказал на DOU, что если бы мы питались от фотосинтеза... Сколько же было тогда настоящих developer’ов?

Намного легче людям, которые глубоко копают, и тем, кто постоянно учится по вечерам и в перерывах на работе, и еще куда легче тем, кто ловит от этого чистый кайф (true programmer). Да, жена/девушка будет страдать и ставить ультиматумы: я или ноутбук, тут вы уже сами должны решить и подходить к этому ответственному вопросу сбалансировано (хорошо, когда девушки это понимают — этот бокал вина за вас!). Именно такие черты как любознательность и трудолюбие помогут вам не отставать от стремительно летящего по рельсам паровоза технологий, о котором я говорил в начале статьи.

English

Немного про английский. Все книги в пункте «Beginner» были переведены на русский. Я хотел поднять эту тему в отдельной колонке, но все-таки решил оставить именно здесь. Ведь после прочтения основных книг, которые, прошу заметить, не всегда изобилуют прекрасным переводом, у многих начинается легкая паника: английский они знают недостаточно хорошо, чтобы читать и понимать техническую документацию/книги по Java и не только, а они есть повсеместно в интернете.

Но что, если я скажу вам, что ваша проблема — это не английский, а самая обычная...лень? Именно, вы просто невероятно ленивы и не верите в свои силы, чтобы оставить в сторонке прекрасные труды, которые вряд ли вообще когда-либо переведут. Так что встаем с кровати, берем самый обычный словарь, заводим тетрадку (для портативного варианта: Google Translate и notepad для записывания слов). Открываем книгу любой сложности и переводим со словарем (если ваш английский невероятно слаб, переводим каждое слово).

В начале процесса вы подумаете: «Господи, да я годами буду читать эту главу, пойду лучше поиграю в доту!». Осмелюсь сказать вам, что черепаший темп не будет длиться вечно, когда-то память и опыт возьмут своё, и вы осознаете, что без труда прочитали тот или ной абзац. Другая сторона медали заключается в том, что переводят у нас с опозданием. Без английского вы лишены возможности черпать актуальную и свежую информацию.

Прошу вас вбить следующее в голову тремя восклицательными знаками: английский — это MUST для айтишника любого профиля и просто для человека, который живет в 21 веке. Это — ваш путь роста в сфере Software Engineering и даже больше. Другого варианта попросту нет. Не тешьте себя самолюбием, что вам Хортсманна достаточно. Придет момент, и вы столкнетесь с задачей, о которой не знаете ровным счетом ничего (это у всех бывает) и в переведенных книжках об этом не написано. Могу еще добавить, что Философия Java Эккеля куда приятней читается именно на английском. Это относится абсолютно ко всем книгам. Английский должен стать вашим вторым языком после родного. Ну, а третьим, само собой, — Java :)

Concurrency

Раз уж мы вспомнили про CountDownLatch. Тема многопоточности поверхностно освещенна практически в каждом источнике, который я привел выше. Но достаточно ли хорошо? Конечно, нет. Сталкивались ли вы с моментом, когда не понимали, как ваши старшие коллеги так искусно работают с потоками, разрабатывая непонятные вам конструкции с применением java.util.concurrent.* библиотек? «Опыт», — скажете вы, и будете правы. Вот только подобный опыт строится на хороших знаниях фундаментальных основ этой области. Мой коллега по цеху Bogdan Shyiak почти год назад написал хороший дайджест по Concurrency, который до сих пор не потерял своей актуальности. От себя лишь добавлю опыт знакомства с многопоточностью.

Вы можете прошерстить package java.util.concurrent.* и попробовать применить на практике большую часть API, которую вам предлагают — и, наверное, это будет самый оптимальный и быстрый способ познать concurrency. Лично я больше искал опыт и подачу, которые с лихвой покрывались в книжках, которые я опишу чуть ниже.

Да-да, «Concurrency In Practice!» — крикнет кто-то из-за угла. — «Что еще надо?» Боюсь, что она была слишком сложна для меня в качестве первой книги по многопоточности. Именно эта проблема терзала меня первое время, было невероятно сложно найти оптимальную книгу для начинающих по Java Concurrency, чтобы объяснили практически с нуля. Я удивлю вас, но я нашел ее. Это Java Thread Programming by Paul Hyde. Не смотрите на то, что книга 1998 года. Наверное? это самый лучший вводный курс по работе с потоками, автор достаточно серьезно разжевывает и раскладывает по полочкам сложные вещи и уходит немножко дальше, за горизонт.

Давайте идти от простого к сложному. Дальше идет Concurrent Programming In Java by Doug Lea. Я настоятельно рекомендую вам познакомиться с ней сразу после первой книги. Дуглас Ли, Профессор Computer Science, популярный в Java Community, стремительно погружает вас Concurrency API и буквально на примерах легко показывает все нюансы. (Ах, как элегантно написан Семафор под его руководством — java.util.concurrent.Semaphore!)

Ну, а затем уже идет многим знакомая книга «Concurrency In Practice», написанная Brian Goetz. Пожалуй, самая популярная по рекомендациям книга после Effective Java. Много про нее говорить не буду, скажу лишь, что это сборник лучших best practice и рекомендаций. Как говорится, must have.

Замыкая круг книжек по многопоточности, я порекомендовал бы Art Of Multiprocessor Programming by Maurice Herlihy, которая, на мой взгляд, должна быть в самом конце списка ввиду ее глубины. Все примеры написаны на Java с кучей задач после каждой главы и иллюстраций, отличный самоучитель и задачник. Рекомендую вам купить ее в печатном виде, блестящая книга!

Collections

Про коллекции много не напишешь, тем более, изучив внимательно основные интерфейсы List/Set/Map, можно иметь уже основное представление о том, как работать с ними. Оставлю для вас, дорогой читатель, несколько рекомендаций. Желательно идти ровно в том хронологическом порядке, который указан здесь:

Сначала пройдите Sun/Oracle туториалы по Collections API

Затем, на хабре есть прекрасная серия статей про коллекции в картинках: ArrayList, LinkedList, HashMap, LinkedHashMap.

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

Java Generics and Collections by Philip Wadler:

Вторая — Java Collections by John Zhukovski:

Хорошим советом является использование временного счетчика в процессе изучения коллекций. Используйте System.currentTimeMillis(); для того чтобы понять, к примеру, насколько быстрее работа с массивом по сравнению с обычным ArrayList и почему? Используйте этот инструмент в каждом примере, заодно и исследуете нюансы производительности в области коллекций.

Вот и всё для обучения Colllection API. Единственное, есть небольшая рекомендация: когда вы будете переписывать каждый пример, (а это очень важно для обучения каждой книги, где есть код) опять повторюсь, используйте это в Debug режиме. Отладчик вашей IDE очень наглядно показывает изменения в структурах данных. Perfecto!

I/O

В принципе, Брюс Эккель в «Философия Java» глубоко освещает I/O API. Добавлю, что каждому начинающему разработчику нужно обязательно попрактиковаться в следующем:
— создайте консольный квест с помощью использования Scanner
— попробуйте в своих мини-проектах манипулировать файлами и папками
— изучите паттерн Декоратор на примере Java I/O
— напишите простенькую базу данных (какие-то незамысловатые CRUD-операции через консоль)

Если по долгу службы вам необходимо детально использовать в проектах I/O, обратите внимание на книгу Java I/O by Elliotte Rusty Harold:

Это достаточно полноценный, информативный обзор I/O API.

Others

Я специально остановил свое внимание на Concurrency, Collections and I/O, потому что считаю их неотъемными компонентами Java платформы на любом проекте. Несомненно, в эту область также входит очень много нужных базовых библиотек. Я полагаю, что после прочтения вышеизложенных ресурсов у вас должно возникнуть свое виденье, как вам дальше изучать JDK — где-то глубже копнуть, где-то прикоснуться, а где-то высокомерно пройти мимо.

Давайте попробуем вскользь пройтись еще по нескольким: обязательно нужно изучить механизм работы Reflection API — по большому счету, вполне достаточно просмотреть исходники и первые туториалы с Google поиска на эту тему. Куда более захватывающее занятие — узнать, как используется Reflection API в Spring AOP.

Из книг я знаю только одну — Java Reflection In Action by Ira R. Forman. Приготовьтесь вспомнить/выучить UML для полного понимания.

По Networking очень кратко тут, и хорошая книга Java Network Programming by Elliotte Rusty Harold. По фундаментальным основам networking мы пройдемся в специальной для этого будущей части по Computer Science.

JDBC. Помимо Sun’овского туториала, есть еще и хорошая книга от них же. Это JDBC API Tutorial and Reference by Maydene Fisher.

Ну, и можно полистать под чашечку кофе Database Programming with JDBC and Java by George Reese. Помимо самого JDBC он касается таких JDK компонентов как Сериализация, JNDI, RMI, что тоже будет очень полезно.

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

Java 8

Наконец-то мы дошли до одной из модных тем. Очень много материала, который был рекомендован вам, относился к старым версиям Java. Учитывая backward compatibility, 95% информации актуальна и по сей день. В СНГ находится очень много проектов, которые еще не поддерживают новую версию Java. Возможно, это вопрос времени, но я со всей ответственностью готов заявить, что вам полезно, а иногда и просто жизненно важно изучить большинство вышеизложенных ресурсов для того, чтобы понять общую картину, да и хотя бы для того, чтобы просто понимать происходящее вокруг вас в проекте.

Для изучения нововведений я рекомендую прошерстить туториалы в интернете на тему Лямбда-выражений и нового Stream API. Кстати, тем, кому интересно Security — посмотрите, что нового появилось в восьмой версии.

Есть маленькая интересная книжечка «Лямбда-выражения в Java 8» Ричарда Уорбэртона:

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

Затем, можно плавно приступать к «Java SE8. Вводный курс» (она же Java 8 для нетерпеливых) Хортсманна.

Обратите внимание, что Кей Хортсманн не так доходчиво все объясняет, как в своем прошлом двухтомнике по изучению Java. Он просто знакомит вас с основами фичами Java 8 на достаточно быстрой скорости (изучили пример — перебежали на другой). Относитесь к этому как краткому мини-курсу.

Заканчивая обзор книг по Java 8, можно упомянуть Manning версию Java 8 in Action by Raoul-Gabriel Urma.

По моему мнению, это достаточная информация, чтобы спокойно смотреть на нововведения Java 8 в ваших проектах, особенно когда новые версии IDE автоматически исправляют некоторые старые решения на новые. (как нож в спину, не правда ли?!)

Видеокурсы

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

1. Юрий Ткач — «Java для тестировщиков».

2. Иван Головач — курсы по Java (к примеру, Junior Level)

Если у вас есть рекомендации по подобным курсам , которые могут быть полезны (например, JUG или Лекториум), я буду очень признателен если вы оставите их в комментариях.

Заключение

Вот я и заканчиваю первую часть цикла. Я считаю, что этого материала вполне хватит, чтобы познакомиться конкретно с Java, настолько близко, насколько это вообще возможно. Конечно, капот JVM не был освещен здесь, об этом, я думаю, мы будем упоминать в последних статьях серии.

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

Для тех, кто только ступает на путь Java программиста.

Внимание, минутка мотивации — читать под музыку из фильма Рокки.

Мой юный zero, отбрось все домыслы о том, твое это или не твое, из-за денег ты туда идешь или изменить мир, самый тяжелый момент в карьере будущего junior java developer’a — это впервые устроиться на работу после успешного собеседования (об этом мы будем говорить в последней, седьмой части моей статьи). Верь в себя, не слушай людей, которые говорят, что ты не потянешь. При грамотном подходе и невероятном желании/упорстве человек любого возраста и любой профессии может стать программистом (да и вообще космонавтом). В нашей стране всегда может быть плохо, экономика, разруха и так далее. Двигаться нужно не завтра или как только ты уволишься с прошлой работы, а сейчас! Удачи тебе и попутного ветра!


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

Большое спасибо за внимание.


Следующие части цикла:
— Пособие для будущего Java разработчика. Элегантный код.
— Пособие для будущего Java разработчика. Enterprise — часть 1.
— Пособие для будущего Java разработчика. Enterprise — часть 2.
— Пособие для будущего Java разработчика. Enterprise — часть 3.
— Пособие для будущего Java разработчика. Новые горизонты.
— Пособие для будущего Java разработчика. Собеседование и карьера.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному20
LinkedIn

Схожі статті




78 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Прикольна стаття, дякую! Я навчалася програмувати не прочитавши жодної книги, але вони справді корисні для вивчення java.
Можу додати, що для тих хто починає вивчати програмування, просто читати книги недостатньо. Потрібно по максимуму практикуватись! Брати книгу і старатись повторити те що там написано, та обов’язково виконувати всі запропоновані завдання, навіть якщо все здається зрозумілим.

Я не люблю читати (надіюсь я не одна така:) тому підібрала деякі ресурси для вивчення java, та прокачки своїх скілів. Експеременти проводила на собі, тому сміливо можна використовувати.

Це для початківців, які хочуть стати джунами (ознайомлення з мовою):
— www.w3schools.com/java
— www.youtube.com/...​jem48KXIy83YIm-QM6SwvzjQd
— www.codecademy.com/learn/learn-java

А це якщо ви уже майже джун, і хочете прокачати свої знання:
— courses.prometheus.org.ua/...​PAM/JAVA101/2016_T2/about
— www.codewars.com/dashboard (алгоритмічні задачки, повірте вони важливі)
— courses.prometheus.org.ua/...​etheus/CS50/2016_T1/about (досить популярний курс, підійде для будь-яких мов програмування)

Для крутих девелоперів, можу порадити почитати книги, які описані в статті. І приділити більшу увагу саме патернам програмування.

Гуд, и Вы высказались и падаванам крайне интересно. Полезно. Автора обнять и плакать ). Уф, как не просто стать мастером, а как хочется.

Класс, огромное спасибо!

Stanislav Lozenko посоветуйте пожалуйста платные курсы для начинающих по Java в Киеве.

К сожалению, могу посоветовать только менторинг, нежели курсы. Обратитесь, к примеру, к Сергею Немчинскому ( facebook.com/sergey.nemchinskiy ).

mate.academy
Крутая команда менторов с почти 100% результатом по трудоустройству студентов

Доброго времени суток! Спасибо за отличную статью. Я для себя хотел бы уточнить, является ли «Философия Java» и двухтомник Хортсмана источником исчерпывающей информации для джуниора или же необходимо выбрать из рекомендованной вами литературы что-то еще? Понимаю, что конкуренция среди неопытных очень большая и желательно знать так много, насколько возможно, но хотелось бы знать, какие книги являются минимумом для джуниора, с какими из них уже можно пробовать протиснуться куда-нибудь. Вы перечислили уйму литературы, изучение которой может занять огромное количество времени, хотя слышал про людей, которые за 3 месяца самоподготовки устраивались джуниорами :) Сам я читал, до того как прочел вашу статью, книгу Е. Е. Аккуратова «Знакомьтесь, Java», в этой книге о самой Java всего 80 страниц с кучей примеров... и мне казалось, что она достаточно неплохо описывает Java и дает чуть ли не исчерпывающие сведения о Java для джуниора... =) У Хортсмана объем двухтомника 1.5k страниц... У меня вопрос: «Чего же боле?!». :)

Обратите внимание на последнюю статью, а именно набор вопросов, который может быть на собеседовании. Одной книги не достаточно, чтобы устроиться на интересную работу. От джуниора требуют как минимум базовых вещей по Java/SQL/Spring/Maven и еще HTML/JS/CSS если это web проект. При этом вы должны нормально ориентироваться в Git or TFS or SVN, понимать как запустить билд на Jenkins либо TeamCity/Bamboo, писать чистый и аккуратный код, писать на этот код интеграционные и юнит тесты с использованием Junit or TestNG and Mockito/Hamcrest. Ах да, как насчет Linux еще :) ?

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

Спасибо за ответ! Простите за беспокойство, хотел бы задать последний вопрос. Многие говорят, что новичку лучше учиться программировать под Android. Что вы об этом думаете, насколько обоснованы такие утверждения исходя из вашего опыта ? Какой путь проще для новичка (web java или android java) и в каком из этих направлений проще реализоваться (хотя бы найти работу)?

Android конечно же легче, учитывая насколько урезан стек. По сути Java + SQL + Android SDK и смежные с ним технологии, может быть Gradle + Git и вы готовы. Проблема в том, что это совершенно другое направление. Обратите внимание на вакансии Android на DOU и почувствуйте разницу.

1. Стоит ли в нынешнее время учить Java для программирования под Android или уже лучше сразу браться за Kotlin?
2. Насколько сильно разнятся зарплаты у web Java и Android Java разработчиков (особенно джуниоров)?
3. Каковы основные негативные нюансы пути Android Java?
Благодарю.

Здраствуйте. А сколько примерено часов у среднестатистического человека ушло бы на обучение адекватного джуниора в Вашем понимании?

до 3-4 месяцев (8 часов в день), если при этом английский у вас в порядке

Господа, есть ли разница между 8м(2009 год) и 9м(2014 год) изданием «Java для профессионалов» Хортсмана ? Или разница только в годе издания?

9 издание ориентируется на Java SE7.

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

Начните с папки java.lang, а там дальше поймете.

Коментар порушує правила спільноти і видалений модераторами.

Хотелось бы порекомендовать один замечательный курс для начинающих от рок-звезды java программирования Якова Файна. Интересен он тем, что это 19+ часов видео лекций, которые ведут начинающего разработчика от азов до самых передовых концепций java программирования. Курс разбит на 19 уроков, каждый из которых сопровождается слайдами, которые можно скачать и изучать после прохождения видео части. В конце каждой лекции даётся домашнее задание и множество ссылок для углублённого самообразования, что превращает каждую лекцию практически в отдельный курс (при должном трудолюбии естественно). Также курс тесно интегрирован с книгой автора, которую он сам настоятельно рекомендует приобрести любым доступным способом: найти, украсть, одолжить, скачать, а в лучшем случае купить (благо доступны бумажная и электронная версии). В совокупности это создаёт очень широкий и полноценный курс, ведущий новичка практически «за руку» через тернии к звёздам. Еще один плюс в карму этому курсу: весь видеоматериал автора доступен на русском языке, но учебный материал (книга и слайды) на английском, что позволяет более мягко войти в терминологию ученикам, неуверенно плавающим в английском. Ну и моя любимая фраза Якова с его живого выступления в КПИ:
— Яков, с какого языка лучше всего начинать учить программирование?
— Начинать учить программирование нужно обязательно только с Английского и никак по другому

Ссылка на курс: www.youtube.com/...bZefB1_hhS68092rbF4HFtKjW

Надеюсь будет очень полезно!

Отличенейшая статья. Большое спасибо.

Один я читал под музыку Рокки?

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

Подборка отличная. Разве что, как по мне, то книга Шилдта практичнее Хорстмана(ИМХО), а «философия» непонятна начинающим. И в секцию выше junior-a добавил бы «Алгоритмы на Java» Седжвика.

ЗЫ. Интересует будет ли подобная подборка по топовым фреймворкам(типа тех же Spring, Hibernate) или какие азы нужно прочитать/посмотреть/изучить для java server-side разработчиков.

Конечно, будет! И алгоритмы, и frameworks и многое многое другое.

Господа, не торопите события :).

Вы так хорошо написали :) не пожалели времени — Спасибо!

Дякую, продовжуйте в тому ж дусі. Давно на DOU не було нічого цікавого для почитання :-) Повністю HR-ри окупували.

Погоджуюсь. Доречі було б непогано українською такий пост зробити

Ех...мне понравилось, честно, но я хочу Python..жаль нет таких замечательных статей про Python...

Моя дівчина теж шукає подібне на Пайтон! Може люди б згуртувались і самі таке зробили?)

А что вы скажете по поводу Java методы программирования, Блинова?
Я думал начать с неё, а потом уже пройти Философию Java.
Вот линк на книжежчки из ЕПАМ:
book.epam.by

Книжка честно говоря не фонтан, как для новичка. На фоне таких монстров как Эккель, Хорстман ну или теже Сиерра, Бейтз, смотрится довольно тускло, ну и сами объяснения в ней не так хороши.
Хотя некоторые темы в ней высветлены довольно неплохо — тот же XML(не надо лазить по просторам инета для поиска инфы по разным парсерам, всё собрано в одном месте).
Единственное её неоспоримое преимущество перед другими книгами, это наличие большого количества задач в конце каждой темы, решив которые ты гарантированно врулишь что к чему )
К сожалению в других книгах не встречал подобного объёма практики.
Так что идеально читать книги которые перечислил автор топика и параллельно прокачивать практические скилы по этой книги.

Статья отличная — спасибо! Очень актуально — при том огромном объеме информации, которую необходимо знать для работы джавистом, можно легко опустить руки на полпути, не достигнув цели. Такие наставления помогают держать ориентир.
Соглашусь почти со всем. И особенно — с чтением только на английском. Совершенно другой уровень понимания — очень часто читаешь одно и то же место на русском и на английском, и понимаешь, что в русском — полная фигня, совсем не в ту степь.
Из своего опыта добавлю — категорически не рекомендую Шилдта. Хорстманн на несколько порядков лучше.
И ещё — я начинал учиться по книгам, но чем дальше уходил, тем чаще обращался к оракловским туториалам. Немало сложных тем я не смог понять по учебникам, а вот доки по этим непонятым мною темам были просто откровением, открывавшими мне глаза. Не знаю, стал бы я начинать учиться только по документации, если бы мог вернуть время назад, но очень советую заглядывать туда почаще.
Вот и лямбды со стримами и DateTime API из 8-й джавы решил начать учить сразу по официальному туториалу — и не пожалел, неделя внимательного чтения и все разложено по полочкам. С ними сразу зришь в корень, реально очень понятно все преподносится, клубок распутывается постепенно и до конца. В книгах же и статьях авторы дают свой взгляд и обычно описывают тему на примерах, не давая такого подробного разбора внутреннего устройства, как это делается в официальных туториалах, чего и не хватает для полноты картины. Книги конечно же тоже нужно читать, но я бы к ним обращался уже после документации, для изучения best practices.

Блестящее начало, продолжайте в том же духе!

Отличная статья, спасибо! Буду её расшаривать друзьям, желающим стать джавистами.
Добавил бы ещё пару ссылочек: на доку Карьера Java: от Junior Developer до IT Director и на статью Путь программиста, чтобы будущие программисты сразу видели направления, в которых можно развиваться и заранее планировали какие скилы стоит качать.

Ух, прочитал на одном дыхании. Легко написано, спасибо Станиславу (и редактору DOU).
Книг на года 3 чтения :)
Из видео-курсов могу добавить из своей копилки Лучшие 13 Youtube каналов для Java обучения на русском
Конечно же, там есть два, упомянутых тобою.

Для будущего Java разработчика лучше учить Scala. Java ее пытается догнать по фичам, есть возможность изучить их заранее.

Ну уж точно не для будущего. Для действующего — да, Scala любопытно будет посмотреть.

А чому недостатньо офіційної документації ? Чи не краще почати вивчення мови з неї? Я трохи пробував вивчати Java по docs.oracle.com/javase/8, в принципі зрозуміти можна. Є переклад на Українську у uk.wikibooks.org/...юємо_Java/Об’єкти_і_класи Крім того на мій погляд зручно спочатку ознайомитися з javascript по learn.javascript.ru де усе максимально зрозуміло і читається як художня література

JavaScript простіше сприймається ніж Java (крім того на мій погляд він найпростіший з усіх мов програмування, з якими я стикався, навіть простіший бейсіка, тим паче паскаля, а що б почати програмувати на ньому достатньо браузера і т.п.), але і має деякі спільні риси з Java. Для людини, що не вміє програмувати починати одразу з Java думаю буде складно.

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

Спочатку треба просто навчитися програмувати, навчитися виправляти код, працювати з інструментами розробки і т.п. з Java на мій погляд початківця це зробити складно. Той же Android за допомогою developer.android.com/training/index.html дозволяє зробити це простіше (встановити IDE, налаштувати і тому подібне). Хоча мабуть перше що треба вивчити це HTML та XML.
А якщо людина вже вміє програмувати та працювати з IDE, бібліотеками, ООП і т.п., то достатньо документації на сайті Oracle.

Сергій, ніхто ніколи не буде читати офіційну інформацію. Вона занадто суха і без прикладів

Начинать с Прототипно ориентированого языка изучение программирование что бы потом начать учить ООП + Java? та Вы прикалываетесь.....

А читать книги лучше одна за другой или по чуть чуть с каждой?
Да и вообще тут книг читать года на 3.

ну я так понимаю, что читать все время нужно.

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

Запилите кто-то такую же по С++ :)

Хорошая статься. Сейчас изучаю Java и часто пропадает мотивация, потому что объем материала который нужно выучить огромный) Но все равно продолжаю обучаться.

точно такая же ситуация.

Автору БОЛЬШОЕ человеческое Спасибо!

Супер, просто супер статья! Автору +500 в карму!

Отличное руководство!
Жду продолжения по EE )

Странно, что не упомянута отличнейшая книжка «Алгоритмы на Java» Сэджвика.

Ніклаус Вірт «Структури даних і алгоритми» — тільки там на Паскалі всі приклади. Крута книжка

Спасибо! Мотивирует! Очень сложно найти первую работу...Но все получится.

В статье не хватает раздела практика. Книжек с практическими заданиями и ресурсов где можно практиковаться.
Так же я бы добавил, ссылку на Java Tutorials от Oracle для тех кто знает англ. и какой либо язык программирования и хочет быстро подойти к java ee:
docs.oracle.com/...javase-7-programmer1.html
docs.oracle.com/...javase-7-programmer2.html

сли у вас есть рекомендации по подобным курсам , которые могут быть полезны (например, JUG или Лекториум), я буду очень признателен если вы оставите их в комментариях.
Скиньте ваше мыло хоть в личку, хоть сюда, я пришлю ссылку на рекомендации по курсам.

Пишите сюда пожалуйста в комментарии, пусть это будет доступно всем.

По поводу JavaEE — это все будет дальше, наберитесь терпения, пожалуйста :)

Пошаговое руководство, которое оправдало себя, добавляет уверенности что ты идешь по пути истины.
В свое время начиная изучать Java очень сильно не хватало такой статейки.
+1 в карму.

Перечислено много книг, но не видно первоисточника — руководства по SCJP (Sun Certified Java Programmer), которой хватило бы, чтобы покрыть 80% вопросов по Java.

Спасибо, я ждал этого комментария. Как обладатель сертификата по SCJP, скажу вам, что это очень хорошие руководства — особенно книга под авторством Kathy Sierra.
Сертификация программиста будет подробно описана в следующих частях.

Яку книжку ви б радили прочитати першою: Шилдта чи Сьэрра та Бейтса?

Я бы порекомендовал бы Хортсманна , Том 1. Из Шилдта или Сьерра — Сьерра.

Супер, все отлично расписал!

Эта статья не претендует на то, чтобы быть истиной в последней инстанции.
Не пишіть такого. Для чого взагалі писати статті, якщо ти боїшся нести відповідальність за свої слова? І без того ясно, що стаття написана не Гослінгом.

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

Це у нас на генетичному рівні. Ми завжди пишемо «sorry for my bad english» на англомовних форумах, завжди пишемо "

статья не претендует на то, чтобы быть истиной в последней инстанции
при написанні статей. Це підриває віру в саму суть статті ще до того, як почав її читати.
Я ж не кажу, що сама стаття погана, але починати її зі слів виправдовування — не краща ідея.

Візьми і зроби. Простіше і ефективніше за все спробувати написати свої хороші статті, а не намагатись виправити чужі. Тим більше, що для виправлення чужих статей на ДОУ є редактор і літ. редактор.

підбірка книг загалом цікава, але я додав би ще одну — Joshua Bloch — Effective Java

Об этом немножко позже. Все таки цикл статей :)

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