урок 4 из 16

Точечная правка: выделил и сказал

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

18 мин чтения · 4 главы ·4 задания ·домашняя работа

Выделение задаёт границы

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

Отличие от поручения — в том, что место вы называете сами, и называете его не словами, а выделением. Отсюда и главное свойство этой скорости, и главный источник неожиданностей.

Выделили строкуправка внутри строки: переименовать, поменять условиеВыделили функциюправка внутри функции: вынести, упростить, добавить проверкуВыделили весь файлэто уже не правка выделенного, а поручение без сказанных граници результат будет соответствующий
Что выделено, то и будет тронуто. Половина неожиданностей на этой скорости — про границу, а не про слова.

Что выделено, то и будет тронуто. Звучит очевидно, пока вы не выделили лишнего или недостаточно.

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

Второе свойство, из которого растёт вся польза этой скорости: вы видите старое и новое рядом. Не готовый результат, а именно изменения — что было и что стало.

Это меняет проверку целиком. В поручении вам приходится читать дифф по нескольким файлам и держать в голове, что там было раньше. Здесь старое перед глазами, изменение подсвечено, и вопрос «то ли оно теперь делает» решается за секунды.

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

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

Из чего состоит фраза

Теперь про слова. Фраза на этой скорости короткая — одна строка, — и состоит из трёх частей.

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

Что сделать — глагол: вынеси, упрости, добавь, переименуй, разбей. Он есть всегда, и обычно с ним проблем нет.

С чем именно — чаще всего заменяется выделением. Иногда всё же нужно: «в этом условии», «во втором цикле», «только в обработке ошибок».

Чего не менять — та часть, которую пропускают, и та, из-за которой правка выходит шире задачи.

Список глаголов, которые работают хорошо, короткий и стоит того, чтобы его знать.

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

И список тех, что работают плохо, — он короче и полезнее.

ФразаПочему плохо
«сделай лучше»лучше по чьей мерке? он выберет свою
«оптимизируй»по скорости? по памяти? по читаемости? это разные правки
«почини»не сказано, что сломано; он найдёт что-нибудь
«причеши»приглашение тронуть всё, что покажется неровным

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

Это работает и через файл: «сделай как в services/orders.js». Файл не обязан быть открыт — достаточно назвать его, и агент его прочитает.

И последнее про слова — про то, чего в них быть не должно. Вежливость и объяснения тратят место и ничего не добавляют. «Пожалуйста, если тебе не трудно, посмотри вот этот кусок, мне кажется, он немного громоздкий, может быть, его стоит как-то улучшить» — это одна мысль, размазанная на строку, и мысль эта пустая.

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

Как принимать правку

Правка сделана и показана. Теперь как её принимать — быстро и не пропуская главного.

Границы: тронуто ли лишнееСмысл: то же ли оно делаетИмена: те ли переменныеКрая: пусто, ноль, отрицательноепервое проверяется за секунду и ловит больше всего:изменённые строки за пределами выделения — это сюрпризи именно поэтому правку выделенного принимают по диффу,а не по тому, как выглядит получившийся код
Правка выделенного показывает изменения рядом со старым кодом — этим и стоит пользоваться.

Смотрят на четыре вещи, и первая ловит больше всех остальных вместе.

Границы: тронуто ли лишнее. Изменённые строки за пределами того, что вы выделяли, — это сюрприз, и его надо заметить до того, как вы посмотрели на смысл. Проверяется за секунду: взгляд на то, где подсвечено.

Смысл: то же ли оно делает. Если вы просили не менять поведение — проверяется именно это. Если просили изменить — проверяется, что изменилось ровно так, как вы хотели, а не «примерно в ту сторону».

Имена: те ли переменные. Та же ошибка, что в дописывании, и такая же тихая: похожее поле вместо нужного.

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

просили: «вынеси проверку в отдельную функцию, поведение не меняй»
- if (!doc.lines.length) return 0;
- if (doc.status === 'draft') return 0;
+ if (isEmptyOrDraft(doc)) return 0;
+ if (!doc.approvedBy) return 0;

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

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

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

И последнее про приёмку: после принятия запускают. Не тесты целиком — то, что можно запустить за секунды: сам файл, одну проверку, страницу. Правка выделенного мелкая, и её проверка тоже должна быть мелкой; откладывать её до общего прогона значит потерять то преимущество, ради которого эту скорость и выбрали.

Где выигрывает и где проигрывает

Последняя глава — про то, где эта скорость выигрывает у двух других и где проигрывает.

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

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

Где вторая скорость проигрывает — тоже три случая, и все три вы уже знаете.

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

Теперь про сочетание скоростей внутри одной задачи — то, ради чего написана глава.

Лучший порядок для сомнительной работы: поручить, потом поправить выделением. Агент находит места и делает основную часть; вы читаете дифф и в двух местах, где сделано не то, правите выделением — точечно, с границами, видя старое.

Обратный порядок тоже бывает полезен: сделать один пример выделением, потом поручить остальное. Тогда в проекте есть образец, на который можно сослаться, и поручение звучит просто: «сделай в остальных местах так же, как здесь».

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

Вопрос «вынеси это и скажи одной строкой, почему так лучше» стоит столько же, а даёт вдвое больше: код и объяснение, которое можно проверить, потому что код перед глазами. Это самый дешёвый способ учиться из всех трёх скоростей, и он не требует отдельного времени.

И совсем напоследок — про случай, которого в таблицах нет, потому что он не про выбор скорости. Иногда правильный ответ — не править вовсе. Вы выделили кусок, посмотрели на него, собрались сказать «упрости» — и поняли, что он не громоздкий, а просто незнакомый: вы его давно не читали.

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

Задания урока

Каждое проверяется сразу: ответ сверяется с эталоном, и на неверный вариант приходит разбор.

  1. «Он переписал больше, чем я просил» — обычно про неточную формулировку.средне
  2. Разложите фразы на рабочие и пустые.средне
  3. Расставьте, на что смотрят в ответе, начиная с того, что ловит больше всего.средне
  4. Неудачную правку выгоднее доработать руками, чем отказаться и сказать точнее.сложно

Практика и материалы по теме курса

Пройти урок с проверкой заданий Курс «Cursor» открыт и бесплатен, прогресс сохраняется.
Открыть курс