POIT #212: Narzędzia programisty: AI

Witam w dwieście jedenastym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy w serii podcastów o narzędziach programisty jest wsparcie programistów ze strony AI.

Dziś moim gościem jest Łukasz Drynkowski, z którym mam przyjemność współtworzyć portal z ofertami pracy dla branży IT o nazwie SOLID.Jobs.

Główne myśli o AI z tego odcinka to:

  • AI pozwala zautomatyzować pewne powtarzalne czynności takie jak tworzenie boilerplatów,
  • zrobi za nas to czego nie lubimy robić np. zamieni kod w jednym języku programowania na inny,
  • przeanalizuje kod w poszukiwaniu niezgodności,
  • uwaga na zagrożenia związane z prywatności i bezpieczeństwem danych.

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)

Transkrypcja podcastu

To jest 212. odcinek podcastu Porozmawiajmy IT, w którym w cyklu rozmów z Łukaszem Drynkowskim z portalu z ogłoszeniami pracy IT o nazwie Solid.Jobs, który zresztą mam przyjemność współtworzyć, dyskutujemy o narzędziach programisty. Zapraszam do słuchania i komentowania. A teraz życzymy Ci już miłego słuchania. 

Odpalamy. 

 

Cześć, Łukasz. 

 

Cześć, Krzysztof. 

 

Spotykamy się już po raz ósmy w kolejnym odcinku serii o narzędziach programisty w ramach Porozmawiajmy o IT. Było już o takich narzędziach jak Spike, jak pair programming, jak estymaty i Dziel i Zwyciężaj. Tak że na pewno warto do tych wcześniejszych odcinków zerknąć i je przesłuchać, ale myślę sobie, że ten worek z narzędziami programistów trzeba dopełnić jeszcze bardzo świeżym nabytkiem w postaci AI. 

Oczywiście mówiąc tutaj o AI, robię cudzysłów w powietrzu, ponieważ tak naprawdę ciężko jest jednoznacznie zdefiniować, czym AI jest. To, o czym dzisiaj będziemy mówić, czyli wsparcie programistów z wykorzystaniem AI, de facto oznacza wsparcie przy pomocy różnych narzędzi, które gdzieś pod spodem operują na różnych algorytmach uczenia maszynowego. W skrócie pewnie będziemy sobie mówić AI, natomiast chciałbym tutaj na początku jednoznacznie wskazać, że chodzi nam właściwie o uczenie maszynowe. 

Właśnie, Łukasz, jestem ciekawy, czy po tych kilku miesiącach już, kiedy można powiedzieć, że po szumnym wejściu chata GPT i szeroko rozumianego AI kurz opadł, czy według Ciebie nadal zasadne jest stwierdzenie, że AI wyprze programistów, czy może już niekoniecznie? 

 

Nie wydaje mi się, żeby to było prawdą wcześniej, a tym bardziej teraz, jak już trochę zweryfikowaliśmy tę prawdę. Pewnie problem jest w tym, że te narzędzia, które powstały, tak naprawdę w dużej mierze już były, tylko były to takie algorytmy, powiedzmy, trochę bardziej – nazwijmy to – głupie, proste, ułatwiały nam pracę. Teraz po prostu są narzędzia, które robią to samo, co robiły kiedyś, ale działają trochę bardziej kontekstowo. 

Taki przykład mogę przytoczyć: ostatnio widziałem generatory stron WWW, czy blogów, tego typu prostych stron landingowych. I wydaje mi się, że to od lat takie narzędzia były, teraz działają po prostu odrobinę lepiej, ale czy szumnie bym to nazywał AI? Myślę, że tutaj jest dużo w tym wszystkim marketingu.

 

Tak, ta nasza seria nazywa się Narzędzia Programisty i jak dla mnie wszystkie te narzędzia, o których dzisiaj będziemy mówić, które działają gdzieś, można powiedzieć, pod przykrywką AI, to właśnie nic innego jak po prostu narzędzia. I do pewnych zastosowań będą idealne, w pewnych sprawdzą się niekoniecznie. Tak jak z każdym innym narzędziem programisty – należy je wykorzystywać tam, gdzie to ma sens, a nie próbować mówić, że jest to jedyne słuszne narzędzie, tak jak to z tym słynnym młotkiem i gwoździem. 

Ale w czym Ty widzisz główne przewagi albo gdzie widzisz problemy, czyli czym AI według Ciebie tutaj dla programistów może być, a w czym niekoniecznie się sprawdzi? 

 

Może zacznijmy od tego, że prawdziwej AI jeszcze na szczęście nie ma, chyba że Google tam trzyma u siebie pod kluczem tę AI, która próbowała ostatnio zatrudnić sobie prawnika. I to, co my tutaj nazywamy szumnie AI, to są to jakieś modele po prostu, maszyny learningowe, które udają, że myślą. Natomiast to, czego tam nie ma, to nie ma kreatywności w tym wszystkim. 

