Pradžia / Programavimas / DI asistentai programuotojams (Copilot, Cursor, Cody)

DI asistentai programuotojams (Copilot, Cursor, Cody)

Kodėl programuotojai masiškai persijungia prie DI įrankių

Dar prieš porą metų mintis, kad dirbtinis intelektas galėtų rašyti veikiantį kodą, daugeliui atrodė kaip kažkas iš mokslinės fantastikos. Šiandien situacija pasikeitė radikaliai – GitHub Copilot, Cursor, Sourcegraph Cody ir panašūs įrankiai tapo kasdienine daugelio kūrėjų darbo dalimi. Ir tai nėra tik hype’as ar madinga tendencija. Žmonės naudoja šiuos įrankius todėl, kad jie iš tikrųjų veikia ir taupo laiką.

Bet čia svarbu suprasti vieną dalyką: DI asistentas nėra magiška lazdelė, kuri išsprendžia visas problemas. Tai labiau panašu į labai patyrusį kolegą, kuris sėdi šalia ir gali pasiūlyti sprendimą, bet kartais tas sprendimas bus netinkamas konkrečiam kontekstui. Kaip ir su bet kuriuo įrankiu, svarbu žinoti, kada jį naudoti ir kada pasikliauti savo galva.

Šiame straipsnyje išnagrinėsime tris pagrindinius žaidėjus – Copilot, Cursor ir Cody – pažiūrėsime, kuo jie skiriasi, ir pabandysime suprasti, kuris iš jų tinka konkrečioms situacijoms.

GitHub Copilot – pramonės standartas, kuris pradėjo viską

GitHub Copilot buvo pirmasis rimtas DI kodavimo asistentas, kuris pasiekė plačiąją auditoriją. Jis pasirodė 2021 metais kaip techninė peržiūra, o 2022-aisiais tapo prieinamas visiems. Šiandien jis turi daugiau nei milijoną mokančių prenumeratorių, o tai savaime pasako nemažai.

Copilot veikia kaip IDE plėtinys – galima jį naudoti VS Code, JetBrains produktuose, Neovim ir kitose aplinkose. Pagrindinis jo veikimo principas yra kontekstinis kodo užbaigimas: kai rašai kodą, Copilot analizuoja tai, ką jau parašei, komentarus, failų pavadinimus ir siūlo tęsinį. Kartais tas tęsinys yra viena eilutė, kartais – visa funkcija.

Praktiškai tai atrodo taip: rašai funkciją, kuri turėtų filtruoti masyvą pagal tam tikrą sąlygą, ir Copilot iš karto pasiūlo implementaciją. Dažnai ji būna teisinga arba labai arti teisingo sprendimo. Bet ne visada.

Ką Copilot daro gerai:

  • Standartiniai algoritmai ir duomenų struktūros – čia jis tiesiog puikus
  • Boilerplate kodas – API endpoint’ai, klasių konstruktoriai, testai
  • Reguliarios išraiškos – tai yra viena sritis, kur DI tikrai pranoksta daugelį žmonių
  • Dokumentacijos generavimas – JSDoc, Python docstrings ir panašiai

Kur Copilot atsilieka:

  • Sudėtinga verslo logika, specifinė konkrečiai organizacijai
  • Saugumo kritiniai komponentai – čia reikia labai atidžiai tikrinti
  • Labai specifinės bibliotekos ar framework’ai, kurie nebuvo populiarūs jo mokymo duomenų rinkinyje

Kainodara: individualiam naudojimui – 10 USD per mėnesį arba 100 USD per metus. Verslui – 19 USD per naudotoją per mėnesį. Yra ir nemokama versija su ribotais pasiūlymais.

Cursor – kai IDE pats tampa DI

Cursor yra kažkas kitokio. Tai ne plėtinys – tai visas IDE, pastatytas ant VS Code pagrindo, bet su DI integruotu į kiekvieną kampelį. Ir čia slypi tiek jo stiprybė, tiek potenciali problema.

Stiprybė ta, kad Cursor gali matyti visą projektą, o ne tik atidarytą failą. Tai leidžia jam suprasti kontekstą daug geriau. Galima tiesiogiai kalbėti su juo apie savo kodą – „Pakeisk šią funkciją, kad ji naudotų async/await vietoj callback’ų” arba „Surask visas vietas, kur šis kintamasis naudojamas ir paaiškink, kodėl čia gali būti memory leak”. Ir jis tai padarys.

Cursor naudoja kelis modelius – galima pasirinkti GPT-4, Claude ar net savo API raktą. Tai suteikia lankstumą, kurio Copilot neturi. Viena iš labiausiai vertinamų funkcijų yra Cmd+K (arba Ctrl+K) – tai leidžia redaguoti kodą natūralia kalba tiesiog inline. Pažymėji kodo bloką, paspaudžiai shortcut’ą, aprašai, ką nori pakeisti, ir Cursor atlieka pakeitimą.

