W ostatnim czasie można zaobserwować wzmożony rozwój i popularność rozwiązań AI. Również w obszarze wytwarzania oprogramowania sztuczna inteligencja wdziera się coraz mocniej. Dotyczy to zarówno przetwarzania danych jak i wsparcia samego procesu 'kodowania’. Czy programistom grozi 'wymarcie’?
Zapraszam Cię do krótkiego felietonu na temat tego, jako wpływ sztuczna inteligencja ma i może mieć na pracę programisty. Nie będę Ci przekazywał wiedzy szczegółowej na temat jak użyć, ale spróbuję poruszyć kilka innych aspektów.
Początkowy zachwyt i efekt WoW
Zaczynając zabawę z AI jak narzędzia wspierającego programowanie można odnieść wrażenie, że jest to coś niesamowitego (bo jest).
Poproś AI o napisanie Twojego CV w oparciu o kilka zdań – zajmuje to bardzo mało czasu – wystarczy wkleić, sformatować i gotowe.
Szukasz fragmentu kodu do szyfrowania w Java z użyciem bezpiecznego algorytmu – proszę bardzo – wynik równie błyskawiczny.
Chciałbyś wygenerowany kod aplikacji SpringBoot działającej Kafka z testami integracyjnymi wykorzystującymi @EmbeddedKafka i Spock – nie ma problemu, dostaniesz szablon aplikacji, plik maven/gradle i testy.
Chcesz kawałek kodu na Arduino dla komunikacji z klawiaturą i wyświetlaczem – proszę bardzo.
Masz duży zbiór logów i był jakiś problem z systemem – jak wyszukać co się stało, zlokalizować problem – też wynik szybki (sekundy zamiast grubych minut).
Jest to pierwsza faza zachwytu:
- Wspaniałe ułatwienie pracy,
- W końcu jedno miejsce, gdzie mogę znaleźć wszystkie rozwiązania,
- Wydaje się, że to nieograniczone możliwości,
Czy to etyczne i co jeśli to wykryją?
Po pewnym czasie (a może i od razu) może pojawić się u Ciebie wątpliwość – czy to OK, że ja korzystam z tego. Przecież podobnie jak teraz szukam odpowiedzi w internecie i kopiuję istniejące (lub nawet rekomendowane) rozwiązania czy nawet kawałki kodu.
Sztuczna inteligencja wydaje się być narzędziem jak inne – po prostu o większych możliwościach i o wiele szybsze. Czemu z tego nie korzystać garściami?
Mogę być lepszy niż inni w pracy (przynajmniej przez jakiś czas) – inni jeszcze tego nie znają,
- A co jeśli to wykryją (to nie wynik Twojej pracy, rekuter może mieć 'ale’ do Twojego CV)
- Co jeśli wygenerowany kod zawiera błędy – kto za to odpowiada (tutaj odpowiadam – Ty bo to Ty wziąłeś ten kod).
- Kto weźmie odpowiedzialność za błąd
- Wyobraź sobie, że skopiowany kod steruje systemem hamulców samochodu i błąd spowodował śmiertelny wypadek.
- Albo bęben pralki automatycznej ruszy mimo otwartych drzwi i uszkodzi rękę użytkownika, z powodu nieobsłużonej ścieżki skopiowanego fragmentu kodu
Dokładność wyniku
Dokładność uzyskanego wyniku z narzędzi AI zależy między innymi od przyjętego modelu (a mogą ich być setki tysięcy dla jednego tylko narzędzia), wcześniej zarchiwizowanych zapytań i odpowiedzi.
Wynik może być najbardziej prawdopodobnym wg. użytego modelu rezultatem – czyli może być to w pewnym sensie wynik zaawansowanego wyszukiwania (w bardzo dużym uproszczeniu). I mogą być tutaj różne sytuacje wpływające na dokładność wyniku – na przykład takie jak niżej
- Ktoś celowo zasila model nieprawidłowymi wynikami, jeśli jest tego dużo może to spowodować, że wyszukowanie pójdzie w złą ścieżkę. Nie można w chwili obecnej wykluczyć takiego celowe działania (wojny hybrydowe, działanie nieuczciwej konkurencji, hakerów etc.)
- Brak wystarczającej liczby danych porównawczych – może się okazać, że w przypadku odpowiedzi na pytanie o oczekiwany kolor AI. Np. wiemy, że spodziewanym wynikiem dla zapytania powinien być kolor czerwony. Ale AI, nie mając wystarczających danych, może wskazać najbardziej popularny w danym momencie kolor wogóle – czyli np. niebieski.
Prawa autorskie i tajemnica przedsiębiorstwa
Musisz być świadomy tego, w jaki sposób korzystasz z narzędzi. Jak wcześniej wspomniałem, modeli jest mnóstwo i większość firm nie jest w stanie sama takiego modelu stworzyć (przynajmniej na dzień dzisiejszy).
Darmowe rozwiązania AI mają to do siebie, że korzystający uczą system – czyli to, co wprowadzasz i dostajesz na wyjściu, będzie dostępne dla innych.
Kod, który dostaniesz, może być kodem innego programisty, który nieopatrznie wkleił kod z firmy (to jakby umieścił kod na publicznym git) – wielu z nas wie, czym to by się skończyło.
I własnego doświadczenia wiem, że tak jest – znam osoby, które uzyskały wynik w darmowym narzędziu AI, który był częścią prywatnego git innego developera.
Co w takim wypadku się stanie – korzystasz z kodu, do którego nie masz praw. Nie jest istotne to, że korzystasz z darmowego AI – tak samo nielegalne jest ściąganie filmów z darmowych portali.
A wyobraź sobie, że haker dostanie kod krytycznej części systemu bankowego – i oby nie było to przez Twoje pytanie wklejające kawałek kodu.
W wielu firmach aktualnie zabronione jest korzystanie z narzędzi takich jak ChatGPT i zablokowany jest dostęp do takich adresów.
Oczywiście można wykupić model płatny i zapewnić sobie bezpieczeństwo i prywatność.
Ale kiedyś internet też był darmowy, nie było reklam, dostawcy nie korzystali z danych użytkowników i ich preferencji, znalezione dane bardziej wiarygodne.
A co jeśli firma AI zostanie wykupiona – co się stanie z tymi danymi, co z wyciekiem (mogą przecież zwolnić osoby, które by zgłosić do urzędów nieprawidłowości).
Czy można temu ufać – ja, pracując w firmach, gdzie bezpieczeństwo, tajemnica handlowa i przedsiębiorstwa jest na pierwszym miejscu wiem, że nie jest to oczywiste. I jest jakiś powód, dla którego te firmy zabraniają korzystania z tego typu narzędzi (przynajmniej z pewnej części dostawców) – tym powodem jest minimalizacja ryzyka.
Czy sztuczna inteligencja zastąpi programistów
Jest to najczęstsze pytanie, jakie słyszę od kolegów z branży, I odpowiedź brzmi – część z nas na pewno zostanie zastąpiona.
Pewne obszary będą mogły zostać zautomatyzowane, a praca specjalistów IT będzie wymagała większych kompetencji.
Wyobrażam sobie, że np. proces testowania może zostać w dużej części wsparty sztuczną inteligencją.
Podobnie może być z obszarami związanymi z analizą danych.
Jest to niepokojące, ale nie ma raczej odwrotu i trzeba do tego się dostosować. Rynek zweryfikuje wymagania i potrzeby. Konieczne będzie zdobycie nowych kompetencji i ciągły rozwój.
Osoby, które osiądą na laurach, mogą być tym niemile zaskoczone. Zwłaszcza zwiększoną konkurencją na rynku i tym jak szybko trzeba będzie się dostosowywać.
W przyszłości nie wystarczy wyszukać w sieci kawałka kodu i go wkleić. Albo zapytać AI o wynik. I raczej nie będzie akceptowalne aby pracować cały sprint nad jakimś technologicznym POC (który może być wygenerowany).
Będą potrzebne (bardziej niż teraz) np. pogłębione umiejętności związane z praktyczną wiedzą jak stosować zaawansowane techniki inżynieryjne w conajmniej takich obszarach jak:
- projektowanie – wzorce projektowe (wszelakie), SOLID, projektowanie zmian kompatybilnych wstecznie, REST (Full) API, transakcyjność
- przetwarzanie asynchroniczne i rozproszone – np. Event Driven Architecture, CQRS, Project Reactor, Vertx
- architektura – DDD, wzorce architektoniczne, architektura heksagonalna, mikroserwisy, systemy rozproszone
- automatyzacja – CI/CD, automatyzacja testów, wirtualizacja (docker/Kubernetes),
- bezpieczeństwo i ochrona danych – Retry, Circuit Breaker, (resilience), Hystrix, GDPR/RODO, szyfrowanie, podatności,
Ta praktyczna wiedza będzie wymagała także pogłębienia wiedzy w zakresie 'narzędzi’ z jakimi pracujesz (Java, moduły Spring, JPA, NoSQL, maven/gradle, Spock, JUnit).
Większy nacisk będzie kładziony na bezpieczeństwo i kwestie własnosci intelektualnej.
Zmiany będą musiały być dostarczane szybciej, co będzie wymagalo tego aby były mniejsze, lepiej zaprojektowane.
Trzeba będzie unikać przekombinowania – nie trzeba stosować wszystkich wzorcow projektowych w kazdym systemie, albo SpringBoot na siłę bo jest wygodnie.
Tego wszystkiego musisz być świadomy – jest jeszcze czas aby się dostosować, douczyć. Ale prawdopodobnie tego czasu nie ma za wiele.
Istnieje także inny 'problem etyczny’ niewspomniany wcześniej.
Pamiętam jak powszechnie do firm wchodziła automatyzacja i oficjele i przedstawiciele biznesu mówili, że to jedyna droga, że będziemy mogli krócej pracować i zachować wypłaty (np. 3-4h dziennie). Roboty/automaty będą w jakiś sposób opodatkowane, aby ludzie mogli 'z czegoś żyć’. Ludzie protestowali. Czy tak się stało – niestety nie.
Podobnie było z informatyzacją – uczestniczyłem w projekcie informatyzacji dużego klienta. Jeden z działów przed wdrożeniem systemu zatrudniał 300 osób. Średni czas oczekiwania na rozpatrzenie sprawy to było 2-3 miesiące. Po informatyzacji zostało 30 osób, czas rozwiązania sprawy spadł to tygodnia-dwóch.
Dobrze dla klienów, ale źle dla pracowników – dostali kilkuletnie odprawy, ale co z tego, jak nie mieli potem pracy. A na ich miejsce w przyszłości przyjdzie tylko 30 innych osób.
Inna kwestia to możliwy 'zanik’ samodzielnego myślenia – po co mam się męczyć, jak AI za mnie to zrobi.
Pojawić się może nadmierne uzależnienie od AI – tak jak z ogniwami paliwowymi, czy gazem/węglem – w dzisiejszych czasach mówi się często o tym, że nie można się uzależnić od jednego dostawcy.
Przykład pewnego uzależnienia to GPS (mocno upraszczam dalej) – nie ma GPS, lub zakłócony GPS i znaczna część przemysłu i transportu 'padnie’. Przed GPS i internetem systemy firm przemysłowe działały, pociągi jeździły a samoloty latały. A teraz pojawiają się głosy że gdyby nie było GPS/GLONASS to byłby z tym niewiarygodnie duży problem. Są przecież mapy papierowe. Drogi czy linie kolejowe nie buduje się z dnia na dzień. Istnieją standardy sieci przemysłowych działające w czasie rzeczywistym – nie wszystko musi być oparce o internet i GPS.
Wyobraź teraz sobie, że diagnozę u lekarza dostaniesz w oparciu o sztuczną inteligencję i w przypadku braku systemu/prądu lekarz nie postawi diagnozy.
Powyżej przytoczyłem kilka możliwych scenariuszy i wybranych zagadnień AI, starając się patrzeć z perspektywy programisty i osoby pracującej.
Czy jestem przeciw AI (bo przytoczyłem kilka własnych wątpliwości) – odpowiedź brzmi ’Nie – nie jestem przeciwko AI’. Może nam (programistom) pomóc w sporym zakresie. Myślę też, że nie mamy innego wyjścia jak dostosować się i korzystać w sposób świadomy i bezpieczny z AI w naszej pracy. Będzie wymagało to od nas dostosowania się, zmiany sposobu postrzegania problemów. I na pewno będzie to wymagało od nas zdobycia dodatkowej wiedzy.
Wiele zależy też od tego, w jaki sposób będzie to realizowane, uregulowane prawnie i jakie kwestie zostaną pominięte.
Może podobnie jak z blockchain ustawodawcy zapewnią odpowiednie mechanizmy dla zwiększenia bezpieczeństwa użycia, zmniejszenia ryzyka i zwiększenia 'moralności’ tych narzędzi.
Apache Kafka – wydajność vs. gwarancja dostarczenia wiadomości
Jak stworzyć piekielnie szybką albo maksymalnie bezpieczną wersję producenta oraz konsumenta.
Przydatne linki
- https://news.harvard.edu/gazette/story/2020/10/ethical-concerns-mount-as-ai-takes-bigger-decision-making-role/
- https://www.unesco.org/en/artificial-intelligence/recommendation-ethics
- https://www.ibm.com/topics/ai-ethics
- https://www.techtarget.com/searchenterpriseai/tip/Generative-AI-ethics-8-biggest-concerns
- https://www.gov.pl/web/ai/etyka-ai-okiem-ekspertow-dostrzegac-kontekst-myslec-krytycznie
- Obraz autorstwa Freepik
- Obraz autorstwa vectorjuice na Freepik
- Obraz autorstwa vectorjuice na Freepik
Gdybyś potrzebował jeszcze więcej:
Jesteś Java Developerem?
Przejdź na wyższy poziom wiedzy
„Droga do Seniora” 🔥💪
Jesteś Team Leaderem? Masz zespół?
Podnieś efektywność i wiedzę swojego zespołu 👌