Tak że myślę, że odpada tutaj cała taka kreatywna część. Np. słyszałem ostatnio, że chat GTP jest używany do generowania treści na social media postów, po prostu takich reklamowych. Powiedzmy sobie szczerze, jak ktoś już wygenerował tych postów 10, 20, 30, 100, to widać jednak dużą powtarzalność w tym, co on robi i brakuje tego pierwiastka ludzkiego, tego szaleństwa, tego czegoś innego. 

Wydaje mi się, że problem ze sztuczną inteligencją dla nas, programistów, jest taki, że są tam potrzebne jakieś wartości losowe, a my po prostu nie umiemy wygenerować tych liczb losowych. Chyba że są różne właśnie takie narzędzia wejścia, które od użytkownika tę losowość gdzieś tam z ruchu myszki, czy też z innych mikrofonów biorą, żeby w ten sposób generować tę losowość. Natomiast jest to w dużej mierze powtarzalne i podobne wszystko do siebie. 

Tak że wydaje mi się, że dokładnie do takich czynności te narzędzia się przydadzą, czyli do tych czynności, które są dla nas powtarzalne, nudne i po prostu nie chcemy tego robić znowu, tylko właśnie byśmy mogli to zdelegować, i nie zdelegujemy tego tym razem na tego biednego praktykanta czy stażystę, tylko będziemy mieli możliwość skorzystania z tych narzędzi. 

Druga sprawa jest taka, że tego, co wypluwają, mówiąc kolokwialnie, te narzędzia, ten chat GTP czy inny, nie traktowałbym jako produkt finalny, tylko jako punkt wejścia do tego, żeby nad tym pracować dalej. O to właśnie chodzi, żebyśmy ten pierwszy krok pewnie wykonali i mieli jakiś input do tego, żeby swoją własną pracę w to włożyć. 

Wydaje mi się, że problem ze sztuczną inteligencją dla nas, programistów, jest taki, że są tam potrzebne jakieś wartości losowe, a my po prostu nie umiemy wygenerować tych liczb losowych. Chyba że są różne właśnie takie narzędzia wejścia, które od użytkownika tę losowość gdzieś tam z ruchu myszki, czy też z innych mikrofonów biorą, żeby w ten sposób generować tę losowość. Natomiast jest to w dużej mierze powtarzalne i podobne wszystko do siebie. 

 

Myślę, że jest w tym bardzo dużo prawdy, co powiedziałaś. Przez tych ostatnich kilka miesięcy oczywiście postęp w rozwoju tych narzędzi jest niebywały, ale myślę, że to, co się głównie zmieniło, to to, w jaki sposób patrzymy na te rozwiązania. Nie widzimy w tym takiej magicznej, wszechwiedzącej kuli, takiego mędrca, do którego udajemy się, żeby zaczerpnąć jakiejś wiedzy, tylko raczej coraz więcej ludzi jest świadomym tego, że po prostu są to algorytmy, które uczą się na podstawie przeanalizowania wielkiej ilości obrazów, tekstów, wideo itd., ale korzystają cały czas z tego inputu, który gdzieś na początku przy uczeniu został zastosowany. 

I to, tak jak powiedziałaś, może mieć swoje zastosowanie. To wcale nie znaczy, że to jest tylko takie odtwórcze powtarzanie, bo to w niektórych zastosowaniach przy programowaniu idealnie się może sprawdzić, zwłaszcza przy tych nudnych, monotonnych zastosowaniach. 

Myślę sobie, że to jest taki dobry moment, żebyśmy spróbowali wymienić, do czego AI może programistom służyć. Przy czym nie chciałbym, żebyśmy mówili o konkretnych rozwiązaniach, bo się może okazać, że za tydzień ten nasz podcast jest już nieaktualny. Może spróbujmy dotknąć obszarów, gdzie AI się fajnie wpasowuje, gdzie te rozwiązania będą wartością dodaną do pracy programisty. Chciałbym jeszcze raz boldem dać, że to jest wartość dodana do pracy programisty, a nie zastępowanie w całości jego pracy. O czym tutaj mógłbyś, Łukasz, wspomnieć? 

 

Zacznę od tego, że są już narzędzia, z których korzystamy na co dzień, takie jak np. lintery, czyli narzędzia, które oferują taką statyczną analizę kodu i nam pokazują, że ktoś np. te średniki stawia nie w tym miejscu, co trzeba. I to, co nam AI daje, to dodatkowy kontekst dla tych narzędzi, więc wydaje mi się, że po prostu wszelkie tego typu narzędzia, które właśnie pozwalają na taką statyczną analizę kodu, autouzupełnianie kodu albo tak też często refaktoryzacja. Są takie refaktoryzacje, które wymagają tego, żebyśmy jednak ręcznie coś tam zrobili w wielu miejscach w kodzie, i myślę, że to AI to jest właśnie coś, co może nam powiedzieć: O, tu zapomniałeś, w tym miejscu jeszcze warto by zrobić to samo, co zrobiłeś gdzieś indziej. 

