AI dla programistów – praktyczny przewodnik bez hype’u #EN232

Poniższe notatki powstały na podstawie webinaru „Open Source and AI Special with Francesco Ciulla” na kanale GitHub. Wszystkie przemyślenia, obserwacje i wnioski pochodzą od Francesco Ciulla – programisty, byłego pracownika Europejskiej Agencji Kosmicznej i autora nadchodzącej książki o Rust.

TL;DR – Jak mądrze korzystać z AI w programowaniu?

  • Odrzuć programowanie „na wyczucie” – generowanie całych aplikacji jednym poleceniem to pułapka prowadząca do utraty kontroli
  • Traktuj AI jako wzmacniacz, nie zastępstwo – AI ma potęgować Twoją wiedzę, nie zwalniać z rozumienia fundamentów
  • Dziel i zwyciężaj – użyj AI do rozbicia dużych problemów na mniejsze, zarządzalne zadania
  • Automatyzuj zadania nielubiane – AI idealnie nadaje się do poprawy accessibility i pisania testów
  • Prototypuj mądrze – wykorzystuj AI do szybkiego tworzenia MVP dla pojedynczych funkcji, nie całych systemów
  • Zachowaj pełną kontrolę – najlepsi deweloperzy w erze AI wiedzą jak zadawać właściwe pytania i świadomie korzystają z narzędzi

Dlaczego Francesco Ciulla krytykuje modę na AI?

Francesco Ciulla rozpoczął swój webinar od mocnego stanowiska wobec obecnego trendu w branży. Zauważa, że social media pełne są postów w stylu „100 AI tools you can level up with before it’s too late”. Jego zdaniem takie podejście jest wyczerpujące dla programistów, którzy chcą spędzać czas na budowaniu rzeczy, a nie na gonieniu każdego nowego narzędzia.

Webinar odbył się tuż po ogłoszeniu GitHub Spark – nowego narzędzia dla użytkowników Copilot Pro, które pozwala przejść od pomysłu do prototypu w kilka minut. Francesco planuje przetestować je w przyszłych streamach, jednak podkreśla, że to kolejny przykład tempa rozwoju narzędzi AI.

Dane z Stack Overflow z 2024 roku pokazują, że profesjonalni programiści nie postrzegają AI jako zagrożenia dla swojej pracy. Ciulla uważa to za kluczową obserwację w dobie sztucznego strachu przed automatyzacją. Jednocześnie GitHub opublikował w październiku 2024 dane pokazujące około 100% wzrost aktywności w projektach generative AI na całym świecie – nie tylko w USA, ale także w Indiach, Niemczech, Japonii czy Singapurze.

Francesco nie ignoruje jednak wyzwań związanych z AI. Wymienia problemy etyczne: dezinformację, brak atrybucji źródeł, imitowanie wizerunków osób oraz zapotrzebowanie energetyczne. Największym wyzwaniem w pracy pozostaje brak zaufania do wyniku AI, szczególnie w aplikacjach produkcyjnych.

Mit programowania „na wyczucie” – dlaczego to pułapka?

Francesco Ciulla stanowczo krytykuje popularny trend, który nazywa „vibe coding” (programowanie „na wyczucie”). Polega on na próbie stworzenia całej, złożonej aplikacji za pomocą jednego, bardzo rozbudowanego polecenia. Według niego takie podejście jest skazane na porażkę w profesjonalnych zastosowaniach.

Co ciekawe, zapowiada „pięć praktycznych przypadków użycia”, ale w rzeczywistości przedstawia sześć – zabawny błąd, który pokazuje, jak łatwo się pomylić nawet podczas prezentacji o AI.

Dlaczego programowanie „na wyczucie” to złe podejście?

Francesco używa mocnych analogii do zilustrowania problemu. Porównuje vibe coding do „vibe surgery” czy „vibe piloting”. Nie chciałby, żeby lekarz robił mu operację metodą vibe coding przez robota – zauważa z ironią.