Dar viena funkcija, kuri išskiria Cursor – tai Composer. Tai leidžia generuoti ar modifikuoti kelis failus vienu metu. Pavyzdžiui, galima pasakyti: „Sukurk naują React komponentą su atitinkamu TypeScript tipu, CSS moduliu ir unit testu”. Ir jis sukurs visus tris failus. Tai yra rimtas produktyvumo šuolis.

Tačiau yra ir minusų. Cursor yra atskiras IDE, o tai reiškia, kad reikia persijungti iš savo įprastos aplinkos. Jei naudoji JetBrains produktus, tau reikės arba persijungti į Cursor, arba apsieiti be jo. Be to, kai kurie žmonės pranešė apie privatumo rūpesčius – kodas siunčiamas į Cursor serverius analizei. Yra Privacy Mode, bet jis riboja kai kurias funkcijas.

Kainodara: yra nemokamas planas su 2000 pasiūlymų per mėnesį. Pro planas – 20 USD per mėnesį, Business – 40 USD per naudotoją per mėnesį.

Sourcegraph Cody – kai svarbu suprasti visą kodų bazę

Cody yra kiek mažiau žinomas nei pirmieji du, bet jis sprendžia problemą, kurią kiti dažnai ignoruoja: kaip DI asistentas gali padėti, kai dirbi su milžiniška kodų baze, kurios jis niekada nematė?

Sourcegraph jau seniai buvo žinomas kaip kodo paieškos ir navigacijos įrankis, naudojamas didelėse kompanijose. Cody yra natūralus jų evoliucijos žingsnis – jis naudoja Sourcegraph indeksavimo technologiją, kad suprastų ne tik atidarytus failus, bet ir visą repozitoriją ar net kelias repozitorijas.

Tai ypač vertinga enterprise aplinkoje. Įsivaizduok, kad dirbi su 10 metų senumo monolitu, kuriame yra milijonai kodo eilučių. Copilot ar Cursor gali pasiūlyti generinį sprendimą, bet Cody gali pasakyti: „Šioje kodų bazėje panašios problemos buvo sprendžiamos taip, žiūrėk į šiuos failus”. Tai yra fundamentaliai kitoks požiūris.

Cody palaiko konteksto įtraukimą iš:

  • Visos repozitorijos (ne tik atidarytų failų)
  • Dokumentacijos ir README failų
  • Kodo komentarų ir commit istorijos
  • Išorinių šaltinių (jei sukonfigūruota)

Jis taip pat palaiko daugelį IDE – VS Code, JetBrains, Neovim. Tai yra pranašumas prieš Cursor, kuris reikalauja pereiti prie jų aplinkos.

Kainodara: yra nemokamas planas su ribotais naudojimais. Pro – 9 USD per mėnesį. Enterprise versija turi individualią kainodarą ir leidžia naudoti savo LLM modelius.

Praktinis palyginimas: kas ką geriausiai daro

Teorija yra gražu, bet praktika svariau. Pabandykime palyginti šiuos tris įrankius konkrečiose situacijose.

Situacija 1: Naujas projektas nuo nulio

Čia Cursor laimi. Jo gebėjimas generuoti kelis failus vienu metu, kartu su stipria chat funkcija, leidžia greitai sukurti projekto struktūrą. Galima pasakyti „Sukurk Express.js REST API su TypeScript, JWT autentifikacija ir PostgreSQL” ir gauti veikiančią pradinę struktūrą per kelias minutes.

Situacija 2: Darbas su egzistuojančia didelė kodų baze

Čia Cody yra stipriausias. Jo gebėjimas indeksuoti visą repozitoriją ir suprasti kodo ryšius yra unikalus. Jei reikia suprasti, kaip veikia kažkokia sistema, arba rasti, kur gali būti klaida, Cody duos kontekstualizuotesnius atsakymus.

Situacija 3: Kasdieninis kodavimas su įprastu workflow

Copilot čia laimi dėl paprastumo ir integracijos. Jis tiesiog veikia fone ir siūlo pasiūlymus. Nereikia keisti IDE, nereikia mokytis naujų komandų. Tiesiog rašai kodą ir kartais priimi pasiūlymą, kartais ne.

Situacija 4: Kodo peržiūra ir refaktoringas

Cursor čia taip pat stiprus dėl inline redagavimo funkcijos. Galima pažymėti kodą ir paprašyti jį refaktorizuoti laikantis SOLID principų, ir Cursor tai padarys su paaiškinimais.

Saugumo ir privatumo klausimai, kurių negalima ignoruoti

Kalbant apie DI kodo asistentus, saugumo klausimas yra labai svarbus ir dažnai nepakankamai aptariamas. Kai naudoji šiuos įrankius, tavo kodas (ar bent jo dalis) keliauja į išorinius serverius. Tai kelia keletą rimtų klausimų.

Kas vyksta su tavo kodu?

GitHub Copilot oficialiai sako, kad nenaudoja tavo kodo modelio mokymui, jei naudoji mokamą planą. Cursor turi Privacy Mode, kuris neleidžia kodo saugoti jų serveriuose. Cody Enterprise leidžia naudoti savo infrastruktūrą, kas yra geriausias sprendimas jautriems projektams.

