Кілька слів про мови програмування

Мова програмування – це формальний набір правил та синтаксису, який використовується для написання програмного коду, який комп’ютер може розуміти і виконувати. Вона визначає, які інструкції та операції можна використовувати для створення програм та як ці інструкції повинні бути виражені.

Існує багато різних мов програмування, кожна з яких має свої особливості та призначення. Деякі мови призначені для розв’язання певних завдань або областей програмування, таких як веб-розробка, наукове моделювання, аналіз даних тощо. Деякі з найпопулярніших мов програмування включають Java, Python, C++, JavaScript, C#, Ruby та багато інших.

Класифікація

Мови програмування можна класифікувати за різними критеріями. Ось деякі з найбільш поширених способів класифікації:

За рівнем абстракціїНизькорівневі мови програмування: Вони наближені до машинного коду та архітектури комп’ютера, такі як мова асемблера. Високорівневі мови програмування: Вони більш абстрактні та зручні для розробників, оскільки дозволяють працювати на більш вищому рівні абстракції, наприклад, Python, Java, або Ruby.
За парадигмою програмуванняПроцедурне програмування: Наприклад, С. Об’єктно-орієнтоване програмування: Наприклад, Java, Python. Функціональне програмування: Наприклад, Haskell, Lisp. Логічне програмування: Наприклад, Prolog.
За використаннямМови загального призначення: Які можна використовувати для різноманітних завдань, наприклад, Python або Java. Спеціалізовані мови: Розроблені для конкретних областей застосування, таких як SQL для роботи з базами даних або MATLAB для наукових обчислень.
За типом виконанняКомпільовані мови: Код перетворюється в машинний код до виконання. Інтерпретовані мови: Код читається та виконується рядок за рядком безпосередньо під час виконання програми.
Класифікація мов програмування

Мови програмування можна класифікувати за системою типізації, яка визначає, як типи даних взаємодіють між собою в програмі.

Статична типізація        ◦ Вимагає, щоб типи даних були вказані в коді під час компіляції або перед виконанням програми.         ◦ Помилки типізації виявляються під час компіляції.         ◦ Приклади мов програмування зі статичною типізацією включають Java, C++, C#.
Динамічна типізація        ◦ Типи даних визначаються автоматично під час виконання програми.         ◦ Помилки типізації можуть виникнути під час виконання програми.         ◦ Приклади мов програмування з динамічною типізацією включають Python, JavaScript, Ruby.
Переваги і недолікиСтатична типізація: Зазвичай допомагає виявляти помилки на етапі компіляції, що робить програми більш стійкими до помилок. Однак вона може вимагати більше часу на написання коду через необхідність оголошення типів. Динамічна типізація: Дозволяє писати код більш швидко, оскільки не потрібно вказувати типи. Але вона може призвести до помилок типів, які можуть виникнути під час виконання програми.
Статична і динамічна типізація

Низькорівневі мови програмування

Низькорівневі мови програмування – це мови, які наближені до машинного коду та архітектури комп’ютера. Основна особливість низькорівневих мов полягає в тому, що вони мають прямий контроль над ресурсами та функціями обладнання комп’ютера, такими як пам’ять, процесор та периферійні пристрої.

Мова асемблера (Assembly Language)      Це найнижчий рівень мов програмування, який знають люди. Вона використовує символи та команди, які прямо відображають машинний код комп’ютера. Кожна команда асемблера відповідає конкретній інструкції процесора.
Мова машинних команд (Machine Code)       Це безпосередньо код, що виконуєтсья, який розуміє процесор. Він складається з набору бінарних чисел (0 та 1), які вказують на конкретні операції та даних для обробки.
“Напів-низькорівневі”мовиДеякі мови, такі як С або C++, можуть називатися “напів-низькорівневими”, оскільки вони надають певний рівень абстракції від асемблеру, але все ще наближені до апаратного забезпечення комп’ютера.
Низькорівневі мови програмування

Високорівневі мови програмування

