С момен­та появ­ления ChatGPT идут спо­ры о его при­мени­мос­ти в раз­ных областях. Пожалуй, самая важ­ная из них — прог­рамми­рова­ние. Давай раз­берем­ся, почему раз­говоры про «вай­бко­динг» выводят прог­раммис­тов из себя при­мер­но за 0,01 секун­ды и пра­вы ли они в сво­ем гне­ве.

Сов­ремен­ные язы­ковые модели прек­расно уме­ют вып­левывать кус­ки кода, ког­да их об этом поп­росят. Зачас­тую эти кус­ки даже работа­ют и дела­ют то, что нуж­но.

Экс­плу­ата­цию это­го явле­ния прог­раммис­тами уже не оста­новить. ИИ‑авто­ком­плит теперь неотъ­емле­мая часть прог­рамми­рова­ния — нарав­не с обыч­ным авто­ком­пли­том и лин­тером.

Впро­чем, срав­нивать сто­ит ско­рее с под­резани­ем готово­го кода на Stack Overflow. Кста­ти, тра­фик это­го кла­дезя зна­ний уже во­шел в кру­тое пике — имен­но бла­года­ря вез­десущим LLM.

Поль­зу язы­ковых моделей приз­нают и некото­рые мас­тодон­ты кодин­га. Вот, нап­ример, недав­ний твит Джо­на Кар­мака:

ИИ‑прог­рамми­рова­ние час­то исполь­зует­ся для генера­ции боль­шого объ­ема кода, который неред­ко при­нима­ется без­думно. Но похоже, у ИИ есть не мень­ше потен­циала и для того, что­бы делать кодовую базу кра­сивее.

Под­держи­вать код в хорошем сос­тоянии или рас­путывать клу­бок ста­рого хаоса тре­бует уси­лий… и неуто­мимый ИИ‑помощ­ник, который пос­тоян­но прос­матри­вает код и пред­лага­ет улуч­шения, может быть очень полезен. ИИ — как при­леж­ный член коман­ды, а не вол­шебник, исполня­ющий желания.

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

При некото­рой изво­рот­ливос­ти LLM мож­но исполь­зовать, что­бы писать код вооб­ще без зна­ний о язы­ке. Точ­но так же, как диф­фузи­онные модели поз­воля­ют «рисовать», не прит­рагива­ясь к инс­тру­мен­там.

Да, такой код час­то потом не работа­ет, но вай­бко­дер, рас­качива­ясь под клас­сную музыч­ку, шлет ошиб­ку и трейс обратно модели и тре­бует починить. Если про­кати­ло, то мож­но про­сить новую фичу, и она тоже появит­ся как по вол­шебс­тву.

Сов­ру, если ска­жу, что сам никог­да так не делал. Нап­ример, прош­лая колон­ка была про­иллюс­три­рова­на кар­тинкой, где золотой ZX Spectrum сто­ит на пьедес­тале. Она, меж­ду про­чим, сде­лана по всем пра­вилам спек­трум‑арта.

info

ZX Spectrum имел инте­рес­ное огра­ниче­ние: при наличии вось­ми цве­тов и двух уров­ней яркости, в квад­рате 8 на 8 пик­селей мог­ло при­сутс­тво­вать толь­ко два раз­ных цве­та. Отсю­да и квад­ратики на скон­верти­рован­ных кар­тинках. Нас­тоящие худож­ники‑спек­тру­мис­ты уме­ют лов­ко избе­гать это­го эффекта.

Сна­чала я пытал­ся вып­росить что‑то в духе «Спек­тру­ма» у ChatGPT, но быс­тро разоча­ровал­ся: соб­людать такие чет­кие пра­вила при генера­ции кар­тинок он, конеч­но, не уме­ет.

За­то ней­рон­ка может накатать нес­коль­ко сот строк на Python, которые будут кон­верти­ровать любую кар­тинку в фор­мат ZX Spectrum. Хоть записы­вай на кас­сету и смот­ри на ЭЛТ‑телеви­зоре!

Фрагмент кода конвертера
Фраг­мент кода кон­верте­ра
Сконвертированная картинка в эмуляторе Fuse
Скон­верти­рован­ная кар­тинка в эму­лято­ре Fuse

