ИИ и Git

Языковые модели в разработке и контроль версий

Вячеслав Федоров

Лекция 0

Разработка и применение ПО

в физических исследованиях

+-

Содержание

Два инструмента, с которых начинается работа с кодом

01

ИИ в разработке

02

Устройство модели

03

Инструменты ИИ

04

Основы Git

05

Ветки и слияние

06

Совместная работа

Цель лекции

Профессиональный минимум: ассистент на языковой модели и контроль версий

Инструмент усиливает того, кто понимает, что делает, и подводит того, кто не понимает. Ответственность за строку, сгенерированную моделью, остаётся на подписавшем работу.

ИИ в разработке

История, распространение и измерения

01

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Хронология

развития

2012

AlexNet

победа глубоких свёрточных сетей на графических ускорителях в ImageNet

2014

GAN

убедительное порождение данных нейросетями

2017

Трансформер

статья «Attention Is All You Need»: архитектура современных моделей

2018–2020

Масштабирование

рост качества с числом параметров, объёмом данных и вычислений; GPT-2 и GPT-3

2022

ChatGPT

дообучение под диалог и удобный интерфейс к существующей модели

Пояснение

Между научной идеей и инструментом на рабочем столе проходят годы: трансформеру к выходу ChatGPT было уже пять лет.

Скорость

распространения

5

дней

понадобилось ChatGPT, чтобы набрать миллион пользователей; Instagram — около двух с половиной месяцев

2/3

разработчиков

уже применяли ИИ-инструменты в работе по опросу Stack Overflow 2024 года

1/7

разработчиков

собирались начать применять ИИ-инструменты по тому же опросу

Тот же опрос: инструментами пользуются охотно, однако коду, предложенному моделью, не доверяют и перепроверяют его.

Для физика

Инструмент, освоенный большинством коллег, становится частью профессионального минимума, как двадцать лет назад система контроля версий.

Ощущения и

измерения

Замер

19 %

медленнее выполнялись задачи с ассистентом

Ощущение участников

20 %

ускорения — по оценке тех же разработчиков

METR, 2025: опытные разработчики проектов с открытым кодом решали задачи в собственных хорошо знакомых репозиториях; ассистент разрешался или запрещался по случайному выбору.

01

Ощущение ускорения не заменяет измерения

помогает ли инструмент, устанавливается только замером

02

Выигрыш зависит от знания задачи

в незнакомой библиотеке и шаблонном коде он реален, в своём коде у эксперта — нет

Устройство модели

Токены, обучение, ошибки, агенты

02

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Предсказание

следующего токена

Текст запроса

Токенизатор

Трансформер: слои внимания

Вероятности следующего токена

Выбранный токен

дописывание токена к тексту и повторение цикла

Пояснение

Диалог, генерация кода и объяснения надстроены над одной задачей: продолжить имеющийся текст.

Пояснение

Внимание позволяет связать определение функции в начале файла с её вызовом в конце.

Токены и

язык запроса

Русский, токенизатор cl100k_base: 26 токенов на 9 слов

Git

·х

ран

ит

·с

н

им

ки

·про

ект

а

,

·а

·не

·раз

лич

ия

·м

еж

д

у

·вер

с

ия

ми

.

Русский, токенизатор o200k_base: 15 токенов

Git

·хран

ит

·сним

ки

·проекта

,

·а

·не

·различ

ия

·между

·версия

ми

.

Английский, оба токенизатора: 12 токенов на 10 слов

Git

·stores

·snapshots

·of

·the

·project

,

·not

·differences

·between

·versions

.

· — пробел в начале токена. Токенизаторы OpenAI: cl100k_base (GPT-4) и o200k_base (GPT-4o).

Пояснение

Цена запроса и заполнение контекстного окна считаются в токенах: один и тот же текст на русском обходится дороже.

Обучение и его

пределы

Предобучение: месяцы на корпусе текстов из интернета — язык, факты, приёмы программирования

Дообучение: следование инструкциям и полезность в диалоге

Важно

Дата среза: о событиях после окончания обучающего корпуса модель не знает.

Важно

Модели недоступны файлы пользователя, пока они не переданы ей явно.

Уверенные

ошибки

Модель обучена порождать правдоподобное продолжение, а не истинное; механизма проверки фактов у неё нет.

01

Выдуманный аргумент функции

в документации его нет, но «логично было бы иметь»

02

Несуществующая ссылка

правдоподобный адрес статьи или страницы документации

