Да си програмист е много куул, особено в България. Търсенето не спира да лети нагоре, тенденциите са да изкарваш още и още пари (+20% през 2021-а, ако вярваме на това проучване), докато редовите лекари, учители… всички останали представители на, нека не си кривим душата, по-важни за обществото професии, едва свързват двата края.
Логично, после, ако си представител на този бранш, който има проблеми с егото, бързо започваш да се възприемаш като последна инстанция, crème de la crème. И онлайн ставаш стихия с вечно тежащо мнение.
Междувременно обаче, с възхода на технологиите и изкуствения интелект, все по-често се повтаря прогнозата, че скоро много професии ще изчезнат, заменени от машините. Че живеем в период, подобен на началото на техническия прогрес, когато представители на цели поприща ще останат без поминък. Както сполучливо засегна темата Светлин Наков, скоро най-вероятно няма да има дори шофьори.
Ами програмистите? Този страх съвсем не е преувеличен, нито е нов. Проучване още от 2016 г. на „Евънс дейта корпорейшън“ сред 550 програмисти показва, че най-големият им страх в кариерен план е именно този – да не бъдат заменени от изкуствения интелект.
Като по програма
Може ли изкуственият интелект да ни остави на улицата? И ако да, време ли е вече ние, хората, които си изкарваме хляба с кодене, да започваме курсове за зидаро-мазачи и плочкаджии, където дефицитът става все по-голям, а изкуственият интелект даже и не прохожда?
Е, това, разбира се, е шега. Дори да се стигне до създаването на алгоритми, които да пишат код, по всичко личи, че няма да е прекалено скоро моментът, когато те ще могат да го правят автономно. Сами да вършат работата на днешните, поне според мен, поразглезени от обществената си позиция програмисти.
Бодри програмисти
Но пък… такъв тип проекти могат вместо това, да ни помагат в работата – да отхвърлят вместо нас част от писането на повтаряем код, т.нар. boilerplate, за който не само си нямаме българска дума, но дори ми е странно да го напиша на кирилица.
Много погледи към темата привлече преди месец проектът GitHub Copilot. Дойде и за да подгрее старите страхове на програмистите, че ще останат без работа.
Платформата е създадена от най-популярната мрежа за споделяне на код. Нещо като програмистки фейсбук с повече качества на програмистки туитър, ако и у нас тази мрежа имаше някаква тежест. Copilot говори почти всички популярни компютърни езици и се твърди, че с помощта на заложения вътре изкуствен интелект може да спестява много работа на програмистите. Авторите определят проекта си като нещо много по-мощно от познатите туулчета за автоматично завършване на думичките код, които пък, пак непреводимо на български, се наричат autocomplete.
Както ми написа един колега по темата, пращайки линк към Copilot: „Днес изглежда яко. Утре си уволнен“.
Ще се научат ли наистина компютрите сами да пишат програми?
Програмата програмист
1. -><[>-<+++]->>++++[++++++++++++++++++<+]>.---.+-+++++++..+++.+>+<><+[+><><>+++++++++.+-<
2. -++++[++[.--------.+++.------],.-----]]
Hello, world!. „Здравей, свят!“. Добре познатото най-базово изреченийце, което съставлява една компютърна програма. С него обичайно започва всеки, който учи нов език за програмиране. В случая е на един езотеричен (така се наричат нишовите и по-малко познати езици за програмиране) език на име… и това няма да го превеждаме, въпреки че можем: Brainfuck.
Езикът е особено интересен с това, че има точно 8 команди, а всяка от тях „се събира“ в един байт. И с това всичко в него приключва. Въпреки това изпълнява всички изисквания за цялостност по Тюринг. (Които велики програмисти още не са ни изоставили с гарнитура – някое кратко, но сочно коментарче, ще го направят сега.) Това ще рече, съвсем опростено, че с него може да се направи на практика всичко, на което са способни днешните компютри.
Е, невероятната комбинация от знаци по-горе може да я напише дори маймунка, така че е трудно да си представим, че е на компютърен език.
Но пък именно в това е и едно от интересните ѝ приложения, което можем да намерим тук, още от добрата стара 2013-а година.
Code monkeys
Основната идея накратко: ако дадете на достатъчно, ама наистина достатъчно, голям брой маймуни по една пишеща машина и ги накарате да блъскат достатъчно дълго по клавишите, рано или късно все някоя от тях ще напише същото произведение, което би създал и Шекспир.
Кори Бекер дълго избира подходящ език, на който да експериментира, най-близо е Assembly, но дори той се оказва прекалено богат на синтаксис. Докато в Brainfuck всичко е толкова просто и семпло, че просто няма как да бъде повече. Спира се на генетични алгоритми, които групират отделните единици данни, като изпробват бързо огромен брой варианти.
И така, невронната мрежа на Бекер започва да генерира комбинации от команди, докато втората ѝ част, която проверява резултатите, потвърди, че е на прав път. Първата думичка, зададена като цел – “Hi“, отнема 5700 генерирани комбинации, на програмата е нужна само 1 минута. За да се стигне до традиционното стартово изречение по-горе, са необходими 580 900 комбинации, което вече отнема 2 часа.
По-нататък, през 2015-а Бекер показва и как програмата може да се научи да генерира функции, а не просто резултати – основополагащо умение, стане ли дума за програмирането.
(Целия код на начинанието можете да намерите в GitHub.)
Аз те създадох… ти ще ме унищожиш
Да бе, 2 часа за най-най-елементарната стартова програмка, която дори и най-скараният с компютрите непрограмист би могъл да създаде за секунди, ако му се обяснят най-простите правила?!
Да, обаче показва, че все пак генерирането на код е възможно. Разбира се, нещата стават доста по-драматични, когато става дума за реални програми. Те са сложни, комплексни, не се побират в главата дори на работещия върху тях опитен специалист.
Програмирането е такава професия, в която основната работа се състои в разбиването на проблема на подпроблеми. А те се решават едва тогава, когато са сведени до възможно най-опростена логика. SOLID е акроним за най-базовите правила за качествен код, с които започва (или поне би трябвало) обучението на всеки начинаещ програмист. И още първата му буква – ”S”, идва за “Single Responsibility“ – всеки компонент, който прави повече от едно нещо, трябва да бъде разделян, докато се стигне до такива, които са отговорни само за една задача.
План програма
И така, след като компютърът все пак може да изпълнява тези прости задачи, значи може да прави всичко? Като се имат предвид и предимствата му пред обичайния програмист – времето му е доста по-евтино, не мрънка за карта „Мултиспорт“ и… може едновременно да върши доста задачи.
Да, ще стават грешки, точно както е и в момента – например, базираните на изкуствен интелект алгоритми на фейсбук припознаха публикацията на Дигитални истории за навлизането на алгоритмите в политиката за агитация за кого да гласуваме на предстоящите избори.
И все пак, постепенно в доста направления машинното самообучение започва да работи по-добре и по-добре – отново пример с фейсбук, само че този път със системите за лицево разпознаване. Почти без грешка те могат да предложат кой от приятелите ви е на кадъра, дори да не се вижда добре, дори с времето чертите му да са се променили.
От дума на дума, код
Неотдавна ви разказахме Дигиталната история за алгоритъма GPT-3. Той неслучайно се смята за изключително важна стъпка в развитието на изкуствения интелект, защото обработва огромен обем информация и на нейна база предлага продължението на нещо, което му е зададено.
GTP-3 е създаден със съвсем различна цел – да обработва текстове, да стои зад програми, които имитират разговор с човек, да помага в машинния превод.
Но пък дава поле и за какви ли не експерименти. Програмистът Шариф Шамеем му дава задача в уеб дизайна. Моли го да създаде „бутон на уеб страница с цвят на диня“… и като отговор идват HTML и CSS, които успешно покриват критериите. Това сигурно е доста обнадеждаващо за уеб програмистите, на които им е писнало да подпипват тези по-рутинни части от продукта. Неслучайно най-лесният начин да си изпросите боя (или грубите шегички) в компанията на софтуерни хора, е да им кажете, че HTML е език за програмиране.
После Шамеем продължава със задачи от същинското програмиране, в които отново GPT-3 дава ако не блестящи и точни решения, то поне резултати, които доста се доближават до такива. И биха могли да заработят с доста по-малко усилия от страна на програмиста, отколкото, ако започне всичко отначало.
Програмистче, не се притеснявай ти!
Е, добре, може би вече е очевидно, че алгоритмите могат да ни помагат с малки парчета код и да ни улесняват. Но реално ли е един ден да ни изхвърлят зад борда?
Известният футуролог Герд Леонард прогнозира, че професията на програмистите ще изчезне само след 10 години, погълната от изкуствения интелект. Нещо повече, вече е изгубено време да учим програмиране. Изведнъж много милиони специалисти по цял свят ще останат на улицата. (Е, явно г-н Леонард не се е включвал скоро в българските програмистки форуми, защото у нас почти всеки се е засилил да става софтуерен инженер.) Много по-разумно според него е да се насочим към хуманитарните знания, които никога няма да бъдат погълнати от машините.
Лале ли си, робот ли, С?
Ето че е време да се върнем на провокиралия толкова много коментари по темата GitHub Copilot. GitHub е нещо като онлайн Мека на програмирането. Огромно хранилище за код, ползвано от страхотен брой софтуерни компании. През 2018 г. беше купен от „Майкрософт“ и именно инициатива на новите собственици е копилотът.
„Трениран с милиарди редове код, той ви пести огромно количество време, позволявайки ви да останете концентрирани над важните неща“, рекламират го създателите. Вече е достъпен за използване и като разширение за популярната среда за програмиране Visual Studio Code.
Името му идва от следната идея – ние пилотираме, той просто помага. Удря едно рамо там, където ни е нужно.
Или пък е троянският кон, който ще ни изхвърли от тази хубава професия?
Кодекс на честта
Твърди се, че Copilot разбира значително повече контекст от всички досегашни софтуерни помощници. Зад него се крие на практика същият проект, който прави възможен и споменатия GPT-3 – OpenAI.
Неправителствената организация е създадена през 2015-а от Елън Мъск и съмишленици, които даряват общо над милиард долара. Целта ѝ е да разработва изкуствен интелект, който да диктува бъдещето в тази област. Влизайки в пряка конкуренция с DeepMind на Google (аргументите на Мъск защо е важна тази битка ще намерите тук).
Конкретно се използва системата за изкуствен интелект OpenAI Codex. Тя е тренирана с огромни обеми от свободнодостъпен код и човешки езици.
Нещо повече. Създателите твърдят, че е достатъчно да създадете конвенция, според която копилотът ще пише кода вместо вас. После просто да оставяте коментари какво искате да се постигне, а асистентът сам да пише кода, с който това се случва.
Код е гот
Копилотът е полезен в последната стъпка от програмирането, както я представихме преди малко. А именно – ако сте разделили кода си на малки функции с разбираеми имена, добре именувани входни и изходни параметри и точни коментари. После идва копилотът и запълва празното място.
Може би защото не съм чак толкова отдавна в тази сфера, дори само по това описание ми звучи като да отнема доста голяма част от чистото удоволствие на програмирането. Със сигурност обаче повечето колеги биха се зарадвали на такава отмяна.
За момента използва контекста само от файла, в който е отворен, а не целия проект, но идеята е това съвсем скоро да се промени.
Код-машина
Мотивиращи и доста амбициозни обещания, дотук добре. А как изглеждат нещата в практиката след първите опити на програмистите да поканят копилота в самолета си?
Вътрешните проучвания с проект на Python показали, че копилотът дава предложение, което веднага е готово за използване, в 43% от случаите, а процентът нараства до 57, ако му позволим до 10 опита. Много или малко е това, при това при проверка от самите му създатели, оставяме ви да прецените сами.
Хари Едуардс от OpenAI казва, че копилотът го е изненадал с прецизността, с която е разбирал коментарите и е генерирал точни предложения. А после винаги е давал 10 варианта, от които да се избере най-добрият. Нормално, всички си харесваме своите деца, с все кусурите им.
На програмиста му е дебел вратът, защото…
Не всички са толкова ентусиазирани като Хари (аз също, може би си личи). Тук например са събрани доста добри аргументи защо Copilot сам по себе си няма как да промени програмирането. На първо място, основната част от времето си софтуерните инженери използват за решаването на по-генералните проблеми, разбиването на подпроблеми и доста по-малко се губи именно във финалните функции. Освен това, много по-често се налага да четем, разбираме и „подпипваме“ свой или чужд код, отколкото да създаваме редове с изцяло ново съдържание.
Доста хора ще го потвърдят – по-лесно е сам да седнеш и да напишеш една функция, отколкото да вникнеш в начина, по който някой друг я е направил. След като, дори според създателите си, Copilot се справя успешно в по-малко от половината случаи от първи опит, може да се каже, че ще губим повече време в четене, осмисляне и поправяне на предложенията му, отколкото ако просто хванем и си напишем решенията.
Дебъгването, грубо казано, е процес на проследяване на връзките в кода, за да се открие къде се крие даден проблем. При изкуствено генерирания код, особено ако той приеме наистина големи размери, тази дейност също ще стане още по-голям кошмар.
Алго… ритам!
Не е тайна, че голяма част от програмирането е и търсене на информация онлайн. Да, не са случайни шегичките, че ако StackOverflow, най-голямата мрежа с въпроси и отговори за програмиране, спре да работи, всички ще останем без работа.
Несъмнено изкуственият интелект може да ни е доста голям помощник в тази посока. Ако се замислим, ще стане ясно, че той даже вече е такъв. Самият факт, че гугъл доста бързо намира отговора на почти всеки проблем, на който сме се натресли в програмирането, показва, че алгоритмите могат да са ни от полза тук.
Но явно не достатъчно, поне за момента, че да направят безпредметна частта с ръчното търсене…
(Или с псуването. Допреди да се захвана професионално с програмирането, си мислех че шофирането в центъра на София е действието, което най-мощно провокира вътрешната ни нужда да каканижем пъстро мнението си за света с разнообразие, на което би завидял и герой на Кустурица.)
Ами сигурността? Един ден не може ли подобен софтуер да се използва, за да „вклини“ в кода ни уязмивости? Независимо дали нарочно, или случайно, просто защото алгоритъмът е избрал работещо решение, което да ни предложи. Но не и сигурно…
Пенчо, бре, коди!
Има и други играчи с подобни претенции, например проектите на стартъпите Enzime и Debuild. И двата са обещаващи, но все още не са представени като масово достъпни решения.
Очевидно става дума за област, която тепърва извървява първите си плахи стъпки, но дали и колко бързо ще напредва? Чакат я доста предизвикателства.
Така, поне за момента, работните ни места изглеждат сигурни, независимо от заплахите на г-н Ленард. След като флагманът на най-напредналите системи за изкуствен интелект едва-едва прохожда в най-ниското ниво на програмирането, изглежда, ако не невъзможен, то прекалено далечен моментът, когато софтуерът ще може да взема комплексни решения, да подготвя завършени проекти, да решава архитектурни въпроси.
Код-кудяк
А дали наистина това е възможно, времето ще покаже.
Аз лично му стискам палци.
Не знам за вас, но за мен ще е облекчение, ако трябва да водя спор с изкуствен интелект кодер. Защото, как да си го кажем, програмистите не са най-благите събеседници, ако се опиташ да отвориш по-провокативна тема. Да не говорим пък, ако допуснеш грешка в поста си. Или си на различно от тяхното Абсолютно мнение.
Все се надявам алгоритмите да са по-толерантни и комуникативни. Иначе, ако комуникират в духа на дискусиите например в тази група, тежко ни и горко. По-добре да не идват…