Przejdź do treści
Programowanie Aktualizacja: 6 min czytania

Jak myśleć jak programista? Najpierw problem, potem kod

Jak myśleć jak programista? Rozbijanie problemu na kroki, pseudokod i nawyki, dzięki którym kod staje się formalnością. Praktyczny przewodnik.

Spis treści

Znasz już pętle, zmienne i instrukcje warunkowe. Otwierasz edytor, patrzysz na migający kursor i w głowie masz kompletną pustkę. Składnię języka znasz, ale nie wiesz, jak złożyć ją w działające rozwiązanie. To nie jest brak wrodzonego talentu do technologii. To brak umiejętności, o której kursy online wspominają zaskakująco rzadko: myślenia jak programista. Da się to wyćwiczyć jak każdą inną sprawność, a prawdziwy trening zaczyna się na kartce papieru, na długo przed wciśnięciem pierwszego klawisza.

Zanim dotkniesz klawiatury

Myślenie programistyczne to sztuka zamiany mglistego problemu w sekwencję małych, jednoznacznych kroków, które da się przetestować osobno.

  1. Zdefiniuj dokładnie, jakie dane dostajesz na starcie i co ma być wynikiem.
  2. Rozpisz kolejne czynności po polsku, tak jakbyś tłumaczył je drugiemu człowiekowi.
  3. Przetestuj ten plan w myślach lub na kartce na jednym prostym przykładzie.
  4. Dopiero teraz zamień kroki na kod i sprawdzaj każdy fragment z osobna.

Zły nawyk numer jeden: kodowanie od razu

Klasyczny błąd początkujących wygląda niemal zawsze tak samo: przeczytać treść zadania i od razu rzucić się do pisania kodu, licząc na to, że rozwiązanie samo jakoś ułoży się w trakcie. Przy mikroskopijnych zadaniach szkolnych to czasem zadziała, więc łatwo nabrać fałszywego przekonania, że tak wygląda praca programisty. Jednak przy pierwszym bardziej złożonym projekcie kod rozrasta się we wszystkie strony i po godzinie nikt nie wie, co w nim działa, a co jest przypadkową łatą.

Komputer jest do bólu dosłowny. Nie domyśli się kontekstu, nie odczyta Twoich intencji i nie przeskoczy kroku, który dla człowieka wydaje się oczywisty. Gdy tłumaczysz komuś, jak zaparzyć herbatę, nie rzucasz ogólnika, tylko podajesz konkretne czynności: nalej wody do czajnika, włącz go, włóż torebkę do kubka, zalej wrzątkiem, odczekaj trzy minuty. Każdy ruch jest prosty i jednoznaczny. Praca developera polega w ogromnej mierze na takim precyzyjnym myśleniu, a samo stukanie w klawiaturę to już tylko techniczna formalność.

Najpierw po polsku, dopiero potem w kodzie

Weźmy proste zadanie: znajdź najwyższą ocenę na liście wyników. Zanim napiszesz function albo otworzysz nawias klamrowy, rozpisz plan zwykłym językiem:

  1. Przejrzyj oceny po kolei od pierwszej do ostatniej.
  2. Zapamiętaj pierwszą jako „najwyższą dotychczas”.
  3. Przy każdej kolejnej ocenie sprawdź, czy jest większa od tej zapamiętanej.
  4. Jeśli tak, zastąp zapamiętaną wartość nową oceną.
  5. Po przejrzeniu całej listy zapamiętana liczba to Twój wynik.

To jest właśnie pseudokod: logika zrozumiała dla człowieka, wolna od reguł składniowych konkretnego języka. W tym momencie zadanie jest już w zasadzie rozwiązane. Teraz wystarczy przetłumaczyć je na JavaScript, Pythona czy Javę.

Przełożenie na kod: najprostszy krok

Mając gotowy plan w punktach, kod pisze się niemal linijka w linijkę:

const grades = [3, 5, 2, 4, 5, 1];

let best = grades[0];           // zapamiętaj pierwszą jako najlepszą dotychczas

for (const grade of grades) {   // przejrzyj wszystkie po kolei
  if (grade > best) {           // czy kolejna jest wyższa?
    best = grade;               // jeśli tak, podmień
  }
}

console.log(best); // 5

Każdy komentarz w kodzie odpowiada jednemu punktowi z naszej listy. Trudność polegała na wymyśleniu logiki, a nie na wpisaniu pętli for. Gdy masz poukładane kroki, zmiana języka z JavaScriptu na Pythona to tylko kwestia innej składni: istota myślenia pozostaje identyczna.

