Що таке Python?

Python — це інтерпретована високорівнева мова програмування загального призначення. Я науковець та обожнюю визначення якщо вони змістовні, тому що із визначення можна багато чого дізнатися цікавого про той предмет, що я вивчаю. Давайте й ми розберемо це визначення та що означає кожне слово.

Python — це мова програмування

Це означає, що за допомогою Python ми можемо спілкуватися з компʼютером. Написати програму на цієї мові щоб компʼютер вирішив якесь завдання.

Python — це високорівнева мова

Що означає рівень мови програмування? Те, що мова вища за метр-вісімдесят? Якщо є високорівневі мови програмування, то мабуть бувають низькорівневі мови?

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

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

Усередині комп'ютер працює на основі двійкової логіки, він розуміє тільки нулі і одиниці, він не розуміє конструкції навіть англійської мови. Спочатку програмування комп'ютерів зводилося до того, що процесору передавали інструкції, закодовані за допомогою нулів і одиниць. Та й доступних операцій не дуже багато, а ті що є — досить примітивні: додавання, віднімання, множення, ділення. Наприклад, в звичайних процесорах немає інструкції щоб знайти корінь квадратного рівняння. Щоб компʼютер вирішив це завдання треба написати програму, яка оперує лише базовими арифметичними інструкціями.

Програмування за допомогою нулів та одиниць, коли ми вказуємо процесору напряму які операції виконувати над якими даними, та як їх зберігати, — якраз і називається низькорівневим програмуванням. Керування регістрами процесору, керування памʼяттю, керування каналами введення-виведення — це найнижчий рівень, на який ми можемо опуститися в перекладі програми з людської мови на мову комп'ютера або мову процесора.

З часом почали з'являтися мови програмування, де вже не потрібно було знати всі коди, всі інструкції, записані в нулях і одиницях.

Наприклад, однією з таких перших мов стала мова асемблеру. Мова асемблеру призначала певні мнемонічні назви всім кодам інструкцій. Вже не потрібно було памʼятати, що інструкція додавання має код наприклад 1001, а віднімання — це 1010, і так далі. Можна було просто записати ключове слово «додати» і вказати назви регістрів процесору або адреси пам'яті, де знаходяться числа. А вже спеціальна програма, яка має назву «асемблер», вже переводила програму на мові асемблеру в двійкові коди. Таким чином, рівень абстракції від компʼютера став трохи вище, ніж кодування в нулях та одиницях.

З часом абстракція мов підвищувалася все вище і вище. Наприклад, мова програмування C зʼявилась у 1972 році. Вона хоч і є мовою низького рівня, тому що вона оперує адресами комірок пам'яті, та усі вбудовані типи даних — це відображення типів даних, яким оперую процесор, але вже зʼявилися поняття змінної, масивів, циклів, функцій, що значно спростило програмування алгоритмів. За допомогою так званих крос-компіляторів зʼявилась можливість одну і ту саму програму на мові С вікдкомпілювати на будь-який процесор. Якщо раніше для цього треба було вивчити декілька мов асемблера кожного процесора, то тепер достатньо знати лише мову С, щоб запрограмувати будь-який процесор. Мова С досі актуальна. Якщо ви дивитесь або читаєте цій текст на компʼютері з операційною системою Windows, Linux, Mac OS, або на мобільному пристрої Apple або Android, то знайте, що суттєву частину цих операційних систем написано та досі підтримується за допомогою мови програмування С.

Але з часом почали з'являтися мови більш високого рівня, наприклад, як мова Python, яка вже безпосередньо не оперує термінами процесора, регістрів, байтів. Мова Python оперує типами даних, які вже зрозумілі людині: це числа, це рядки, це об'єкти, словники, списки тощо. Наприклад, в програмі бухгалтерського обліку на Python присутні такі поняття як рахунок, баланс, податок, а є операції з цими поняттями.

Чи знаєте ви, яка найстаріша мова програмування, яка досі використовується?