Високорівневі мови програмування – це мови, які забезпечують високий рівень абстракції від машинного коду та апаратної частини комп’ютера. Вони дозволяють розробникам писати код, який більш зрозумілий та легший у використанні, оскільки він більш близький до природної,звичайної мови.

Pythonє однією з найпопулярніших високорівневих мов програмування. Вона відома своєю простотою та зручністю використання, а також великою кількістю сторонніх бібліотек та фреймворків для різноманітних завдань, таких як веб-розробка, наукові обчислення, штучний інтелект тощо.
Javaце мова програмування, яка відома своєю платформонезалежністю та об’єктно-орієнтованим підходом. Вона використовується для розробки веб-додатків, мобільних додатків, великих корпоративних систем.
JavaScriptце мова програмування, яка використовується головним чином для розробки веб-додатків та веб-сторінок. Вона використовується для створення інтерактивних елементів на сторінках, а також для реалізації серверного коду за допомогою платформи Node.js.
C#це мова програмування, розроблена корпорацією Microsoft, яка широко використовується для розробки програм для платформи Windows, веб-додатків та ігор.
Rubyце динамічна мова програмування з акцентом на простоту та продуктивність розробки. Вона часто використовується для веб-розробки, зокрема з фреймворком Ruby on Rails.
PHPце мова програмування, спеціалізована на розробці веб-додатків та динамічних веб-сайтів. Вона широко використовується для створення блогів, електронних комерційних платформ та інших веб-застосунків.
Високорівневі мови програмування

Ці високорівневі мови програмування дозволяють розробникам швидко створювати складні програми та веб-додатки, спрощуючи багато рутинних завдань та надаючи потужні бібліотеки та інструменти для роботи з даними, мережами, графікою та іншими аспектами розробки програмного забезпечення.

Процедурне програмування

Процедурне програмування – це парадигма програмування, в якій програма складається з набору процедур або функцій, які виконують певні дії над даними. Основними концепціями процедурного програмування є процедури, змінні та контроль структур.

Процедури (або функції)Вони є основною одиницею програми і містять в собі блоки коду, які виконують певні завдання. Процедури можуть приймати аргументи (вхідні дані) та повертати значення (вихідні дані).
ЗмінніВони використовуються для зберігання та обробки даних в програмі. Змінні можуть змінювати свої значення протягом виконання програми.
Контроль структурДля керування виконанням програми використовуються різні конструкції, такі як умовні оператори (if-else), цикли (for, while), та інші.
Процедурне програмування

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

Хоча процедурне програмування залишається важливою парадигмою, багато сучасних мов програмування, таких як Python, Java, або C++, додали підтримку об’єктно-орієнтованого програмування (ООП) або інших парадигм, що дозволяють більш ефективно організовувати та управляти складними програмами.

Об’єктно-орієнтоване програмування

Об’єктно-орієнтоване програмування (ООП) – це парадигма програмування, в якій програма структурується навколо об’єктів, які представляють собою конкретні екземпляри класів, та взаємодіють один з одним. Ось деякі ключові концепції об’єктно-орієнтованого програмування:

КласиКлас – це шаблон або загальний опис для створення об’єктів. Він визначає атрибути (змінні членів) та методи (функції членів), які будуть доступні для об’єктів цього класу.
Об’єктиОб’єкт – це конкретний екземпляр класу. Він має свої власні унікальні значення атрибутів та може викликати методи, визначені в класі.
ІнкапсуляціяІнкапсуляція полягає в обмеженні доступу до деяких компонентів класу, зазвичай через використання модифікаторів доступу, таких як public, private, або protected. Це дозволяє захищати дані від несанкціонованого доступу та забезпечує більшу безпеку та стійкість програм.
НаслідуванняНаслідування дозволяє створювати нові класи на основі існуючих класів, зберігаючи при цьому властивості та методи батьківського класу. Це дозволяє використовувати існуючий код та розширювати його для створення нових функціональних можливостей.
ПоліморфізмПоліморфізм дозволяє об’єктам реагувати по-різному на однакові повідомлення чи запити, забезпечуючи тим самим гнучкість та розширюваність програми.
Об’єктно-орієнтоване програмування (ООП)

