бирдиги 3 / 12

AI менен коддоо жана жуп программалоо

Пайдалар:

  • AI үчүн функцияларды, класстарды жана модулдарды так киргизүү-чыгарма жана чектөө аныктамалары менен жазуу мүмкүнчүлүгү
  • AIди жуп программалоо өнөктөшү катары колдонуу жана кадам сайын, майда, текшерилүүчү бөлүктөрдө прогресс
  • AI тарабынан түзүлгөн кодду түзүү жана аны кичинекей мисалдар менен иштетүү аркылуу логиканы жана каталарды аныктоо мүмкүнчүлүгү

Жуп программалоо – бул эки иштеп чыгуучу бир эле маселенин үстүндө иштеши, бири жазуу, экинчиси кайра карап чыгуу. AI менен коддоо дал ушул мамиленин санариптик версиясы: сиз багытты, чектөөлөрдү жана кабыл алуу критерийлерин орнотосуз; AI тез долбоорду чыгарат; Ар бир кадамды компиляциялоо жана сынап көрүү менен текшересиз. Бул жерде эң чоң тузак AIга "мага бул арызды башынан аягына чейин жаз" деп айтуу жана 200 саптык блокту сокур түрдө кабыл алуу. Жакшы жуп программалоо кичинекей кадамдар менен ишке ашат: ар бир кадам түшүнүктүү, текшерилүүчү жана кайра кайтарылуучу болушу керек.

Бул бөлүмдө сиз так киргизүү-чыгаруу келишими менен функцияларды, класстарды жана модулдарды басып чыгарууну үйрөнөсүз; AI кантип этап-этабы менен жетектөө керек; жана биз кичинекей мисалдар менен ал чыгарган кодду иштетүү менен логиканы жана иштин каталарын кантип кармоону көрөбүз. Максат ылдамдык эмес, текшерилген ылдамдык.

Түшүнүктөр: Киргизүү-чыгарма келишими: Функция кандай киришти алаарын жана ал кандай чыгаруу жана ката жүрүм-турумун убада кылаарын так аныктоо. Edge case: Кадимки эмес, бирок чындыгында болушу мүмкүн киргизүү (бош, нөл, терс, абдан чоң, нөл). Өнүгүү: Кичинекей, жумушчу бөлүктөр менен улантуу жана ар бир кадамды текшерүү.

Таза келишим менен басып чыгаруу коду

Сапат кодунун негизи жумушка киришерден мурун "эмне кааласаңыз" так аныктоо болуп саналат. AI үчүн функция жазып жатканда, ага беш нерсени бериңиз: тил жана версия, киргизүү түрлөрү жана маанилери, чыгаруу, ката шарттары жана чектөөлөр (аткаруу, тышкы китепканага тыюу салуу, стил). Бул AI божомолдоосуна жол бербейт.

  1. Контракт жаз. Киргизүү, чыгаруу, ката, чектөө.
  2. Кичинекей бирдик сураңыз. Бир жоопкерчиликтүү функция; Бул чоң модуль эмес.
  3. Сыноо блогун сураныңыз. Коддун жанына бир нече үлгүлөрдү/тесттерди кошуңуз.
  4. Компиляция жана иштетүү. Аны четки учурлар менен сынап көрүңүз, натыйжаны көз менен текшериңиз.
  5. Кийинки кадамга өтүңүз. Бир кесим ырасталгандан кийин, анын үстүнө куруңуз.

Келишимдүү функция чакырыгы: "TypeScript 5 үчүн функция жазыңыз. Максаты: корзинага керектүү нерселердин жалпы санын эсептеңиз. Киргизүү: { баа: сан, сан: сан }[] массив. Чыгуу: сан (жалпы). Эрежелер: ката кетирүү, эгерде сан же баа терс болсо; бош массив үчүн 0 кайтарыңыз; 2-ден ылдыйдагы ондук орун үчүн тесттик китепкананы колдонбоңуз. (нормалдуу, бош, терс сан, ондук баа, бир нерсе).