Fortran, скорочення від “Formula Translator” (українською це “перекладач формул”), є найстарішою мовою програмування високого рівня, яка досі активно використовується. Ця мова програмування була розроблена у 1957 році компанією IBM під керівництвом Джона Бекуса. Fortran здійснив революцію в обчислювальній техніці, зробивши написання складних математичних програм набагато простішим для науковців і інженерів. У той час, коли комп’ютери програмувалися за допомогою низькорівневих мов асемблера, Fortran запропонував спосіб вираження математичних формул і алгоритмів у зрозумілому, високорівневому форматі. Ця інновація значно скоротила час розробки програм та зробила обчислювальні можливості більш доступними.

Fortran — це мова-першопроходець, якому належить два досягнення. Перший компілятор: Компілятор Fortran був новаторським програмним продуктом, який ефективно перекладав код високого рівня у машинний код – досягнення, у яке тоді мало хто вірив. Перша переносима мова: Fortran встановила стандарти, які дозволяли використовувати програми на різних комп’ютерних системах із мінімальними змінами. Це стало вирішальним кроком у розвитку програмного забезпечення.

Чому Fortran досі актуальний у 21 столітті? Понад шість десятиліть потому Fortran залишається вибором номер один для багатьох застосувань у наукових обчисленнях, інженерному моделюванні та високопродуктивних обчисленнях (high performance computing, HPC). Її простота та ефективність у роботі з числовими обчисленнями роблять її незамінною для таких задач, як: прогнозування погоди, моделювання клімату, аерокосмічні симуляції, обчислювальна хімія та фізика.

Fortran — це сучасна мова, яка не залишається в минулому. Мова значно еволюціонувала, і сучасні версії, такі як Fortran 90, Fortran 2008 та Fortran 2018, включають: програмування з використанням масивів, об’єктно-орієнтоване програмування, можливості паралельних обчислень.

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

Тож наступного разу, коли ви побачите прогноз погоди чи почуєте про космічну місію, пам’ятайте: Fortran, можливо, працює за лаштунками!

Python — мова загального призначення

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

  • створення веб-сайтів і веб-додатків;
  • аналізу даних і візуалізації;
  • розробки моделей машинного навчання та штучного інтелекту;
  • автоматизації рутинних завдань і створення скриптів;
  • розробки ігор і прототипів;
  • створення десктопних і мобільних додатків;
  • обробки текстів та природної мови (NLP);
  • роботи з мережею, кібербезпекою та тестуванням вразливостей;
  • взаємодії з апаратним забезпеченням і робототехнікою;
  • наукових досліджень, математичного моделювання і симуляцій;
  • фінансових програм і алгоритмічної торгівлі.

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

Python — інтерпретована мова

Термін інтерпретована мова стосується того, яким чином наша програма виконується на процесорі комп’ютера. Існують два основні способи виконання коду: інтерпретація та компіляція. Давайте розглянемо їх відмінності.

Як би там не було, будь-яка програма — Python, C, C++, Java, JavaScript — зрештою виконується на центральному процесорі. Проте різниця між компільованими та інтерпретованими мовами полягає в наступному: якщо ми пишемо програму на C, інструменти компіляції перетворюють її безпосередньо в машинний код (нулі та одиниці), який може виконувати процесор без додаткових прошарків. У випадку з Python код спочатку компілюється у спеціальне проміжне представлення, яке виконується особливою програмою — інтерпретатором. Саме ця програма відповідає за передачу команд процесору. Такий підхід і називається інтерпретацією: щоб запустити програму, написану мовою Python, нам потрібен інтерпретатор.

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

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

У компільованих мовах цих обмежень немає. Вони перетворюють код безпосередньо в машинні інструкції процесора, без додаткового шару інтерпретації. Це дозволяє використовувати всі можливості конкретної архітектури процесора. Наприклад, хоча процесори Intel і AMD мають спільну 64-бітну архітектуру, їхні мікроархітектури відрізняються. Оптимізуючи програму для конкретного процесора, можна досягти кращої продуктивності. Проте інтерпретатор Python обмежує доступ до таких оптимізацій.