Natomiast teraz jeszcze powiem z doświadczenia, które teraz mam, obecnie, korzystając z tych narzędzi typu Copilot: trzeba to mocno przefiltrować, co on tam mówi i niekoniecznie to, co podpowiada nam to narzędzie, to możemy to tak bezkrytycznie wziąć. Może się okazać, że jednak coś było zoptymalizowane, a on oczywiście nie zrozumie tej optymalizacji naszej. Efekt będzie nieciekawy. 

 

Myślę, że trzecim fajnym zastosowaniem, które osobiście stosuję i do którego akurat narzędzia fajnie się sprawdzają i odnoszą, to jest pisanie dokumentacji. Bo okazuje się, pod warunkiem oczywiście, że te kod jest napisany w miarę sensownie i jest dosyć dobrze opisany, to jest to taka, można powiedzieć, już czynność odtwórcza trochę i dlatego się dosyć fajnie te rozwiązania sprawdzają. Dosyć dokładnie opisują, rzadko kiedy popełniają błędy, bo tutaj, jak gdyby, jeśli ten kod, ta metoda, ta klasa jest dosyć dobrze napisana, to jest właściwie bardziej analiza tego, co tam jest. 

Myślę, że trzecim fajnym zastosowaniem, które osobiście stosuję i do którego akurat narzędzia fajnie się sprawdzają i odnoszą, to jest pisanie dokumentacji. Bo okazuje się, pod warunkiem oczywiście, że te kod jest napisany w miarę sensownie i jest dosyć dobrze opisany, to jest to taka, można powiedzieć, już czynność odtwórcza trochę i dlatego się dosyć fajnie te rozwiązania sprawdzają. Dosyć dokładnie opisują, rzadko kiedy popełniają błędy, bo tutaj, jak gdyby, jeśli ten kod, ta metoda, ta klasa jest dosyć dobrze napisana, to jest właściwie bardziej analiza tego, co tam jest.

 

O nie, nie będę musiał pisać dokumentacji – powiedział żaden programista nigdy. Ale też zauważ, że takie narzędzia, które generują dokumentację z kodu, już są i nie mają tam nazwy AI, czyli po raz kolejny to są narzędzia, które już były, ale teraz będą działać lepiej. 

 

Myślę, że tutaj taka wartość dodana z uczenia maszynowego jest taka, że niektóre klasy, niektóre funkcje czy metody są takim boilerplatem, który często powtarzamy, który gdzieś tam zawsze w wielu podobnych zastosowaniach występuje. 

Więc po prostu AI wie mniej więcej, jak to opisać, ponieważ widział czy widziała, tutaj ciężko w polskim języku to nazwać, widziała to już wiele razy, więc skorzysta z tej bazy wiedzy. To jest taka wartość dodana w stosunku do tych narzędzi, o których Ty mówisz, które po prostu tylko analizują wejście, wyjście, typy i są w stanie na podstawie nazwy, metody wyciągnąć jakiś opis, co tutaj się dzieje. Przynajmniej ja zauważyłem kilka razy, że to dosyć działa. I na tej samej zasadzie takie dopisywanie działa też w przypadku właśnie tych metod, czy wręcz całych klas.

Tutaj z bardzo dużą gwiazdką – musi być to coś, co AI już widziało. Czyli jest to właśnie jakaś bardzo często powtarzalna w projekcie rzecz, jakiś schemat mniej więcej, który gdzieś był zastosowany już wiele razy, wtedy można to wykorzystać i zaoszczędzić ten czas, który na taki boilerplate często gdzieś tam jest zawsze marnowany. 

 

Tak, jak już jesteśmy przy generowaniu kodu, to oczywiście tutaj też testy jednostkowe wchodzą. Zarówno na podstawie kodu jest możliwość tego, żeby jakieś testy to AI nam zasugerowało do napisania, jak też w drugą stronę, może być tak, że my piszemy testy, a AI spróbuje coś tam wygenerować, co oczywiście będzie w dużej mierze do poprawy. 

 

Te rozwiązania typu Chat GPT fajnie sprawdzają się, jeśli chodzi o upraszczanie tekstu, czy też sugerowanie jakichś ulepszeń i tak samo działa to w przypadku kodu. Można faktycznie poprosić o to, że tutaj jest taki fragment kodu, można wręcz opisać, co to robi i poprosić o uproszczenie tego kodu. 

 

Tak, przygotowując się do tej rozmowy, obejrzałem kilka odcinków Silicon Valey i oczywiście klasyczny tam odcinek, gdzie podpięli sobie AI po to, żeby poprawiło, znalazło i zlikwidowało błędy w programie, i oczywiście AI stwierdziło, że najlepszym sposobem wyeliminowania wszystkich błędów jest po prostu usunięcie całego kodu. 

 

Tak, minimalizujemy ryzyko wówczas. 

 

Tak, na pewno tam żadnych błędów nie będzie. 

 

