Урок №1. Вступ до програмування

  Оновл. 6 Лис 2022  | 

 21327

 ǀ   7 

Комп’ютери розуміють тільки дуже обмежений набір інструкцій і щоб змусити їх щось зробити, потрібно чітко сформулювати завдання, використовуючи ці ж інструкції. Програма (або «додаток», «програмне забезпечення», «софт») — це набір інструкцій, які вказують комп’ютеру, що йому потрібно зробити. Фізична частина комп’ютера, яка виконує ці інструкції, називається «залізом» або апаратною частиною (наприклад: процесор, материнська плата, оперативна пам’ять тощо).

Машинна мова

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

   По-перше, кожна команда (інструкція) складається тільки з двох цифр: 0 або 1. Ці числа називаються бітами (скор. від англ. «binary digit») або двійковим кодом. Наприклад, ось команда машинної мови архітектури x86: 10110000 01100001.

   По-друге, кожен набір бітів трансформується процесором в інструкції для виконання певного завдання (наприклад, порівняти два числа між собою або перемістити вказане число в певну комірку пам’яті). Різні типи процесорів зазвичай мають різні набори інструкцій, тому інструкції, які працюватимуть на процесорах Intel цілком ймовірно, що не працюватимуть на процесорах Xenon (які використовуються в ігрових консолях Xbox). Раніше, коли комп’ютери тільки починали масово поширюватися, програмісти писали більшість програм тільки на машинній мові, що було дуже незручно, важко і займало набагато більше часу, ніж зараз.

Мова Асемблера


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

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

mov al, 061h

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

Для вирішення проблем читабельності коду і надмірної складності були розроблені високорівневі мови програмування. C, C++, Pascal, Java, JavaScript і Perl відносяться до високорівневих мов програмування, однією з основних властивостей яких є можливість запуску на різних архітектурах процесорів. Програми високорівневих мов програмування також повинні бути перекладені в машинну мову перед їх виконанням процесором. Є два варіанта перекладу в машинну мову:

   компіляція, яка виконується компілятором;

   інтерпретація, яка виконується інтерпретатором.

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

Процес компіляції можна зобразити наступним чином:

 

 

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

Процес інтерпретації можна зобразити наступним чином:

 

 

Будь-яка мова програмування може або компілюватися, або інтерпретуватися. Однак, такі мови, як C, C++ і Pascal — компілюються, в той час як “скриптові” мови програмування, такі, як Perl і JavaScript — інтерпретуються. Деякі мови програмування (наприклад, Java) можуть як компілюватися, так і інтерпретуватися.

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


Перевага №1: Легше писати/читати код. Ось вищенаведена команда, але вже на мові C++:

а = 97;

Перевага №2: Потрібно менше інструкцій для виконання завдань. У мові C++ ви можете зробити щось на зразок наступного в одному рядку:

а = Ь * 2 + 5;

В мові асемблера вам довелося б використати 5 або 6 інструкцій.

Перевага №3: Вам не потрібно турбуватися про такі деталі, як завантаження змінних в регістри процесора. Компілятор або інтерпретатор бере це на себе.

Перевага №4: Високорівневі мови програмування підходять під різні архітектури (але є один нюанс):

 

 

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

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (187 оцінок, середня: 4,87 з 5)
Завантаження...

Коментарів: 7

  1. Олександр :

    Доброго дня. Мені 19 років на 3 курсі ІФТКН і замислився що нічогісенько не шарю в мовах програмування. Обрав для вивчення С++. Потрапив на ваш сайт з темами. Питання таке, чи зможу прочитавши всі теми мати достойні базові знання С++? Зрозуміло що без окремих курсів, можливо і платних не обійдеться, але все ж, для початку мені це підйде?

    1. Avatar photo Юрій :

      Привіт! Для рівня trainee підійде, але при умові виконання всіх практичних завдань самостійно. Для рівня junior потрібно буде ще уроки по створенню ігор пройти і намагатися зробити щось самостійно.

  2. Марина :

    Юрій, хотілося бвід Вас поради. В мене син поступив в Варшаву. В школі у нас програмування не було, але це вже не важливо. Зараз у нього на 1 курсі прорамування C++. По суті це космос. Яка є реальна літаратура для того щоб зрозуміти цей предмет. Можливо курси. Порадьте, будь ласка, якщо можна

    1. Avatar photo Юрій :

      Особисто я не можу порекомендувати Вам конкретно якусь літературу чи курси по С++, тому що сам я нічого по С++, окрім інформації з Інтернету, не читав і ніяких курсів по С++ не проходив. На рахунок книг – постійно стикався з наступними (інші користувачі радили, або просто десь в статтях їх дуже часто згадували):

      1. Бьёрн Страуструп (творець C++) — «Программирование. Принципы и практика использования C++».
      2. Герберт Шилдт (у нього є цикли книг про С++ та інші мови програмування) — «С++: базовый курс».
      3. Стивен Прата«Язык программирования C++».

      На рахунок курсів – зараз дуже багато є як і безкоштовних (онлайн) курсів, так і платних (офлайн). Онлайн-курси Ви можете подивитися тут – Ravesli. 70+ бесплатных ресурсов для изучения программирования (підзаголовок “Универсальные ресурсы”). Офлайн-курси потрібно перевіряти по відгукам тих людей, які їх дійсно пройшли.

    2. Олександр :

      Читав багато книжок по С++. До цього вчив в універі С++. Звісно, що для закриття лаб вистачить умовної методички

      від прєпода. Ну щось накшталт є у Т. Павловської C/C++. Программирование на языке высокого уровня.

      або є методичка авторства Войтенко Морозов.

      Але для нормального розуміння цього малувато. Особисто я перед тим як знайти реальну роботу на С++

      пробував і кидав безліч книжок. Із того, що може сподобатись:

      0. Будь-ласка, не читайте Страуструпа. Він гарний програміст, але книжки по програмуванню писати не вміє.

      C++. От ламера до программера Алекс Эллайн.
      Харви Дейтел, Пол Дейтел. КАК ПРОГРАММИРОВАТЬ НА С++ (рекомендував викладач в університеті)
      Васильев А.Н Программирование на  С++ в примерах і задачах ( є українською)
      Липпман, Лажойе, Му: Язык программирования C++. Базовый курс
      Книга авторства Лафоре.
      Эффективное программирование на C++ (Эндрю Книг, Барбара Му)

      На те, що книги давні можна не дивитись, база залишилась та сама. Потім вже можна
      вивчити фішки С++11 ( багатопоточність, регулярки, лямбди) і  далі.
      На разі С++ 20 підтримують не всі компілятори, а в продакшені вам рідко може потрапити код за 17 стандартом.

  3. Богдан :

    Почав вчитися по сайту Равеслі і закінчивши третій розділ, побачив, що є переклад на українську. Дякую тому, хто зробив переклад. Дуже мало якісних ресурсів українською. Надалі буду вчитись тут))
    Питання: буде робитися переклад з інших розділів типу Qt5, Linux, OpenGL, створення ігор?

    1. Avatar photo Юрій :

      Будь ласка)

      Можливо з'явиться ще переклад уроків по Linux. Більше перекладів з Равеслі (Qt5, OpenGL і т.д.) не буде.

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *