JavaRush /Java блог /Random UA /Вибір мови програмування
Алексей Дмитревский
31 рівень
Москва

Вибір мови програмування

Стаття з групи Random UA
З програмуванням я вперше зіткнувся у школі, під час уроків інформатики. Це були якісь нудні пояснення принципів n-річних систем числення. Ну а як залік потрібно було написати свій сайт. Тоді мені здавалося, що немає більш нудного заняття на світі. Як же я помилявся! На жаль, шкільна програма інформатики не дає повної картини роботи IT, і як вибрати мову програмування — незрозуміло. Вибір мови програмування - 1Перш, ніж задаватися питанням «Яку мову програмування вибрати для вивчення», новачкові слід ознайомитися з тим, які існують мови і в чому їх відмінності.

Порог входження: високий, низький, середній

Серед програмістів часто можна почути про «поріг входження» — поняття, яке відображає кількість зусиль, необхідну для освоєння мови програмування окремо взятим «джуном» у достатньому рівні, щоб написати свою першу серйозну програму та знайти роботу. «Поріг входження» складається зі знання:
  • особливостей синтаксису та нюансів мови;
  • бібліотек;
  • алгоритмів та структур даних.
Насправді навіть роботу в Excel можна назвати своєрідним програмуванням. До речі, ця знайома всім офісна програма не така проста, як здається. Для одного порогом входження буде вміння побудувати таблицю, для іншого знання складних формул і макросів. У будь-якому випадку цей поріг невеликий. Далі йдуть квазі-мови: наприклад, -програмування. Потім найбільш прості в освоєнні мови: наприклад, PHP . Далі - мови з нативним (зазвичай, утвореним від англійської мови) синтаксисом, що не потребують ручної взаємодії з пам'яттю: наприклад, Java , JS . Потім — мови, що вимагають вкрай уважного поводження з пам'яттю, структурами даних та алгоритмами: наприклад, C , C++. Молоді мультипарадигмові мови мають, мабуть, найвищий поріг входження, тому що для їхнього освоєння потрібно не одну собаку з'їсти в інших мовах програмування: наприклад, Scala . Але в першу чергу при виборі мови варто визначитися, чим хочеш займатися далі: розробляти web, enterprise, desktop або мобільні додатки.

Web чи не Web?

Web

Web-програмістів можна розділити на Frontend- та Backend-розробників . Варто з'ясувати, що означають ці терміни. "Фронтенд" розробники займаються так званою клієнтською стороною - тим, що побачить користувач. "Бекенд" - це програмно-апаратна частина сервісу - те, що працює на сервері. Для Frontend -розробника, який вирішує яку мову програмування вибрати, must-have це JavaScript та його фреймоврки: Angular JS, React та інші. Діалекти JS не такі популярні, як їх батько, але також можуть бути корисні: CoffeeScript, TypeScript. Є ще flash AS, раніше були JScript та VBScript, але це пам'ятають тільки динозаври =) Крім того, необхідно розібратися в HTML та CSS .
Вибір мови програмування - 2
Багато новачків думають, що JavaScript і Java - це майже одне й те саме, не слід плутати ці мови. JS раніше називався LiveScript і отримав своє сьогоднішнє ім'я саме завдяки популярності слова Java. Для web backend 'a підійдуть PHP, Python, Ruby, Pearl, Java. Тут хочу звернути увагу на PHP - про інші мови ми поговоримо далі - одна з найпростіших в освоєнні ЯП, що має низький поріг входження. Ruby, судячи з опитування знайомих web розробників, повільно, але вірно набирає популярності: його люблять за лаконічність та красу.

Чи не Web (Enterprise, Desktop, Mobile)

Я спеціально об'єднав ці мови програмування у категорію з такою дивною назвою. На більшості з них можна писати і enterprise, і desktop, і навіть мобільні програми. Python - простий у розумінні ООЯП, став неймовірно популярним останнім часом у зв'язку з розвитком Machine Learning : його адепти широко використовують Python. ML - досить молодий напрямок в IT, і хоча перші плоди вже отримані, я не став би поспішати з зануренням у цю галузь при виборі мови програмування. По-перше, потрібно дуже добре розумітися на математиці. По-друге, хвиля популярності може пройти так само, як і з блокчейном або нанотехнологіями. Крім того, як ти пам'ятаєш, Python використовується у веб-розробці. C++: класика, на основі «плюсів» будується все і вся Ця мова була прабатьком всіх популярних ООЯП, і новачкові безумовно варто звернути на нього увагу. На його основі написано безліч популярних програм. Але велика ймовірність «вистрілити собі в ногу» і складний для сприйняття синтаксис зводять нанівець ймовірність освоєння новачком цього програмування мастодонту. Kotlin - Java для хіпстерів - шалений мікс ООП та функціонального програмування. Останнім часом популярний завдяки тому, що досвідчений розробник, який перейшов з Java на Kotlin, значно підвищує свою продуктивність. Досвідчений девелопер швидко освоїться у цьому ЯП. До речі, те саме стосується Scala, але Kotlin популярний саме в Android. Java - простий для освоєння новачком. В тому числі, завдякиJavaRush : саме тут я зрозумів як вибрати мову програмування =) Синтаксис Java зрозумілий, ймовірність «вистрілити собі в ногу» є, але не критична.