AIди жуп катары жетектөө

Жуптук программалоодо жакшы прогресс бир чоң өтүнүч эмес, диалог болуп саналат. Биринчиден, скелетти сурап, аны иштетиңиз; анда четки абалын кошуу; анда ката оңдолот. Бул ыкма кодду түшүнүктүү кылат жана ар бир кадамда сизди көзөмөлдөйт.

Кошумча прогресске чакыруу: "Биз CSV файлын окуган жана сызыктарды объектке айландырган окурманды жазабыз. Келгиле, КАДАМ БОЙ, мен ар бир кадамды ырастабастан, кийинки кадамга өтөлү. 1-кадам: жөн гана файлды саптарга бөлгөн жана баш сызыгын бөлгөн скелетти жазыңыз. Типти конвертациялоону же катаны иштетүүнү азырынча кошпоңуз."

Код сунушун түшүндүрүп, негиздеңиз: "Сиз жаңы эле жазган функцияңызды сап боюнча эмес, чечим боюнча чечип бериңиз: кайсы дизайн чечимин кабыл алдыңыз жана эмне үчүн, кайсы четки ишти карап чыктыңыз жана кандайча, кайсы учурларды атайылап чыгарып салдыңыз? Коддогу 3 божомолду тизмектеп, мен өткөрүп жибербешим керек."

Кеңеш: AI тарабынан түзүлгөн кодду түшүнбөй туруп кабыл албаңыз. "Мага түшүндүрүп берчи, сен кандай божомолдорду айттың?" Суроо жашыруун каталарды ачып берет жана кодду коргоого мүмкүндүк берет, анткени код сиздин жоопкерчилигиңизде. Сиз түшүнбөгөн кодду өндүрүшкө киргизүү келишимге кол койбой жөнөтүү менен барабар.

Алсыз тездик / Күчтүү эскертүү

АЛСЫЗ:"Сорттоо функциясын жазыңыз."(Натыйжа: кайсы тилде, эмне сорттолуп жатат, ал туруктуубу, аткаруу чектөөсү эмнеде, коду бүдөмүк жана талапка дал келбей калышы мүмкүн.)STRONG:"Java 17 үчүн List<Кызматкер> объектисин адегенде бөлүм (алфавит боюнча), андан кийин оригиналдуу тизмени (NOEPLADOce) кайтарып бериңиз. Тизмеге нөлдүк бөлүм кирсин.

Күчтүү тездик; Сорттоо критерийин (эки деңгээлдүү), терс таасир эрежесин (оригиналды алмаштыруу), нөлдүк жүрүм-турумду жана сыноо күтүүнү камтыйт. Бул деталдары жок, AI акылга сыярлык, бирок туура эмес чечим чыгарат; мисалы, ал баштапкы тизмени бузушу мүмкүн жана бул башка жерде үнсүз катага алып келет.

Edge Cases жана Чакан үлгүлөр менен текшерүү

Бактылуу сценарийде иштеген код туура код эмес. Ар бир өндүрүлгөн функцияны күчтөп:

Edge корпусунун түрү

үлгү киргизүү

күтүлгөн жүрүм-турум

бош киргизүү

Бош массив/сап

Ката эмес, логикалык бош натыйжа

Нөл/терс

0, -1

Белгиленген жана туура жүрүм-туруму

улуу баа

Миллиондогон рекорддор

Толуп кетүү/аткаруу башкаруу

null/аныкталбаган

орун жок

Башкарылган ката же демейки

Дубликат/өзгөчө

кайталануучу, тескери тартипте

туура жыйынтык

Mini Cases

1-жагдай — Унчукпай тегеректөө катасы. AI ондук (флоат) түрлөрү менен акча чогултуучу функцияны жазат; 0,1 + 0,2 0,30000000000000004 берет. Ката инженер "2 санга тегерек жана бүт тыйындарды колдон" эрежесин кошкондо чечилет. 3 саптан турган эреже ай сайын элдештирүүдөгү миңдеген тыйындардын айырмасын алдын алат.

