Порог вхождения: высокий, низкий, средний
Среди программистов часто можно услышать о «пороге вхождения» — понятии, отражающем количество усилий, необходимое для освоения языка программирования отдельно взятым «джуном» в достаточном уровне, чтобы написать свою первую серьезную программу и найти работу. «Порог вхождения» складывается из знания:- особенностей синтаксиса и нюансов языка;
- библиотек;
- алгоритмов и структур данных.
Web или не Web?
Web
Web-программистов можно разделить на Frontend- и Backend-разработчиков. Стоит разобраться, что означают эти термины. «Фронтенд» разработчики занимаются так называемой клиентской стороной — тем, что увидит пользователь. «Бэкенд» — это программно-аппаратная часть сервиса — то, что работает на сервере. Для Frontend-разработчика, решающего какой язык программирования выбрать, must-have это JavaScript и его фреймоврки: Angular JS, React и другие. Диалекты JS не так популярны, как их родитель, но тоже могут быть полезны: CoffeeScript, TypeScript. Есть ещё flash AS, раньше были JScript и VBScript, но это помнят только динозавры =) Кроме того, необходимо разобраться в HTML и CSS.Не Web (Enterprise, Desktop, Mobile)
Я специально объединил эти языки программирования в категорию с таким странным названием. На большинстве из них можно писать и enterprise, и desktop, и даже мобильные приложения. Python — простой в понимании ООЯП, стал невероятно популярным в последнее время в связи с развитием Machine Learning: его адепты широко используют Python. ML — достаточно молодое направление в IT, и хотя первые плоды уже получены, я бы не стал спешить с погружением в эту отрасль при выборе языка программирования. Во-первых, нужно ОЧЕНЬ хорошо разбираться в математике. Во-вторых, волна популярности может пройти так же, как и с «блокчейном» или «нанотехнологиями». Кроме того, как ты помнишь, Python используется в web разработке. C++: классика, на основе «плюсов» строится всё и вся. Этот язык был прародителем всех популярных ООЯП, и новичку безусловно стоит обратить на него внимание. На его основе написано множество популярных приложений. Но большая вероятность «выстрелить себе в ногу» и сложный для восприятия синтаксис сводят на нет вероятность освоения новичком этого мастодонта программирования. Kotlin — Java для хипстеров — безумный микс ООП и функционального программирования. В последнее время популярен благодаря тому, что опытный разработчик, перешедший с Java на Kotlin, серьезно повышает свою производительность. Опытный девелопер быстро освоится в этом ЯП. Кстати, то же относится к Scala, но Kotlin популярен именно в Android. Java — прост для освоения новичком. В том числе, благодаря JavaRush: именно здесь я понял как выбрать язык программирования =) Синтаксис Java понятен, вероятность «выстрелить себе в ногу» имеется, но не критична.ООП или ПОП?
Процедурный подход
Процедурно-ориентированный подход предполагает написание программы, состоящей из последовательных операторов, которые можно собрать в единое целое для эффективного решения конкретного круга задач. К таким языкам можно отнести: C, PureBasic и Pascal. Те самые, что навевают уныние на старшеклассников и студентов младших курсов. Также существует относительно молодой GO. Тем не менее, знакомство с процедурными языками очень полезно для потенциального разработчика. Для меня погружение в процедурные языки связано с системой Mathematica (Wolfram) и университетской научной деятельностью. Благодаря правильным алгоритмическим подходам и простым процедурам, линейно двигаясь от начала программы до ее конца, мне удавалось вычислять значения, актуальные для современной теоретической физики. Именно благодаря этим «последовательным» ЯП, начинаешь понимать, что иногда проще написать код, чем считать самостоятельно. Изучение ПОП дает неплохую алгоритмическую подготовку, которую работодатель почти всегда хочет видеть у кандидата при приеме на работу. Основы всего и вся в ИТ строятся именно на процедурных языках, так что не стоит их недооценивать. Кстати, новички, решающие какой язык программирования выбрать для изучения, часто думают о том, что многопоточность — прерогатива исключительно ООП. Это не так. Процедурные ЯП тоже позволяют выполнять параллельные вычисления.Объектно-ориентированный подход
Те, кто начал с процедурных языков, чаще всего неплохо подкованы в знании математики, алгоритмов и структур данных (это связано с акцентом на эти области знаний в технических вузах). Тем не менее, в современных реалиях успешными программистами чаще становятся те, кто хорошо усвоили другой подход к программированию — объектно-ориентированный. Идеология ООП позволяет строить по-настоящему глобальные системы. Особенность такого подхода — в схожести с реальным миром:- различные объекты взаимодействуют между собой и существуют независимо друг от друга.
- объекты имеют иерархию и способны перенимать или изменять поведение своих предков.
- можно оперировать абстрактными понятиями, но взаимодействовать могут только реально существующие объекты.
Пример Процедурно-ориентированные языки — это инструменты для решения конкретных задач. И если ваша задача претерпела изменение, пускай даже незначительное, вам скорее всего придётся тратить время и силы на переписывание всех алгоритмов. Представим программу, описывающую автосалон, который продает легковые и грузовые автомобили, как новые, так и подержанные. В процедурном языке для каждого объекта нужно описать функции, обрабатывающие ввод или вывод данных для нового легкового, нового грузового, б/у легкового и б/у грузового автомобилей. А что предлагает ООП? При объектно-ориентированном подходе нужно просто описать базовый класс ТРАНСПОРТ, который будет хранить в себе характеристики, присущие и тому, и другому типу автомобилей:
И методы для ввода-вывода информации. Затем создадим объекты, наследующие характеристики класса ТРАНСПОРТ: ЛЕГКОВУШКА и ГРУЗОВИК. Они содержат уточнённую информацию, присущую именно таким видам транспорта, а также методы ввода-вывода. Внезапно руководство салона решило расширить ассортимент и продавать еще и мотоциклы. Процедурный подход предложит переписать всю логику для новых и б/у мотоциклов с самого начала, в то время как ООП-язык позволит просто создать новый объект МОТОЦИКЛ, наследующий все характеристики суперкласса ТРАНСПОРТ и содержащий уточнения. А что будет, если добавлять разные транспортные средства? Процедурная реализация будет требовать больших трудозатрат, чем ООП. Причем чем больше ассортимент, тем меньше нужно будет делать манипуляций с объектами. |
- ООП предполагает независимую разработку отдельных модулей, предоставляя программисту или команде выбирать способ и границы соприкосновений и обмена информацией.
- Разбиение на небольшие модули намного проще для восприятия, чем монолитные процедуры. Благодаря этому сторонний разработчик быстро разберется в твоем коде, а ты при необходимости войдешь в новый проект.
- Изменение одного объекта может никак не отразиться на взаимодействии с другим, но способно повлиять на иерархию дочерних объектов. Освоив такой подход, расширение и доработка программы становится тривиальной задачей.
Кроссплатформенность.
Java работает везде благодаря JVM —виртуальной машине Java. Один из главных плюсов этого языка — кроссплатформенность: не нужно думать о том, какую библиотеку подключить, какова архитектура у конкретного процессора. «Написано однажды —работает всегда».
Документация.
Широчайшая база документации: официальная документация Oracle, обучающие порталы, постоянно развивающееся комьюнити. Ответы на большинство вопросов, возникающих в ходе разработки, можно найти за несколько минут, главное — понять, что забивать в поисковик =)
Популярность.
Java — самый популярный язык программирования в мире: кроме вышеупомянутых Android и web разработчиков, на Java пишет почти каждый первый энтерпрайз разработчик. Enterprise — внутрикорпоративная разработка, необходимая для нужд больших корпораций.
Ежегодно хейтеры предсказывают «смерть Java», дескать: «Oracle перестанет его поддерживать, и вообще вы ерундой занимаетесь». Это не так! Новые версии Java обещают выпускать раз в полгода. Наиболее важные нововведения и фичи последней версии можно прочитать здесь.
Для меня переворотом и открытием были лямбды в Java 8, что уж говорить о новых версиях! Сейчас я работаю на «ретроградском» проекте, поэтому не вникаю в нововведения, но то, что Java живет — факт.
Android.
Android уверенно занимает более 80% рынка мобильных телефонов последние 4 года, под этой операционной системой работают телевизоры, медиаплееры и даже медиасистемы в автомобилях. А разработка под эту ОС ведется преимущественно на Java. Только представь какие перспективы открываются. Когда я устроился на работу в качестве Android-разработчика, мне стало интересно: а сколько стоит продукт, разработкой которого я занимаюсь? Оказалось, что цена за год составляет примерно 5$. Возник резонный вопрос: откуда средства на этот офис, на зарплаты, печеньки, теннисный стол, роботов и прочие «ништяки»? Дело в количестве: у нашего приложения — 20 млн пользователей.
Зарплаты.
Ну и на сладкое: зарплата Java разработчика — одна из самых высоких в отрасли. Ты же собираешься изучать программирование с конкретной целью: получить хорошую работу.
Популярность языка программирования
порталJava: | 277 |
python: | 227 |
php: | 188 |
c#: | 147 |
c++: | 131 |
ruby: | 40 |
scala: | 24 |
kotlin: | 20 |
ИТОГИ
Вот на что стоит обратить внимание новичку при выборе языка программирования:- Популярность (Java стабильно занимает лидирующие позиции);
- Порог вхождения (Для Java — средний: разброс компетенций, которые требует работодатель, достаточно широк);
- Доступные материалы (на русском языке порталов, аналогичных JavaRush нет, следовательно, пальма первенства уходит угадайте кому =));
- Области применения: чем больше отраслей, в которых можно применять язык программирования, тем больше специалистов требуется на рынке. Про кросс-платформенность я уже говорил, но не устану это повторять.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