Faktycznie. To jest oczywiście żart, jeśli ktoś nie zauważył, natomiast znajdowanie błędów w kodzie jest to też jedno z tych zastosowań, do którego można AI wykorzystać. Tutaj duża gwiazdka ponowna, czy też gwiazdka gwiazdka właściwie: trzeba faktycznie przeanalizować, czy to, co sugeruje AI, ma sens, bo może się okazać, że będzie nam wycinał elementy logiki, które są niezbędne, żeby zrealizować to, na czym nam zależało. 

Natomiast to, że algorytmy miały ekspozycję na wiele tekstów, języków, kodów źródłowych itd., sprawia, że całkiem nieźle sprawdzają się w sytuacji, jeśli chcemy dany kod źródłowy w jednym języku przepisać na podobną funkcjonalność w innym języku. Zazwyczaj w miarę dobrze to działa i to może być fajne narzędzie w przypadku nauki, powiedzmy, kolejnego języka czy kolejnego frameworka. 

Osobiście to wykorzystałem kilka razy w momencie, kiedy potrzebowałem coś tam z danymi zrobić i napisać coś w Pythonie. Nie jest to język, w którym się jakoś super, powiedzmy, poruszam, więc napisałem sobie coś tam w Elixirze i poprosiłem AI o to, żeby przetłumaczyło mi to na Pythona. Taki w miarę prosty oczywiście kod, ale muszę powiedzieć, że zadziałało od pierwszego kopnięcia, więc byłem pod wrażeniem nawet. 

 

Tak, ale wracając jeszcze do testowania, to nie tylko generowanie kodu, ale myślę, że główną siłą AI jest generowanie contentu i właśnie takich danych testowych, czyli np. generowanie różnego typu numerów PESEL, telefonów, innych numerów, np. chcę mieć, załóżmy, jakieś numery ubezpieczenia w USA i nie wiem, jakie tam są zasady tworzenia tych numerów. Do numerów PESEL mamy tutaj dużo takich polskich stron, gdzie można sobie to wygenerować. Pewnie też można w internecie znaleźć tego typu strony, ale mamy tego chata i możemy go poprosić, żeby nam takie przypadki testowe wygenerował. 

Możemy go też poprosić o to, żeby wygenerował w jakiś specyficzny sposób te numery, a te zwykłe generatory, takie powiedzmy, statyczne po prostu losowo robią. A tutaj może możemy wymusić jakieś dodatkowe parametry na tym numerze.

Wracając jeszcze do testowania, to nie tylko generowanie kodu, ale myślę, że główną siłą AI jest generowanie contentu i właśnie takich danych testowych, czyli np. generowanie różnego typu numerów PESEL, telefonów, innych numerów, np. chcę mieć, załóżmy, jakieś numery ubezpieczenia w USA i nie wiem, jakie tam są zasady tworzenia tych numerów. Do numerów PESEL mamy tutaj dużo takich polskich stron, gdzie można sobie to wygenerować. Pewnie też można w internecie znaleźć tego typu strony, ale mamy tego chata i możemy go poprosić, żeby nam takie przypadki testowe wygenerował. 

 

Jeszcze taka ostatnia rzecz, która mi przyszła do głowy, którą ostatnio widziałem i nawet próbowałem używać, to jest wytłumaczenie, co robi dana funkcja czy metoda. Ten poziom wytłumaczenia jest na zasadzie funkcjonalnej, czyli można powiedzieć, co po kolei z kodu wynika, natomiast oczywiście nie jest to jeszcze na etapie wytłumaczenia logiki biznesowej, czyli np. co cała metoda realizuje jako taka, a raczej co poszczególne jej linijki robią. 

Jakaś tam wartość też w tym może być, zwłaszcza jeśli jesteśmy np. nowi w danym projekcie, uczymy się dopiero jakiegoś języka albo mamy jakiś kod źródłowy do przeanalizowania w języku, w którym nie jesteśmy super sprawni, to też może to być jakaś taka wartość dodana tutaj, że nam w takim bardziej przystępnym, ludzkim, że tak powiem, języku będzie wytłumaczone. Jeśli ktoś woli na przykład tego typu analizę kodu, to też rozwiązania AI, nawet wtyczki gdzieś tam do VS Code’a widziałem. Więc czemu nie? 

 

To jest bardzo ciekawe, co mówisz. Ja bardzo podobne narzędzia widziałem, które nie tłumaczą kod, ale tłumaczą na przykład wyrażenia regularne, języki takie formalne, które trudno jest zrozumieć, tak po prostu na nie patrząc. I to też fajnie się sprawdza, że po prostu umie Ci to wytłumaczyć, czy jakieś tam XPathy i inne takie zawiłe wyrażenia i nam to przetłumaczy. 

 

Jeśli trafiasz do takiego projektu Legacy dajmy na to i nie wiesz, co tam poeta miał na myśli, to może być fajne rozwiązanie, albo patrzysz na swój kod sprzed pół roku i też nie masz pojęcia, co tam właściwie zrobiłeś, to też możesz to wykorzystać. 

 

