Коротко: майже всі помилки новачка — з чотирьох: забутий двокрапка, зсунутий відступ, переплутані типи (число й рядок) і звертання до змінної до того, як їй щось присвоїли. Python сам пише, у якому рядку.

Помилка в Python — не поломка, а звичайний етап роботи. Мова сама пише, що саме їй не сподобалося й у якому рядку. Проблема новачка не в тому, що помилки трапляються, а в тому, що спершу він не вміє читати повідомлення про них. Це минає за кілька занять.

Відступи: найчастіша причина, чому код не працює

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

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

Лікується це швидко — редактор підсвічує рівні відступів, і за пару тижнів рука сама тримає структуру.

Одне «дорівнює» замість двох

У коді = означає «поклади значення», а == — «порівняй». Тема умов if / else у програмі йде третьою, і саме на ній ця плутанина зустрічається майже в кожного.

Причина зрозуміла: у школі знак рівності означає рівно порівняння. Доводиться свідомо розводити два сенси. Коли дитина один раз побачила, як програма замість перевірки перезаписала значення, — запам'ятовує надовго.

Забуті двокрапка й дужки

Після if, for, while і def ставиться двокрапка. Забути її — класика перших занять, і Python чесно повідомляє SyntaxError із зазначенням рядка.

Те саме з дужками у виклику функції: print без дужок нічого не надрукує. Обидві помилки корисні тим, що вчать головного навику — читати повідомлення, а не гадати.

Плутанина типів: число проти рядка

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

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

Як читати повідомлення про помилку

Червоний текст у консолі лякає рівно доти, доки не з'ясується, що читати в ньому треба два рядки з шести, і обидва — знизу.

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

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

Помилка, якої не видно взагалі

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

Найчастіше винне порівняння «більше» замість «більше або дорівнює» — і рівно один випадок зі ста обробляється не так. Або цикл, який починається з одиниці замість нуля, і останній елемент списку залишається незачепленим.

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

Нескінченний цикл

Цикл while працює, доки умова істинна. Якщо всередині забути змінити змінну, програма не зупиниться ніколи. На занятті це виглядає ефектно: екран заповнюється текстом, доки хтось не натисне зупинку.

Корисний побічний ефект — дитина на власні очі бачить, що комп'ютер не «здогадається», чого від нього хотіли. Він виконає буквально написане, скільки б це не тривало.

Чи означають часті помилки, що дитині складно?

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

Що робить викладач, коли дитина застрягла?

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

Як допомогти вдома, якщо ви не програміст?

Достатньо двох питань: «що написано в помилці?» і «який рядок вона називає?». Відповідати на них дитина буде сама, і цього зазвичай вистачає. Розв'язувати за неї не потрібно.

Скільки часу займає налагодження

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

Для дитини звідси випливає корисний висновок: зупинка на помилці не означає, що вона чогось не зрозуміла. Це і є робота. Підліток, який цього не знає, після третьої помилки вирішує, що програмування не для нього, — і кидає на рівному місці.

Дві помилки, які приходять пізніше

Перші п'ять із цієї статті трапляються в першому місяці. Є ще дві, які з'являються, коли програми стають довшими.

Змінна, названа як завгодно. a, b, x1 — поки програма на десять рядків, це не заважає. На ста рядках власний код перестає читатися, і підліток витрачає хвилини на згадування, що ж таке x1.

Копія замість функції. Той самий шматок скопійований тричі з дрібними відмінностями. Працює, поки не треба щось змінити — тоді правити доводиться в трьох місцях, і в одному з них обов'язково забудеться.

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

Чого ми не робимо за дитину

Не називаємо рядок, у якому помилка. Питаємо, що програма мала зробити й що зробила насправді, і майже завжди дитина знаходить розбіжність сама.

Не даємо виправлений файл. Виправлений чужою рукою код нічого не додає: наступного разу та сама помилка зупинить так само.

Виняток один — коли дитина застрягла надовго й починає злитися. Тоді підказка потрібна одразу: користь від самостійного пошуку закінчується там, де починається відчай.

Чому це нормальна частина навчання

Програма першого ступеня — 156 занять протягом 18 місяців — побудована так, що теми нарощуються поступово: змінні, умови, цикли, функції, списки, і лише потім Turtle і Minecraft. Кожна нова тема додає свій набір типових помилок, і кожна відпрацьовується, доки не перестане заважати.

Якщо цікаво, що виходить на іншому кінці цього шляху, подивіться що кладуть у портфоліо до 18 років. А з якого віку братися за мову — розібрано окремо: з якого віку вчити Python.

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