03

Перепутанный коэффициент

формула выглядит уверенно, программа выдаёт числа

04

Несуществующая библиотека

осмысленное название; обнаруживается при первом импорте

Для физика

Несуществующая библиотека обнаруживается сразу, а перепутанный коэффициент может дойти до отчёта. Сведения ассистента о физике, численных методах и API проверяются по документации.

Демонстрация:

цепь Маркова

01

Корпус: главы книги об ИИ и Git

02

Начало корпуса

03

Текст из 40 слов

04

Второй запуск: другой текст

Что наблюдается

Каждая пара соседних слов взята из книги, поэтому текст звучит связно, но утверждения в нём порождены случаем.

root@lab — запись со стенда

Характеристики

модели

01

Размер

число параметров — от единиц миллиардов до триллионов; чем больше модель, тем тоньше улавливаемые зависимости, но тем дороже и медленнее работа

02

Контекстное окно

сколько токенов модель видит за раз, включая вопрос, файлы и ответ; детали из середины длинного контекста удерживаются хуже

03

Рассуждение

модели, порождающие промежуточные шаги, сильнее в многошаговых задачах, но отвечают дольше и стоят дороже

Пояснение

Названия моделей и цены меняются каждые несколько месяцев; сравнение по качеству, скорости и стоимости ведут независимые площадки artificialanalysis.ai и openrouter.ai.

Запрос и

контекст

ПриёмСуть
Zero-shotвопрос без примеров; достаточно для типовых задач
Few-shotодин-два примера в нужном формате
Chain-of-thoughtпросьба рассуждать по шагам; в рассуждающих моделях встроена

Пояснение

Качество ответа определяется не изяществом формулировки, а тем, что модель видит: нужный файл, сообщение об ошибке целиком, фрагмент документации.

Для физика

Трейсбек прикладывается целиком, а не пересказывается по памяти.

Агенты

Задача

Выбор действия моделью

Инструмент: файлы, команды, поиск

Готовый результат

вызов

результат

чтение и запись файлов, запуск команд и тестов, поиск по репозиторию

Важно

Агент выполняет команды в системе пользователя: его допускают только в репозиторий под контролем версий.

Инструменты ИИ

Формы, правила, MCP, Copilot

03

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Три формы

инструментов

01

Плагин к редактору

работает в привычной среде: VS Code, JetBrains, Neovim

GitHub Copilot

02

Редактор вокруг ассистента

модель видит проект целиком; большинство таких редакторов выросло из VS Code

Cursor, Windsurf

03

Терминальный агент

работает в каталоге проекта: правит файлы, запускает тесты; подходит для кластера по SSH

Claude Code, Aider, Gemini CLI

Пояснение

Границы между формами размываются: редакторы получают агентный режим, агенты — интеграцию с IDE. Выбор определяется тем, где ведётся работа.

Глубина

вмешательства

01

Автодополнение

продолжение по ходу набора; серый текст легко принять без чтения

02

Правка выделенного

«добавь обработку ошибок», «векторизуй этот цикл»

03

Чат по проекту

вопрос со ссылками на файлы и трейсбеком

04

Агентный режим

читает файлы, вносит правки, запускает тесты и исправляется сам

меньше самостоятельности

больше самостоятельности, меньше контроля — тщательнее проверка

Правила

проекта

Файл правил в корне репозитория (пример договорённостей группы):

- Код на Python 3.12, стиль — PEP 8, длина строки 79 символов.
- Единицы СИ везде, кроме энергии частиц: она в МэВ.
- Массивы обрабатываем векторизованно, циклов по элементам не пишем.
- Новый код сопровождается тестом в tests/.
- Данные экспериментов в репозиторий не коммитим.

Пояснение

Агент добавляет файл правил к каждому запросу: договорённости группы не повторяются вручную.

Важно

Файл игнорирования исключает из передачи модели пароли, токены, персональные данные и неопубликованные сырые данные: отправленное вернуть невозможно.

MCP:

подключение инструментов

Без протокола: интеграция для каждой пары

Редактор

Агент

Чат

База данных

Вики группы

Архив установки

С MCP: одна реализация инструмента для всех клиентов

MCP

Редактор

Агент

Чат

База данных

Вики группы

Архив установки

Для физика

MCP-сервер к архиву телеметрии установки позволяет спросить у агента, что происходило с током в магнитах в ночь неудачного запуска.

Меры

предосторожности

01

Только под контролем версий