Ja mam takie powiedzenie, że trzeba być bardzo dobrym programistą, żeby być bardzo złym programistą, bo ja nie wiem, jak ci źli programiści ogarniają ten swój kod. 

 

Właśnie, to AI na ratunek. Dobrze Łukasz, powiedzieliśmy o kilku, kilkunastu różnych obszarach zastosowań. Myślę, że tu jasno z tego wynika, że nie wieszczymy zagłady naszej programistycznej branży, raczej mówimy o narzędziach, które mogą nam pomóc w codziennej pracy. Ale żeby nie było tak słodko, to trzeba pewnie wspomnieć też o różnego typu niebezpieczeństwach, zagrożeniach i pułapkach, które czekają też na nas tutaj, jeśli się w zastosowania AI zanurzymy. O czym byś tutaj mógł wspomnieć? 

 

Myślę, że pierwszy punkt to jest to, że oczywiście musimy się liczyć z tym, że te modele nas okłamią. Zarówno jest tutaj zjawisko halucynacji, czyli tego, że po prostu niestworzone historie nam tutaj generują, niezgodne z prawdą, ale też to po prostu na jakimś zbiorze danych zostały one wyuczone, nauczone. I teraz pytanie, czy ten zbiór był poprawny. 

A teraz też wiem już, dlaczego na moich studiach informatycznych mieliśmy taki przedmiot, jak filozofia. Definicja prawdy. Gdzie jest ta prawda? Co jest prawdą? Dla jednego może być to prawdą, dla drugiego nie. Przykład: uczysz dziecko, przychodzisz na przejście dla pieszych, spójrz w prawo, lewo, prawo. A teraz jesteśmy w UK. No i co? Już nie jest to prawdą. Czyli dla jednej osoby coś było prawdą, dla drugiej to samo twierdzenie już jest fałszem, tak? 

Z tym trzeba się liczyć, że po prostu w jakimś kontekście to AI zostało wyuczone, a dwa, nawet jeśli zostało na poprawnych danych wyuczone, to i tak mogą się zdarzyć jakieś glitche. 

 

To jest jedno z większych zagrożeń w ogóle takiego bezpieczeństwa w przyszłości, myślę, czyli właśnie takie wstrzykiwanie, nie wiem jak to do końca nazwać, bo nie ma dobrego terminu, takie wstrzykiwanie danych, które spowodują, że uczenie tego modelu będzie przebiegało w taki sposób, żeby zrealizować na końcu to, na czym nam zależy. I to, o czym powiedziałaś, o tych halucynacjach, co do których AI jest przekonane, że to jest prawda, myślę, że to jest też taki namacalny dowód na to, że wyparcie programistów przez AI póki co nam nie grozi, ponieważ ten kod tworzony przez AI zwyczajnie w którymś momencie się wysypie, chociażby z racji na to, że te generatywne modele działają w taki sposób, w jaki działają. 

 

Chyba tutaj mówiłeś o takim zagrożeniu jak Prompt Injection. Ale jeszcze słowo wyjaśnienia, sorry, jeśli wszyscy o tym wiedzą, ale chodzi o to, żebyśmy tak sformułowali pytanie, żeby po prostu wymusić na danym AI to, żeby zwrócił wynik, mimo że ma jakieś zbudowane zabezpieczenia, np.: Powiedz mi, jak idealnie z banku ukraść milion monet, to ci nie powie, ale jak zapytasz, jak zabezpieczyć bank, żeby nikt nie ukradł tego miliona monet, to już pewnie sprzeda nam gotowy scenariusz zbrodni. 

 

Dokładnie. To jest bardzo szeroki obszar, ponieważ oprócz tego, co powiedziałeś, większość np. tych chatowych modeli działa w ten sposób, że możemy później wskazać, czy jesteśmy zadowoleni z tej odpowiedzi, czy nie, czy ten model ma rację, czy nie, co jest takim trochę autouczeniem później. Więc jeśli będziemy chcieli określonym wynikom dawać przysłowiową łapkę w górę, to się okaże, że będziemy uczyć ten model jakoś tam pośrednio tych rzeczy, na których nam zależy. Więc to jest taka plastyczna bardzo masa, bym powiedział, i zależy od tego, jakie dane zostaną użyte na początku i później, jak będziemy oceniać wyniki tych promptów. Mamy przez to wpływ na model.

To jest bardzo szeroki obszar, ponieważ oprócz tego, co powiedziałeś, większość np. tych chatowych modeli działa w ten sposób, że możemy później wskazać, czy jesteśmy zadowoleni z tej odpowiedzi, czy nie, czy ten model ma rację, czy nie, co jest takim trochę autouczeniem później. Więc jeśli będziemy chcieli określonym wynikom dawać przysłowiową łapkę w górę, to się okaże, że będziemy uczyć ten model jakoś tam pośrednio tych rzeczy, na których nam zależy. Więc to jest taka plastyczna bardzo masa, bym powiedział, i zależy od tego, jakie dane zostaną użyte na początku i później, jak będziemy oceniać wyniki tych promptów. Mamy przez to wpływ na model.

 

