To Twoje zapytania SQL. Poniżej pokażę Ci, dlaczego zapytanie, które „działa”, potrafi miesiącami liczyć złe liczby, i jak w 9 tygodni nauczyć się pisać SQL, za który możesz ręczyć.
Krystian Kapuściński · 7 lat jako Java Developer w Ericssonie i Sii · ponad 2 500 zajęć na żywo · ★★★★★ 5,0 z 21 opinii
Cześć,
jest piątek, 16:40. Zamykasz laptopa. W głowie masz już weekend.
I wtedy przychodzi wiadomość z działu finansów:
Otwierasz zapytanie. To samo, które napisałeś kwartał temu. Wykonuje się bez błędu i bez ostrzeżenia. Wyniki wyglądają rozsądnie.
A jednak kłamią. Od trzech miesięcy.
Jeśli kiedyś czułeś w żołądku to zimne „o nie”, wiesz, o czym mówię. Jeśli jeszcze nie, przeczytaj ten list do końca, bo to tylko kwestia czasu.
Tę historię słyszę w różnych wersjach na pierwszych rozmowach z programistami, którzy do mnie przychodzą. Zmieniają się szczegóły: raz to raport, raz migracja danych, raz zadanie na rozmowie rekrutacyjnej. Przebieg jest zawsze ten sam.
Raport łączył zamówienia z ich pozycjami i z płatnościami. Wszystko w jednym zapytaniu, z SUM i GROUP BY na końcu.
Tylko że zamówienie z trzema pozycjami i dwiema płatnościami po złączeniu zamienia się w sześć wierszy. Każda płatność pojawia się trzy razy. I SUM grzecznie liczy ją trzy razy.
Składniowo wszystko było w porządku. Baza nie miała się do czego przyczepić. Wykonała dokładnie to, co jej kazałeś, tylko nie to, co miałeś na myśli.
I tu dochodzimy do sedna.
Pomyśl o tym przez chwilę.
Każda klasa, którą piszesz, przechodzi przez czyjeś oczy. Jest pull request, są komentarze, testy jednostkowe i pipeline, który nie przepuści czerwonego builda.
A zapytanie SQL? Wklejasz je do repozytorium albo do raportu. Uruchamiasz raz. Wykonało się? Idzie dalej.
Jedyny „test”, jaki przechodzi, to pytanie: czy baza zgłosiła błąd. A baza prawie nigdy go nie zgłasza. Spójrz na to:
Niewinne zapytanie: „pokaż klientów, którzy nic nie zamówili”. Teraz wyobraź sobie, że w tabeli zamówień jest choćby jeden wiersz z pustym customer_id. Jeden.
Od tej chwili to zapytanie zawsze zwraca pusty wynik. Choć klientów bez zamówień może być setka. Nikt nie dostaje alertu. Kampania do „uśpionych klientów” po prostu nigdy nie wychodzi, a wszyscy myślą, że takich klientów nie ma.
Takich pułapek jest więcej, niż myślisz. I żadnej z nich nie wyłapie kompilator, linter ani zielony pasek w IDE.
Jeśli zastanawiasz się teraz, jak mogłeś tego nie wiedzieć, odpowiedź jest prosta: nikt Cię tego nie uczył. Uczono Cię składni.
Semestr baz danych sprawdzał, czy zapytanie jest poprawne składniowo. Kurs z nagrań pokazywał SELECT na tabeli z pięcioma czystymi wierszami. Platforma z ćwiczeniami nagradzała Cię zielonym ptaszkiem, kiedy wynik zgadzał się z jedną zapisaną odpowiedzią. A framework obiecywał, że SQL-a i tak nie będziesz musiał znać.
Każde z nich nauczyło Cię jednej rzeczy: jeśli się wykonało, to jest dobrze.
Zauważ, co łączy kursy, platformy i frameworki: żadne z nich nigdy nie zobaczy Twojego zapytania na prawdziwych danych. Żadne nie odbierze telefonu z działu finansów. Zielony ptaszek dobrze się sprzedaje, bo daje szybką satysfakcję i powód, żeby wrócić po kolejny poziom.
Telefon w piątek o 16:40 odbierasz Ty.
Nazywam się Krystian Kapuściński. Jestem inżynierem informatyki z Politechniki Łódzkiej. Przez 7 lat pracowałem jako Java Developer w Ericssonie i Sii, pisząc aplikacje, które działały na produkcji. A w takiej aplikacji prawie każda funkcja kończy się na bazie danych.
Od 6 lat uczę programowania. Mam za sobą ponad 2 500 zajęć na żywo i ponad 276 kursantów. Przeczytałem setki cudzych zapytań i wiem, które błędy wracają u prawie każdego.
Nie mówię Ci tego, żeby się pochwalić. Mówię, bo właśnie dlatego wiem jedno: różnica między programistą, który zgaduje, a takim, który wie, nie bierze się z talentu. Bierze się z nawyku.
Obaj dostają do napisania ten sam raport. Obaj znają składnię. Zobacz, co robią.
W piątek o 16:40 odbiera wiadomość z finansów.
W piątek o 16:40 jest już w drodze do domu.
Programista B nie jest mądrzejszy. On po prostu przez wiele tygodni pisał zapytania, które ktoś czytał i odsyłał z komentarzem: „tu zgubisz wiersze”, „tu policzysz podwójnie”, „tu przyda się indeks”. Aż te trzy pytania zaczął zadawać sobie sam, odruchowo.
Tego nawyku nie da się obejrzeć na nagraniu. Trzeba go wytrenować: piszesz, ktoś czyta, wskazuje błąd, poprawiasz. Tydzień po tygodniu.
I dokładnie po to stworzyłem ten kurs.
W pełnym programie Junior Java Developer SQL to dwa moduły z dziesięciu miesięcy. Coraz częściej odzywali się do mnie programiści, którzy reszty nie potrzebują. Potrzebują porządnego SQL-a. Więc te dwa moduły zamieniłem w osobny kurs na żywo.
Kolejność 18 tematów nie wzięła się z podręcznika. Dochodziłem do niej przez 6 lat i ponad 2 500 zajęć, sprawdzając, w którym miejscu ludzie się gubią. Możesz dojść do niej sam, na kolejnych raportach z błędnymi liczbami. Albo w 9 tygodni, z kimś, kto pokaże Ci pułapki, zanim w nie wpadniesz.
36 godzin zajęć na żywo · 18 tematów · 2 wieczory w tygodniu · najwyżej 15 osób w grupie · nagrania wszystkich zajęć
Poniżej prawdziwe opinie z Facebooka szkoły i z mojego profilu na e-korepetycje.net, bez żadnych zmian. Dotyczą moich zajęć z programowania, głównie z Javy. Kurs SQL prowadzę dokładnie w ten sam sposób.
„Pokazał mi dużo rzeczy, na które wcześniej przy pisaniu kodu nie zwracałem uwagi, i je wytłumaczył.”
„Nauczyciel tłumaczył wszystko krok po kroku, a trudniejsze zagadnienia przedstawiał prosto i na przykładach.”
„Dzięki niemu zdałam poprawkę na studiach i nabrałam pewności w programowaniu.”
Kolega wrzuca pull request z zapytaniem do raportu. Rzucasz okiem i od razu widzisz: złączenie z dwiema tabelami podrzędnymi, a potem SUM. Zostawiasz jeden komentarz. Oszczędzasz zespołowi trzech miesięcy złych liczb.
„Proszę napisać zapytanie, które zwróci klientów bez zamówień w tym roku.” Kiedyś byłoby to dziesięć minut ciszy. Teraz piszesz spokojnie i od razu dodajesz, jak Twoje zapytanie poradzi sobie z NULL-em. Widzisz, że rekruter podnosi wzrok znad kartki.
Przychodzi pytanie z finansów o liczby w raporcie. Otwierasz zapytanie i wiesz, gdzie spojrzeć: na złączenia, na NULL-e, na grupowanie. Po dziesięciu minutach odpisujesz, że liczby są dobre. I wiesz dlaczego. Zamykasz laptopa i idziesz w weekend.
To nie jest obietnica, że nigdy się nie pomylisz. To obietnica, że przestaniesz zgadywać. A to zmienia wszystko: jak piszesz, jak rozmawiasz z zespołem i jak śpisz w niedzielę wieczorem.
Skąd 4 320 zł: tyle kosztowałyby te same 36 godzin jako moje lekcje indywidualne (36 × 120 zł).
Gdybyś kupił te same godziny jako lekcje indywidualne, zapłaciłbyś 4 320 zł. I to bez komentarzy do zadań, bez grupy i bez nagrań.
W kursie płacisz 1 600 zł. To około 44 zł za godzinę zajęć na żywo, z komentarzem do każdego zadania w cenie.
A teraz porównaj to z kosztem jednego raportu, który przez trzy miesiące pokazywał złe liczby. Albo jednej rozmowy rekrutacyjnej oblanej na zadaniu z SQL. Albo jednej nocy spędzonej na szukaniu, gdzie migracja zgubiła wiersze.
przez 4 miesiące, razem 1 600 zł
albo całość od razu
Tak, chcę pisać SQL, za który mogę ręczyćJedna uczciwa uwaga: nie zobaczysz tu przekreślonej ceny ani promocji, która „kończy się o północy”. Cena jest jedna dla wszystkich. Ograniczenie jest inne i prawdziwe, piszę o nim niżej.
Zapisz się. Przez dwa tygodnie chodź na zajęcia, oddawaj zadania i czytaj moje komentarze. Jeśli uznasz, że to nie jest Twój sposób nauki, z jakiegokolwiek powodu, napisz jedną wiadomość. Pierwsza wpłata wróci na Twoje konto.
Bez tłumaczenia się i bez „ankiet rezygnacyjnych”. Całe ryzyko jest po mojej stronie.
Bo każde zadanie, które oddasz, czytam osobiście. Piętnaście osób to tyle, ile jestem w stanie co tydzień rzetelnie przeczytać i skomentować. Szesnasta osoba dostałaby gorsze komentarze, a na to się nie zgodzę.
Grupa startuje [DATA]. Lista zamyka się [DATA]. Wolnych miejsc zostało [X]. Termin kolejnej grupy nie jest jeszcze ustalony.
Nie będę Cię naciskać. Obie decyzje są w porządku, byle była Twoja. Jeśli jednak czytasz ten list aż tutaj, chyba wiesz, która jest dla Ciebie.
albo 1 600 zł jednorazowo · 14 dni na zmianę zdania
Do zobaczenia na pierwszych zajęciach,
Krystian
Krystian Kapuściński · Mistrzowska Szkoła Programowania
P.S. Jeśli przewinąłeś od razu na dół, oto skrót: 9 tygodni SQL-a na żywo, 18 tematów od podstaw do transakcji, indeksów i procedur. Każde Twoje zapytanie przeczytam i skomentuję. 400 zł miesięcznie przez 4 miesiące, 14 dni gwarancji, najwyżej 15 osób w grupie.
P.P.S. Pamiętasz zapytanie z NOT IN, które zwraca zero wierszy? Teraz, kiedy o nim wiesz, zajrzyj do swojego projektu i poszukaj takich zapytań. Jeśli znajdziesz choć jedno, wiesz już, po co jest ten kurs.
Tak. SQL jest ten sam bez względu na język, w którym piszesz aplikację. Kurs nie wymaga znajomości Javy.
Pierwsze tematy idą szybko, ale już w nich zadania dotykają pułapek, na których potykają się osoby piszące SQL od lat: NULL w warunkach, duplikaty po złączeniu, różnica między WHERE a HAVING. Druga połowa kursu to w całości materiał zaawansowany.
Dwa wieczory w tygodniu, po około 2 godziny zajęć, plus 2–3 godziny na zadania. Dni ustalamy wspólnie z grupą. Jeśli nie zdążysz na zajęcia, zostaje nagranie, a zadanie i tak dostaje komentarz.
[SYSTEM BAZY DANYCH]. Składnia, której się uczysz, przenosi się na inne popularne bazy, a różnice omawiamy na bieżąco.
Składni możesz. Z YouTube’a nauczysz się, jak napisać zapytanie. Nie dowiesz się, że Twoje konkretne zapytanie gubi wiersze, bo nikt go nie przeczyta. Ten kurs jest właśnie o tym drugim.
Zostaw numer, a oddzwonię. Opowiesz, jak dziś pracujesz z bazą danych, a ja szczerze powiem, czy ten kurs ma dla Ciebie sens. Jeśli nie ma, też to usłyszysz.
Albo zadzwoń sam: +48 609 336 448