всё сделанное агентом видно в git diff и откатывается одной командой

02

Чтение перед принятием

отказаться от непонятной правки дешевле, чем впоследствии искать в ней ошибку

03

Мелкие шаги

результат задачи «вынеси в функцию и добавь тест» вычитывается, задачи «перепиши модуль» — нет

04

Разрушительные команды — за человеком

удаление файлов, git push, отправка данных наружу

05

Ответственность на разработчике

автор кода — тот, кто поставил под ним коммит

GitHub

Copilot

Плагин к редактору, дописывающий код по контексту всего файла. Первая версия вышла в 2021 году, на полтора года раньше ChatGPT.

Под тем же названием сегодня существуют чат по проекту, агентный режим, агент для командной строки и ревью pull request.

Для физика

Начинать лучше с автодополнения: оно требует меньше всего доверия к модели.

Подключение

01

Аккаунт на GitHub

02

Расширение «GitHub Copilot» в VS Code

03

Вход через GitHub по запросу расширения

04

Student Developer Pack на education.github.com: полный тариф вместо бесплатного

Приёмы

работы

Комментарий задаёт намерение, ассистент предлагает продолжение (пример из главы книги):

# Напиши функцию для расчёта среднего значения списка
def calculate_average(numbers):
    return sum(numbers) / len(numbers) if numbers else 0

Пояснение

Управление ассистентом возможно только через контекст: открытый файл, соседние вкладки и комментарии разработчика.

01

Точная формулировка задачи в комментарии

02

Чтение предложения целиком: пустой список, деление на ноль

03

Проверка тестом, а не взглядом

04

Передача шаблонной работы: аргументы, форматы, графики

05

Рассмотрение не только первого варианта

Демонстрация:

ассистент в редакторе

01

Файл с константой g и комментарием-задачей

02

Предложение ассистента

03

Чтение: радианы, g, угол 90°

04

Тест: v0 = 10 м/с, 45° → 10,19 м

05

Чат: объяснение ошибки по трейсбеку

Проверка

Дальность при v0 = 10 м/с и 45° равна v0²/g ≈ 10,19 м; предложение принимается только после этого теста.

VS Code с расширением GitHub Copilot — показ вживую

import math
 
g = 9.81  # м/с²
 
# Дальность полёта тела, брошенного
# под углом angle (градусы) со скоростью
# v0 (м/с) с поверхности земли
def flight_range(v0, angle):
 
 
def test_flight_range():
    assert abs(flight_range(10, 45) - 10.19) < 0.01

Типичные ошибки

ассистента

01

Неэффективность

лишний проход или лишняя копия: незаметно на учебных объёмах, мешает на рабочих

02

Устаревшие приёмы

старого кода в обучающих данных больше, чем свежего; сверка — с документацией

03

Выдумывание

несуществующие методы и аргументы; неверная формула молча возвращает правдоподобное число

Пояснение

Помогает привычка запускать написанное: вызов придуманного метода сразу завершается ошибкой, а неверную формулу выявляет тест.

ИИ в учёбе и

науке

Порядок освоения — от задач, где ошибку легко заметить:

01

Шаблонный код: форматы данных, конвертеры

02

Объяснение чужого кода

03

Документация и тесты к работающему коду

04

Отладка по трейсбеку целиком

05

Автоматизация рутины вокруг расчётов

Важно

Правило курса: каждая сданная строка понятна студенту и объясняется на защите; без объяснения задание не засчитывается.

Для физика

Физические формулы и численные схемы у ассистента без проверки не берутся: ошибка в коэффициенте не остановит программу, но испортит расчёт.

Основы Git

Снимки, три состояния, базовый цикл

04

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Назначение

контроля версий

Каталог курсовой работы с расчётами:

processing.py
processing_new.py
processing_final.py
processing_final_v2.py
thesis_final_v2_FINAL(2).py
thesis_final_v2_FINAL(2)_fixed_mass.py

Каким из файлов построен третий рисунок статьи, через месяц не помнит никто, включая автора.

01

История вместо множества файлов

один processing.py, все прошлые версии — в Git; любые две сравниваются построчно

02

Воспроизводимость расчётов

хеш коммита рядом с результатом позволяет восстановить код, построивший график

03

Совместная работа

изменения нескольких человек объединяются; видно, кто, что и зачем изменил

Пояснение

Репозиторий на сервере служит и резервной копией: выход из строя диска перестаёт быть катастрофой.

Снимки, а не

