Из чего собирается контекст
В прошлом уроке была фраза, на которой держится половина курса: он знает сказанное плюс то, что видит. Этот урок — про вторую половину: что именно он видит и откуда это берётся.
Собирается контекст из пяти источников, и ваш вопрос среди них самый маленький.
| Что едет | Откуда |
|---|---|
| ваш вопрос | вы написали |
| правила проекта | файл в репозитории |
| личные настройки | ваша машина |
| файлы и вставленное | вы открыли или приложили |
| найденное поиском | он сам решил посмотреть |
| вся переписка разговора | накопилось |
Отдельно стоит сказать про найденное поиском, потому что это единственная строка списка, которую вы не контролируете. Остальное приносите вы: вопрос написали, файл открыли, правила завели. А поиск он делает сам — решает, что стоит посмотреть, и приносит это в окно.
Свойство удобное и обоюдоострое. Удобное: не надо перечислять файлы, он найдёт сам. Обоюдоострое: вы не знаете, что именно он нашёл, и потому не знаете, на чём стоит ответ. Оба хвоста этого свойства встретятся в курсе не раз, а лечится оно одним вопросом, который стоит завести привычкой уже сейчас, — «на чём основан ответ».
Стоит понимать и то, почему память устроена именно так, — не ради устройства, а чтобы не ждать от неё другого. Модель не хранит состояния между обращениями: каждый раз она получает текст и отвечает на него, ничего не помня о прошлом разе. Всё, что выглядит как память, кто-то собрал и отправил — интерфейс, редактор, ваш собственный файл правил.
Отсюда простое следствие: «он забыл» не бывает. Бывает «ему не отправили». И это хорошая новость, потому что второе чинится: посмотреть, что именно уехало, и дослать недостающее.
Из этого следуют два практических вывода, и оба про то, чего не видно глазами.
Первый. Длинный разговор дорожает с каждым сообщением, даже если вы пишете одну строчку. Вы платите не за строчку, а за строчку плюс всё, что было.
Второй. Лишнее, попавшее в окно однажды, едет с каждым следующим сообщением. Открытый и забытый большой файл, найденное поиском и не пригодившееся, пересказ письма из прошлой задачи — всё это приезжает вместе с вашим «поправь вот тут скобку».
И честная оговорка про то, чего в списке нет. Там нет прошлых разговоров, нет вчерашней работы и нет того, что вы объясняли в другом окне. Всё, что должно пережить закрытие вкладки, обязано быть записано — в файл правил, в настройки или в свою заметку. Это то же правило про третий повтор из первого урока, только теперь понятно, почему оно устроено именно так.
Окно не бесконечно
Теперь про размер. Окно контекста конечно — это знают все. Менее известно второе, и оно важнее: окно работает по-разному в зависимости от того, чем заполнено.
Пустое окно даёт догадки: он не знает проекта и додумывает. Заполненное по делу даёт лучший результат. А забитое работает хуже полупустого, и вот это ломает интуицию.
И вторая крайность, о которой говорят реже первой. Пустое окно тоже плохо, и ошибаются в эту сторону обычно те, кто уже обжёгся на забитом.
Выглядит это так: человек, наученный не тащить лишнего, задаёт вопрос вовсе без материала — и получает разумный общий ответ, не имеющий отношения к его проекту. Формально всё верно, практически бесполезно. Работает не пустое и не полное окно, а заполненное по делу, и «по делу» тут означает ровно одно: то, без чего задачу не решить, и ничего сверх.
Практически это выглядит узнаваемо.
| Признак | Что произошло |
|---|---|
| к сороковому сообщению ответы поехали | окно забито прошлой задачей |
| учитывает то, о чём вы уже передумали | старое решение всё ещё в окне |
| путает два похожих случая | оба в окне, и различить их нечем |
| игнорирует правило из файла | правило утонуло среди прочего |
Последняя строка — самая обидная, потому что правила писались как раз для того, чтобы работать всегда. Они и работают — пока их слышно. В забитом окне полстраницы правил весят столько же, сколько случайный кусок файла, который вы открыли час назад и забыли.
И практическое следствие на каждый день: убрать лишнее дешевле, чем добавить нужное. Закрыть забытый файл, начать новый разговор, не вставлять «для полноты картины» третий документ — это движения на секунду, а меняют они больше, чем переформулировка вопроса.
Как управлять контекстом
Третья глава — про управление контекстом, и это самая дешёвая работа во всём курсе: движения на секунду, а меняют они качество ответов заметно.
Главный приём один: новая задача — новый разговор.
| Когда начинать новый | Почему |
|---|---|
| сменилась задача | прошлая мешает и оплачивается |
| второй раз объясняете одно и то же | он держит старое понимание |
| ответы поехали, а вопрос прежний | окно забито |
| вернулись к работе на следующий день | контекст всё равно чужой |
Дальше — что ещё стоит делать, и все эти приёмы занимают секунды.
| Приём | Что даёт |
|---|---|
| закрыть лишние файлы | убирает то, что едет каждый раз |
| приносить нужное явно | он не угадывает, а читает |
| называть границы задачи | поиск не тащит лишнего |
| сохранять вывод наружу | разговор можно закрыть без потерь |
Вторая строка стоит отдельного слова. Между «пусть поищет сам» и «вот файл» есть разница, которую замечают поздно: в первом случае вы не знаете, что он нашёл и на чём построил ответ. Это удобнее и менее предсказуемо; там, где ответ важен, материал приносят явно.
И приём, который в списке выглядит скромнее прочих, а экономит больше всех: называйте границы прямо в вопросе. «Посмотри только в каталоге отчётов», «речь про вторую редакцию договора, первую не трогай», «интересует расчёт, а не оформление».
Одна такая строка работает сразу в две стороны. Она сужает поиск — значит, в окно попадёт меньше мусора. И она сужает саму задачу — значит, ответ придёт про то, что нужно. Это редкий случай, когда экономия контекста и точность формулировки не спорят между собой, а совпадают.
И приём, который стоит попробовать в первый же день: спрашивайте, на чём основан ответ. «Это из файла, который я приложил, или из общих соображений?» — вопрос из одной строки, возвращающий вам видимость. Заодно он ловит случай, когда в окне нужного не оказалось вовсе, а ответ всё равно пришёл — складный и ни на чём не основанный.
Длинная работа
Последняя глава — про то, что делать с длинной работой, потому что не всякую задачу можно уложить в короткий разговор.
Бывает так: разбор идёт третий час, окно заполнено, начинать заново жалко — там половина выясненного. Это настоящая ситуация, и у неё есть три решения.
| Решение | Когда годится |
|---|---|
| сжать разговор в итог и начать новый | выяснено много, а нужно немногое |
| вынести выясненное в файл и продолжить оттуда | работа продолжится завтра |
| разделить задачу на части | она с самого начала была крупной |
Третье решение — про то, как было бы правильно с самого начала. Крупная задача, отданная одним куском, забивает окно неизбежно: он ищет, читает, пробует, и всё это остаётся в разговоре. Разбитая на части, она занимает столько же работы и втрое меньше контекста.
Есть и четвёртое решение, которое стоит держать в уме, потому что иногда оно единственное верное: признать, что задача не для одного разговора вовсе.
Так бывает с работой, которая по-настоящему длинная: разбор большого наследия, сверка сотни документов, переписывание модуля целиком. Её не спасает ни сжатие, ни деление на три части, потому что дело не в окне, а в объёме самой работы. Такое отдают не разговору, а подагентам: каждый делает свой кусок в своём окне и возвращает сводку. Этому посвящён отдельный урок, а здесь важно уметь узнавать случай — чтобы не тратить день на попытки уместить неуместимое.
И последнее — про то, чего ждать от приёмов этой главы, чтобы не разочароваться.
Управление контекстом не делает ответы умнее. Оно убирает причины, по которым они бывают глупее, чем могли бы: чужую задачу в окне, утонувшее правило, материал, которого он не увидел. Это работа не про рост, а про устранение помех, — и заметна она обратным: перестаёт происходить то, что происходило.