Перейти к содержимому
Ступень 00.0 Самое начало

Как учиться программированию с нуля

Ошибки — нормальная часть работы: как читать сообщение об ошибке, искать ответ и учиться с ИИ-помощником, не превращая его в списывание; китайские практики — тетрадь ошибок, отметка о занятиях и спиральная программа; режим занятий для работающего взрослого и как не бросить.

УРОКstage-0/0-0-zero/03-how-to-learn-coding.mdx1 ч 10 минУрок 3 из 3
После урока вы сможете
  • Читать сообщение об ошибке Python снизу вверх и находить строку, где всё сломалось
  • Искать ответ и задавать вопросы ИИ-помощнику так, чтобы учиться, а не списывать
  • Пользоваться на сайте тетрадью ошибок, календарём занятий и карточками повторения
  • Составить реалистичный план занятий на неделю и знать, что делать, когда хочется бросить

Самоучки редко бросают из-за того, что программирование «не для них». Обычно происходит другое: вечер уходит на непонятную красную ошибку, потом пропущена неделя, возвращаться всё труднее — и курс тихо закрыт. Сложность здесь ни при чём. Не хватило умения справляться с ошибками и привычки заниматься регулярно.

Этот урок — про навыки, которые важнее любого языка программирования: как читать сообщения об ошибках, как искать ответ, как учиться вместе с ИИ-помощником и не превратить его в списывание, как держать ритм, когда работаете полный день. В курс встроены три китайские учебные практики: тетрадь ошибок, отметка о занятиях и спиральная программа. Здесь вы узнаете, как ими пользоваться.

Профессиональный программист видит сообщения об ошибках десятки раз в день. Написал код, запустил, получил ошибку, исправил, запустил снова — это и есть обычная работа, а не признак того, что что-то идёт не так.

Сообщение об ошибке — не приговор, а навигатор. Python не просто говорит «не получилось»: он сообщает, что случилось и где. Научиться читать эти сообщения — половина умения программировать.

Ошибки бывают трёх видов:

ВидЧто случилосьКак проявляется
СинтаксическаяPython не понял запись: забыта скобка, кавычка, отступПрограмма даже не запускается
Ошибка выполненияЗапись понятна, но выполнить нельзя: деление на ноль, нет такого имениПрограмма останавливается на ошибочной строке
ЛогическаяВсё выполнилось, но результат неправильныйPython молчит — самая коварная ошибка

Первые два вида Python ловит сам и печатает сообщение. Для третьего нужны проверки — тесты, которые вы увидите в каждом задании курса.

Сообщение об ошибке в Python называется трассировкойтрассировка ошибки (traceback)EN tracebackСообщение Python об ошибке — цепочка вызовов, которая к ней привела. Читается снизу вверх. (traceback). Вот программа, которая считает стоимость покупки:

price = 120
count = 3
total = price * count
print("Итого: " + total)

Запускаем и получаем:

Traceback (most recent call last):
File "/home/user/shop.py", line 4, in <module>
print("Итого: " + total)
~~~~~~~~~~^~~~~~~
TypeError: can only concatenate str (not "int") to str

Читаем снизу вверх:

  1. Последняя строка — что случилось. TypeError — ошибка типа: действие не подходит для таких данных. Сообщение переводится как «склеивать (concatenate) можно только строку (str) со строкой, а не с целым числом (int)». Если английский пока трудно читать — переводчик справится отлично.

  2. Строки выше — где случилось. Файл shop.py, строка 4 (line 4), и сама строка кода. Значки ~ и ^ под ней (их печатает Python 3.11 и новее) подчёркивают проблемное место — плюс между текстом и числом.

  3. Смотрим на эту строку. "Итого: " — текст, total — число 360. Знак + складывает числа или склеивает строки, но не умеет склеивать строку с числом.

  4. Гипотеза → одно изменение → запуск. Передадим print текст и число через запятую — он сам поставит между ними пробел: print("Итого:", total). Запускаем — Итого: 360. Готово.

Иногда Python сам подсказывает решение:

name = "Мэй"
pritn("Привет,", name)
Traceback (most recent call last):
File "/home/user/typo.py", line 2, in <module>
pritn("Привет,", name)
^^^^^
NameError: name 'pritn' is not defined. Did you mean: 'print'?