Główne problemy tego podejścia obejmują:

  • Utrata kontroli – deweloper z twórcy staje się pasywnym obserwatorem, który nie panuje nad procesem
  • Brak zrozumienia kodu – generowany kod może działać, ale jego autor nie rozumie ani jego logiki, ani architektury
  • Problemy z utrzymaniem – generowanie całej aplikacji jednym poleceniem to prosta droga do tworzenia kodu, którego nikt w zespole nie będzie w stanie później utrzymać ani rozwijać
  • Brak powtarzalności – trudno odtworzyć ten sam rezultat w zespole

Profesjonalna praca, jak podkreśla Francesco, wymaga solidnego i powtarzalnego procesu, nie nieprzewidywalnych narzędzi.

Sześć praktycznych zastosowań AI dla programistów

Zamiast prezentować kolejną listę 100 narzędzi, Francesco skupia się na praktycznych przypadkach użycia. Co ciekawe, zapowiada „pięć praktycznych przypadków użycia”, ale w rzeczywistości przedstawia sześć – zabawny błąd, który pokazuje, jak łatwo się pomylić nawet podczas prezentacji o AI. Dla każdego zastosowania podaje konkretne przykłady promptów.

1. Brainstorming i planowanie architektury

AI sprawdza się doskonale przed napisaniem pierwszej linii kodu. Można używać go do generowania pomysłów, przeprowadzania studium wykonalności, szacowania czasu rozwoju i podejmowania decyzji architektonicznych. Ponadto AI może challengować nasze założenia i proponować alternatywne podejścia.

Przykład promptu: „Muszę zbudować real-time chat dla aplikacji e-commerce. Porównaj zalety i wady WebSockets versus server-sent events, zaproponuj podstawowy schemat danych dla wiadomości.”

2. Rozwój krok po kroku (step-by-step development)

To prawdopodobnie ulubiony przypadek użycia Francesco – przeciwieństwo vibe coding. AI może stworzyć plan rozwoju i podzielić aplikację na konkretne etapy: stworzenie podstawowych endpointów API, budowa komponentów frontend, integracja. Można nawet poprosić AI o utworzenie GitHub issues dla każdego kroku.

W ten sposób zachowujesz kontrolę nad całym procesem, a gdy coś nie działa, wiesz dokładnie który element sprawdzić. Francesco pyta retorycznie: czy to nie brzmi lepiej niż pozwolenie AI zrobić wszystko i potem, gdy coś nie działa, spędzanie czasu na naprawianiu?

3. Szybkie prototypowanie

Według Francesco, prototypowanie to obszar, w którym AI błyszczy najbardziej. Nigdy wcześniej tworzenie MVP dla funkcjonalności nie było tak szybkie. AI doskonale radzi sobie z implementacją znanych wzorców: autentyfikacja użytkowników, bramki płatności, paginacja API, sesje JWT, cookies.

Jeśli znasz te koncepcje, możesz zbudować aplikację w godziny. Francesco zauważa, że AI jest niesamowite w implementacji pojedynczej funkcjonalności. Natomiast nie jest fanem próby generowania wielu funkcji jednocześnie, bo zazwyczaj to bałagan.

4. Implementacja accessibility

Francesco uważa accessibility za często odkładany priorytet. „Zrobię to później” – to fraza, którą słyszy zbyt często. Jednak AI daje konkretny sposób na naprawienie tego problemu. W końcu mamy praktycznego asystenta, który może tworzyć inkluzywne strony i aplikacje.

Praktyczne prompty dla accessibility:

  • „Jak mogę zrobić to menu dostępne dla czytników ekranu?”
  • „Przeanalizuj ten HTML i wyróżnij najbardziej krytyczne problemy z accessibility”
  • „Popraw kontrast kolorów w tym komponencie”
  • „Dodaj odpowiednie aria-labels do tego formularza”

Wymówka „nie mam czasu na accessibility” nie jest już aktualna w 2025 roku – stanowczo stwierdza Francesco.

5. Automatyzacja testowania

AI może wygenerować kompletny zestaw testów dla aplikacji. Testowanie może być repetytywne i nudne dla niektórych, ale dla ekspertów AI może być potężnym wzmocnieniem. Działa zarówno dla test-driven development, jak i dodawania testów później. Mimo to kluczowe jest zrozumienie fundamentów: czym są testy jednostkowe, integracyjne, end-to-end.