Об’єктно-орієнтоване програмування допомагає розробникам створювати більш структуровані, з кращими можливостями для підтримки та масштабовання програми. Воно спрощує розробку та розуміння коду, сприяє повторному використанню компонентів, підвищує стійкість та забезпечує більшу гнучкість при розширенні програми. Багато сучасних мов програмування, таких як Java, Python, C++, використовують об’єктно-орієнтовану парадигму.

Функціональне програмування

Функціональне програмування – це парадигма програмування, в якій програми структуруються навколо функцій, які приймають та повертають значення. Основні концепції функціонального програмування включають в себе:

Функції першого класуУ функціональних мовах програмування функції можуть бути передані як аргументи до інших функцій, повернуті з інших функцій, та призначені для змінної.
Чисті функціїЦе функції, які не мають побічних ефектів та завжди повертають однаковий результат для однакових вхідних даних. Вони підтримують принципи безпечної та детермінованої роботи.
Немутабельні даніФункціональне програмування сприяє використанню немутабельних (не змінюваних) даних, тобто таких, які не можуть бути змінені після їх створення. Це допомагає уникнути багатьох типових помилок у багатопоточних та розподілених системах.
РекурсіяФункціональне програмування активно використовує рекурсію як механізм ітерації. Використання рекурсії дозволяє писати код для вирішення певних завдань.
Замикання (Closures)Замикання – це функції, які мають доступ до змінних з середовища, в якому вони були створені. Це дозволяє створювати функції, які зберігають стан та поведінку, що робить їх корисними для створення об’єктів.
Функціональні структури данихФункціональні мови програмування часто мають вбудовані структури даних, такі як списки, масиви тощо, які підтримують функції вищих порядків та оператори.
Функціональне програмування

Функціональне програмування допомагає створювати більш ефективні програми, спрощуючи багато аспектів розробки, такі як обробка даних та управління станом. Багато мов програмування підтримують елементи функціонального програмування, такі як JavaScript, Python, Scala, Haskell.

Функціональне vs процедурне

Основна різниця між процедурним програмуванням і функціональним програмуванням полягає в їхній основній парадигмі та способі організації коду:

ПарадигмаПроцедурне програмування: Основна концепція – це розділення програми на блоки коду, які називаються процедурами або функціями. Програма складається з послідовності інструкцій, які виконуються послідовно, викликаючи різні процедури для виконання певних завдань. Функціональне програмування: Основна концепція – це орієнтація на функції, які приймають та повертають значення. Програма структурується навколо функцій, які можуть бути передані, повернуті та оброблені як дані.
Змінність данихПроцедурне програмування: Зазвичай використовується змінна структура даних, яка може змінюватися протягом виконання програми. Функціональне програмування: Сприяє використанню немутабельних (не змінюваних) даних, які не можуть бути змінені після їх створення.
Побічні ефектиПроцедурне програмування: Дозволяє виконувати побічні ефекти, такі як зміна значень глобальних змінних або стану програми. Функціональне програмування: Спрямоване на створення чистих функцій, які не мають побічних ефектів та завжди повертають однаковий результат для однакових вхідних даних.
Структура програмиПроцедурне програмування: Програми будуються навколо блоків коду, які реалізують конкретні завдання. Функціональне програмування: Програми будуються навколо функцій, які складаються з набору інструкцій для обробки даних.
Функціональне vs процедурне

Хоча існують різниці між процедурним та функціональним програмуванням, у багатьох мовах програмування можна використовувати елементи обох підходів. Наприклад, мова Python підтримує як процедурне, так і функціональне програмування.

Логічне програмування

Логічне програмування – це парадигма програмування, яка базується на логічних висловлюваннях та правилах інференції. Основною ідеєю логічного програмування є визначення відношень між фактами та використання цих відношень для виводу нових фактів або розв’язання завдань.

