Как учиться программированию с нуля
Ошибки — нормальная часть работы: как читать сообщение об ошибке, искать ответ и учиться с ИИ-помощником, не превращая его в списывание; китайские практики — тетрадь ошибок, отметка о занятиях и спиральная программа; режим занятий для работающего взрослого и как не бросить.
Зачем это нужно
Заголовок раздела «Зачем это нужно»Самоучки редко бросают из-за того, что программирование «не для них». Обычно происходит другое: вечер уходит на непонятную красную ошибку, потом пропущена неделя, возвращаться всё труднее — и курс тихо закрыт. Сложность здесь ни при чём. Не хватило умения справляться с ошибками и привычки заниматься регулярно.
Этот урок — про навыки, которые важнее любого языка программирования: как читать сообщения об ошибках, как искать ответ, как учиться вместе с ИИ-помощником и не превратить его в списывание, как держать ритм, когда работаете полный день. В курс встроены три китайские учебные практики: тетрадь ошибок, отметка о занятиях и спиральная программа. Здесь вы узнаете, как ими пользоваться.
Ошибки — это нормально
Заголовок раздела «Ошибки — это нормально»Профессиональный программист видит сообщения об ошибках десятки раз в день. Написал код, запустил, получил ошибку, исправил, запустил снова — это и есть обычная работа, а не признак того, что что-то идёт не так.
Сообщение об ошибке — не приговор, а навигатор. Python не просто говорит «не получилось»: он сообщает, что случилось и где. Научиться читать эти сообщения — половина умения программировать.
Ошибки бывают трёх видов:
| Вид | Что случилось | Как проявляется |
|---|---|---|
| Синтаксическая | Python не понял запись: забыта скобка, кавычка, отступ | Программа даже не запускается |
| Ошибка выполнения | Запись понятна, но выполнить нельзя: деление на ноль, нет такого имени | Программа останавливается на ошибочной строке |
| Логическая | Всё выполнилось, но результат неправильный | Python молчит — самая коварная ошибка |
Первые два вида Python ловит сам и печатает сообщение. Для третьего нужны проверки — тесты, которые вы увидите в каждом задании курса.
Как читать сообщение об ошибке
Заголовок раздела «Как читать сообщение об ошибке»Сообщение об ошибке в Python называется трассировкойтрассировка ошибки (traceback)EN tracebackСообщение Python об ошибке — цепочка вызовов, которая к ней привела. Читается снизу вверх. (traceback). Вот программа, которая считает стоимость покупки:
price = 120count = 3total = price * countprint("Итого: " + 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Читаем снизу вверх:
-
Последняя строка — что случилось.
TypeError— ошибка типа: действие не подходит для таких данных. Сообщение переводится как «склеивать (concatenate) можно только строку (str) со строкой, а не с целым числом (int)». Если английский пока трудно читать — переводчик справится отлично. -
Строки выше — где случилось. Файл
shop.py, строка 4 (line 4), и сама строка кода. Значки~и^под ней (их печатает Python 3.11 и новее) подчёркивают проблемное место — плюс между текстом и числом. -
Смотрим на эту строку.
"Итого: "— текст,total— число 360. Знак+складывает числа или склеивает строки, но не умеет склеивать строку с числом. -
Гипотеза → одно изменение → запуск. Передадим
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 замечает проблему строкой ниже настоящей причины. Если в указанной строке всё в порядке — посмотрите на строку выше.
Шпаргалка: частые ошибки новичка
Заголовок раздела «Шпаргалка: частые ошибки новичка»| Ошибка | Что значит | Типичная причина |
|---|---|---|
SyntaxError | Python не понял запись | Забыта скобка, кавычка или двоеточие |
IndentationError | Неправильный отступ | После if или for строка не сдвинута вправо |
NameError | Неизвестное имя | Опечатка или переменная ещё не создана |
TypeError | Действие не подходит для типа данных | Сложение строки с числом |
IndexError | Нет элемента с таким номером | В списке 3 элемента, а просим четвёртый |
ZeroDivisionError | Деление на ноль | Среднее по пустому списку |
Подробно об ошибках, отладке и отладчике — в уроке 0.2.5 «Ошибки и отладка». Пока достаточно привычки: последняя строка → номер строки → сама строка → гипотеза.
Как искать ответ
Заголовок раздела «Как искать ответ»Почти любую ошибку новичка кто-то уже встречал и описал. Нужно уметь её найти.
-
Скопируйте последнюю строку сообщения. Уберите из неё ваши личные имена и значения:
name 'pritn' is not defined→name is not defined. -
Добавьте слово
python, а если ошибка в библиотеке — её имя:python TypeError can only concatenate str,torch CUDA out of memory. -
Ищите на английском: ответов в разы больше. Найденное на английском можно прогнать через переводчик.
-
Смотрите на дату и версию. Ответ 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. Качество разное, многие посты скопированы друг у друга — проверяйте запуском.
Как задать вопрос, чтобы получить ответ
Заголовок раздела «Как задать вопрос, чтобы получить ответ»Человеку на форуме или ИИ-помощнику нужны одни и те же пять вещей:
- Цель: что вы пытаетесь сделать.
- Минимальный код, на котором видна ошибка, — не весь проект, а 5–15 строк.
- Полный текст ошибки — скопированный, а не пересказанный.
- Что ожидали и что получили.
- Что уже пробовали.
Часто ответ находится уже при подготовке вопроса: пока сокращаете код до минимального, сами видите ошибку. Тот же эффект даёт «метод резиновой уточки» — объяснить свой код вслух строка за строкой хоть игрушке на столе. Что добавляется к вопросу на уровне инженера (версии окружения, пример, который запустится у другого человека, правильное место) — в уроке 11.4.4.
ИИ-помощник: репетитор, а не решебник
Заголовок раздела «ИИ-помощник: репетитор, а не решебник»DeepSeek, Qwen, Claude или ChatGPT объяснят любую тему в любое время и не устанут от вопросов. Это лучший репетитор, который когда-либо был у самоучек. Но у него есть ловушка — иллюзия понимания. Прочитать готовое решение и кивнуть «ну да, понятно» — не то же самое, что написать его самому. Через неделю вы не повторите такой код без подсказки. А задания курса проверяют не код, а ваш навык: если решение написал ИИ, тесты пройдены, а навыка нет.
Это подтверждают и первые цифры. Исследователи из Стокгольмского и Гонконгского университетов два с половиной года наблюдали за 26 000 китайских школьников (работа 2026 года, препринт — пока без рецензии в журнале). У тех, кто перекладывал домашние задания на ИИ, оценки за домашку выросли, а результаты главных экзаменов — чжункао после 9-го класса и гаокао после 12-го — оказались на 18–24% ниже. А те, кто пользовался ИИ как репетитором и тратил на задания столько же времени, что и раньше, ничего не потеряли. Китайское руководство 2025 года по генеративному ИИ в школах прямо запрещает копировать ответы ИИ в домашние работы.
| Списывание | Обучение |
|---|---|
| «Напиши функцию, которая считает среднее» | «Я написал функцию для среднего, вот код. Что я упускаю? Дай подсказку, но не исправляй за меня» |
| Вставить код и написать «исправь» | «Вот ошибка и строка, где она возникла. Что означает эта ошибка?» |
| Скопировать ответ | Перепечатать руками и объяснить себе каждую строку |
| Поверить на слово | Попросить пример и проверить запуском |
| Спросить «как?» | Спросить «почему так?» и «а что будет, если…?» |
Помните про галлюцинации из первого урока: ИИ может уверенно сослаться на несуществующую функцию. Любой ответ проверяйте запуском кода и документацией.
Сохраните себе этот промпт-репетитор — он превращает чат-бот из решебника в учителя:
Ты — терпеливый преподаватель Python для человека, который учится с нуля.Я прохожу курс ChinaAI, урок «<название урока>».
Правила:- Не пиши за меня готовое решение задания.- Объясняй простыми словами, с бытовыми аналогиями.- Давай подсказки по одной и задавай мне наводящие вопросы.- В конце задай 2 вопроса, чтобы проверить, понял ли я.
Мой код:<вставьте код>
Полное сообщение об ошибке:<вставьте ошибку>
Я думаю, что проблема в <ваша гипотеза>. Прав ли я? Почему?Обратите внимание на последнюю строку: сначала своя гипотеза, потом вопрос. Даже неверная догадка тренирует мышление. Похожие промпты для проверки домашних работ есть в каждом ДЗ курса (раздел «ИИ-ревью»), а как они устроены — в уроке 0.1.3.
Китайские учебные практики на этом сайте
Заголовок раздела «Китайские учебные практики на этом сайте»Тетрадь ошибок
Заголовок раздела «Тетрадь ошибок»Тетрадь ошибоктетрадь ошибокEN mistake notebookКитайская школьная практика — переписывать каждую ошибку с правильным решением и регулярно к ней возвращаться. На сайте это страница «Тетрадь ошибок», куда сами попадают ошибки из квизов. (дословно «тетрадь ошибочных задач») — одна из самых известных привычек китайских школьников. Каждую ошибку переписывают в отдельную тетрадь: условие, свой неверный ответ, правильное решение и почему ошибся. Перед контрольными и экзаменами повторяют не весь учебник, а именно эту тетрадь. Логика простая: ошибки точно показывают, где понимание слабее всего. Это самый ценный материал для повторения.
На сайте тетрадь ведётся сама. Каждый неверный ответ в квизе попадает на страницу «Тетрадь ошибок» вместе с вашим ответом, правильным ответом и пояснением. Свежую ошибку лучше разобрать в тот же день, а раз в неделю — пройтись по всей вкладке «К разбору». Порядок такой:
- Откройте вкладку «К разбору» и прочитайте вопрос с пояснением. Непонятно — вернитесь к уроку по ссылке.
- В поле «✍️ Почему я ошибся и как не повторить» напишите одну-две фразы своими словами. Это самая полезная часть.
- Пройдите квиз ещё раз. Ответите верно — вопрос сам переедет во вкладку «Исправлено при повторе».
- Нажмите «Разобрался», когда уверены, что больше не ошибётесь.
А на странице повторения есть режим «Мои ошибки»: неразобранные ошибки превращаются в карточки. Китайские методисты советуют ритм «очистить за день, за неделю, за месяц»: разобрать ошибку в тот же день, перерешить без подсказки через неделю и ещё раз через месяц.
Квизы ловят ошибки в понимании, а ошибки в коде записывайте сами — в бумажную тетрадь или в файл 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
- дней подряд
- 0
- дней занятий всего
- 0
Отметьте этот урок пройденным кнопкой внизу страницы — и сегодняшний квадратик загорится.
Три правила, чтобы ритм не сломался:
- Цель — на неделю, а не на день. Пропустили вторник — ничего страшного, неделя ещё не закончилась.
- Минимальное занятие — 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 дня в неделю». Одно вечернее занятие на час удобно разбить так:
- 5 минут — карточки повторения: мозг «разогревается» на знакомом.
- 35–40 минут — новый материал. Код из уроков набирайте руками, а не копируйте: пальцы тоже учатся, а заодно вы сделаете и исправите свои первые опечатки.
- 10 минут — квиз или задание. Попытка вспомнить закрепляет знание сильнее, чем перечитывание.
- 5 минут — две строки в журнал («понял…», «непонятно…») и отметка урока.
Несколько приёмов, которые проверены многими самоучками:
- Одно и то же время и место. «После ужина за столом у окна» превращается в привычку, и решать «заниматься ли сегодня» больше не нужно.
- Телефон — в другой комнате. Уведомления разрушают концентрацию сильнее, чем кажется.
- Техника помидора: 25 минут работы, 5 минут перерыва. Помогает начать, когда не хочется: «всего один помидор».
- Тяжёлое — на выходные. После работы берите повторение и практику, а новую сложную теорию — в субботу утром, на свежую голову.
- Сон — часть учёбы. Во сне память закрепляет то, что вы изучили вечером. Ночь без сна ради урока — плохая сделка.
Как не бросить
Заголовок раздела «Как не бросить»Почти у каждого самоучки бывает момент «всё, это не для меня». Он предсказуем, поэтому к нему можно подготовиться.
| Ловушка | Как выглядит | Что делать |
|---|---|---|
| «Туториальный ад» | Смотрю видео и читаю, но сам почти не пишу код | На каждые 10 минут чтения — 10 минут своего кода |
| Перфекционизм | Не иду дальше, пока не пойму на 100% | Спираль: 70% и вперёд, вопрос — в журнал |
| Долгий перерыв | Пропустил неделю, стыдно возвращаться | Вернуться через повторение: тетрадь ошибок и карточки, без чувства вины |
| «Слишком сложно» | Третий вечер на одной теме | Спросить ИИ-репетитора, вернуться к прошлому уроку, пропустить и вернуться позже |
| Сравнение с другими | «Кто-то в 15 лет уже обучает нейросети» | Сравнивайте себя с собой месяц назад: календарь занятий и карта прогресса |
| Плато | Кажется, что не продвигаюсь | Перечитайте свои решения месячной давности: то, что было трудным, теперь легко |
Ещё три сильных приёма:
- План «если — то». Заранее решите, что делаете в трудной ситуации: «Если вечером нет сил — делаю минимальное занятие на 15 минут». Готовое решение срабатывает почти автоматически.
- Учитесь не в одиночку. Найдите напарника или группу и договоритесь отчитываться друг другу. Так устроено групповое обучение Datawhale: группа проходит курс по расписанию и каждый этап закрывает отметкой о выполнении.
- Празднуйте острова. Закончили ступень — отметьте это. Путь длинный, и ему нужны промежуточные финиши.
Практика
Заголовок раздела «Практика»Задание 1. Прочитайте три ошибки
Заголовок раздела «Задание 1. Прочитайте три ошибки»Для каждого сообщения определите: тип ошибки, номер строки и что исправить. Ответ спрятан под спойлером — сначала подумайте сами.
Ошибка А. Слово if значит «если»: следующая строка должна выполниться, только когда условие верно
(условия — тема урока 0.2.1).
temperature = 39if 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 строк, бо́льшая часть — внутри библиотек. Ищите блоки со своими файлами.
Задание 2. Настройте свою систему
Заголовок раздела «Задание 2. Настройте свою систему»- Пройдите квиз ниже. Ошибётесь — откройте тетрадь ошибок и посмотрите, как туда попала ошибка.
- Отметьте урок пройденным внизу страницы — это ваша первая отметка о занятиях.
- Выберите дни и время занятий на ближайшую неделю и запишите их в календарь телефона.
- Сохраните промпт-репетитор в заметках.
- Заведите журнал: бумажную тетрадь или файл, в который будете записывать ошибки и вопросы.
Проверь себя
Заголовок раздела «Проверь себя»- Ошибки — обычная часть работы. Сообщение об ошибке читают снизу вверх: тип и описание → файл и строка → сама строка → гипотеза.
- Искать ответ — по последней строке ошибки, на английском, с проверкой даты. Хороший вопрос: цель, минимальный код, полная ошибка, ожидание, что пробовали.
- ИИ-помощник — репетитор: просите объяснения и подсказки, а не готовый код; проверяйте запуском; перепечатывайте руками.
- Три китайские практики встроены в сайт: тетрадь ошибок собирает ваши ошибки, календарь занятий отмечает дни занятий, спираль возвращает темы на новом уровне.
- Регулярность важнее длительности: 5–7 часов в неделю, мягкая недельная цель в календаре занятий и минимальное занятие на 15 минут.
Дальше: модуль 0.1 — терминал и Git. Научимся отдавать компьютеру команды и сохранять историю своего кода.