Модуль 35

Troubleshooting та діагностика проблем

Ось готовий урок, створений за твоїм майстер-промптом.


🎓 Урок: Troubleshooting та діагностика проблем

(Стиль David Malan: енергійно, з аналогіями, про складне — просто)


1. 🔥 Вступ: Коли все йде шкереберть

Уявіть ситуацію. П'ятниця, вечір. Ви пишете код уже три години. Ви впевнені, що логіка ідеальна. Ви натискаєте "Run" і... Бабах! Червоний екран, незрозумілі помилки, або ще гірше — програма просто мовчки закривається.

Знайоме відчуття, коли серце падає в п'яти?

А тепер питання: Що ви робите в першу чергу? 1. Панікуєте і починаєте міняти випадкові рядки коду? 2. Копіюєте помилку в Google? 3. Чи видихаєте і вмикаєте режим "Детектива"?

Сьогодні ми говоримо про Troubleshooting (усунення несправностей).

Чому це критично? Тому що програмування — це не лише написання коду. Це на 80% розуміння того, чому ваш код не працює так, як ви планували. Без навички діагностики ви схожі на лікаря, який при головному болю відрізає пацієнту ногу, сподіваючись, що це допоможе.

Давайте навчимося бути "Хірургами коду", а не панікерами.


2. 🧠 Теоретична база: Мистецтво відсікання зайвого

Що таке Troubleshooting "під капотом"? Це не магія. Це чиста логіка та процес виключення.

Уявіть, що у вас вдома зникло світло. Ви ж не дзвоните одразу в обленерго з криком "Вся система зламана!"? Ні. Ви йдете за алгоритмом: 1. Чи горить світло у сусідній кімнаті? (Якщо так — проблема в лампочці цієї кімнати). 2. Чи є світло у сусідів? (Якщо ні — проблема у будинку/районі). 3. Чи вибило пробки?

У комп'ютерних науках ми робимо те саме. Ми намагаємося ізолювати проблему.

🔑 Ключові поняття:

  1. Reproducibility (Відтворюваність):

    • Інтуїтивно: Чи можете ви змусити помилку статися знову?
    • Запам’ятати: Якщо ви не можете стабільно відтворити баг, ви не зможете перевірити, чи виправили ви його.
  2. Divide and Conquer (Розділяй і володарюй):

    • Як це працює: У вас є 1000 рядків коду. Помилка десь там. Ви ставите перевірку посередині (на 500-му рядку). Все добре? Значить помилка в другій половині. Ви щойно відкинули 500 рядків, навіть не читаючи їх!
    • Аналогія: Пошук згорілої лампочки в гірлянді. Перевірте середину гірлянди. Струм є? Значить, проблема в другій частині.
  3. The Stack Trace (Слід помилки):

    • Це карта, яку залишає програма перед тим, як "померти". Вона показує точний шлях: функція А викликала функцію Б, яка викликала функцію В, де і стався вибух.

3. 🧪 Приклади: Від лампочки до сервера

Приклад 1: Мінімум (Print Debugging)

Припустимо, ми хочемо порахувати суму чисел від 1 до 5. Очікуємо 15.

total = 0
for i in range(5):
    total = total + i
print(total)

Питання до вас: Що виведе цей код? Подумайте секунду. ... Ви очікували 15? А він виведе 10. Чому?

Діагностика: Ми додаємо "шпигуна" — функцію print() всередину циклу, щоб бачити, що відбувається в момент дії.

for i in range(5):
    print(f"Зараз i = {i}") # Наш шпигун
    total = total + i

Результат: Ми побачимо, що i йде: 0, 1, 2, 3, 4. Висновок: Ага! Python рахує з нуля і не включає останнє число в range. Ми знайшли проблему, просто зазирнувши "під капот".


Приклад 2: Реальний кейс (Веб-сервер)

Ви намагаєтеся відкрити свій сайт, а там — помилка 500 Internal Server Error.

Що це означає? Сервер каже: "Я зламався, але не скажу де". Якщо ви новачок, ви дивитесь на білий екран і плачете. Якщо ви профі, ви йдете читати Logs (Логи).

Логи — це чорна скринька літака. Там записано: [Error] 20:04:15 - Database connection failed: Wrong password.

Рішення: Проблема не в коді сайту, проблема в паролі до бази даних. Ми зекономили години, просто прочитавши "щоденник" сервера.


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

Тепер ваша черга. Не читайте далі, поки не спробуєте відповісти.

🔹 Завдання 1: Знайди шпигуна

Код має вітати користувача тричі, але нічого не виводить.

i = 3
while i > 0:
    print("Привіт!")
    i = i + 1 

Питання: Що станеться, якщо запустити цей код? (Обережно, це пастка!) Підказка: Подивіться, як змінюється i.

🔹 Завдання 2: Метод Каченяти (Rubber Ducking)

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

🔹 Завдання 3: Ізоляція змінних

Користувач каже: "Я не можу завантажити фото на сайт". Напишіть 3 питання, які ви поставите користувачу, щоб звузити коло пошуку (за принципом "розділяй і володарюй"). (Наприклад: Це стається з усіма фото чи тільки з великими?)

🔹 Міні-кейс: "А що, якщо..."

Ви написали калькулятор. Він працює ідеально. Завдання: Як зламати ваш калькулятор? Придумайте вхідні дані, які викличуть помилку. (Підказка: Що математикам заборонено робити з нулем?)


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

Як відрізнити новачка від сеньйора під час помилки?

❌ Новачок: * "Комп'ютер помиляється!" (Спойлер: комп'ютери роблять лише те, що ви їм сказали). * Міняє 5 речей одночасно, перезапускає, і якщо запрацювало — не знає чому. Це називається "Shotgun debugging" (стрільба з дробовика навмання). * Ігнорує текст помилки.

✅ Досвідчений розробник: * Читає повідомлення про помилку. Буквально. Вголос. Часто там написано: "Line 42, missing comma". * Змінює одну річ за раз. Змінив — перевірив. Не помогло? Повернув назад, змінив інше. * Локалізує. Він не шукає помилку "десь". Він знає: "Дані заходять у функцію правильні, а виходять неправильні. Значить, проблема всередині цієї функції".

Золоте правило: Якщо ви не розумієте, чому воно полагодилося, воно зламається знову.


6. 🧩 Підсумок

Отже, друзі, що ми маємо?

  1. Помилки — це нормально. Це не провал, це частина процесу створення.
  2. Діагностика — це наука. Висуваємо гіпотезу -> Перевіряємо -> Робимо висновки.
  3. Читайте логи. Це ваші найкращі друзі.
  4. Розділяйте проблему. Їжте слона частинами.

Тепер ви не просто "кодери", ви — технічні детективи.

🤔 Тизер наступного уроку: Добре, ми навчилися виправляти помилки. Але чи не краще було б, якби ми могли писати код, який автоматично перевіряє сам себе і не дає нам зробити помилку? Звучить як фантастика? На наступному уроці ми поговоримо про Unit Testing (Юніт-тестування) — вашу страховку від дурниць!

Побачимось! 👋