Модуль 37

Типові помилки початківців

Ось готовий урок, створений за твоїм майстер-промптом. Він орієнтований на програмування (оскільки контекст David Malan / CS50), але принципи є універсальними.


🎓 УРОК CS50: Типові помилки початківців (і як перестати їх боятися)

Привіт, світе! 👋 Мене звати... ну, назвемо це "ваш цифровий ментор", і це — CS50.

Сьогодні ми не будемо вчити нову мову чи складний алгоритм. Сьогодні ми поговоримо про те, що трапляється з кожним із нас — від студента, який написав перший рядок коду, до інженера Google. Ми поговоримо про помилки.


1. 🔥 Вступ: Чому все ламається?

Уявіть, що ви вирішили приготувати лазанью за рецептом. Ви берете тісто, м'ясо, соус... але замість того, щоб поставити це в духовку на 200 градусів, ви кладете все в пральну машину і вмикаєте режим "віджим".

Що станеться? 1. Пральна машина, ймовірно, зламається. 2. Вечері не буде. 3. Ви будете дуже розчаровані.

У програмуванні це відбувається постійно. Комп'ютер — це неймовірно потужна, але абсолютно буквальна машина. Він як той джин із казки: виконає саме те, що ви сказали, а не те, що ви мали на увазі.

Питання до вас: Чи бувало у вас таке, що ви дивилися на свій код, були впевнені на 100%, що він правильний, а комп'ютер видавав вам екран, повний червоного тексту?

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


2. 🧠 Теоретична база: Анатомія помилки

Давайте заглянемо "під капот". Коли ви пишете код, ви фактично пишете інструкцію. Помилки бувають трьох основних типів. Це треба запам'ятати залізною хваткою.

1. Синтаксичні помилки (Syntax Errors)

Це — граматика. Уявіть, що ви пишете лист другові, але забули всі коми, пробіли і написали слова задом наперед. Друг просто не зможе це прочитати. * Як це виглядає: Програма навіть не запускається. Компілятор каже: "Я не розумію, що тут написано". * Приклад: Забули крапку з комою ; або дужку }.

2. Логічні помилки (Logic Errors)

Це — найпідступніші вороги. Це як той випадок із лазаньєю в пральній машині. Граматично інструкція "Поклади лазанью в пралку" правильна. Ви можете це вимовити. Але результат — катастрофа. * Як це виглядає: Програма запускається, працює, не видає помилок, але робить повну нісенітницю (наприклад, каже, що 2 + 2 = 5).

3. Помилки часу виконання (Runtime Errors)

Це коли все йшло добре, аж раптом сталось щось непередбачуване. Це як їхати на машині (все за правилами), і раптом посеред дороги зник міст. * Приклад: Ділення на нуль або спроба відкрити файл, якого не існує. Програма "крашиться" (crashes) прямо під час роботи.

Інтуїтивно: * Синтаксис = Ви сказали нісенітницю. * Логіка = Ви сказали дурницю, але чітко. * Runtime = Стався форс-мажор.


3. 🧪 Приклади: Від простого до болючого

Давайте подивимось на код. Я використовуватиму псевдокод, схожий на C/Python, щоб було зрозуміло всім.

Приклад 1: "Класика жанру" (Синтаксис)

int main(void) {
    printf("hello, world")
}

Що тут не так? (Подумайте секунду...) . . . Відповідь: Не вистачає крапки з комою ; в кінці рядка (у мовах типу C, C++, Java). Комп'ютер чекає завершення команди, а ми його не дали. Він у ступорі.


Приклад 2: "Нескінченність — не межа" (Логіка)

Уявіть, ми хочемо 3 рази сказати "Привіт".

int i = 0;
while (i < 3) {
    printf("Привіт!\n");
}

