Java для взрослых. Полная версия Назаров Алексей
© Алексей Назаров, 2021
ISBN 978-5-0055-5892-3
Создано в интеллектуальной издательской системе Ridero
Свои предложения, пожелания, замечания и вопросы по поводу книги Вы можете направлять мне на почтовый ящик [email protected]
Предисловие.
Блуждая в интернетах и натыкаясь на вопросы типа: «Мне уже за (можете подставить любое число, но не поверите, я встречал даже 26!!!) не поздно ли изучать Java?» я хотел кричать:
– «Друг! Если ты еще можешь попадать пальцами по клавиатуре, тебе не поздно!».
Я первый раз увидел компьютер в 22 года и мне даже дали на нем попечатать! Не могу Вам описать свои ощущения, когда я сидел около этого светящегося и шелестящего вентилятором чуда. У меня закипала кровь, я точно знал, что был рожден для ИТ, но жизнь распорядилась по-другому.
Теперь, когда я почти реализовал свою мечту и люди стали спрашивать меня, как правильно это делать я понял, что каждому не ответить, – нужно слишком много времени. Я решил, что напишу книгу, в которой постараюсь ответить на все вопросы людей, желающих стать разработчиками (программистами), а особенно на языке Java – на котором я пишу сам.
Я хотел назвать эту книгу «Java для тех, кому за…”, в общем вроде как не для молодых. И задумался: молодость – это когда тебе еще не «за…» сколько? Ответ пришел сам собой: эти «за» мы себе устанавливаем сами, а объективно их нет: есть только СЕЙЧАС!
Вот и ответьте себе сами: «Не поздно учить JAVA сейчас?»
Не поздно <подставьте что угодно> сейчас? Риторический вопрос, правда? И ответ понятный.
Эту книгу я писал, представляя тебя (прости за фамильярность, дорогой читатель), как самого себя: человека средних лет, пользующегося компьютером для составления документов и отчетов и периодически испытывающего проблемы с составлением таблиц в Exсel. Поэтому, возможно, где-то описания слишком подробные, через-чур утомительные. Тех, кто лучше владеет компьютером прошу набраться терпения и пролистывать такие слишком подробные описания.
Глава 1. Что нужно чтобы стать программистом
Здравствуйте!
Меня зовут Алексей, мне 44 года и уже год я работаю программистом. Эту книгу я решил написать, чтобы помочь людям, которые хотят стать программистами, но не знают с чего начать или уже изучают Java, но не знают куда двигаться. Эта книга своего рода ментор – она будет Вас направлять в процессе обучения вплоть до Вашего первого трудоустройства.
Самая большая проблема человека начинающего любую деятельность в отсутствии опыта. Конечно, это быстро и эффективно решается если есть наставник. Но не просто наставник, а человек разбирающийся в предмете и умеющий структурировать и приоритизировать информацию.
Таких людей не много и обычно они очень заняты и хотят достаточно ощутимую оплату за свое потраченное время. Когда я изучал язык программирования Java у меня такого ментора не было. Мне пришлось пройти путь в одиночестве и помогли мне тут 2 фактора:
1. У меня был 15-летний опыт планирования, благодаря которому я умею быстро отделять главное от второстепенного.
2. У меня был 9 летний опыт системного администрирования. Это конечно никак не связано с программированием, но иногда дает представление о том в какой стороне проблема, если программа, например, не может получить данные из базы. Если у Вас нет опыта администрирования – не переживайте. Большинство программистов его не имеют.
Далее я опишу как я стал программистом. Возможно, кому-то это будет не интересно или покажется затянутым, но привожу все это здесь исключительно для того, чтобы Вы могли убедиться в двух вещах:
1. Мечты сбываются если не бояться мечтать и двигаться к мечте.
2. Все, что я советую в этой книге, я проделал сам. А как говорится: только тот, кто помог себе – знает, как помочь другим.
1.1 Как я стал программистом
Мой путь к программированию был очень длинным – я с детства мечтал стать программистом, но из-за проблем с математикой в школе мне говорили, что это невозможно. И я стал юристом.
Однако меня всегда тянуло к ИТ. В 1998 году я не мог себе позволить купить компьютер и купив жесткий диск вечером после работы подключил его к рабочему ПК, установил Linux Mandrake 8.0 – это была первая ОС за исключением DOS и Windows 95, что я увидел. Непередаваемый восторг!
Через пару лет я купил собственный компьютер и установил на него несколько операционных систем. В свободное время я изучал операционные системы Linux и Unix, так как установленная на всех ПК операционная система для домохозяек вызывала у меня отторжение.
Однажды, сидя в интернете, (через модем) мы с другом увидели рекламу каких-то ИТ услуг. На баннере был изображен системный администратор в свитере и джинсах, сидящий между серверных стоек, на коленях у него лежал ноутбук, подключенный к серверу.
Я воскликнул что хочу быть таким. На что мой друг ответил – хочешь, значит будешь. Я посмеялся – где ИТ и где я – юрист, не осиливший школьную алгебру…
В свободное время я продолжал изучать операционные системы. Конечнно, без постоянного доступа к интернету это происходило в основном методом тыка. Когда появилась виртуализация, я по вечерам, после работы, играл с виртуальными машинами создавая сеть, настраивал права доступа, поднимал веб-серверы и т. д.
В 2011 году после четвертого сокращения штатов моя и без того не головокружительная карьера в очередной раз рухнула, но в этот раз уже ниже плинтуса и я решил, что пора заняться любимым делом и осуществить мечту – я устроился работать системным администратором.
Ведомственная организация, в которой я стал системным администратором, имела ряд специфических требований к кандидатам по причине принадлежности к органам правопорядка, а заработная плата, учитывая специфику оставляла желать лучшего. Так что я, как линуксоид хоть и с домашним опытом, был практически вне конкуренции – желающих идти работать сисадмином на эту вакансию не было: те, кто работал в организации не фанатели от операционных систем, а линуксоиды, приходившие с рынка труда, прослушав требования и условия работы хмыкнув удалялись в светлое будущее.
И вот я – системный администратор! Мне не верилось! Я – тот парень из рекламы что я видел 13 лет назад!
Поработав несколько лет, я пришел к выводу что пора двигаться дальше чтобы получить больше опыта и увеличить зарплату и тут меня ждал сюрприз: большинство компаний не мечтали нанять 38-летнего админа: не успевал я отослать резюме, как через несколько минут получал отказ.
Однажды мне пришел отказ ровно через 1 минуту после моего отклика на вакансию. Я разыскал в сети менеджера по персоналу (HR), которая мне прислала отказ, и вежливо поинтересовался в чем причина отказа. В приватной беседе чата одной из социальных сетей она пояснила, что ее начальник не понимает, как он будет руководить людьми старше себя. Так, что поиск первой моей работы в условиях равной конкуренции затянулся на полтора года.
Очень кстати мне помогла книга одного парня из Москвы. К сожалению, сейчаc я уже не вспомню ни ее названия, ни фамилии автора. Он был успешный бизнесмен, в прошлом системный администратор и описывал как правильно развиваться в ИТ как системный администратор. Как повышать свою стоимость на рынке и избегать распространенных ошибок (особенно не отращивать свитер, грязную кружку и чувство собственной важности, как делали классические администраторы 90-х). Книга стоила тогда целых полторы тысячи, что было ощутимо для моего бюджета. Я раздумывал неделю и решился. Эта книга сильно продвинула меня.
Тем не менее, как я уже писал выше, в том числе в силу возраста, сменить работу мне удалось только после двухмесячных вечерних курсов английского, по результатам которых я прошел конкурс в русско-американскую компанию инженером технической поддержки второй линии.
Чтобы Вы понимали это большой шаг назад по карьерной лестнице – обычно из техподдержки переходят в системные администраторы или (что значительно реже) в программисты.
В этой компании, кроме технического уровня, требовался еще достаточный для общения английский и хорошее здоровье: четыре смены в неделю по 12 часов и 2 из них – ночные. Старше меня в компании был только еще один инженер – все остальные ребята от 18 до 30 лет. Это был физически и психологически сложный период, однако благодаря этому моя карьера в следующих компаниях как системного администратора пошла в гору. Дальнейший период моей трудовой деятельности я опущу – там уже не было таких примечательных рывков и дауншифтов: просто движение вверх.
Примерно в 2018 году я понял, что больше не хочу быть системным администратором – новизна пропала. Конечно, появился ряд новых технологий, но я понял, что мне скучно изучать системы их принципы работы и параметры настроек. Я сам хочу создавать, творить. Так я задумался чтобы всерьез, во второй раз, сменить свой род деятельности и стать программистом.
Я тогда работал в одном банке ИТ-инженером. Мне было поручено задание: при помощи языка Python связать две системы, одна из них – это система заявок Jira, а вторая – для развертывания ПО Jenkins. На тот момент все, что я знал о Python, что это язык программирования, который имеет низкий порог вхождения.
Проект занял у меня 2 недели, безусловно мой код был ужасен и кошмарен, и надеюсь, что его никто не видел, но система регулярно отплевывалась заявками и все были довольны. А мне очень понравилось сидеть в IDE – среде разработки и творить. Я решил изучить Python и стать программистом. И безусловно, попался бы в ловушку, если бы не совет из книги для системных администраторов, что я упоминал выше, – постоянно следить за рынком труда. Я решил изучить рынок труда – насколько разработчики Python востребованы в Новосибирске. Оказалось, что практически ни насколько (напоминаю год был 2018, удаленка отсутствовала – пандемия еще не пришла).
Это был неприятный сюрприз, который заставил меня задуматься какой язык выбрать. Так я пришел к выводу что надо изучать Java. (О выборе языка я расскажу далее во 2 главе).
Я стал покупать один известный онлайн курс и выполнять задания. На этом ресурсе я потратил полгода. Именно потратил. Мне казалось, что однотипных заданий слишком много, а лекции не способствуют скорому продвижению. В общем я бросил курсы на 8 уровне (из 40). И стал изучать Java самостоятельно по книгам. И как же я удивился, когда через три недели учебы по книге стал изучать многопоточность. На упомянутых курсах это был если не ошибаюсь 20 уровень.
Позже я пришел к выводу, что большинство курсов сделаны таким образом, чтобы человек дольше учился – дольше платил. Поэтому там слишком глубокая проработка основных вещей и много второстепенных, без которых на первом этапе можно смело обойтись.
1.2 Что будет в этой книге
Все, что будет в этой книге подчинено только одной цели – как можно быстрее сделать из новичка программиста уровня «джуниор», чтобы начинать искать работу. Это книга – гайд как учить Java, чтобы стать джуниор-разработчиком.
1.3. Чего НЕ будет в этой книге
Здесь не будет никакой воды, рассуждений и избыточной информации.
Здесь не будет глубокого изучения какого-либо инструмента\технологии.
Эта книга не заменит Вам книги по Java. Объясняю еще раз: это книга-ментор, которая будет вести Вас и направлять, поясняя, что и в какой степени изучать в Java и не только.
При этом, конечно, всегда нужно иметь ввиду, что у каждого человека разная скорость освоения материала. Не могу гарантировать что у Вас получится быстрее в два раза чем у меня, но точно уверен, что если идти этим путем – можно стать Java-разработчиком. По крайней мере я им стал.
1.4. Для кого эта книга
Эта книга для тех, кто решил попробовать себя в программировании, но пока не знает какой язык выбрать и с чего начать, равно как и для тех, кто уже начал изучать Java, но не знает куда двигаться. Когда я искал для себя мотивацию и инструменты для изучения Java, где-то в интернетах наткнулся на комментарий человека, который учился на курсах и закончив их попытался написать проект, а в итоге как он сам выразился «получился набор классов и что с этим делать непонятно».
Со мной такого не случалось и надеюсь, если Вы будете придерживаться указанных рекомендаций, не случится и с Вами.
1.5. Начальные требования
Для того, чтобы начать без боли погружаться в программирование нужны 2 вещи:
1. Уметь печатать неглядя, десятью пальцами. Если у Вас нет этого навыка найдите в интернетах онлайн тренажер и за две-три недели каждодневных тренировок у Вас все получится. Конечно, можно и без этого, но будет сложновато.
2. Владение английским на уровне хотя бы чтения обычных текстов. Если этого нет можно, конечно, продолжать, но учить английский все равно придется и без знания языка будет сложнее понимать термины, аббревиатуры и т. д. Не говоря о том, что часто нужно будет читать техническую литературу, поскольку все что на русском, как правило уже не актуально т.к. перевод занимает не менее года после выхода оригинала.
Также следует иметь ввиду, что учиться придется постоянно. Не получится выучить язык программирования и просто писать код. Язык весьма обширен и досконально выучить его нереально, к тому же он постоянно развивается, выходят новые версии. Кроме языка нужно будет изучать еще много инструментов (приложений). Так что работа в ИТ – это постоянное обучение, особенно для программиста.
Глава 2. Выбор языка программирования
Языков программирования очень много и у каждого языка есть своя область применения. Какой-то общей классификации не существует, тем не менее один из разграничивающих параметров – это уровень языка.
Уровень языка – это степень, в которой семантика языка учитывает особенности мышления человека, нежели машины – то есть уровень языка тем «ниже», чем он «ближе к машине», и тем «выше», чем он «ближе к человеку».
Когда я только думал о том, чтобы стать программистом я не имел никакого представления о языках программирования. Слышал только, что одни языки учить легче, другие – труднее. Вот соответственно чем ниже уровень языка, тем учить его труднее, но тем быстрее в среднем будет работать написанная на нем программа и меньше расходовать системные ресурсы.
Еще тут нужно учитывать, что не всегда этот параметр достаточно объективен: например, если говорить об одном из самых низкоуровневых языков программирования – Ассемблере, то он действительно очень сложен, судите сами.
Это листинг программы, которая выводит на монитор сообщение «Hello, world!».
– — – — – — – — – — – — – — – — – — -Hello, world! – — Assembler:
SECTION. data
msg db «Hello, world!», 0xa
len equ $ – msg
SECTION. text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
– — – — – — – — – — – — – — – — – — – — – — – — – — – — —
А вот аналогичная программа на Java:
– — – — – — – — – — – — – — – — – — – — – -Hello, world! – — Java:
public static void main (String [] args) {
System.out.println («Hello world!»);
}
– — – — – — – — – — – — – — – — – — – — – — – — – — – — —
C# приводить не буду – синтаксис похож на Java и области применения сходны: это и веб разработка и десктоп приложения. Тем не менее на рынке труда Java более востребована. Вот результат запроса на одном из самых известных поисковиков вакансий:
10865 вакансий «java»
6153 вакансии «C#»
Теперь таже самая программа на Python:
– — – — – — – — – — – — – — – — – — – -Hello, world! – — Python:
print («Hello world!»)
– — – — – — – — – — – — – — – — – — – — – — – — – — – — —
Всего 1 строка.
Однако Питон более высокоуровневый чем Java, что обеспечивает более низкий порог вхождения, но более узкую область применения:
– относительно недавно стал применяться в веб-разработке.
– Используется в data science: машинное обучение, анализ данных и визуализация.
Ну и конечно программа написанная на Python в большинстве случаев будет выполняться дольше, чем написанная на Java.
А вот, к чему я все это вел, такая же программа на языке GO, который позиционируется как высокоуровневый (как Python), но значительно быстрее:
– — – — – — – — – — – — – — – — – — – — – -Hello, world! – — Go:
import «fmt»
func main () {
fmt.Println («Hello world!»)
}
– — – — – — – — – — – — – — – — – — – — – — – — – — – — —
Я рассматривал GO как кандидата но, когда открыл что-то посложнее понял, что Java читается легче.
Вы, конечно, можете составить свое мнение и посмотреть примеры программ в интернете. На такой маленькой программе сложно показать особенности языков, но на более длинном листинге лично для меня GO совсем не прост.
Кто-то может спросить почему я не упомянул JavaScript. Могу ответить одно – мне не понравился его синтаксис. И насколько я понимаю у него более узкая сфера применения чем у Java. Все это конечно вкусовщина – каждому свое. Посмотрите примеры на этом языке, попробуйте, возможно – это Ваш язык. И конечно сначала посмотрите насколько язык, который Вы выбираете, востребован на рынке труда.
2.1. Плюсы Java
Несмотря на растущую популярность Go и Python, Java остается одним из самых востребованных языков уже более десяти лет.
У Java возможно самая широкая сфера применения. Java используется для:
– веб-разработки – на нем написаны сайты такие как Амазон, РЖД, Одноклассники и т.д;
– мобильной разработки – Java основной язык разработки на Android;
– десктопной разработки – даже есть реализации графических пользовательских интерфейсов операционных систем Linux, Solaris;
– создания серверной логики – бэкэнд большинства крупных сайтов, порталов, магазинов и т. д. написан на Java;
– создания распределенных систем – например Нadoop: набор утилит, библиотек и фреймворк для разработки и выполнения распределённых программ, работающих на кластерах из сотен и тысяч узлов.
– создания баз данных (база H2 написана на Java);
– переносимость. Java можно запустить даже на роботе-пылесосе, если туда установить JVM – виртуальную машину джава в которой исполняется код. Поэтому операционная система совершенно не важна.
2.2. Минусы Java
Конечно, есть и минусы. Из наиболее значимых:
Java создавался как замена С++ поэтому код похож, но более «громоздкий»: один из минусов Java – это многословность, что делает его более читабельным, но загромождает код.
Еще к минусам относят медленность программ, однако это только в сравнении с еще более низкоуровневыми языками такими как С и С++. Но мы помним обратную сторону более «быстрых» языков программирования – сложность изучения. Кроме того, на рынке эти языки востребованы значительно меньше. Они очень «нишевые» на них в основном пишутся операционные системы, системные и десктопные приложения и т. д.
Так что в сравнении с большинством востребованных на рынке труда языков программирования язык Java:
1. В целом быстрее;
2. По востребованности превосходит всех за исключением Python;
3. По широте применения ему практически нет равных.
Глава 3. Среда разработки
В этой главе мы поговорим об IDE – Integrated Development Environment – среде разработки. Вы часто будете встречать такое сокращение – IDE.
Что такое среда разработки (IDE) – это приложение, которое включает в себя:
Редактор кода.
Компилятор.
Сборщик.
Отладчик.
Это рабочий инструмент программиста. В некоторых источниках Вы можете встретить мнение, что начинать нужно программируя в блокноте. Вероятно, это правильно, если Вам 13 лет и до трудоустройства еще далеко. Но раз Вы читаете эту книгу – значит, время ограничено.
Учитесь сразу работать в IDE – это значительно ускоряет обучение, так как там есть подсветка синтаксиса (ключевые слова выделяются цветом), есть подсказки – среда Вам подскажет варианты завершения кода и конечно сразу подсветит синтаксические ошибки.
Сред разработки существует великое множество – примерно около трех десятков. На данный момент лидируют три:
1. IntelliJ IDEA
Де факто – стандарт индустрии. В большинстве компаний используют именно ее. Существует куча плагинов на все нужды и потрясающая документация. Есть платная и свободная версии. Далее в этом разделе мы установим Idea и рекомендую пользоваться именно ей. В большей части обучающего видео Вы увидите именно эту среду разработки.
2. Eclipse
Тоже очень часто используется разработчиками, и во многих видео Вы можете увидеть Эклипс. Бесплатна.
3. NetBeans
Бесплатна. Менее распространена чем предыдущие.
Конечно это «в среднем по больнице» – наверняка где-то есть разработчики которые используют другие IDE.