Логічні висловлювання (правила)Логічні програми складаються з набору логічних висловлювань або правил, які описують відношення між об’єктами. Ці правила можуть включати факти та умови, які визначають, коли ці факти є істинними.
Інференція (вивід)Один з ключових аспектів логічного програмування – це використання правил для виводу нової інформації з наявних фактів. Іншими словами, програма може використовувати правила для логічного висновку нових фактів на основі вже відомих.
Безперервність (декларативність)Логічні програми виражають відносини між даними у вигляді логічних висловлювань, а не послідовності інструкцій для виконання. Це робить їх більш декларативними, що означає, що програміст описує, що потрібно зробити, а не як це зробити.
ПримітивиФакти: Описують стан системи або деякі дані, які програма має на увазі. Правила: Визначають відносини між фактами та умови, які повинні бути виконані для того, щоб правило застосовувалось. Запити (Queries): Запити використовуються для пошуку фактів або рішення проблем, запитуючи базу даних фактів та правил.
Приклади мов програмуванняДеякі мови програмування, які підтримують логічне програмування, включають Prolog, Datalog, та Mercury.
Логічне програмування

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

Компілятори і інтерпретатори

Компілятор і інтерпретатор – це два основних типи програм, які перетворюють вихідний код програми у код, що виконується або машинний код.

КомпіляторКомпілятор – це програма, яка перетворює вихідний код програми (написаний на високорівневій мові програмування) в машинний код або набір інструкцій, який може виконуватися безпосередньо на комп’ютері. Після компіляції вихідний код стає незалежним від вихідної мови програмування. Компільований код може виконуватися без наявності компілятора на цільовій системі. Компілятор перевіряє весь код програми на предмет синтаксичних та семантичних помилок до генерації вихідного коду.
ІнтерпретаторІнтерпретатор – це програма, яка виконує вихідний код програми послідовно по одній інструкції. Він вираховує і виконує кожну інструкцію з вихідного коду на ходу, без необхідності компіляції всього коду перед виконанням. Інтерпретатор може надавати можливість взаємодії з програмою, що виконується у реальному часі.
Компілятор і інтерпретатор

PYPL

PYPL (PopularitY of Programming Language) — індекс створений на основі аналізу як часто курси з вивчення певної мови шукають у Google. Чим більше мову програмування шукають, тим популярнішою вона вважається.

RankLanguageShare1-year trend
1Python29.06 %+1.4 %
2Java15.97 %+0.2 %
3JavaScript8.7 %-0.6 %
4C#6.73 %-0.0 %
5C/C++6.4 %-0.0 %
PYPL

TIOBE

TIOBE (The Importance of Being Earnest) індекс, який оцінює популярність мови програмування з урахуванням даних від Google, Bing, Yahoo, Wikipedia, Amazon, YouTube, Baidu. Цей індекс оновлюється один раз на місяць.

Jun 2024Jun 2023Programming LanguageRatingsChange
11Python15.39%+2.93%
23C++10.03%-1.33%
32C9.23%-3.14%
44Java8.40%-2.88%
55C#6.65%-0.06%
67JavaScript3.32%+0.51%
714Go1.93%+0.93%
89SQL1.75%+0.28%
96Visual Basic1.66%-1.67%
1015Fortran1.53%+0.53%
TIOBE
Кілька слів про мови програмування

В цьому відео поговоримо про мови програмування:
00:00 Мови програмування
01:37 Класифікація
07:49 Низькорівневі мови програмування
10:19 Високорівневі мови програмування
13:59 Процедурне програмування
16:06 Об’єктно-орієнтоване програмування
20:17 Функціональне програмування
24:18 Функціональне vs процедурне
27:02 Логічне програмування
29:35 Компілятори і інтерпретатори
30:50 Індекс PYPL
33:44 Індекс TIOBE

Leave a Reply

Your email address will not be published. Required fields are marked *