Czytaj książkę: «JAVA 2021: лёгкий старт»
Посвящается моей музе Кицунэ ЗЛА
© Павел Александрович Забелин, 2020
ISBN 978-5-0051-5483-5
Создано в интеллектуальной издательской системе Ridero
Введение
Главная цель этой книги – показать читателю, что программирование на Java, гораздо более проще, чем принято об этом думать. Имея за плечами опыт программирования больше 15 лет, я относительно недавно увлекся программированием на Java и эта книга – неоконченная «сжатая» история самообучения. Как известно «хочешь лучше понять сам – расскажи об этом другому», что я и попытался сделать на страницах этой книге в меру своих сил и времени. Я прочитал несколько книг и прошел несколько курсов в интернете: в университете Skillbox, Udemy, Stepik, что и вам советую. Но прежде чем купить какие-либо курсы и начать их проходить, я рекомендую прочесть эту книгу: зачастую курсы грешат провалами в теории и скачками сложности преподаваемого материала, да и сложно определить начальный уровень подготовки студента. Эта книга как раз вам поможет обрести базовые знания программирования и языка программирования Java, и избавит вас от проблем с пониманием основ программирования.
Для кого эта книга?
Эта книга для любого, кто хочет научиться программировать. Программирование только лишь окутано завесой чего-то очень сложного. На своем пути я видел людей абсолютно различных профессий (мало относящихся к компьютерам), которые успешно освоили программирование. Программирование – это очень широкая область деятельности, которая позволяет проявить разнообразные способности и умения. К тому же «побочные эффекты» профессионального программирования, такие как возможность работы без привязки к месту жительства и достойная оплата труда, которая позволит проживать практически в любом уголке планеты, еще больше мотивируют попробовать погрузиться в мир IT. Не говоря уже о том, что человеческая цивилизация чем дальше, тем больше уходит в «цифровые миры» и возможность быть не только пользователем, но и создателем программ – это очень интересно.
Все, что вам потребуется для успешного прочтения этой книги и продуктивного усваивания материала, это: в первую очередь желание и намерение не сдаваться перед трудностями. Второе: компьютер с операционной системой Windows, в 2020 году вам подойдет компьютер из любой ценовой категории – Java без проблем работает на любых процессорах семейства Intel, ну и конечно лучше если у вашего компьютера будет хотя бы 4 гигабайта оперативной памяти. Конечно же вы можете использовать компьютер на базе ОС Linux или MacOS, только вам придется самостоятельно установить среду разработки JetBrains IntelliJ IDEA (это будет единственное отличие).
От вас не требуется каких-то особых познаний в информатике или программировании, все необходимое для того, чтобы начать программировать я и так вам расскажу в этой книге.
Да и вам не нужно знать высшую математику – это ответ на вопрос из топа страшных вопросов «что должен знать программист ДО того как станет писать код». То есть достаточно знать математику в пределах простейших математических операций и умения раскрыть скобки, ну и решать уравнения с одной переменной.
Большим плюсом будет умение читать и понимать английский язык, так исторически сложилось, что все в интернете найти ответ по программированию легче всего на английском языке. Плюс, также все новые и интересные книги и статьи публикуются на английском языке. Обратите на это внимание. При устройстве на работу знание английского также будет плюсом.
Почему Java?
Небольшой обзор текущего положения дел в языках программирования. Существует всемирный рейтинг языков программирования TIOBE (https://www.tiobe.com/tiobe-index/):
И здесь мы видим, практически неизменную пятерку лидеров: Java, C, Python, C++, C#. Но этот рейтинг имеет такое же отношение к реальности, как и прогноз погоды на неделю. Сейчас я расскажу про языки из топ-10, чтобы вы смогли попробовать оценить свои представления и желания в области программирования.
Стоит сразу сказать, что языки в рейтинге, с местами 10+ не очень подходят для начального обучения, ну кроме Ruby. Но они также востребованы, и лучше, как минимум на них посмотреть – может вам понравится. А может быть столкнетесь с ними, и жизнь заставит вас выучить какой-либо из них.
10-е место Swift. Детище Apple, замена ObjectiveC для платформы MacOS\iOS (равно как Kotlin, замена Java на Android). Если вы хотите связать свою профессиональную деятельность с корпорацией Apple, то стоит начать его учить и не отвлекаться ни на что более. Он простой для изучения и даже есть курсы для детей. К тому же, на сегодняшний день специалистов со знанием его не так много.
9-е место SQL. Этот язык знать обязательно, потому что это язык «общения» с базами данных, сейчас ни одно приложение или сайт не может существовать без баз данных. Но учить его как первый язык смысла не имеет.
8-место PHP. «Домашний проект» датского программиста Расмуса Лердорфа, переросший в самый востребованный язык программирования сайтов в интернете. 80% сайтов используют PHP. Но это может быть и минусом – на PHP вы только сможете писать серверную часть (известны попытки писать приложения на нем, но это только в качестве экспериментов). PHP достаточно прост в изучении, и что может быть для некоторых решающим фактором, специалисты очень востребованы в многочисленных веб-студиях. Т.е. для цели: быстро изучить и пойти «зарабатывать, чтобы на жизнь хватало» – это язык номер 1.
7-е место JavaScript. Очень долгая история у этого языка программирования, можно сказать, что он появился вместе с интернетом (когда интернет стал доступным для массового использования). Но только в последние несколько лет он стал суперпопулярным. Для этого есть несколько причин: он стал удобным для написания больших проектов, кроме написания простых скриптов «чтобы появлялось красивое окошко» теперь на нем можно писать практически все – клиентские приложения для iOS, MacOS, Android, Windows (фреймворк Electron), серверные приложения (фреймворк NodeJS). Он очень подходит для людей, которым нужна «движуха»: идеален для написания проектов на хакатонах, новые фреймворки (библиотеки программного кода, очень облегчающие жизнь программиста и делающие очень много черной работы) появляются каждый год – с ним не бывает скучно! Специалисты очень востребованы, можно сказать что «через 20 лет будет только JavaScript».
6-место VisualBasic.NET. Скажу честно: я не знаю почему он не только в топ-10, но и вообще почему он здесь. Единственное могу предположить, что до сих пор на нем пишут макросы для MS Office, ну и может быть в Америке есть много приложений которые до сих пор требуют поддержки и обновления.
5-е место C#. Основной язык программирования проприетарной (закрытой) платформы Microsoft. NET. Великолепный язык, постоянно развивается и будет развиваться, пока в него инвестирует деньги Microsoft. На нем можно писать все что угодно, только с одним ограничением: это все может работать там, где установлена Windows или работает виртуальная машина. NET и в отличии от Java, диапазон гораздо уже (пока что). С мобильными приложениями дела обстоят совсем печально – есть проект Xamarin, который использовать никто не советует. Но также есть игровой движок Unity, в котором используется C#, но это только для игр на большом количестве платформ. C# особенно любим на территории СНГ, т.к. любима Windows. Если вы хотите спокойно развиваться как программист, иметь поддержку крупной корпорации, никогда задаваться вопросом стабильной зарплаты – C# очень хорошо подходит для этого.
4-е место C++. Самый крутой язык программирования и также круто сложен. Писать можно все и подо все. Особенно востребован там, где требуется скорость исполнения кода: игры, мобильные игры, сервера. Если вы знаете C++, то выучить что-либо еще перестает быть проблемой. Еще раз повторю: самый сложный язык из нормальных (да-да есть еще и ненормальные, например, Brainfuck) и не сильно подходит как первый язык для изучения программирования, хотя в ВУЗах учебные программы могут начинаться именно с него.
3-е место Python. Самый простой и лучший язык для изучения программирования. Но, есть одно «НО»: на нем либо писать сайты (Flask\Django), либо заниматься научными исследованиями в области искусственного интеллекта, big data, для которых нужны очень математические мозги в первую очередь. Стоит учесть, что простота его изучения довольно опасная вещь – студент в процессе обучения не видит, ЧТО реально стоит за многочисленными библиотеками (а они уже написаны на C и там все сложно).
2-е место C. Честно скажу не знаю почему, наверное, проектов на нем больше чем на C++. Он быстрее C++, но в нем приходиться писать более сложно.
1-е место Java. Но это не точно :). Просто языки в первой тройке любят меняться местами. Но раз книга про Java… Если вы прочитали и запомнили характеристики предыдущих языков, то можете сказать: а почему Java? Она ведь и не самая быстрая, и не самая простая в изучении, и в ней нет постоянных изменений и улучшений как в других языках. Дело в том, что Java это не только язык программирования, а это целая платформа (да C# – это тоже платформа, только меньше по охвату), которая позволяет вам писать программы для практически любых устройств: начиная от кофемолок, заканчивая огромными дата центрами. Java использует большие корпорации, например Yandex и Google. Она надежна и безопасна, на ней пишут большие корпоративные системы. С одной стороны код написанный на Java выглядит многословным, но это же позволяет избежать критических и трудно заметных ошибок. Существуют тысячи библиотек с открытым кодом, которые можно использовать в своих проектах. На Java вы можете писать приложения для Android, и поверьте это легче чем писать под iOS (на Objective C). И самое главное: это лучший язык для того, чтобы научиться писать правильные объектно-ориентированный код, с использованием хороших паттернов программирования. Хотите научиться писать красивый и понятный другим людям код (а это очень важное умение) – пишите его на Java. Огромным преимуществом Java является то, что этому языку много лет и за все эти годы в интернете накопилась огромная база знаний и ответов на многие проблемы, с которыми сталкиваются программисты на Java. И поэтому зачастую проще вбить запрос в Yandex и получить готовое решение, которое будет легче адаптировать к своей программе, чем «изобретать велосипед»
Что все-таки выбрать?
Здесь я позволю себе посмотреть на проблему выбора языка программирования с точки зрения требований рынка. И рынок диктует свои жесткие требования, и они растут из года в год. Первое десятилетие 21 века было «золотым веком» для того чтобы выбрать язык программирования по-вкусу: достаточно было выучить только его, и вы уже могли идти и трудоустраиваться. В 2020 году все намного сложнее – от вас будут требовать гораздо больших знаний даже на позиции джуниора. Вот что вам потребуется знать «в довесок» и чем вы будете заниматься, если выберете какой-либо из языков топ-10.
Swift. Вы будете писать приложения под iPhone\iPad. В основном это будут приложения с многочисленными окошками. Периодически от вас будут требовать написать что-либо на Objective C, потому что Swift еще слишком молод и нестабилен, чтобы были проекты только на нем.
PHP. Вы будете все время писать сайты, и это в лучшем случае. А скорее всего вы будете настраивать WordPress\Drupal\Joomla под требования заказчиков сайтов. Да есть маленькая вероятность, что вы найдете работу где надо будет писать сервер на PHP (т.е. не сайт, а, например, систему для мультиплеерных игр), но обычно для этого используются другие технологии. А также вам придется (жизнь заставит) выучить HTML, CSS, JavaScript – сайты без них не могут существовать.
JavaScript. Тут есть несколько вариантов. Первый, самый распространённый: вы доучиваете еще HTML, CSS и идете писать сайты, веб-приложений, мобильные SPA (single-page application). Второй вариант: вы используете знание языка JavaScript для написание серверной части на NodeJS – и сейчас это очень востребовано, потому что это гораздо легче, чем писать сервер на C++/C#/Java. Третий вариант: вы доучиваете еще HTML, CSS и идете писать игры – Adobe Flash (основная технология для написания игр для браузеров) уже умер, – конкурентов нет. За последний год сформировался новый тренд (пятый путь): вы учите основы HTML CSS JavaScript, потом изучаете в деталях фреймворк ReactJS и вуаля! – вы реакт-программист, – это такой мутант, порожденный трендом и спросом (но сейчас это самый! Простой способ войти в IT с достойной зарплатой – спрос на таких программистов просто зашкаливает).
C#. Вы не будете скорей всего писать на нем программы для Windows. C 99% вероятностью вы будете использовать технологию ASP.NET и писать сайты, да вам придется выучить HTML, CSS и JavaScript (на уровне основ). Второй вариант: писать игры на Unity. Третий вариант: вы все-же будете писать десктопные приложения, например, дописывать новые функции Skype.
С++\С. Вы сможете писать ВСЕ. Из очень востребованного сейчас: сервера, мобильные игры, системы управления дронами и автомобилями, системы безопасности и наблюдения.
Python. Тут все просто: идете в написание серверной части для сайтов, а так как никто не любит содержать много разработчиков без надобности – доучиваете HTML, CSS, JavaScript. Второй вариант, аналитик данных – дорога в банки, обычно там это самое востребованное. Третий вариант: вы не программист, а научный деятель.
Java. Разработка серверов и поддержка существующих систем в банках и корпорациях, которые вложили миллионы долларов в программные комплексы и хотят продолжать их развивать. Второй вариант – это разработка Android приложений. И здесь вам тоже есть что выбирать: стартапы, компании среднего размера, корпорации.
Про зарплаты
Мы же все живые люди и хотим применять наши знания и получать при этом не только интеллектуальное удовольствие, но и материальное вознаграждение. Если не сильно вдаваться в детали, в мире IT разработчиков принято относить к нескольким категориям компетентности.
Junior (джун, малыш) – разработчик, который выучил технологию в теории, но опыт коммерческой разработки у него равен нулю. Его основная задача – это не погоня за зарплатой, а за опытом, чтобы скорей перейти в следующий статус.
Middle (середняк) – разработчик с опытом, таких большинство. Выполнение поставленных задач – его зона ответственности.
Senior (сеньор) – настоящий профессионал, он знает технологию в нюансах, он сталкивался с огромным количеством «черной магии в коде» и у него есть необходимые «заклинания» чтобы эту магию рассеять. К нему прислушиваются, его советов спрашивают.
Architector (архитектор) – это вершина карьеры разработчика, дальше только управление проектами и человеческим ресурсом. Архитектор строит системы с учетом требований заказчика. Это как академик в науке.
Так вот, про зарплаты. Они конечно же разнятся в зависимости от:
– Заказчика – зарубежный заказчик платит больше и это «больше» может быть больше в разы.
– Востребованности – чем меньше специалистов, тем дороже (хотя может быть нет специалистов, потому что это уже никому не нужно)
– Технологии – заказчики очень падки на тренды, хотите получать больше – следите за трендами.
Если говорить о зарплатах, как о «средней температуре по больнице»:
Джун – это вилка зарплат от 400—500 долларов до 800—1000 долларов в месяц;
Миддл – это от 1500 до 3000 долларов в месяц;
Сеньор – это соответственно от 3000 до 5000—6000 долларов в месяц.
Еще раз, это очень неточные цифры. Бывают и Java миддлы, которые живут в глубинке и получают 800 долларов, бывают JavaScript миддлы, которые получают 7000 долларов. А бывают и разработчики-комбайны, которые «колбасят» и на 10к долларов в месяц. А есть PHP разработчики, которые за адаптивный шаблон на WordPress получили 2 000 000 долларов. Вы всегда можете отыскать актуальные цифры и для стран СНГ, и для Европы, и для Америки – это открытая и интересная информация. Также стоит знать, что независимо от выбранной технологии, на уровне «сеньор» зарплаты примерно равны +\– сотня баксов роли не играет.
Этим сфера IT и хороша – здесь ВСЕ зависит только от ваших знаний, умений, стараний и терпения. А дальше выбор за вами.
Часть I
Глава 0. Мы программируем
Мы программируем железо
В наше время мы уже настолько окружены техникой, которая способна выполнять разнообразные программы, что уже воспринимаем это как должное. Что там компьютеры… телефоны, телевизоры, пылесосы (!), видеокамеры, автомобили, даже лифты – все они уже исполняют программы. Но для того чтобы писать хорошие программы, надо хотя бы примерно понимать, как устроен компьютер. В мире программистов компьютеры называются «железом» (хотя сейчас там гораздо больше пластика, стекла и кремния). У некоторых были уроки информатики, но, наверное, как это обычно происходит, они проходили за компьютерными играми :)
Что-же такое компьютер? Компьютер – это устройство, в которое можно ввести какие-либо данные, эти данные могут быть обработаны программой, и в конечном итоге будет выведен результат. В нашей реальности мобильный телефон (это тоже компьютер), в котором запущена программа (Instagram), в который вы вводите данные (ваши нажимы и касания пальцев, когда вы скролите ленту), и в итоге видим результат – новые посты в ленте.
Компьютер – это сложное устройство, он состоит из нескольких модулей, которые нужны для разных задач. В первую очередь самый заметный модуль (устройство вывода) – монитор\дисплей, через него мы получаем всю визуальную информацию. Устройства ввода, по меньшей мере два: клавиатура и мышь (или, например, тачпад). А еще устройство ввода – это цифровой сканер или VR-шлем (и он же устройство вывода). Далее непосредственно сам компьютер, обычно мы видим его как системный блок или нижнюю часть ноутбука.
Самые главные части современного компьютера: процессор (или несколько процессоров), оперативная память, твердый диск, видеокарта, звуковая карта. Процессор – это «мозг» компьютера, но в отличие от человеческого мозга, он не думает, а исполняет команды. Оперативная память – это куда загружаются программы, чтобы выполнять их в текущий момент. Оперативная память не сохраняет данные после выключения питания. Твердый диск – хранит разнообразные данные и программы. Данные на нем не будут потеряны после выключения питания. Чтобы понять разницу между оперативной памятью и твердым диском, вспомните себя, когда вы считаете сколько денег потратили: вы в голове перемножаете количество товаров на их цену (оперативная память), а потом записываете промежуточный результат на бумажку (твердый диск). Манипуляция мыслями занимает гораздо меньше времени, чем запись и потом поиск информации на бумажке – также и с компьютером: он быстро работает с оперативной памятью и гораздо медленнее с твердым диском. Видеокарта занимается ускоренным просчетом данных для последующей отрисовки, как мы все знаем это особенно критично для видеоигр :) Звуковая карта преобразует цифровые данные в электрические импульсы, которые «понимают» аудиоколонки.
Программист на Java в 99% случаев взаимодействует (и иногда сталкивается с нюансами) с дисплеем, клавиатурой, мышкой, процессором, оперативной памятью и диском, а также с другими компьютерами (обычно серверами) которые присылают данные и ждут ответов через интернет.
Darmowy fragment się skończył.