6. Optymalizacja istniejącego kodu

Podczas pracy w Europejskiej Agencji Kosmicznej jednym z zadań Francesco była optymalizacja istniejącego kodu. Opisuje to jako potencjalny koszmar – serwer obsługujący miliony żądań wymaga subtelnych ulepszeń. Wspomina, że spędzał godziny, dni, tygodnie na Stack Overflow próbując ulepszyć fragment kodu.

AI doskonale radzi sobie z optymalizacją działającego kodu. Może poprawić zarówno wydajność wykonania, jak i czytelność poprzez refactoring, dodawanie komentarzy czy przepisywanie na inne technologie.

Przykłady praktycznych promptów:

  • „Jak mogę zoptymalizować tę funkcję pod kątem wydajności?”
  • „Przepisz ten kod używając innego frameworka/języka/biblioteki”
  • „Dodaj komentarze wyjaśniające logikę tego algorytmu”

Porady dla początkujących programistów

Maria Escobar zadała w czacie pytanie o rekomendacje dla nowych programistów. Francesco odpowiada z perspektywą doświadczonego mentora, zauważając, że im więcej lat mija, tym więcej rzeczy staje się jednocześnie łatwiejszych i trudniejszych. Dostęp do informacji jest większy niż kiedykolwiek, ale paradoksalnie wszystko jest przez to trudniejsze.

Nauka fundamentów vs używanie AI

Francesco nie jest fundamentalistą mówiącym „nie używaj AI”. Rozumie, że ludzie mają ograniczony czas i wiele obowiązków. Kluczowa rada brzmi: nie pozwól, żeby cokolwiek przeszło bez zrozumienia.

Różnica jest między kimś, kto rozumie kod, a kimś, kto go nie rozumie – to właśnie ta różnica decyduje o wartości programisty. Początkujący programiści nie powinni traktować AI jako drogi na skróty. Jak zauważa Francesco, nadal trzeba czasem „uderzyć głową w mur”, aby naprawdę zrozumieć, dlaczego coś działa.

Francesco porównuje obecną sytuację do czasów Stack Overflow: wszyscy kopiowali kod z tej platformy. Różnica jest taka, że teraz mamy bardziej ukierunkowane i elastyczne źródło informacji. Jednak zrozumienie, co dzieje się „pod maską”, będzie tym, co odróżni dobrego inżyniera od osoby, która potrafi tylko kopiować odpowiedzi.

Dlaczego fundamenty się liczą

Każdy może teraz pisać kod – zauważa Francesco. AI demokratyzuje tworzenie oprogramowania, podobnie jak YouTube demokratyzował naukę. Ale kto będzie lepszym programistą: ktoś kto zna fundamenty i wie co robi kod, czy przypadkowa osoba piszącą ten sam prompt?

Francesco używa też trafnej analogii muzycznej: czy musisz być ekspertem we wszystkich instrumentach? Czy musisz znać szczegółowo pianino i gitarę? Nie. Znacznie lepiej jest wybrać jeden lub dwa instrumenty i dogłębnie je opanować. Tak samo w programowaniu: skupienie się na kilku technologiach i dążenie do mistrzostwa w nich przyniesie znacznie lepsze rezultaty niż powierzchowna znajomość wszystkiego. Francesco sam wybrał Rust i Docker.

Jeśli wszyscy mamy to samo narzędzie, lepszy pisarz wciąż wygra z tym samym długopisem – obrazowo tłumaczy.

Rada dla młodego Francesco: Unikaj przytłoczenia

Na pytanie o radę dla siebie z przeszłości Francesco odpowiada bez wahania: przestań się czuć przytłoczony. Opisuje moment w karierze, gdy zrozumiał jak wiele frameworków, języków, baz danych i narzędzi DevOps istnieje.

W rozwoju rzeczy zmieniają się bardzo szybko. Czy możesz nadążyć za wszystkim? Nie. Nawet jeśli skupisz się na jednym frameworku i pojedziesz na długie wakacje, po sześciu miesiącach ten framework może być kompletnie inny.

Kluczowa rada brzmi: „Francesco, przestań kupować kursy na Udemy i skup się na budowaniu projektów.” Francesco przyznaje, że ma około 100 kursów na Udemy i zna ludzi, którzy mają jeszcze więcej.

Przyszłość pracy programisty z AI

Francesco przedstawia realistyczną wizję przyszłości. Pracodawcy oczekują szybszych rezultatów ze względu na dostępność narzędzi AI. Zadanie, które wcześniej zajmowało dwa tygodnie, teraz może być wykonane szybciej. Jak zauważa uczestniczka Mavis w komentarzu: pracodawcy dają zadania, które powinny zająć dwa tygodnie, z oczekiwaniem, że zajmą mniej czasu dzięki dostępnym narzędziom AI.

AI jako narzędzie wzmacniające

Najbardziej efektywni programiści to nie ci, którzy pozwolą AI robić całą robotę – stwierdza Francesco. To ci, którzy wiedzą co robić, jak zadawać właściwe pytania i jak używać odpowiednich narzędzi.

Francesco definiuje AI jako narzędzie, które wzmacnia ekspertyzę. Kluczowe jest zrozumienie, że jako programiści musimy być ekspertami w konkretnej domenie. AI wzmacnia tę wiedzę, ale jej nie zastępuje – zarówno w programowaniu, jak i w każdej innej dziedzinie. To nie umiejętność pisania idealnych zapytań będzie decydująca, lecz fundamenty i wiedza domenowa.

Francesco mocno podkreśla zachowanie sprawdzonych procesów. Jest wielkim zwolennikiem dalszego używania Git i GitHub tak, jak robiliśmy to dotychczas. Jego zdaniem nie ma powodu do destrukcji tego, co działa dobrze.

Ciekawą obserwacją jest jego doświadczenie z refactoringiem: spędził prawdopodobnie więcej czasu na refactoringu kodu niż na pisaniu nowego kodu w swojej karierze. To właśnie w tym obszarze AI może być szczególnie pomocne.

Czas na rozwój humanistyczny

Gdy narzędzia stają się dostępne dla wszystkich, warto skupić się na innych aspektach: nauce fundamentów, budowaniu obecności online, uczestnictwie w konferencjach, spotkaniach z ludźmi. To może być czas na pracę nad ludzką stroną, bo narzędzie pozwala teraz wszystkim robić to samo – podsumowuje Francesco.

Ważną obserwację dodaje uczestnik Bob James: pamiętajcie, żeby wychodzić na zewnątrz i wchodzić w interakcje z ludźmi. Francesco całkowicie się z tym zgadza, podkreślając znaczenie kontaktów międzyludzkich w erze AI.

Praktyczne podsumowanie

Francesco kończy prezentację jasnym przesłaniem: nie bójcie się AI, ale nie pozwólcie mu przejąć kontroli. Najskuteczniejsi programiści będą ci, którzy zachowają kontrolę nad procesem i będą używać AI jako zaawansowanego narzędzia.

Lista kontrolna: Jak pracować z AI jako programista

Przed rozpoczęciem projektu:

  • Zdefiniuj problem i cel aplikacji
  • Użyj AI do brainstormingu i planowania architektury
  • Poproś AI o podział projektu na konkretne etapy
  • Stwórz GitHub issues dla każdego kroku

Podczas developmentu:

  • Implementuj jedną funkcjonalność na raz
  • Zrozum każdą linię kodu przed merge’em
  • Użyj AI do testowania i optymalizacji
  • Zadbaj o accessibility z pomocą AI
  • Zapisuj zmiany regularnie używając Git

Po zakończeniu funkcjonalności:

  • Przejrzyj kod pod kątem optymalizacji
  • Sprawdź accessibility
  • Dodaj lub wygeneruj testy
  • Udokumentuj zmiany

Lista kontrolna dla początkujących programistów

  • Używaj AI, ale nigdy nie kopiuj kodu „na ślepo”
  • Zawsze zadaj pytanie „dlaczego ten kod działa w ten sposób?”
  • Zbuduj ten sam projekt najpierw bez AI, potem z AI – porównaj doświadczenia
  • Gdy AI generuje kod, przejdź przez niego linijka po linijce
  • „Bang your head against the wall” – nie unikaj trudnych problemów
  • Ucz się fundamentów równolegle z praktyką