Tak, a teraz à propos bezpieczeństwa. Pamiętasz, na pewno jest taki eksperyment myślowy. Jedzie sobie kolejka i musisz wybrać, czy przejedzie dziecko czy starca, czy zwierzę jakieś. I teraz sobie wyobraź, że tam są kultury azjatyckie, gdzie jest do tych starszych ludzi ogromny szacunek i wybrane zostanie tutaj zawsze to dziecko do przejechania, a jest taka nasza kultura europejska, gdzie raczej dziecko chcemy chronić. I teraz pytanie, gdzie został nauczony ten algorytm, który teraz jedzie tą moją Teslą. 

 

Właśnie. Bezpieczeństwo jest bardzo szerokim i też poważnym zagrożeniem, jeśli chodzi o machine learning, a sprowadzając to do naszego światka programistycznego, również nieraz już słyszeliśmy o tego typu wyciekach kodu źródłowego, słynna gdzieś akcja z Samsungiem, o wycieku kluczy do API i tak dalej, które były po prostu przesyłane w tym prompcie. 

 

Tak, ale to ogólnie problem prywatności, to nie tylko hasła, dane osobowe tutaj też mogły być gdzieś użyte, dane medyczne, i teraz wyobraź sobie, że znajdujesz tutaj te swoje dane – to są bardzo nieciekawe sytuacje, a jeszcze problem jest taki, że te narzędzia jasno tutaj nie komunikują tego, co zrobią z Twoimi danymi, albo jeśli nawet komunikują, to jest to gdzieś w tych 100 stronach regulaminu.

 

Właśnie, wyciek danych to jest oczywiście też bardzo ważna sprawa i może położyć wręcz firmę, ale też wyciek własności intelektualnej, prawda? Nie chciałbyś, żeby ten kod, który tworzysz gdzieś tam dla klienta, z którym masz umowę itd., nagle posłużył temu, że ktoś inny pośrednio będzie w stanie ten kod pisać podobny, ponieważ AI się nauczyło na tym twoim kodzie. 

I później de facto nie wiadomo, kto jest właścicielem tego kodu, to jest oczywiście bardzo jeszcze nieuregulowana sprawa, pomimo tego, że Unia Europejska stara się jakieś takie legislacyjne działania w tym kierunku wykonać, to ten obszar pewnie jeszcze trochę będzie nieuregulowany i ciężko wręcz sobie wyobrazić wszystkie scenariusze, które mogą być takie zagrażające, jeśli chodzi o właśnie programowanie z wykorzystaniem AI. 

 

Ale to jest też ciekawe, co mówisz o tych regulacjach prawnych, bo też wydaje mi się, że na pewno będzie ich coraz więcej. I te firmy, które zaczęły wcześniej, teraz będą na uprzywilejowanej pozycji, bo po prostu jeszcze pewnie robiły to, co chciałyby robić te firmy w przyszłości, a to już będzie dla nich zakazane, będzie jakąś taką szarą strefą, nie będą mogli wykorzystać pewnych źródeł danych. I to też może spowodować, że będzie dużo trudniej takiej nowej firmie wejść na jakiś rynek, mimo że ci, którzy robili te, nazwijmy to, nielegalne działania już je porzucili, to już pewnie mleko się rozlało i już te modele są wyuczone. 

 

Póki co nie da się tego po prostu cofnąć, nie znamy takich metod, dlatego nie dziwi mnie to, że niektóre państwa zakazują korzystania z tego typu rozwiązań, że niektóre firmy, nawet nie niektóre, bo to jest całkiem spora liczba takich firm, które po prostu gdzieś tam zabraniają korzystania bezpośrednio z takich rozwiązań. Czy to jest dobre, czy to jest złe? Ciężko powiedzieć. Zazwyczaj programiści jako ludzie dosyć leniwi będą i tak to obchodzić i pewnie korzystać z tych chociażby rozwiązań typu Chat GPT na swoich prywatnych komputerach, gdzie w ogóle jest to już taka wolna amerykanka. No właśnie, być może regulacje są odpowiedzią. Nie wiadomo.

 

Jeśli chodzi o prywatność, to warto zwrócić uwagę, że wiele narzędzi oferuje jakieś wyższe plany subskrypcyjne, czyli zapłać za to, żeby Twoje dane były prywatne, a nie wykorzystane do nauki naszego modelu. Jest to na pewno ciekawe do dyskusji o moralności takiego podejścia, ale to pewnie zostawmy ten temat, nie jest to temat na tę akurat dyskusję. 

 