При этом я не объ­яснял ни что такое ZX Spectrum, ни какая у него палит­ра, не давал при­меров фор­мата SCR — все это LLM уже зна­ет и бод­ро выда­ет готовый кон­вертер строч­ка за строч­кой.

Гля­дя на резуль­таты, я подумал: выходит в целом ничего, но вот бы еще вруч­ную под­кру­чивать порог, при котором какой‑то отте­нок перехо­дит в целевой цвет палит­ры ZX Spectrum...

Ска­зано — сде­лано! Еще пара зап­росов, и у меня есть GUI: кру­тишь пол­зунки и сра­зу смот­ришь, что получит­ся.

Конвертер с GUI
Кон­вертер с GUI

Мож­но ли так делать код для про­дак­шена? Да нет, конеч­но! Даже если все запус­тится, это пря­мая дорога в ад.

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

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

В одной из пре­дыду­щих колонок я уже за­щищал казу­аль­ное уме­ние кодить — с целью луч­ше управлять компь­юте­ром, а не соз­давать про­дук­ты.

Нап­ример, если у тебя есть трак­тор, хорошо бы уметь на нем пахать, а не толь­ко катать­ся. Ну а в слу­чае с компь­юте­ром — зас­тавлять машину делать рутин­ные опе­рации в цик­ле.

У «вай­бко­дин­га», на мой взгляд, огромный потен­циал имен­но в соз­дании инс­тру­мен­тов, которые выпол­няют одну задачу для одно­го поль­зовате­ля. Думаю, ты мно­го раз стал­кивал­ся с ситу­ациями, ког­да нуж­но по‑быс­тро­му что‑то накол­хозить для решения сиюми­нут­ной проб­лемы. И тут я могу при­вес­ти далеко не толь­ко экзо­тичес­кие при­меры про ZX Spectrum.

По работе у меня то и дело воз­ника­ют задачи, свя­зан­ные с манипу­ляци­ей дан­ными. Ска­жем, под­клю­чить­ся к базе и сде­лать какой‑то зап­рос, отсорти­ровать резуль­таты, сох­ранить как JSON, отфиль­тро­вать так и этак по одним полям, что‑то поис­кать в дру­гих регуляр­ками, сос­крэ­пить что‑то с веба, сос­тавить ста­тис­тику и так далее.

Все это тре­бует нес­ложно­го, но уто­митель­ного кодиро­вания. Каж­дый вто­рой скрипт дела­ет одно и то же: чте­ние дан­ных отку­да‑то, ите­рация по ним, про­вер­ка какого‑то усло­вия, сох­ранение.

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

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

Боль­ше не обя­затель­но с тру­дом вспо­минать клю­чи к раз­весис­тым прог­раммам вро­де ImageMagick, youtube-dl или FFmpeg. Заод­но мож­но спо­кой­но забыть син­таксис jq и XPath.

Толь­ко не подумай, что я кого‑то отго­вари­ваю учить­ся кодить. «Не обя­затель­но» не зна­чит «не нуж­но». Чте­ние ману­алов по язы­кам — это по‑преж­нему прек­расное вло­жение вре­мени и сил, даже если цель — прог­рамми­ровать с помощью LLM.

Ес­ли человек спо­собен про­читать код, выдава­емый ИИ, ему откры­вают­ся качес­твен­но дру­гие воз­можнос­ти. При минималь­ных архи­тек­турных навыках мож­но зас­тавить ней­рон­ку написать тысячи строк рабоче­го кода, а не сот­ни.

Про­си неболь­шие фун­кции с понят­ным вхо­дом и выходом, зас­тавляй модель исполь­зовать типиза­цию и писать докс­трин­ги (если речь о Python), тре­буй понят­ные датак­лассы вмес­то струк­тур, и вмес­те смо­жете делать нам­ного более мощ­ные инс­тру­мен­ты.

А еще из ней­рон­ки всег­да мож­но извлечь не толь­ко готовый код, но и цен­ные зна­ния. Попалась неиз­вес­тная конс­трук­ция? Про­си объ­яснить и показать на при­мерах. Не зна­ешь, как луч­ше сде­лать? Зап­роси вари­анты со срав­нени­ем. Есть подоз­рение, что код багован­ный? Докопай­ся, и будешь знать боль­ше.

Ко­роче, от вай­бко­дин­га — к вай­блер­нингу!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии