Jak szybko zrozumieć Laravel? Tydzień pierwszy z programowaniem wspieranym AI #buildinpublic
Zapraszam na kolejny wpis z serii o budowaniu systemu w duchu buildinpublic.
Dziś będzie jak na kolejce górskiej – optymizm, kompletna porażka i szczęśliwy finał. Przy okazji zdradzę jak i dlaczego poznałem podstawy Laravel w 3-4 wieczory.
Może zastanawiasz się, na ile realne jest tworzenie aplikacji z pomocą edytorów AI takich jak Windsurf czy Cursor – bez umiejętności programowania? Poniżej opiszę Ci moje doświadczenia w tym temacie, po pierwszym tygodniu pracy.
Co ważne – mówimy pracy nad o realnym, nietrywialnym projekcie. Nie jest to kolejna lista to-do czy saper tylko pełnoprawny system dla klienta.
TL;DR; (spoiler!)
Na dziś (a jestem po 3 tygodniach pracy) nie bardzo wyobrażam sobie napisać z AI tego typu systemu nie mając podstawowej wiedzy technicznej i o stosie technologicznym w jakim budujemy.
Kontekst biznesowy i aplikacja do napisania
W sumie to jest najmniej ważne. Twój przypadek będzie zupełnie inny, dlatego znajdziesz te informacje w zupełnie innym wpisie (link wkrótce). Na teraz wystarczy wiedzieć, że system ten:
- będzie dostępny z internetu,
- będzie przechowywał dane w bazie,
- będzie dostępny dla pracowników klienta, więc ma logowanie,
- każdy pracownik będzie miał określoną role i wynikające z niej uprawnienia
- po zalogowaniu użytkownicy będą pracować z dość rozbudowanymi tabelami i formularzami, reprezentującymi obiekty w systemie,
- system będzie generował dość zaawansowane dokumenty Word i PDF.
Moje doświadczenie w budowaniu aplikacji (czyli – czy ten wpis jest dla Ciebie?)
Czy umiem programować? Na podstawowym poziomie – tak. Znam koncepcje używane w programowaniu – takie jak struktury danych, pętle, warunki, funkcje czy obiekty. Zdarzało mi się poprawiać kod w PHP, pisać proste narzędzia konsolowe w Java czy dłubać coś w Bashu. Rok temu, wspierając się ChatGPT, przygotowałem też spory migrator danych z json do PostgreSQL w Pythonie.
Czy budowałem już takie systemy? Tak, ale nie jako programista. Dla tego konkretnego klienta zbudowałem bardzo podobny system za pomocą Retool, o czym zresztą też będzie wpis. W pracy, przez ostatnie 15 lat robię w pracy za analityka, projektanta, wdrożeniowca, szkoleniowca i wszystko-inne-owca. Jedyne czego nie robię to programowanie, ale od zawsze chciałem posiąść tę umiejętność.
Zakasałem więc rękawy i pełen (nie)uzasadnionego optymizmu (polegającego na obejrzeniu wielu filmów na kanale AICodeKing oraz wybraniu Laravel jako mojego frameworka) zakasałem rękawy zabrałem się do „pisania” systemu od zera.
Nie mając pojęcia na co się porywam.
Część 1 – zderzenie ze ścianą
Pierwsze dwa-trzy wieczory pracy zakończyły się totalną porażką.
Zacząłem od razu z grubej rury. Wpakowałem do AI kilkustronicowy dokument opisujący system jaki chciałem zbudować. Spisany może trochę na kolanie, zawierał jednak wszystkie podstawowe informacje o aktorach systemu, ich rolach, obiektach jakimi system ma zarzadzać, relacjach między nimi i tak dalej. Dodałem nawet przykładowe dokumenty, które system ma generować. Napisałem, że chcę abyśmy budowali w oparciu o Laravel.
Naiwnie myślałem, że AI w minutę wygeneruje może nie gotową aplikację ale chociaż coś co mogłoby stanowić jej zaczyn. Jak bardzo się myliłem.
Mimo kilkunastu prób nic co dostałem od AI nie nadawało się do pokazania klientowi. Większość wersji aplikacji nawet się poprawnie nie uruchamiała. Zmarnowałem trzy wieczory i miliony tokenów próbując różnych narzędzi i przeklinając swoją naiwność.
Cursor, Cline a potem Windsurf – wszystkie te narzędzia poległy nie tylko na zrozumieniu całościowo systemu, jaki dostały do zbudowania, ale na podstawach typu:
- używanie komend w wierszu poleceń,
- poprawna inicjalizacja repozytorium,
- zorientowanie się w strukturze folderów,
- dokonywanie prostych zmian w layoucie,
- rozwalanie działających już rzeczy przez wprowadzanie nowych funkcji,
- świadomość technologii w jakiej pracujemy – nagle w projekcie pojawiały się artefakty z zupełnie innego świata,
Szybko doszedłem do wniosku, że problemem nie są narzędzia a moja niewiedza jak z nich korzystać oraz jakie mają ograniczenia. Wiedziałem o ekosystemie Laravela tyle co nic. Popełniałem wszystkie możliwe błędy i nie potrafiłem korygować tego co robił mój sztucznie inteligentny pomocnik. Nie potrafiłem nawet fachowo nazwać tego czego od niego oczekuję.
Czyli – mimo posiadania dość rozległej wiedzy IT nie byłem w stanie nic sensownego napisać. Potrzebowałem przyspieszonego poszerzenia mojej wiedzy.
Część 2 – turboedukacja, czyli nie składamy broni!
Następne poranki i wieczory to wielogodzinne sesje nauki – czułem się jak Neo w filmie Matrix
Uznałem, że tak to się bawić nie będziemy i skupiłem się na zdobyciu wiedzy z podstaw Laravel. Pomogły mi trzy świetne materiały o Laravel, które bardzo polecam.
Po pierwsze – przeszedłem (robiąc jednocześnie wszystko razem z prowadzącym) genialnie dopasowany do mojego poziomu 3-godzinny kurs z podstaw Laravel, o którym już tu pisałem. W kilka godzin zrozumiałem:
- jak skonfigurować sobie środowisko,
- czym jest model, widok i kontroler,
- czym są trasy,
- jak budować strukturę bazy danych z użyciem migracji,
- jak spinać to wszystko z HTML,
- czym jest właściwie to całe Blade,
- i wiele innych niuansów frameworka w którym zamierzałem pisać.
Ten kurs to naprawdę złoto. W jeden wieczór poznałem podstawy Laravel i miałem działającą aplikację, której kod w 100% rozumiałem! Wyglądała niespecjalnie imponująco, więc nie będę ranił Twoich oczu 🙂
Po drugie – głodny głębszej wiedzy dotarłem do mniej więcej 2/3 solidnego kursu Laravel from scratch, w którym budowałem typową tablicę ogłoszeń o pracę. Ten kurs nauczył mnie:
- jak można używać fabryk i seederów do generowania sztucznych danych (co mega przyspiesza testowanie kolejnych wersji),
- jak budować cały „zasób” (resorce) jednym poleceniem generującym wszystkie potrzebne pliki w projekcie,
- jak używać komponentów, layoutów,
- jak zadbać o walidację,
- poznałem też podstawy Vite, Tailwind i Alpine.js,
- i pewnie wiele innych, o których zapomniałem.
Aplikacja z tego kursu prezentowała się znacznie lepiej i kiedyś na pewno dokończę to szkolenie, jest naprawdę solidne oraz zawiera bardzo dobrą dokumentację w markdown, wraz z pełnym kodem źródłowym, co nie jest regułą na Udemy.
Po trzecie – w połowie drugiego (dość długiego) kursu trafiłem przypadkiem na świetny i zupełnie darmowy materiał. Półtoragodzinny kurs, o którym też już wspominałem, dał mi jeszcze lepsze zrozumienie kolejnych etapów budowania aplikacji, włączając w to:
- model ról i uprawnień, jaki można zbudować z pomocą biblioteki spatie/laravel-permission,
- używania uprawnień do „chronienia” tras lub ukrywania elementów interfejsu,
- relacje między obiektami w systemie (np. każdy projekt ma wiele zadań, każde zadanie należy do jednego projektu itp)
W pewnym momencie poczułem, że mam już tej wiedzy aż za dużo i pora z niej skorzystać w praktyce.
Postanowiłem wrócić do pracy nad aplikacją dla klienta.
Część 3 – czy wiedza o programowaniu pomaga programować (ze wsparciem AI)?
Odpowiedź na to pytanie może Was zaskoczy, ale… zajebiście pomaga!
Aby jednak nie zdradzić wszystkiego od razu – po szczegóły zaproszę Was do kolejnego wpisu, który już wkrótce. Aby go nie przegapić – zapisz się na powiadomienia.