Прибуток:
- Здатність писати функції, класи та модулі для ШІ з чіткими визначеннями вводу-виводу та обмежень
- Можливість використовувати штучний інтелект як партнера з парного програмування та прогресувати крок за кроком невеликими порціями, які можна перевірити
- Можливість виявляти логічні та крайові помилки шляхом компіляції коду, згенерованого штучним інтелектом, і запуску його з невеликими прикладами
Парне програмування — це коли два розробники працюють над однією проблемою, один пише, а інший переглядає. Кодування за допомогою штучного інтелекту є цифровою версією цих самих відносин: ви встановлюєте напрямок, обмеження та критерії прийняття; ШІ створює швидку чернетку; Ви перевіряєте кожен крок, компілюючи та тестуючи його. Найбільша пастка тут полягає в тому, щоб сказати ШІ «напишіть мені цю програму від початку до кінця» і сліпо прийняти блок із 200 рядків. Гарне парне програмування відбувається невеликими кроками: кожен крок має бути зрозумілим, тестованим і оборотним.
У цьому розділі ви навчитеся друкувати функції, класи та модулі з чітким контрактом введення-виведення; Як керувати ШІ крок за кроком; і ми побачимо, як виловлювати логіку та крайові помилки, запускаючи код, який він створює, з невеликими прикладами. Мета не швидкість, а перевірена швидкість.
Концепції: Контракт вводу-виводу: чітке визначення того, який вхід приймає функція, який вихід і поведінку помилок вона обіцяє. Граничний випадок: вхідні дані, які не є звичайними, але можуть виникнути (порожній, нульовий, негативний, дуже великий, нульовий). Поступовий розвиток: продовження роботи з невеликими робочими частинами та перевірка кожного кроку.
Друк коду з мережевим контрактом
Основа коду якості полягає в тому, щоб перед початком роботи точно визначити, «що ви хочете». Під час написання функції для ШІ задайте їй п’ять речей: мову та версію, типи введення та значення, вихід, умови помилок та обмеження (продуктивність, заборона зовнішньої бібліотеки, стиль). Це заважає штучному інтелекту вгадати.
- Напишіть договір. Вхід, вихід, помилка, обмеження.
- Попросіть невелику одиницю. Функція з єдиною відповідальністю; Це не великий модуль.
- Запит на тестовий блок. Додайте кілька зразків прогонів/тестів поруч із кодом.
- Скомпілюйте та запустіть. Спробуйте це з крайовими випадками, перевірте результат на око.
- Перейдіть до наступного кроку. Як тільки частина буде підтверджена, побудуйте її.
Підказка функції з контрактом: "Напишіть функцію для TypeScript 5. Призначення: обчисліть загальну кількість елементів у кошику для покупок. Вхід: {ціна: число, кількість: масив []. Вихід: число (загальна сума). Правила: викидайте помилку, якщо кількість або ціна від’ємні; повертайте 0 для порожнього масиву; округляйте суму до 2 знаків після коми для десяткової помилки. Не використовуйте зовнішню бібліотеку. Додайте 5 тестових прикладів під функцією (звичайний, порожній, від’ємна кількість, десяткова ціна, один товар).»
Керівництво ШІ як пара
Хороший прогрес у парному програмуванні – це діалог, а не одне велике прохання. Спочатку запитайте скелет і запустіть його; потім додайте крайовий стан; потім виправте помилку. Цей підхід робить код зрозумілим і дає вам можливість контролювати кожен крок.
Підказка про поступовий прогрес: «Ми напишемо читач, який читає файл CSV і перетворює рядки на об’єкт. Давайте КРОК ЗА КРОКОМ, переходимо до наступного кроку без мого підтвердження кожного кроку. Крок 1: просто напишіть скелет, який розбиває файл на рядки та відокремлює рядок заголовка. Поки що не додавайте перетворення типів або обробку помилок. Будьте короткими, поясніть».
Поясніть і обґрунтуйте підказку коду: «Поясніть функцію, яку ви щойно написали, не рядок за рядком, а рішення за рішенням: яке проектне рішення ви прийняли і чому, який крайовий випадок ви обробили і як, які випадки ви навмисно виключили? Перелічіть 3 припущення в коді, які я не повинен пропустити».
Порада: не приймайте створений ШІ код, не розуміючи його. «Поясніть мені це, які припущення ви зробили?» Запитання виявляє приховані помилки та дозволяє вам захистити цей код, оскільки код залишається вашою відповідальністю. Розміщувати код, який ви не розумієте, у виробництво — це все одно, що надіслати контракт, не підписавши його.
Слабка підказка / Сильна підказка
СЛАБКО: «Напишіть функцію сортування». (Результат: яка мова, що сортується, чи вона стабільна, яке обмеження продуктивності, код нечіткий і, ймовірно, не відповідає вимогам.) СИЛЬНО: «Для Java 17 напишіть метод, який сортує об’єкт List<Employee> спочатку за відділом (за алфавітом), потім за зарплатою (за спаданням). НЕ ЗАМІНЮЙТЕ оригінальний список, поверніть новий список. Нехай нульовий відділ, поясніть складність методу в рядку коментаря, додайте основний тестовий блок із 4 зразками.
Потужна підказка; Включає критерій сортування (дворівневий), правило побічного ефекту (заміна оригіналу), нульову поведінку та тестове очікування. Без цих деталей ШІ створює правдоподібне, але неправильне рішення; наприклад, це може пошкодити оригінальний список, і це призведе до тихої помилки в іншому місці.
Перевірка за допомогою граничних випадків і малих зразків
Код, який працює в щасливому сценарії, не є правильним кодом. Свідомо змушуйте кожну вироблену функцію:
Тип крайового корпусу
зразок введення
очікувана поведінка
порожній вхід
Порожній масив/рядок
Не помилка, логічний порожній результат
Нуль/негативний
0, -1
Визначена і правильна поведінка
велика цінність
Мільйони записів
Контроль переповнення/продуктивності
нульовий/невизначений
відсутній простір
Контрольована помилка або замовчування
Дублікат/незвичайний
повторюваний, зворотний порядок
правильний результат
Міні-чохли
Випадок 1 — мовчазна помилка округлення. AI пише функцію, яка збирає гроші з десятковими (float) типами; 0,1 + 0,2 дає 0,3000000000000004. Помилка вирішується, коли інженер додає правило «Округліть до 2 цифр і використовуйте цілі пенні». 3-рядкове правило запобігає різниці в тисячі копійок у щомісячній звірці.
Випадок 2 — Пастка для побічних ефектів. AI пише метод, який «сортує» список, але змінює вихідний список на місці. Неочікувана поведінка виникає через те, що інший модуль використовує той самий список. Якби обмеження «змінити оригінал» було в підказці, помилка ніколи не виникала б; потрапляє під час перевірки коду, що заважає 2 годинам налагодження.
Кейс 3 — Заробіток крок за кроком. Розробник друкує 150-рядковий модуль імпорту одночасно; Коли він знаходить помилку, він не може зрозуміти, звідки вона взялася. Інший розробник ділить ту саму роботу на 5 невеликих кроків, тестує кожен крок протягом 2 хвилин і відразу виявляє помилку на третьому кроці.
Поширені помилки
- Друк великих блоків одним запитом. Народжується ризикований код, який важко зрозуміти та налагодити.
- Запит коду без укладання договору. Якщо помилка вводу-виводу неоднозначна, ШІ вгадає та помиляється.
- Просто тестую щасливий сценарій. Якщо порожній, нульовий, негативний і великий вхід не спробовано, помилка залишається для виробництва.
- Приймаючи без розуміння. Код, який ви не розголошуєте, є боргом, який ви не можете захистити.
- Ігнорування чутливих типів, таких як побічні ефекти та гроші/побачення. Плаваючі гроші з позачасовою історією є класичним джерелом помилок.
Підсумовуючи
Написання коду за допомогою штучного інтелекту — це дисципліноване парне програмування: чіткий договір, маленькі кроки, створення та тестування на кожному кроці. Надання квартету введення-виведення-помилки-обмеження з самого початку визначає якість коду. Пояснення коду, який він виробляє, і примусове його використання крайніх випадків виводить на поверхню помилки, приховані під щасливим сценарієм. Джерелом швидкості є не сліпе прийняття; це швидка чернетка плюс швидка перевірка.
Аплікаційне завдання
Виберіть невелику, але реальну функцію (наприклад, загальна сума кошика, різниця дат, розбір тексту). Друк за допомогою підказки скороченої функції; Додайте принаймні 5 тестових сценаріїв поруч. Запустіть код і свідомо спробуйте 5 граничних випадків, використовуючи таблицю як орієнтир. Знайдіть помилку принаймні в одному граничному випадку (якщо ні, створіть новий вхід, щоб примусово працювати з функцією), виправте її за допомогою штучного інтелекту та перевірте повторним тестуванням, чи спрацювало виправлення.
контрольний список
- [ ] Я написав контракт, який включає введення, вихід, помилки та обмеження.
- [ ] Я генерував код невеликими кроками замість одного великого блоку.
- [ ] Я додав блок тестування/запуску зразка поруч із кодом.
- [ ] Я свідомо протестував щонайменше 5 граничних випадків.
- [ ] Я пояснив код ШІ та переглянув його припущення.
- [ ] Я виправив знайдену помилку та підтвердив виправлення повторним тестуванням.