различия

a4e6e8f

Добавлен расчёт энергии пучка

processing.py — новый

cdf6ff6

Добавлено описание проекта

processing.py — ссылка

README.md — новый

73315e0

Дополнено описание проекта

processing.py — ссылка

README.md — изменён

родитель

родитель

Пояснение

Коммит — снимок всего проекта с автором, датой, сообщением и ссылкой на родителя. Объект адресуется хешем SHA-1; в командах достаточно первых 6–8 символов.

Для физика

Хеш рядом с результатом делает расчёт воспроизводимым: «Рисунок 3 построен на коммите a3f2c17».

Три

состояния

Рабочий каталог

обычные файлы, которые правит разработчик

Индекс

изменения, отобранные в следующий коммит

Репозиторий .git

все зафиксированные снимки проекта

git add

git commit

git restore

git restore --staged

Пояснение

Индекс позволяет зафиксировать часть накопленных правок: исправление формулы одним коммитом, эксперименты с графиками — другим.

Разовая

настройка

Автор коммитов и имя главной ветки:

git config --global user.name "Lev Landau"
git config --global user.email "l.landau@g.nsu.ru"
git config --global init.defaultBranch main

Новый репозиторий или копия существующего:

git init
git clone https://github.com/nsu-phys/beam-dynamics.git

Пояснение

Имя и почта попадают в каждый коммит; main — имя главной ветки, принятое на GitHub.

Пояснение

git init создаёт в текущем каталоге скрытый каталог .git; git clone копирует проект вместе со всей историей.

Базовый

цикл

КомандаНазначение
git statusсостояние всех трёх зон и следующий шаг
git add processing.pyдобавление файла в индекс
git add -pотбор изменений по частям
git commit -m "…"фиксация снимка с сообщением
git log --onelineистория, по строке на коммит
git log --oneline --graph --allвесь граф с ветками
git diffизменения, ещё не добавленные в индекс
git diff --stagedизменения, которые войдут в коммит
git show a3f2c17изменения, внесённые коммитом

Пояснение

git status вызывается до и после каждой операции: он показывает состояние зон и подсказывает следующую команду.

Для физика

git diff a3f2c17 HEAD -- processing.py показывает, как файл изменился со времени старого коммита.

Демонстрация:

первый репозиторий

01

Имя, почта и главная ветка main

02

git init в новом каталоге beam

03

git status: неотслеживаемый файл

04

git add и первый коммит

05

Правка константы и git diff

06

Второй коммит и git log --oneline

Что наблюдается

git diff показывает прежнюю строку со знаком «−» и новую со знаком «+»; git log выводит оба коммита с сокращёнными хешами.

root@lab — запись со стенда

.gitignore:

исключение файлов

# байткод и кеши Python
__pycache__/
*.pyc
.ipynb_checkpoints/
# виртуальное окружение
.venv/
# данные измерений и результаты расчётов
data/
*.h5
*.root
*.npz

# тяжёлые артефакты: чекпойнты, дампы
checkpoints/
*.ckpt
# служебные файлы редакторов и ОС
.idea/
.vscode/
.DS_Store
# служебные файлы LaTeX
*.aux
*.synctex.gz

Важно

В репозитории хранится написанное вручную — код, тексты, конфигурации — и не хранится измеренное на установке или полученное расчётом. Сам .gitignore фиксируется в репозитории: правила общие для группы.

Демонстрация:

.gitignore

01

Каталоги data и __pycache__ с файлами

02

git status --short: два неотслеживаемых каталога

03

Два правила в .gitignore

04

В списке — только .gitignore

05

Коммит .gitignore и чистый рабочий каталог

Что наблюдается

После записи правил git status перестаёт показывать данные и кеши, а сам .gitignore попадает в репозиторий.

root@lab — запись со стенда

Ветки и слияние

Граф коммитов, merge, конфликты

05

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Граф

коммитов

A

B

C

F

D

E

main

HEAD

fft-filter

01

Коммит

снимок со ссылкой на родителя; у коммита слияния F два родителя

02

Ветка

подвижный указатель на коммит, файл размером 41 байт внутри .git

03

HEAD

текущее положение в графе, обычно указывает на ветку

Работа с

ветками

Для проверки другого алгоритма фильтрации сигнала не требуется комментировать половину файла: эксперимент ведётся в ветке, названной по его сути.