Чого ви очікуєте? Що на екрані з'явиться три "Привіт!". Що станеться насправді? Ваш комп'ютер буде друкувати "Привіт!" вічно (або поки ви його не зупините силою). Чому? Бо ми забули рядок i = i + 1 (або i++). Змінна i завжди дорівнює 0. Нуль завжди менше трьох. Цикл ніколи не закінчиться. Це — класична логічна помилка.


Приклад 3: "За парканом" (Runtime / Logic)

Ми маємо список із 3 студентів: students = ["Аня", "Богдан", "Віка"]

Ми хочемо вивести останнього:

print(students[3])

Очікування: Виведе "Віка". Реальність: IndexError: list index out of range. Чому? У програмуванні відлік майже завжди починається з 0. * 0 = Аня * 1 = Богдан * 2 = Віка Елемента під номером 3 не існує. Ми спробували залізти в пам'ять, яка нам не належить.


4. 🛠 Практична частина

Час забруднити руки! Ось кілька завдань для вас. Не бійтеся помилятися — ми ж саме це сьогодні вчимо.

Завдання 1: Знайди шпигуна (Синтаксис) У цьому коді є одна помилка. Знайдіть її.

if (x > 5)
    print("Більше п'яти!")

(Підказка: у Python після умови потрібен певний знак пунктуації).

Завдання 2: Математика зламалась (Логіка) Ви хочете порахувати середнє арифметичне двох чисел: 10 і 20.

a = 10
b = 20
average = a + b / 2
print(average)

Програма виводить 20. Але (10+20)/2 має бути 15. Де помилка? Виправте формулу.

Завдання 3: Виправте умову Ми хочемо пускати в клуб тільки тих, кому є 18 років АБО більше. Код: if (age > 18): print("Ласкаво просимо") Що станеться, якщо прийде людина, якій рівно 18? Як виправити оператор?

Завдання 4: Міні-кейс Ви пишете програму для банкомата. Користувач хоче зняти гроші. Напишіть (на папері або в голові) перелік перевірок, які треба зробити, щоб не виникло помилки. (Наприклад: Чи є гроші на рахунку? Чи є гроші в самому банкоматі? Чи правильний ПІН?)

Завдання 5: А що, якщо...? Що буде, якщо у програмі калькулятора користувач замість числа введе слово "привіт"? Це Syntax, Logic чи Runtime помилка?


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі? Не за швидкістю друку. А за реакцією на помилку.

🚫 Новачок: 1. Бачить червоний текст помилки. 2. Лякається / сердиться. 3. Одразу закриває повідомлення про помилку, не читаючи його. 4. Починає хаотично змінювати код, сподіваючись на диво.

✅ Досвідчений розробник: 1. Бачить помилку. 2. Каже: "Ага, цікаво". 3. ЧИТАЄ текст помилки (там часто написано, у якому рядку проблема!). 4. Використовує метод "Гумової качечки" (Rubber Duck Debugging).

Порада №1: Читайте помилки. Компілятор — це не ваш ворог, це ваш друг, який просто погано вміє пояснювати, але дуже старається вказати на проблему.

Порада №2: Не пишіть весь код одразу. Написали 3 рядки — запустили, перевірили. Працює? Пишемо далі. Якщо писати 100 рядків без перевірки, знайти помилку буде в 100 разів важче.


6. 🧩 Підсумок

Отже, що ми маємо в сухому залишку?

  1. Помилки — це нормально. Це частина процесу створення. Код без помилок з першого разу — це міф.
  2. Ви тепер знаєте різницю між Синтаксисом (граматика), Логікою (сенс) та Runtime (аварія).
  3. Ви знаєте золоте правило: читай повідомлення про помилку і перевіряй код малими шматочками.

Що ви тепер вмієте? Ви вмієте не впадати в ступор при вигляді поламаного коду, а аналізувати його. Ви зробили перший крок від "кодувальника" до "інженера".

У наступній лекції ми поговоримо про те, як не просто писати код, що працює, а писати код, який працює швидко. Готуйтеся, ми зануримося у світ Алгоритмів.

А поки що... це був CS50! 🏛️