ООП чи ПОП?

Процедурний підхід

Процедурно орієнтований підхід передбачає написання програми, що складається з послідовних операторів, які можна зібрати в єдине ціле для ефективного вирішення конкретного кола завдань. До таких мов можна віднести: C , PureBasic і Pascal . Ті самі, що навіюють зневіру на старшокласників та студентів молодших курсів. Також існує відносно молодий GO. Проте знайомство з процедурними мовами дуже корисне для потенційного розробника. Для мене занурення у процедурні мови пов'язане із системою Mathematica (Wolfram) та університетською науковою діяльністю. Завдяки правильним алгоритмічним підходам і простим процедурам, лінійно рухаючись від початку програми до кінця, мені вдавалося обчислювати значення, актуальні для сучасної теоретичної фізики. Саме завдяки цим «послідовним» ЯП починаєш розуміти, що іноді простіше написати код, ніж вважати самостійно. Вивчення ПОП дає непогану алгоритмічну підготовку, яку роботодавець майже завжди хоче бачити у кандидата прийому працювати. Основи всього і вся в ІТ будуються саме процедурними мовами, так що не варто їх недооцінювати. До речі, новачки, які вирішують яку мову програмування вибрати для вивчення, часто думають у тому, що многопоточность — прерогатива виключно ОВП. Це не так. Процедурні ЯП також дозволяють виконувати паралельні обчислення.
Вибір мови програмування - 3

Об'єктно-орієнтований підхід