git branch                  # список веток, звёздочка — текущая
git switch -c fft-filter    # создание ветки и переход на неё
# ...правки и коммиты в ветке...
git switch main             # возврат на main и прежний вид файлов

Пояснение

git switch появился в Git 2.23; в старых руководствах те же действия выполняются командами git checkout -b fft-filter и git checkout main.

Важно

Если незафиксированные правки конфликтуют с содержимым другой ветки, git switch откажется переключаться; поэтому перед переключением правки фиксируются коммитом.

Слияние

веток

Fast-forward

A

B

D

E

main до

main

fft-filter

main без изменений: перемещение указателя вперёд, без новых коммитов

Коммит слияния

A

B

C

F

D

E

main

main с изменениями: коммит слияния F с двумя родителями

git switch main
git merge fft-filter        # слияние fft-filter с main
git branch -d fft-filter    # удаление ненужного указателя

Демонстрация:

ветки и слияние

01

Ветка fft-filter и коммит с фильтром

02

Возврат на main и правка описания

03

git merge: коммит слияния

04

git log --oneline --graph --all

05

Удаление указателя fft-filter

Что наблюдается

Граф в выводе git log повторяет схему: две линии расходятся после общего коммита и сходятся в коммите слияния.

root@lab — запись со стенда

Конфликты

слияния

В двух ветках изменена одна и та же строка integrator.py:

<<<<<<< HEAD
dt = 1e-12  # шаг для жёсткой задачи
=======
dt = 5e-12  # компромисс между точностью и скоростью
>>>>>>> step-tuning

Пояснение

Конфликт является не ошибкой, а вопросом к разработчику: Git не выбирает вариант самостоятельно.

01

Выбор верного варианта или объединение обоих

02

Удаление маркеров

03

git add integrator.py

04

git commit: завершение слияния

Важно

git merge --abort откатывает слияние целиком, пока оно не завершено коммитом.

Демонстрация:

конфликт

01

Ветка step-tuning: шаг 5e-12

02

main: та же строка, шаг 1e-12

03

git merge: конфликт в integrator.py

04

Маркеры в файле

05

Выбор варианта, git add, git commit

06

Граф с коммитом слияния

Что наблюдается

Git останавливает слияние и ждёт решения разработчика; коммит слияния фиксирует это решение.

root@lab — запись со стенда

Совместная работа

Удалённые репозитории, fork, исправление ошибок

06

ИИ в разработке

Устройство модели

Инструменты ИИ

Основы Git

Ветки и слияние

Совместная работа

Удалённые

репозитории

Локальный репозиторий разработчика

Удалённый репозиторий: GitHub, GitLab, машина группы

Локальный репозиторий коллеги

git push

git pull

git push

git pull

git remote -v                   # список удалённых репозиториев
git remote add origin <адрес>   # привязка к серверу
git push -u origin main         # отправка main и запоминание связки
git fetch                       # загрузка коммитов без изменения файлов
git pull                        # fetch и слияние с текущей веткой

Пояснение

Ритм работы: в начале сеанса git pull, по окончании git push. Чем чаще синхронизация, тем меньше конфликтов.

Демонстрация:

удалённый репозиторий

01

Голый репозиторий ~/server/beam.git в роли сервера

02

git remote add и git push -u

03

Клон коллеги: правка и git push

04

git fetch: коммит коллеги в origin/main

05

git pull: перемотка вперёд

Что наблюдается

После git fetch рабочие файлы не изменились, а коммит коллеги уже виден в origin/main; git pull переносит его в main.

root@lab — запись со стенда

Fork и

pull request

01

Fork

кнопкой на GitHub создаётся личная копия репозитория

02

Клон и ветка

форк клонируется, в новой ветке фиксируется исправление

03

Push в форк

ветка отправляется в личную копию

04

Pull request

предложение включить коммиты: описание и дифф

05

Ревью

владельцы пишут замечания, новые коммиты обновляют PR

06

Слияние

одобренный PR вливается в основной репозиторий

Пояснение

По этой схеме работает весь open source: исправление одной строки в документации scipy проходит тот же путь. Задания курса сдаются так же.

Хорошие

практики

01

Атомарные коммиты

одно логическое изменение на коммит; проект запускается в каждом коммите

02

Сообщение с причиной изменения

заголовок до 50 символов, не более 72; что изменилось, покажет дифф

03

Большие файлы вне истории

сырые данные, HDF5, ROOT, модели — в Git LFS или DVC

04

Секреты вне репозитория

пароль, попавший в историю, удалить почти невозможно

