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 (основная технология для написания игр для браузеров) уже умер, конкурентов нет. За последний год сформировался новый тренд (пятый путь): вы учите JavaScript 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 (архитектор) это вершина карьеры разработчика, дальше только управление проектами и человеческим ресурсом. Архитектор строит системы с учетом требований заказчика. Это как академик в науке.
Так вот, про зарплаты. Они конечно же разнятся в зависимости от:
Заказчика зарубежный заказчик платит больше и это «больше» может быть больше в разы.
Востребованности чем меньше специалистов, тем дороже (хотя может быть нет специалистов, потому что это уже никому не нужно)
Технологии заказчики очень падки на тренды, хотите получать больше следите за трендами.
Если говорить о зарплатах, как о «средней температуре по больнице»:
Джун это вилка зарплат от 400500 долларов до 8001000 долларов в месяц;
Миддл это от 1500 до 3000 долларов в месяц;
Сеньор это соответственно от 3000 до 50006000 долларов в месяц.
Еще раз, это очень неточные цифры. Бывают и Java миддлы, которые живут в глубинке и получают 800 долларов, бывают JavaScript миддлы, которые получают 7000 долларов. А бывают и разработчики-комбайны, которые «колбасят» и на 10к долларов в месяц. А есть PHP разработчики, которые за адаптивный шаблон на WordPress получили 2 000 000 долларов. Вы всегда можете отыскать актуальные цифры и для стран СНГ, и для Европы, и для Америки это открытая и интересная информация. Также стоит знать, что независимо от выбранной технологии, на уровне «сеньор» зарплаты примерно равны +\ сотня баксов роли не играет.
Этим сфера IT и хороша здесь ВСЕ зависит только от ваших знаний, умений, стараний и терпения. А дальше выбор за вами.
Часть I
Глава 0. Мы программируем
Мы программируем железо
В наше время мы уже настолько окружены техникой, которая способна выполнять разнообразные программы, что уже воспринимаем это как должное. Что там компьютеры телефоны, телевизоры, пылесосы (!), видеокамеры, автомобили, даже лифты все они уже исполняют программы. Но для того чтобы писать хорошие программы, надо хотя бы примерно понимать, как устроен компьютер. В мире программистов компьютеры называются «железом» (хотя сейчас там гораздо больше пластика, стекла и кремния). У некоторых были уроки информатики, но, наверное, как это обычно происходит, они проходили за компьютерными играми :)
Что-же такое компьютер? Компьютер это устройство, в которое можно ввести какие-либо данные, эти данные могут быть обработаны программой, и в конечном итоге будет выведен результат. В нашей реальности мобильный телефон (это тоже компьютер), в котором запущена программа (Instagram), в который вы вводите данные (ваши нажимы и касания пальцев, когда вы скролите ленту), и в итоге видим результат новые посты в ленте.
Компьютер это сложное устройство, он состоит из нескольких модулей, которые нужны для разных задач. В первую очередь самый заметный модуль (устройство вывода) монитор\дисплей, через него мы получаем всю визуальную информацию. Устройства ввода, по меньшей мере два: клавиатура и мышь (или, например, тачпад). А еще устройство ввода это цифровой сканер или VR-шлем (и он же устройство вывода). Далее непосредственно сам компьютер, обычно мы видим его как системный блок или нижнюю часть ноутбука.