Sześć pytań przed otwarciem edytora

Gdy stajesz przed nowym problemem i nie wiesz, jak zacząć, odpowiedz sobie po kolei na te pytania:

  1. Jakie dokładnie dane wejściowe otrzymuje program?
  2. Co precyzyjnie ma być rezultatem końcowym?
  3. Jak wyglądałoby rozwiązanie dla najprostszego, wręcz banalnego przykładu?
  4. Jakie nietypowe przypadki brzegowe mogą zepsuć ten kod?
  5. Który fragment logiki mogę napisać i przetestować w pierwszej kolejności?
  6. Po czym poznam, że program działa w stu procentach poprawnie?

W zadaniu z ocenami takim przypadkiem brzegowym jest pusta tablica. Kod wyżej odwołuje się do grades[0], co przy pustej liście zwróci undefined. Takie zachowanie trzeba ustalić z góry: czy funkcja ma rzucić błąd, czy zwrócić null? To odróżnia pisanie kodu na ślepo od świadomego projektowania rozwiązania.

AI może sprawdzić plan, ale nie powinno go zastępować

Gdy korzystasz ze sztucznej inteligencji, nie proś jej od razu o gotowy kod całej funkcji. Zamiast tego pokaż swój pseudokod i poproś o wyłapanie dziur logicznych. Dobry prompt wygląda tak:

Chcę znaleźć najwyższą ocenę na liście.
Mój plan:
1. Zapamiętuję pierwszą ocenę jako najlepszą.
2. Porównuję z nią każdą kolejną wartość.
3. Podmieniam zapamiętaną liczbę, gdy napotkam wyższą.

Nie pisz kodu. Wskaż przypadki brzegowe i luki w moim rozumowaniu.

Taka rozmowa z modelem trenuje Twój mózg. Jeśli pozwolisz, żeby AI pisało wszystko za Ciebie od pierwszego kroku, odbierasz sobie najważniejszą okazję do wykształcenia programistycznej intuicji.

Jak to trenować i co psuje trening

Zasada jest prosta: przed napisaniem czegokolwiek w edytorze, rozpisz co najmniej trzy kroki po polsku. Na początku wyda Ci się to sztuczne, ale po dwóch tygodniach stanie się automatycznym odruchem.

Uważaj na cztery najczęstsze pułapki:

  • Pisanie kodu przed zrozumieniem problemu. Jeśli nie potrafisz wytłumaczyć rozwiązania słowami, nie napiszesz go w kodzie.
  • Próba rozwiązania wszystkiego naraz. Dziel duży problem na mikro-kroki i testuj każdy po kolei.
  • Panika przy pierwszym błędzie. Czerwony komunikat w konsoli to precyzyjna wskazówka, w której linijce komputer zgubił sens, a nie wyrok.
  • Kopiowanie kodu bez dociekania, dlaczego działa. Gotowiec z sieci daje chwilową ulgę, ale przy pierwszej konieczności modyfikacji zostawia Cię bezradnym.

Jeśli dopiero stawiasz pierwsze kroki w programowaniu, wpleć ten nawyk w plan nauki na pierwsze tygodnie programowania. Zapisuj dane wejściowe, oczekiwany wynik i plan działania przed każdym ćwiczeniem.

Trenuj to na realnych problemach

Na indywidualnych zajęciach nie zaczynamy od wkuwania definicji na pamięć, tylko od rozpracowywania logiki: na kartce, w kodzie i przy realnych wyzwaniach. Zobacz, jak wygląda nauka programowania ze mną, albo odezwij się i opowiedz, nad czym aktualnie pracujesz.

A jeśli opanujesz podstawy i zechcesz sprawdzić to myślenie w pełnym projekcie, zobacz kurs DevChallenge, w którym startujemy z gotowego szkieletu projektu i doprowadzamy kompletną aplikację z AI do działającej wersji w sieci.

Mateusz Karwowski
Mateusz Karwowski

Programista (mgr inż. informatyki, PW) i nauczyciel. Uczę programowania i matematyki 1:1: projektowo, po ludzku i bez wkuwania.

Następny krok

Zacznijmy od Twojego celu w programowaniu

Napisz, czego potrzebujesz. Odpowiem osobiście, a jeśli mogę pomóc, zaproponuję krótką bezpłatną rozmowę.