2-жагдай - Терс таасирлердин тузагы. AI тизмени "сорттоо" ыкмасын жазат, бирок баштапкы тизмени ордунда өзгөртөт. Башка модулда ошол эле тизмени колдонгондуктан күтүлбөгөн жүрүм-турум пайда болот. Эгерде "оригиналды өзгөртүү" чектөөсү эскертүүдө болсо, ката эч качан болбойт; кодду карап чыгып, 2 саатка мүчүлүштүктөрдү оңдоого жол бербейт.

3-жагдай - Этап-этабы менен киреше. Иштеп чыгуучу 150 саптан турган импорттук модулду дароо басып чыгарат; Катаны тапса, анын кайдан келгенин таба албайт. Дагы бир иштеп чыгуучу бир эле ишти 5 кичинекей кадамга бөлүп, ар бир кадамды 2 мүнөттө сынайт жана 3-кадамда катаны дароо кармайт.

Жалпы каталар

  • Чоң блокторду бир суроодо басып чыгаруу. Түшүнүү жана мүчүлүштүктөрдү оңдоо кыйын болгон кооптуу код жаралат.
  • Келишим бербестен код сурап. Эгерде киргизүү-чыгаруу-катасы түшүнүксүз болсо, AI божомолдоп, туура эмес болуп калат.
  • Жөн гана бактылуу сценарийди сыноо. Эгерде бош, нөл, терс жана чоң киргизүү аракет кылынбаса, ката өндүрүшкө калтырылат.
  • Түшүнбөй кабыл алуу. Сиз ачыкка чыгарбаган код - бул сиз коргой албаган карыз.
  • Терс таасирлер жана акча/дата сыяктуу сезимтал түрлөрүнө көңүл бурбоо. Эзелки тарыхы бар сүзүүчү акча – бул катанын классикалык булагы.

Кыскача айтканда

AI менен код жазуу - бул дисциплинардык жуп программалоо: так келишим, кичинекей кадамдар, ар бир кадамда куруу жана сыноо. Киргизүү-чыгыш-ката-чектөө квартетинин башынан бери берилиши коддун сапатын аныктайт. Ал чыгарган кодду түшүндүрүү жана аны кырдуу учурлар менен мажбурлоо бактылуу сценарийдин астында катылган каталарды ачыкка чыгарат. Ылдамдыктын булагы сокур кабыл алуу эмес; тез долбоор плюс тез текшерүү болуп саналат.

Колдонмо тапшырмасы

Кичинекей, бирок реалдуу функцияны тандаңыз (мисалы, себеттин жалпы саны, даталардын айырмасы, текстти талдоо). Келишимдүү функцияны колдонуу менен басып чыгаруу; Анын жанына кеминде 5 сыноо сценарийин кошуңуз. Кодду иштетиңиз жана таблицаны жетекчилик катары колдонуп, аң-сезимдүү 5 кырдын абалын сынап көрүңүз. Жок дегенде бир четиндеги мүчүлүштүктөрдү табыңыз (эгер андай болбосо, функцияны күчтөндүрүү үчүн жаңы киргизүүнү долбоорлаңыз), аны AI менен оңдоңуз жана оңдоонун иштегенин кайра текшерүү аркылуу текшериңиз.

текшерүү тизмеси

  • [ ] Мен киргизүүнү, чыгарууну, каталарды жана чектөөлөрдү камтыган келишим жаздым.
  • [ ] Мен бир чоң блоктун ордуна кичинекей кадамдар менен кодду түздүм.
  • [ ] Мен коддун жанына сыноо/үлгү иштетүү блогун коштум.
  • [ ] Мен аң-сезимдүү түрдө жок дегенде 5 кырдуу иштерди сынап көрдүм.
  • [ ] Мен AIга кодду түшүндүрүп, анын божомолдорун карап чыктым.
  • [ ] Мен табылган катаны оңдоп, оңдоону кайра текшерүү аркылуу ырастадым.