Kodo saugumo spragos

Tyrimai parodė, kad DI generuotas kodas dažnai turi saugumo problemų – SQL injection, XSS, netinkamas klaidų valdymas. Tai nereiškia, kad nereikia naudoti šių įrankių, bet reiškia, kad reikia atidžiai peržiūrėti generuotą kodą, ypač saugumo kritinėse vietose.

Praktinė rekomendacija: niekada nekopijuok DI generuoto kodo, susijusio su autentifikacija, autorizacija ar duomenų validacija, be kruopštaus peržiūrėjimo. Ir idealiu atveju – be saugumo auditoriaus peržiūros.

Licencijavimo klausimai

Tai yra pilkoji zona. DI modeliai buvo apmokyti ant viešo kodo, įskaitant kodo su įvairiomis licencijomis. Teoriškai generuotas kodas gali būti panašus į licencijuotą kodą. GitHub Copilot turi filtrą, kuris bando aptikti tokius atvejus, bet jis nėra tobulas. Jei dirbai su komerciniu projektu, verta žinoti apie šią riziką.

Kaip iš tikrųjų išnaudoti DI asistentą maksimaliai

Daugelis žmonių naudoja šiuos įrankius neoptimaliai – tiesiog priima ar atmeta pasiūlymus. Bet yra geresnių būdų.

Rašyk geresnius komentarus

DI asistentas yra tiek geras, kiek geras kontekstas, kurį jam duodi. Jei prieš funkciją parašysi detalų komentarą, aprašantį, ką ji turėtų daryti, kokius parametrus priimti ir ką grąžinti, gausite daug geresnį pasiūlymą. Tai galioja visiems trims įrankiams.

// Funkcija turėtų priimti masyvą produktų objektų su price ir category laukais.
// Grąžinti tik tuos produktus, kurių kaina yra mažesnė už nurodytą limitą
// ir kurie priklauso nurodytai kategorijai.
// Jei kategorija nenurodyta, filtruoti tik pagal kainą.
function filterProducts(products, maxPrice, category = null) {
  // Čia Copilot/Cursor pasiūlys implementaciją
}

Naudok DI kaip pirmąją juodraščio versiją

Vietoj to, kad bandytum gauti tobulą kodą iš karto, naudok DI sugeneruotą kodą kaip pradinį tašką. Tai ypač veiksminga su testais – paprašyk sugeneruoti testus, tada peržiūrėk ir papildyk edge case’ais, kurių DI nepagalvojo.

Klausk paaiškinimų

Cursor ir Cody turi chat funkcijas. Jei matai kodą, kurio nesupranti, paprašyk paaiškinti. „Kodėl čia naudojamas useCallback, o ne useMemo?” arba „Kas yra šio dizaino šablono privalumai ir trūkumai?” – tai yra puikūs klausimai, į kuriuos DI asistentas atsakys geriau nei Stack Overflow.

Iteruok

Jei pirmasis pasiūlymas nėra tinkamas, nepasiduok. Pabandyk perfrazuoti klausimą, pridėk daugiau konteksto arba pasakyk, kas konkrečiai netinka. „Šis sprendimas veikia, bet man reikia, kad jis veiktų ir su null reikšmėmis” – ir gausite pataisytą versiją.

Ateitis, kuri jau čia: kur visa tai veda

Diskusija apie tai, ar DI pakeis programuotojus, yra klaidingas klausimas. Teisingesnis klausimas yra: kaip keičiasi programuotojo darbas ir kokius įgūdžius bus svarbu turėti ateityje?

Šiandien jau matome, kad DI asistentas puikiai tvarko rutininius uždavinius – boilerplate kodą, standartines implementacijas, dokumentaciją. Tai reiškia, kad programuotojai gali skirti daugiau laiko sudėtingesniems dalykams: architektūros sprendimams, verslo logikos supratimui, saugumo analizei.

Tačiau tai taip pat reiškia, kad programuotojai, kurie mokosi tik kopijuoti ir paleisti DI generuotą kodą, nesuprasdami, kaip jis veikia, ilgainiui turės problemų. DI padaro produktyvesnį tą, kuris jau žino, ką daro. Jis nėra pakaitalo žinių ir patirties.

Tarp Copilot, Cursor ir Cody nėra vieno nugalėtojo – yra skirtingi įrankiai skirtingoms situacijoms. Jei tik pradedate, Copilot yra geriausias pasirinkimas dėl paprastumo ir integracijos. Jei dirbate su dideliais projektais ir norite daugiau galios, Cursor yra verta investicija. Jei esate enterprise aplinkoje su didelėmis kodų bazėmis, Cody gali būti tas sprendimas, kurio ieškojote.

Bet svarbiausia – pradėkite naudoti. Eksperimentuokite, raskite savo workflow, išmokite, kada pasitikėti DI pasiūlymais ir kada ne. Tai yra įgūdis, kuris taps vis svarbesnis, ir geriau jį ugdyti dabar, nei laukti, kol visi kiti jau tai padarys.