Неинформативно

fix · fix2 · wip · изменил всякое

Информативно

Увеличен шаг сетки: старый не помещался в память на кластере

Исправление

ошибок

СитуацияКоманда
Испорченный файлgit restore file.py — потеря правок
Лишнее в индексеgit restore --staged file.py
Опечатка в сообщении или забытый файлgit commit --amend — до отправки
Отмена коммита с сохранением измененийgit reset --soft HEAD~1 — правки в индексе
Удаление последнего коммита с правкамиgit reset --hard HEAD~1 — потеря правок
Отмена отправленного коммитаgit revert a3f2c17 — обратный коммит
Смена ветки при незаконченных правкахgit stash, затем git stash pop
Пропавшие коммитыgit reflog и git reset --hard <хеш>

Важно

git reset --hard без предупреждения уничтожает незафиксированную работу: перед ним вызывается git status. Историю, уже отправленную коллегам, не переписывают.

Демонстрация:

исправление ошибок

01

Отладочная строка и git restore

02

Опечатка в сообщении и --amend

03

git reset --soft: изменения снова в индексе

04

git reset --hard HEAD~1: удаление коммита

05

git reflog и возврат по HEAD@{1}

Что наблюдается

Удалённый коммит остаётся в журнале reflog и возвращается по нему; незафиксированные правки так не восстанавливаются.

root@lab — запись со стенда

Агент в

репозитории

Коммит: точка возврата

Правки агента

git diff: чтение каждой правки

Принятие: git add -p, git commit

Отказ: git restore .

Пояснение

git add -p позволяет принять часть правок агента и отвергнуть остальные.

Важно

git restore не удаляет новые файлы, созданные агентом: их перечисляет git status.

Заключение

01

Языковая модель порождает правдоподобное продолжение, а не истинное: результат проверяется тестом и документацией.

02

Ощущение ускорения не заменяет измерения; выигрыш тем больше, чем менее знакома задача.

03

Качество ответа определяется контекстом: файлом, трейсбеком, фрагментом документации.

04

Git хранит снимки проекта, а ветки являются лёгкими указателями, поэтому эксперименты ведутся в ветках.

05

Агент работает только в репозитории под контролем версий: каждая правка видна в git diff и отменяется.

Ответственность за код несёт тот, кто поставил под ним коммит.

Домашнее задание

Генератор текста на цепи Маркова

01

Программа с двумя аргументами: имя файла с корпусом и длина результата в словах

02

Тексты на двух корпусах разных авторов, не менее ста тысяч слов каждый

03

Сравнение цепочек по два и по три слова: изменение связности и его причина

04

Случай слова, встретившегося один раз в самом конце текста

Сдача через Git

Форк репозитория задания, решение в отдельной ветке

Атомарные коммиты с сообщениями, объясняющими изменения

.gitignore, исключающий кеши Python и виртуальное окружение

Pull request с описанием решения

Объяснение на защите каждой строки, в том числе предложенной ассистентом

Репозиторий: github.com/phys-dev/markov-chain-task · главы «Технические основы» и «Коллекции»

Типичные

ошибки

01

Короткий корпус

на тексте в несколько тысяч слов цепочки по два-три слова почти дословно повторяют источник

02

Старт со строчной буквы

текст начинается с середины фразы

03

Один коммит на всё решение

история не показывает хода работы, откатить отдельный шаг нельзя

04

Сообщения fix и wip

из истории непонятно, что и зачем изменено

05

Кеши и окружение в коммите

__pycache__ и .venv попадают в репозиторий без .gitignore

06

Код ассистента без понимания

строка, которую автор не может объяснить, не засчитывается

Источники

1

Книга курса: главы части «ИИ для разработки» и глава «Git»

phys-dev.github.io/soft-dev-book

2

Vaswani A. et al. Attention Is All You Need. – 2017

arxiv.org/abs/1706.03762

3

METR. Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity. – 2025

metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study

4

Stack Overflow Developer Survey 2024

survey.stackoverflow.co

5

Anthropic. Building Effective Agents. – 2024

anthropic.com/engineering/building-effective-agents

6

Model Context Protocol

modelcontextprotocol.io

7

Chacon S., Straub B. Pro Git. – 2nd ed.

git-scm.com/book/ru/v2

8

Learn Git Branching — тренажёр по веткам

learngitbranching.js.org

Спасибо за внимание

Вопросы

phys-dev.github.io/soft-dev-book

HEAD