Gose Game Kata, сделанная в паре с Github Copilot, чтобы обострить мои быстрые инженерные навыки и размышлять о моделях общения, чтобы принять при сочетании с инструментом кодирования, поддерживаемого AI? ...
Все началось со следующей подсказки:
Я хотел бы сделать с вами кодирующую катую, чтобы практиковаться вместе TDD, рефакторинг и дизайн программного обеспечения. Мы постараемся следовать TDD и его шагам совершенно строго. Мы собираемся кодировать Kata в Kotlin, используя простую настройку проекта в Gradle. Ката является следующим: https://github.com/xpeppers/goose-game-kata. Мы начнем с первой функции, с цикла TDD добавления теста, заставьте его пройти, рефактор код и повторить. Мы будем работать небольшими шагами, итеративно.
Первая функция - следующая:
1. Добавьте игроков
Как игрок, я хочу добавить меня в игру, чтобы я мог играть.
Сценарии:
- Добавить игрока
If there is no participant
the user writes: "add player Pippo"
the system responds: "players: Pippo"
the user writes: "add player Pluto"
the system responds: "players: Pippo, Pluto"
- Дублированный игрок
If there is already a participant "Pippo"
the user writes: "add player Pippo"
the system responds: "Pippo: already existing player"
Вы собираетесь написать первый тест, а затем я собираюсь дать вам отзыв о его качестве. Если тест для меня в порядке, мы перейдем к внедрению кода приложения, который мы сделаем тестовый проход. Затем мы будем искать любую возможность сделать код более ясным, легче понять, рефактируя его.
Наряду с кодом, вы можете найти подсказки, которые я использовал, чтобы направлять сеанс программирования пар в prompts
> старше. Я создал новый приглашенный файл для каждого нового шага, который мы сделали. Я поместил больше подсказок в одном и том же файле, разделенном строкой ---
, когда одна подсказка не привела к прохождению всех тестов.
Мои отзывы о выполнении этой каты с помощью копила
- Я чувствую, что я менее сосредоточен на полученном коде, больше сосредоточен на правильной подсказке и о том, работает ли ответ "или нет
- Я заметил, что иногда я больше сосредотачиваюсь на форме подсказки и о том, компилируются ли код, и тесты все еще проходят, а не на форме кода ... иногда это приводило нас к тупику, и нам приходилось вернуть изменения и начать снова.
- Неясно, насколько чувствительным является копило, к чему лучше делать после рефакторинга: рефактор по желанию? Когда имеет смысл перейти к следующему тесту?
- Часто «спецификации» по своей природе неоднозначны (что означает «игра катится на кости»?) => сталкивается с этой двусмысленностью, вполне вероятно, что ответ модели не является «правильным», если мы не уменьшим неоднозначность В предложении сами (таким образом, если это принять роль «устранения дисплексинга», «Клиент»)
- Иногда ответы модели меня удивляют (например, ей удается хорошо понять контекст и изменить код, чтобы уважать стиль и форму существующего кода), в других случаях это делает ошибки, которые кажутся «ошибками отвлечения», как мы, люди?
- Копилот имеет отличное окно контекста, он может помнить, что вещи сказали несколько подсказок ранее.
- Когда он рефактирует или предлагает изменения, он не понимает, что он также должен исправить тесты ... он почти всегда фокусируется только на коде приложения?
- Когда код нуждается в подготовительном рефакторинге, чтобы приспособить следующую функцию (классическая «сначала сделайте изменение легким, затем сделайте легкие изменения»), борьба с Copilot:
- Кажется, это не может столкнуться с такими рассуждениями (например, в «Мы должны сделать шаг назад и стратегически рассмотреть вещи»)
- Он не может идентифицировать «сложный» пахнет, когда логика, которая нам нужна для следующей функции, разбросана по нескольким классам, поэтому нам нужно сделать шаг назад, прежде чем двигаться вперед.
- Даже если вы скажете ему начать с нуля, выбрасывая весь произведенный код, начиная с теста, который оставался красным, он часто просто повторяет одни и те же шаги, даже если вы говорите: «Давайте попробуем новый подход» или «Давайте сделаем вещи в небольших шагах ».
Смотрите также мои размышления здесь (итальянский)