Ті, хто почав з процедурних мов, найчастіше непогано підковані у знанні математики, алгоритмів та структур даних (це пов'язано з акцентом на ці галузі знань у технічних вузах). Проте в сучасних реаліях найуспішнішими програмістами частіше стають ті, хто добре засвоїли інший підхід до програмування — об'єктно-орієнтований. Ідеологія ООП дозволяє будувати по-справжньому глобальні системи. Особливість такого підходу — у подібності до реального світу:
  • різні об'єкти взаємодіють між собою та існують незалежно один від одного.
  • об'єкти мають ієрархію і здатні переймати чи змінювати поведінку своїх предків.
  • можна оперувати абстрактними поняттями, але взаємодіяти можуть лише реально існуючі об'єкти.

приклад

Процедурно орієнтовані мови — це інструменти для вирішення конкретних завдань. І якщо ваше завдання зазнало змін, нехай навіть незначне, вам швидше за все доведеться витрачати час і сабо на переписування всіх алгоритмів.

Представимо програму, що описує автосалон, який продає легкові та вантажні автомобілі, як нові, так і вживані. У процедурній мові для кожного об'єкта потрібно описати функції, що обробляють введення або виведення даних для нового легкового, нового вантажного, б/в легкового та б/в вантажного автомобілів. А що пропонує ООП? При об'єктно-орієнтованому підході потрібно просто описати базовий клас ТРАНСПОРТ, який зберігатиме в собі характеристики, притаманні і тому, і іншому типу автомобілів:

  • Марка
  • Об'єм двигуна
  • Потужність
  • Рік випуску
  • Новий або б/в
  • Ціна

І методи для введення-виведення інформації. Потім створимо об'єкти, що успадковують характеристики класу ТРАНСПОРТ: ЛЕГКОВУШКА і ВАНТАЖНИК. Вони містять уточнену інформацію, властиву саме таким видам транспорту, і навіть методи вводу-вывода.

Раптом керівництво салону вирішило розширити асортимент та продавати ще й мотоцикли. Процедурний підхід запропонує переписати всю логіку для нових і б/у мотоциклів із самого початку, в той час як ООП-мова дозволить просто створити новий об'єкт МОТОЦИКЛ, який успадковує всі характеристики суперкласу ТРАНСПОРТ і містить уточнення.

А що буде, якщо додавати різні транспортні засоби? Процедурна реалізація вимагатиме великих трудовитрат, ніж ОВП. Причому чим більший асортимент, тим менше потрібно робити маніпуляцій з об'єктами.

Отже, ООП - це стиль програмування, що дозволяє об'єднувати дані та методи однієї сутності та працювати з ними як з цілісним об'єктом. Сутності можуть вишиковуватися в ієрархії та взаємодіяти між собою, не вдаючись у подробиці внутрішньої реалізації один одного. Для себе я виділяю три причини, через які ОВП — прогресивніший підхід:
  1. ООП передбачає незалежну розробку окремих модулів, надаючи програмісту чи команді вибирати спосіб і межі зіткнень та обміну інформацією.

  2. Розбиття на невеликі модулі набагато простіше сприйняття, ніж монолітні процедури. Завдяки цьому сторонній розробник швидко розбереться у твоєму коді, а ти за необхідності увійдеш до нового проекту.

  3. Зміна одного об'єкта може ніяк не вплинути на взаємодію з іншим, але здатне вплинути на ієрархію дочірніх об'єктів. Освоївши такий підхід, розширення та доопрацювання програми стає тривіальним завданням.
Потрібно пам'ятати про те, що один підхід не суперечить іншому, але ієрархічно ОВП все ж таки знаходиться вище. Власне чому я рекомендую саме Java? Я виділив би наступні причини:
  1. Кросплатформність.

    Java працює скрізь завдяки JVM - віртуальній машині Java. Один із головних плюсів цієї мови — кросплатформність: не треба думати про те, яку бібліотеку підключити, яка архітектура у конкретного процесора. «Написано одного разу – працює завжди».

  2. документація.

    Найширша база документації: офіційна документація Oracle, навчальні портали, комьюніті, що постійно розвивається. Відповіді на більшість питань, що виникають у ході розробки, можна знайти за кілька хвабон, головне — зрозуміти, що забивати в пошукову систему =)

  3. Популярність.

    Java - найпопулярніша мова програмування у світі: крім вищезгаданих Android та web розробників, на Java пише майже кожен перший ентерпрайз розробник. Enterprise — внутрішньокорпоративна розробка, необхідна потреб великих корпорацій.

    Щороку хейтери пророкують «смерть Java», мовляв: « Oracle перестане його підтримувати, і взагалі ви нісенітницею займаєтеся ». Це не так! Нові версії Java обіцяють випускати раз на півроку. Найважливіші нововведення та фічі останньої версії можна прочитати тут .

    Для мене переворотом і відкриттям були лямбди в Java 8, що вже говорити про нові версії! Зараз я працюю на «ретроградському» проекті, тому не вникаю в нововведення, але те, що Java живе, — факт.

    Вибір мови програмування - 4
  4. Android.

    Android впевнено займає понад 80% ринку мобільних телефонів останні 4 роки, під цією операційною системою працюють телевізори, медіаплеєри та навіть медіасистеми в автомобілях. А технологія під цю ОС ведеться переважно на Java. Тільки уяви, які перспективи відкриваються. Коли я влаштувався на роботу як Android-розробник, мені стало цікаво: а скільки коштує продукт, розробкою якого я займаюся? Виявилося, що ціна за рік становить приблизно 5$. Виникло резонне питання: звідки кошти на цей офіс, на зарплати, печінки, тенісний стіл, роботів та інші «ніштяки»? Справа в кількості: у нашого додатку – 20 млн користувачів.

  5. Зарплати.

    Ну і на солодке: зарплата Java розробника – одна з найвищих у галузі. Ти ж збираєшся вивчати програмування з метою: отримати хорошу роботу.

Популярність мови програмування

При виборі мови програмування потрібно думати про кінцеву мету навчання - отримання першої роботи. Щоб оцінити популярність різних ЯП, я зайшов на популярний портал рекрутингу і став дивитися на кількість вакансій з різних запитів для Москви. Результати можна побачити нижче.
Java: 277
python: 227
php: 188
c#: 147
c++: 131
ruby: 40
scala: 24
kotlin: 20
Навіть популярний останнім часом Python не зміг випередити Java. Але це суб'єктивні дані: конкретне місто, конкретний день. Є офіційні джерела, до них і звернемося. На жовтень 2018 року за даними TIOBE Java займає перше місце. У рейтингу PYPL Java посідає друге місце, далеко відірвавшись від JS і суперничаючи з «модним» Python.

ПІДСУМКИ

Ось на що варто звернути увагу новачкові під час вибору мови програмування:
  • Популярність (Java стабільно займає лідируючі позиції);
  • Поріг входження (Для Java - середній: розкид компетенцій, які вимагає роботодавець, досить широкий);
  • Доступні матеріали (російською мовою порталів, аналогічних JavaRush немає, отже, пальма першості йде вгадайте кому =));
  • Області застосування: що більше галузей, у яких можна використовувати мову програмування, то більше фахівців потрібно ринку. Про крос-платформність я вже говорив, але не втомлюся це повторювати.
Звичайно, скрізь є підводні камені, але дорогу здолає той, хто йде: тільки ти сам можеш вирішити, яку мову програмування вибрати . Успіхів у навчанні!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