Якщо програмі необхідно максимально ефективно використовувати ресурси процесора, оперативну пам’ять і всі доступні інструкції, Python не завжди підходить. Наприклад: розробка рушіїв для 3D-ігор вимагає максимальної продуктивності, тому зазвичай використовуються компільовані мови на зразок C++.

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

Наявність окремого інтерпретатора вплинуло на те, що слово Python може використовуватись у двох контекстах: це Python як мова програмування і Python як інтерпретатор програм на мові Python. Два приклади: в книжковому магазині покупець звертається до продавця: "У вас є Python?" Або другий варіант: програміст сів за незнайомий комп'ютер і питає: "У вас є Python?" Тут ми говоримо про одне і те ж, але контекст різний. У першому випадку покупець цікавиться, чи є у вас книги з мови програмування Python, а у другому випадку програміст питає чи є у вас інтерпретатор Python, встановлений на цьому компʼютері щоб виконати скрипт. Тому Python може згадуватися в цих двох контекстах: як мова програмування, або як інтерпретатор програм на мові Python. Розглядати контекст, коли дитина запитує про Python в зоопарку ми не будемо, тому що це не стосується програмування.

Давайте ще раз проговоримо визначення мови Python — це інтерпретована високорівнева мова програмування загального призначення. Я сподіваюсь, що ви дізнались багато нового і цікавого лише з одного цього визначення.

Корні квадратного рівняння

Якщо мікропроцесор не знає, як знайти корені квадратного рівняння, то як його цьому навчити? Давайте зробимо це за допомогою мови Python.

Це дуже проста програма. Усі рядки, які починаються з решітки, — це коментарі. Це нотатки для людини, а компʼютер їх не виконує та ігнорує. Спочатку програма вводить коефіцієнти рівняння a, b та c у памʼять компʼютера за допомогою функції input. Далі за допомогою арифметичних дій множення, квадрату та віднімання обчислюється дискримінант. Якщо дискримінант менше нуля, то за допомогою функції print програма виведе повідомлення про це на екран компʼютера, а функція exit завершить роботу цього алгоритму. Далі за допомогою арифметичних дій програма обчислює перший та другий корені. Остання інструкція — за допомогою функції print програма виведе з памʼяті компʼютера значення коренів. На цьому алгоритм завершує свою дію.

# Пошук коренів квадратного рівняння виду ax^2 + bx + c = 0

# Введення даних
a = float(input("Введіть коефіцієнт a: "))
b = float(input("Введіть коефіцієнт b: "))
c = float(input("Введіть коефіцієнт c: "))

# Обчислення
дискримінант = b**2 - 4*a*c

if дискримінант < 0:
    print("Рівняння не має дійсних коренів (дискримінант < 0).")
    exit()

корінь1 = (-b + дискримінант**0.5) / (2 * a)
корінь2 = (-b - дискримінант**0.5) / (2 * a)

# Виведення даних
print("Корені квадратного рівняння:", корінь1, корінь2)

Зверніть увагу, що я не вказував адреси комірок памʼяті, де зберігати дані, не вказував регістри процесора, за допомогою яких робити обчислення, не вказував двійкові коди арифметичних інструкцій, та не вказував адреси зовнішніх пристроїв щоб робити введення та виведення інформації. Усі ці низькорівневі дії зробив за мене інтерпретатор мови Python. Окрім цього, ця програма дуже схожа на ті формули, які я записував у зошит в школі, коли вивчав алгебру. Тому цю програму легко зрозуміти людині, яка ніколи не програмувала, але навчалася в школі. Та ще й Python дозволяє записувати імена змінних українською мовою (хоча професійні програмісти так не роблять, тому що працюють на світовому рівні, де треба спілкуватись англійською, та й ми з вами це робимо, мабуть, останній раз). Ось чому Python — це високорівнева мова програмування, легка для зрозуміння та вивчення початківцями у програмуванні.