Kluczowe zasady pracy z AI:

  • Porzućcie gonienie za hype’em – skupcie się na praktycznych zastosowaniach
  • Używajcie Git i GitHub tak jak zawsze – sprawdzone procesy wciąż się liczą
  • Dzielcie duże zadania na mniejsze części
  • Rozwijajcie ekspertyzę domenową – AI wzmacnia wiedzę, nie zastępuje jej
  • Zachowujcie kontrolę nad procesem i architekturą
  • Zadawajcie właściwe pytania zamiast pisać długie prompty

Gotowe prompty do AI – sprawdzone przez Francesco Ciulla

Francesco w swojej prezentacji podał konkretne przykłady promptów, które sprawdziły się w jego pracy. Oto zestawienie z uzasadnieniem, kiedy je stosować:

Brainstorming i planowanie architektury

Prompt: „I need to build a real time chat for my e-commerce application. Compare pros and cons of using WebSockets versus server-sent events, suggest a basic data schema for the messages.”

Kiedy stosować:

  • Na początku każdego nowego projektu
  • Gdy musisz wybrać między różnymi technologiami
  • Przed napisaniem pierwszej linii kodu
  • Gdy chcesz sprawdzić swoje założenia architektoniczne

Accessibility (dostępność)

Prompt 1: „How can I make this menu accessible for screen readers?”

Prompt 2: „Analyze this HTML and highlight the most critical accessibility issues.”

Kiedy stosować:

  • Po stworzeniu każdego nowego komponentu UI
  • Podczas code review
  • Gdy chcesz poprawić istniejący interfejs
  • Zamiast odkładania accessibility „na później”

Optymalizacja kodu

Prompt 1: „How can I optimize this function for better performance?”

Prompt 2: „Can you rewrite this using a different framework/language/library?”

Kiedy stosować:

  • Gdy masz działający kod, ale jest wolny
  • Po profilowaniu aplikacji i znalezieniu wąskich gardeł
  • Przed wdrożeniem na produkcję
  • Gdy rozważasz migrację technologiczną

Dlaczego te prompty działają?

Francesco podkreśla, że skuteczne prompty są konkretne i krótkie. Nie próbują rozwiązać wszystkiego jednocześnie, ale skupiają się na jednym problemie. Każdy z powyższych promptów:

  • Ma jasny cel – wie dokładnie czego szuka
  • Daje kontekst – opisuje konkretną sytuację (e-commerce chat, konkretne menu, konkretna funkcja)
  • Prosi o porównanie – AI lepiej radzi sobie z analizą opcji niż z wymyślaniem z powietrza
  • Jest praktyczny – można od razu zastosować odpowiedź w kodzie

Kluczowy insight

Paradoks Produktywności: Planuj, Nie Wykonuj

Standardowo myślimy: Gdy mamy zadanie, prosimy AI, aby wygenerowało dla nas gotowy kod.

W praktyce okazuje się, że: Większą wartość uzyskujemy, prosząc AI o stworzenie planu działania i rozbicie złożonego problemu na listę mniejszych, konkretnych zadań do samodzielnego wykonania.

Dlaczego to jest istotne: Takie odwrócenie ról pozwala zachować pełną kontrolę nad architekturą i jakością, jednocześnie wykorzystując AI do walki ze złożonością, a nie tylko do pisania samego kodu.

Test na jutro: Następnym razem gdy rozpoczniesz pracę nad nową funkcją, zamiast kierować do AI polecenie „Napisz mi kod do X”, spróbuj poprosić „Rozplanuj mi kroki potrzebne do zaimplementowania X i przygotuj listę zadań”. Następnie sprawdź, jak zmieniło to Twoją kontrolę nad procesem i jakość końcowego rozwiązania.


Ten wpis stanowi część kolekcji notatek z wartościowych treści branżowych. Oryginalne źródło: webinar „Open Source and AI Special with Francesco Ciulla


Opublikowano

,

Komentarze

Dodaj komentarz