NameError — Python не знает имени pritn, и сам спрашивает: «Может быть, вы имели в виду print?» Опечатки — одна из самых частых ошибок новичка.

Синтаксическая ошибка выглядит чуть иначе — без слова Traceback, потому что до выполнения дело не дошло:

print("Сколько будет 2 + 2?"
answer = 2 + 2
File "/home/user/syntax.py", line 1
print("Сколько будет 2 + 2?"
^
SyntaxError: '(' was never closed

Скобка открылась и не закрылась. У синтаксических ошибок есть подвох: иногда Python замечает проблему строкой ниже настоящей причины. Если в указанной строке всё в порядке — посмотрите на строку выше.

ОшибкаЧто значитТипичная причина
SyntaxErrorPython не понял записьЗабыта скобка, кавычка или двоеточие
IndentationErrorНеправильный отступПосле if или for строка не сдвинута вправо
NameErrorНеизвестное имяОпечатка или переменная ещё не создана
TypeErrorДействие не подходит для типа данныхСложение строки с числом
IndexErrorНет элемента с таким номеромВ списке 3 элемента, а просим четвёртый
ZeroDivisionErrorДеление на нольСреднее по пустому списку

Подробно об ошибках, отладке и отладчике — в уроке 0.2.5 «Ошибки и отладка». Пока достаточно привычки: последняя строка → номер строки → сама строка → гипотеза.

Почти любую ошибку новичка кто-то уже встречал и описал. Нужно уметь её найти.

  1. Скопируйте последнюю строку сообщения. Уберите из неё ваши личные имена и значения: name 'pritn' is not defined → name is not defined.

  2. Добавьте слово python, а если ошибка в библиотеке — её имя: python TypeError can only concatenate str, torch CUDA out of memory.

  3. Ищите на английском: ответов в разы больше. Найденное на английском можно прогнать через переводчик.

  4. Смотрите на дату и версию. Ответ 2012 года мог быть написан для Python 2 или давно изменившейся библиотеки.

Где искать:

  • Официальная документация — самый надёжный источник. У Python есть официальная документация на китайском (docs.python.org/zh-cn).
  • Stack Overflow (и русскоязычный ru.stackoverflow.com) — вопросы и ответы программистов с голосованием.
  • GitHub Issues нужной библиотеки — если ошибка внутри PyTorch, Transformers или vLLM, кто-то наверняка уже открыл обсуждение.
  • Китайские сайты — CSDN, Чжиху (Zhihu), Cnblogs. Особенно полезны для китайских моделей и инструментов: Qwen, DeepSeek, ModelScope. Качество разное, многие посты скопированы друг у друга — проверяйте запуском.

Человеку на форуме или ИИ-помощнику нужны одни и те же пять вещей:

  1. Цель: что вы пытаетесь сделать.
  2. Минимальный код, на котором видна ошибка, — не весь проект, а 5–15 строк.
  3. Полный текст ошибки — скопированный, а не пересказанный.
  4. Что ожидали и что получили.
  5. Что уже пробовали.

Часто ответ находится уже при подготовке вопроса: пока сокращаете код до минимального, сами видите ошибку. Тот же эффект даёт «метод резиновой уточки» — объяснить свой код вслух строка за строкой хоть игрушке на столе. Что добавляется к вопросу на уровне инженера (версии окружения, пример, который запустится у другого человека, правильное место) — в уроке 11.4.4.

DeepSeek, Qwen, Claude или ChatGPT объяснят любую тему в любое время и не устанут от вопросов. Это лучший репетитор, который когда-либо был у самоучек. Но у него есть ловушка — иллюзия понимания. Прочитать готовое решение и кивнуть «ну да, понятно» — не то же самое, что написать его самому. Через неделю вы не повторите такой код без подсказки. А задания курса проверяют не код, а ваш навык: если решение написал ИИ, тесты пройдены, а навыка нет.

Это подтверждают и первые цифры. Исследователи из Стокгольмского и Гонконгского университетов два с половиной года наблюдали за 26 000 китайских школьников (работа 2026 года, препринт — пока без рецензии в журнале). У тех, кто перекладывал домашние задания на ИИ, оценки за домашку выросли, а результаты главных экзаменов — чжункао после 9-го класса и гаокао после 12-го — оказались на 18–24% ниже. А те, кто пользовался ИИ как репетитором и тратил на задания столько же времени, что и раньше, ничего не потеряли. Китайское руководство 2025 года по генеративному ИИ в школах прямо запрещает копировать ответы ИИ в домашние работы.

СписываниеОбучение
«Напиши функцию, которая считает среднее»«Я написал функцию для среднего, вот код. Что я упускаю? Дай подсказку, но не исправляй за меня»
Вставить код и написать «исправь»«Вот ошибка и строка, где она возникла. Что означает эта ошибка?»
Скопировать ответПерепечатать руками и объяснить себе каждую строку
Поверить на словоПопросить пример и проверить запуском
Спросить «как?»Спросить «почему так?» и «а что будет, если…?»

Помните про галлюцинации из первого урока: ИИ может уверенно сослаться на несуществующую функцию. Любой ответ проверяйте запуском кода и документацией.

Сохраните себе этот промпт-репетитор — он превращает чат-бот из решебника в учителя:

Ты — терпеливый преподаватель Python для человека, который учится с нуля.
Я прохожу курс ChinaAI, урок «<название урока>».
Правила:
- Не пиши за меня готовое решение задания.
- Объясняй простыми словами, с бытовыми аналогиями.
- Давай подсказки по одной и задавай мне наводящие вопросы.
- В конце задай 2 вопроса, чтобы проверить, понял ли я.
Мой код:
<вставьте код>
Полное сообщение об ошибке:
<вставьте ошибку>
Я думаю, что проблема в <ваша гипотеза>. Прав ли я? Почему?

Обратите внимание на последнюю строку: сначала своя гипотеза, потом вопрос. Даже неверная догадка тренирует мышление. Похожие промпты для проверки домашних работ есть в каждом ДЗ курса (раздел «ИИ-ревью»), а как они устроены — в уроке 0.1.3.

Тетрадь ошибоктетрадь ошибокEN mistake notebookКитайская школьная практика — переписывать каждую ошибку с правильным решением и регулярно к ней возвращаться. На сайте это страница «Тетрадь ошибок», куда сами попадают ошибки из квизов. (дословно «тетрадь ошибочных задач») — одна из самых известных привычек китайских школьников. Каждую ошибку переписывают в отдельную тетрадь: условие, свой неверный ответ, правильное решение и почему ошибся. Перед контрольными и экзаменами повторяют не весь учебник, а именно эту тетрадь. Логика простая: ошибки точно показывают, где понимание слабее всего. Это самый ценный материал для повторения.

На сайте тетрадь ведётся сама. Каждый неверный ответ в квизе попадает на страницу «Тетрадь ошибок» вместе с вашим ответом, правильным ответом и пояснением. Свежую ошибку лучше разобрать в тот же день, а раз в неделю — пройтись по всей вкладке «К разбору». Порядок такой:

  1. Откройте вкладку «К разбору» и прочитайте вопрос с пояснением. Непонятно — вернитесь к уроку по ссылке.
  2. В поле «✍️ Почему я ошибся и как не повторить» напишите одну-две фразы своими словами. Это самая полезная часть.
  3. Пройдите квиз ещё раз. Ответите верно — вопрос сам переедет во вкладку «Исправлено при повторе».
  4. Нажмите «Разобрался», когда уверены, что больше не ошибётесь.

А на странице повторения есть режим «Мои ошибки»: неразобранные ошибки превращаются в карточки. Китайские методисты советуют ритм «очистить за день, за неделю, за месяц»: разобрать ошибку в тот же день, перерешить без подсказки через неделю и ещё раз через месяц.

Квизы ловят ошибки в понимании, а ошибки в коде записывайте сами — в бумажную тетрадь или в файл journal/mistakes.md (папка journal с шаблонами уже есть в репозитории курса, файл mistakes.md в ней создайте сами; как получить свою копию репозитория, расскажет модуль 0.1). Четыре поля на каждую ошибку — что, почему, как правильно, как не повторить:

## 2026-10-05 · урок 0.2.1 · тема: строки и числа
**Ошибка:** TypeError: can only concatenate str (not "int") to str
**Причина:** склеивал текст и число через +
**Исправление:** print("Итого:", total)
**Правило на будущее:** число и текст в print — через запятую

Главное — последняя строка: правило своими словами. Именно она защищает от повторения ошибки. Тему пишите в заголовке: через месяц будет видно, какие темы «болят» чаще всего.

Отметка о занятияхотметка о занятияхEN check-in (daily study log)Буквально «пробить карточку». В учебных сообществах — публикация конспекта или решения в срок как подтверждение, что вы занимаетесь. по-китайски дословно называется «пробить карточку», как на проходной. В китайских учебных сообществах так отмечают дни занятий: выложил конспект или решение — отметился. Главная идея: регулярность важнее длительности. Четыре занятия по часу за неделю дают больше, чем один четырёхчасовой марафон в воскресенье: мозг успевает закрепить материал между занятиями, а привычка держит вас в курсе, даже когда мотивация проседает.

Но у отметок есть и обратная сторона, которую хорошо знают в самом Китае. Жёсткая ежедневная серия быстро превращается в обязаловку: по китайским опросам, около половины тех, кто пробует отмечаться каждый день, бросают меньше чем через две недели, а Минобразования ещё в 2020 году, во время дистанционной учёбы, запретило заставлять школьников отмечаться ежедневно. Поэтому на сайте отметка «мягкая»: вы ставите цель на неделю — сколько дней из семи заниматься, — а не обязаны отмечаться каждый день.

День отмечается сам, когда вы отмечаете урок пройденным, проходите квиз, проверяете задание или повторяете карточки. Вот ваш календарь — тот же, что на странице прогресса. Выберите в нём реалистичную цель: для работающего взрослого хорошее начало — 3–4 дня в неделю.

Недельная цель
На этой неделе
0из 3 дней
  1. пн
  2. вт
  3. ср
  4. чт
  5. пт
  6. сб
  7. вс
недель подряд с целью
0
дней подряд
0
дней занятий всего
0
Последние 20 недельменьше больше
Отметка ставится сама, когда вы проходите урок, квиз, задание или карточки.

Отметьте этот урок пройденным кнопкой внизу страницы — и сегодняшний квадратик загорится.

Три правила, чтобы ритм не сломался:

  • Цель — на неделю, а не на день. Пропустили вторник — ничего страшного, неделя ещё не закончилась.
  • Минимальное занятие — 15 минут. Нет сил на новый урок? Повторите карточки на странице повторения и перепройдите пару вопросов из тетради ошибок. Это тоже занятие.
  • «Не пропускай дважды» — для недель. Одна неделя мимо цели — случайность. Две подряд — сигнал не бросать, а уменьшить цель: лучше 2 дня в неделю стабильно, чем 6 дней в мечтах.

Спиральная программаспиральная программаEN spiral curriculumТемы возвращаются несколько раз, и каждый раз — на более глубоком уровне. Так устроены китайские школьные программы и этот курс. — так устроены китайские школьные программы и этот курс. Тема возвращается несколько раз, и каждый раз — на более глубоком уровне. Возьмём кодировку UTF-8:

flowchart LR
A["0.0.2<br/>байты UTF-8:<br/>«я» = 2 байта"] --> B["0.2.4<br/>чтение файлов<br/>в нужной кодировке"]
B --> C["4.2<br/>токенизатор BPE на байтах,<br/>словари Qwen и DeepSeek"]
C --> D["5.6<br/>свой токенизатор<br/>для своей мини-LLM"]
Одна тема — четыре витка спирали

То же будет с softmax, градиентами, вниманием и десятком других идей. Отсюда важный вывод для новичка: не нужно понимать всё с первого раза. Поняли тему процентов на 70 и решили задание — запишите оставшиеся вопросы в журнал и идите дальше. Тема вернётся, и со второго витка станет понятнее.

Спираль работает и в малом масштабе — в интервальном повторенииинтервальное повторениеEN spaced repetitionПовторять материал через растущие промежутки времени — прямо перед тем, как он забылся бы. На сайте — карточки на странице «Повторение» (алгоритм FSRS).. Ещё в 1885 году Герман Эббингауз показал: выученное быстро забывается, если к нему не возвращаться. Повторение через растущие промежутки — день, три дня, неделя, месяц — закрепляет знание надолго. Карточки в конце каждого урока работают именно так: после отметки «Урок пройден» они попадают на страницу повторения, и сайт сам решает, когда показать каждую снова.

Курс рассчитан примерно на 470 часов: около 360 — ступени 0–10 и около 110 — заключительная ступень «Профессия». Ступени 0–10 при 8–10 часах в неделю займут 9–12 месяцев вместе с повторением, при 5–7 часах — около полутора лет. Реалистичная неделя выглядит так:

ДеньЧто делатьВремя
ПонедельникНовый урок: теория и примеры кода45–60 мин
ВторникТот же урок: практика, задание, квиз45–60 мин
СредаМинимальный день: карточки и тетрадь ошибок15–20 мин
ЧетвергСледующий урок45–60 мин
ПятницаОтдых или карточки0–15 мин
СубботаДлинная сессия: домашняя работа, проект2–3 ч
ВоскресеньеРазбор тетради ошибок за неделю, план на следующую30–45 мин

Получается 5–7 часов в неделю. Это неделя в полном ритме. Если пока тяжело, оставьте три опорных дня — понедельник, четверг и субботу: это как раз цель календаря занятий «3 дня в неделю». Одно вечернее занятие на час удобно разбить так:

  1. 5 минут — карточки повторения: мозг «разогревается» на знакомом.
  2. 35–40 минут — новый материал. Код из уроков набирайте руками, а не копируйте: пальцы тоже учатся, а заодно вы сделаете и исправите свои первые опечатки.
  3. 10 минут — квиз или задание. Попытка вспомнить закрепляет знание сильнее, чем перечитывание.
  4. 5 минут — две строки в журнал («понял…», «непонятно…») и отметка урока.

Несколько приёмов, которые проверены многими самоучками:

  • Одно и то же время и место. «После ужина за столом у окна» превращается в привычку, и решать «заниматься ли сегодня» больше не нужно.
  • Телефон — в другой комнате. Уведомления разрушают концентрацию сильнее, чем кажется.
  • Техника помидора: 25 минут работы, 5 минут перерыва. Помогает начать, когда не хочется: «всего один помидор».
  • Тяжёлое — на выходные. После работы берите повторение и практику, а новую сложную теорию — в субботу утром, на свежую голову.
  • Сон — часть учёбы. Во сне память закрепляет то, что вы изучили вечером. Ночь без сна ради урока — плохая сделка.

Почти у каждого самоучки бывает момент «всё, это не для меня». Он предсказуем, поэтому к нему можно подготовиться.

ЛовушкаКак выглядитЧто делать
«Туториальный ад»Смотрю видео и читаю, но сам почти не пишу кодНа каждые 10 минут чтения — 10 минут своего кода
ПерфекционизмНе иду дальше, пока не пойму на 100%Спираль: 70% и вперёд, вопрос — в журнал
Долгий перерывПропустил неделю, стыдно возвращатьсяВернуться через повторение: тетрадь ошибок и карточки, без чувства вины
«Слишком сложно»Третий вечер на одной темеСпросить ИИ-репетитора, вернуться к прошлому уроку, пропустить и вернуться позже
Сравнение с другими«Кто-то в 15 лет уже обучает нейросети»Сравнивайте себя с собой месяц назад: календарь занятий и карта прогресса
ПлатоКажется, что не продвигаюсьПеречитайте свои решения месячной давности: то, что было трудным, теперь легко

Ещё три сильных приёма:

  • План «если — то». Заранее решите, что делаете в трудной ситуации: «Если вечером нет сил — делаю минимальное занятие на 15 минут». Готовое решение срабатывает почти автоматически.
  • Учитесь не в одиночку. Найдите напарника или группу и договоритесь отчитываться друг другу. Так устроено групповое обучение Datawhale: группа проходит курс по расписанию и каждый этап закрывает отметкой о выполнении.
  • Празднуйте острова. Закончили ступень — отметьте это. Путь длинный, и ему нужны промежуточные финиши.

Для каждого сообщения определите: тип ошибки, номер строки и что исправить. Ответ спрятан под спойлером — сначала подумайте сами.

Ошибка А. Слово if значит «если»: следующая строка должна выполниться, только когда условие верно (условия — тема урока 0.2.1).

temperature = 39
if temperature > 37:
print("Температура высокая")
File "/home/user/indent.py", line 3
print("Температура высокая")
^
IndentationError: expected an indented block after 'if' statement on line 2
Ответ

IndentationError в строке 3. После if ...: Python ждёт строку со сдвигом вправо (обычно 4 пробела) — так он понимает, что эта строка выполняется только при выполнении условия. Исправление: print("Температура высокая") с отступом. В браузерных заданиях сайта эта ошибка показывается как SyntaxError — IndentationError её разновидность.

Ошибка Б. Квадратные скобки [...] создают список — набор значений по порядку, а models[3] просит элемент номер 3 (подробно о списках — в уроке 0.2.1).

models = ["DeepSeek", "Qwen", "Kimi"]
print(models[3])
Traceback (most recent call last):
File "/home/user/index.py", line 2, in <module>
print(models[3])
~~~~~~^^^
IndexError: list index out of range
Ответ

IndexError в строке 2: «номер за пределами списка». В Python элементы нумеруются с нуля: models[0] — "DeepSeek", models[2] — "Kimi", а models[3] не существует. Чтобы получить последний элемент, нужно models[2] или models[-1].

Ошибка В — длинная, из двух блоков. def создаёт функцию — именованный кусок кода, подробно о функциях в модуле 0.2.

def average(numbers):
return sum(numbers) / len(numbers)
scores = []
print(average(scores))
Traceback (most recent call last):
File "/home/user/avg.py", line 5, in <module>
print(average(scores))
^^^^^^^^^^^^^^^
File "/home/user/avg.py", line 2, in average
return sum(numbers) / len(numbers)
~~~~~~~~~~~~~^~~~~~~~~~~~~~
ZeroDivisionError: division by zero
Ответ

ZeroDivisionError: деление на ноль. Нижний блок говорит, где упало: строка 2, внутри функции average. Верхний — откуда туда пришли: строка 5 вызвала average с пустым списком scores. Длина пустого списка — 0, отсюда деление на ноль. Исправлять нужно данные (передать непустой список) или функцию (заранее проверить, что список не пустой). В настоящем ML-коде такие сообщения бывают по 30–50 строк, бо́льшая часть — внутри библиотек. Ищите блоки со своими файлами.

  • Пройдите квиз ниже. Ошибётесь — откройте тетрадь ошибок и посмотрите, как туда попала ошибка.
  • Отметьте урок пройденным внизу страницы — это ваша первая отметка о занятиях.
  • Выберите дни и время занятий на ближайшую неделю и запишите их в календарь телефона.
  • Сохраните промпт-репетитор в заметках.
  • Заведите журнал: бумажную тетрадь или файл, в который будете записывать ошибки и вопросы.
Проверь себя6 вопросов
1 Python напечатал длинное сообщение об ошибке. С чего начать чтение?
2 Python пишет: NameError: name 'pritn' is not defined. Did you mean: 'print'?. Что исправить?
3 Какие способы работы с ИИ-помощником помогают учиться, а не списывать?Можно выбрать несколько ответов
4 Вы поняли тему процентов на 70 и решили задание, но кое-что осталось неясным. Что советует спиральная программа?
5 Ступени 0–10 занимают около 360 часов. Сколько недель они займут при 6 часах занятий в неделю?
6 На какой срок на сайте ставится цель в календаре занятий — на день, на неделю или на месяц? (одно слово)
  • Ошибки — обычная часть работы. Сообщение об ошибке читают снизу вверх: тип и описание → файл и строка → сама строка → гипотеза.
  • Искать ответ — по последней строке ошибки, на английском, с проверкой даты. Хороший вопрос: цель, минимальный код, полная ошибка, ожидание, что пробовали.
  • ИИ-помощник — репетитор: просите объяснения и подсказки, а не готовый код; проверяйте запуском; перепечатывайте руками.
  • Три китайские практики встроены в сайт: тетрадь ошибок собирает ваши ошибки, календарь занятий отмечает дни занятий, спираль возвращает темы на новом уровне.
  • Регулярность важнее длительности: 5–7 часов в неделю, мягкая недельная цель в календаре занятий и минимальное занятие на 15 минут.

Дальше: модуль 0.1 — терминал и Git. Научимся отдавать компьютеру команды и сохранять историю своего кода.