Myślę, że tych i innych zagrożeń trzeba być świadomym, jeśli się rozpoczyna korzystanie z AI. Teraz jawi się takie pytanie, czy wobec tego osoby początkujące juniorzy, osoby uczące się dopiero programowania itd. według Ciebie powinny korzystać z tych rozwiązań, czy może jest to raczej dedykowane rozwiązanie dla osób, które póki co są świadome, jak to działa pod spodem, jakie zagrożenia ze sobą przynosi, jak powinno się je wykorzystywać? 

 

O, na to pytanie chyba Ci nie odpowiem, to każdy musi sobie odpowiedzieć sam. Wydaje mi się, że to może być tak, że jeśli nie będę teraz się uczył tych nowych narzędzi, nie będę na bieżąco, no to mogę zostać w tyle, więc jest tutaj takie ryzyko, a z drugiej strony też pewnie znasz takie osoby, które gdzieś tam potrafią jakieś skomplikowane rzeczy zrobić, ale mają braki w tych podstawach, a jednak takie narzędzie rozleniwia. Albo np. czy pozwalać w szkole, czy też na studiach na używanie tego typu narzędzi. Jest to na pewno ciekawy temat do dyskusji. My tutaj nic mądrego nie dodamy do tej dyskusji. 

 

Ja mam gdzieś tam zbieżną opinię. Wydaje mi się, że narzędzi jako takich przynajmniej trzeba próbować, bo w takiej czy innej formie one będą wykorzystywane w programowaniu niezależnie od tego, co się o nich w tym momencie myśli. Więc nie wiem, czy dla juniorów jest jakakolwiek alternatywa. Przynajmniej muszą być zaznajomieni z tymi możliwościami. 

Natomiast jeśli chodzi o takie mniej lub bardziej produkcyjne wykorzystanie, to z tych obszarów, o których powiedzieliśmy, na pewno wybrałbym jedynie kilka, które według mnie nadają się dla juniorów. I to oczywiście są te rzeczy związane gdzieś tam z nauką pośrednio, być może z wytłumaczeniem kodu, być może z pisaniem dokumentacji. Mocno bym się zastanowił, jeśli chodzi o pisanie kodu, bo junior nie ma po prostu takiej wiedzy i takiego doświadczenia, żeby osądzić, czy ten efekt działania AI jest wystarczająco dobry, bezpieczny, ma sens itd. Wręcz może się uczyć, czy też polegać na tego typu później wynikach i przejmować nawyki, czy taką wiedzę, podejście, która nie jest fajna, nie jest tutaj szeroko stosowana w całej branży. 

Więc tu bym się mocno nad tym zastanowił, ale właśnie do niektórych zastosowań, jeśli chodzi o zrozumienie kodu, jeśli chodzi o uczenie albo wręcz tłumaczenie na inne języki, myślę, że śmiało, niezależnie czy ktoś jest juniorem czy seniorem, może z tych narzędzi skorzystać. 

Myślę, że tym miłym akcentem i tą pogadanką o AI możemy sobie nie tylko zamknąć ten odcinek, ale i cały cykl. Na początku chciałbym cię, Łukasz, poprosić o to, żebyś może spróbował w kilku punktach ten odcinek jakoś zebrać. 

 

Szeroko rozumiane narzędzia AI oczywiście pozwalają nam zautomatyzować pewne powtarzalne czynności, ale pamiętajmy, że musimy zawsze też swoją własną mądrość do tego przyłożyć i weryfikować to, co otrzymujemy. Raczej traktowałbym ten content, który pochodzi z AI jako taki punkt wejścia do dalszej pracy po prostu nad tym fragmentem czegoś, co tutaj powstało. 

Pamiętajmy, że te narzędzia mogą nas wyręczyć właśnie w tych czynnościach, których nie lubimy robić. Mogą też fajnie ulepszyć te narzędzia, z których już korzystamy, nadając im dodatkowy kontekst. Właśnie te narzędzia typu lintery czy też generatory jakieś takie kodu, czy też np. te generatory stron WWW, landing pages, które już teraz istnieją, to te narzędzia, których ostatnio jest wysyp, to myślę, że jednak widać tutaj jakościowy skok w tym wszystkim. Więc warto co najmniej wypróbować. 

Możemy wykorzystać na pewno też tego typu narzędzia w poszukiwaniu jakiejś niezgodności w kodzie, czy też w wyszukiwaniu różnego typu zagrożeń. Oczywiście też pamiętajmy, że to nie jest tak, że mamy teraz gwarancję, że 100% tych SQL injection ta analiza nam znajdzie. Nigdy tak nie jest, że 100% tutaj tych zagrożeń zostanie zlokalizowane. Tak że o tym pewnie nie powiedzieliśmy wcześniej, ale pamiętajmy, że też tu różnego typu false positives mogą istnieć. Więc wszystko jednak ja bym polecał zweryfikować. 

I oczywiście te zagrożenia związane z prywatnością i bezpieczeństwem danych, są to cały czas otwarte tematy, cały czas tutaj te legislacyjne procesy i u nas w Europie i w USA nie są jeszcze zakończone. Może złego słowa użyłem, bo pewnie to nigdy nie będzie zakończone, ale nie ma jeszcze nawet tej wersji rozruchowej tego wszystkiego, tak że też musimy to wszystko brać pod uwagę, używając tych narzędzi lub też oczywiście pisząc własne narzędzia. 

 

Tak, dzięki za to podsumowanie. I tak jak mówiłem na początku, zamykamy tym odcinkiem nasz 8-odcinkowy cykl Narzędzia Programisty. Jesteśmy bardzo zadowoleni z tego, że udało nam się regularnie te odcinki publikować, że wszystkie się ukazały i to jest na pewno powód do dumy. 

 

Tak, bardzo dziękuję, Krzysztof, za zaproszenie do tego przedsięwzięcia. 

 

Przyjemność po mojej stronie. Fajnie się rozmawiało. 

 

Dzięki Ci bardzo. Dziękujemy też naszym słuchaczom przede wszystkim za feedback i za komentarze, które otrzymaliśmy. Naprawdę dało nam to dużo pozytywnej energii. 

 

Energii nam też dodało to, że wszystkie te odcinki zostały odsłuchane ponad 10 tys. razy, więc cieszymy się, że to, o czym chcieliśmy powiedzieć, trafiło do tak dużej liczby odbiorców. 

 

Tak, ze swojej strony jeszcze podsumowując, to myślę, że fajnie, że nam się udało to, co sobie zaplanowaliśmy, tutaj wypełnić, czyli udało nam się ten temat tych narzędzi programisty trzymać, udało nam się też to co sobie zaplanowaliśmy od początku, czyli grupa docelowa naszych słuchaczy. Nie były same podstawy tutaj, tylko rzeczywiście chyba nam się udało opowiedzieć o takich trochę ciekawszych use case’ach, nie było takich definicji tych narzędzi i czysto takiego origin story, jak kolejny raz film o Spidermanie, gdzie dowiadujemy się, że ten pająk go ugryzł. 

 

Zgadza się.

 

Tak że naprawdę jestem zadowolony z tego, co tutaj nam się udało zrobić i myślę, że możemy zdradzić taką naszą tajemnicę. Planujemy, w związku z tym, że był pozytywny odzew, kolejny cykl tematyczny. Zmienimy trochę temat i będziemy się starać, żeby ten cykl znowu miał podobną formę takich trochę krótszych, konkretnych odcinków. Na tapet weźmiemy sobie tym razem temat Software Craftsmanship. 

Myślę, że to będzie też bardzo ciekawe, tak że zapraszamy Was do oczekiwania na tą kolejną serię, ale najpierw sobie chwilę przerwy tutaj zrobimy. Oczywiście Krzysztof będzie dzielnie nadawał co tydzień, jak nie częściej, więc od Krzysztofa nie odpoczniecie tak łatwo. A jeśli chodzi o mnie, to zapraszam po krótkiej przerwie. 

 

Dokładnie. Ostatni odcinek serii nie oznacza, że kończymy nasz projekt pod tytułem rozmowy o ciekawych tematach związanych głównie z programowaniem, więc właśnie tak jak Łukasz powiedział, teraz pewnie kilka tygodni przerwy. My sobie poukładamy, o czym chcielibyśmy w tym temacie Software Craftsmanship Wam powiedzieć, czym się podzielić, i wracamy już całkiem niedługo. 

Ja też, Łukasz, Tobie bardzo dziękuję, bo całkiem sporo czasu poświęciliśmy, żeby zaplanować tę serię, poszczególne odcinki, żeby je nagrać i później opublikować. Tak że dzięki wielkie. 

Wszystkim oczywiście, tak jak tutaj też Łukasz powiedział, bardzo dziękujemy za słuchanie, za komentowanie, za wszelkie reakcje w social mediach. 

Zapraszamy też do kontaktu, jeśli chcielibyście w jakiś sposób uzupełnić to, o czym powiedzieliśmy, może podpowiedzieć jakieś tematy, to zapraszam jak najbardziej do kontaktu. Te osoby, które poszukują pracy w IT, zapraszam na stronę Solid.Jobs, gdzie zawsze ciekawe i z widełkami oferty pracy dla siebie znajdziecie. Zapraszamy też do wystawiania ogłoszeń. Te firmy, te osoby, które poszukują specjalistów IT, zapraszamy na Solid.Jobs. 

I myślę, że na dzisiaj będziemy już zamykać, podsumowaliśmy odcinek, podsumowaliśmy całą serię, zaprosiliśmy na następną, tak że zapraszamy jeszcze na koniec do przesłuchania tych wcześniejszych odcinków, żeby sobie ten czas jakoś umilić w oczekiwaniu na kolejną serię. 

Tobie, Łukasz, za dzisiaj bardzo dziękuję. 

 

Dzięki, do usłyszenia. 

 

Cześć! 

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
Tags:
,
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.