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

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

Jak myśleć jak programista? Zobacz, jak podzielić problem na kroki, napisać pseudokod i sprawdzić plan, zanim przełożysz go na JavaScript.

Spis treści

Jeśli znasz już pętle, zmienne i instrukcje warunkowe, ale trudno Ci samodzielnie rozwiązać zadanie, warto poćwiczyć planowanie. Znajomość składni pomaga zapisać rozwiązanie, ale najpierw trzeba ustalić, co program ma zrobić. Pokażę Ci, jak podzielić problem na kroki, sprawdzić je na przykładzie i dopiero potem przejść do kodu.

Jak zaplanować rozwiązanie

Myślenie programistyczne polega między innymi na dzieleniu problemu na małe, jednoznaczne kroki, które możesz sprawdzić osobno.

  1. Ustal dokładnie, jakie dane dostajesz na starcie i co ma być wynikiem.
  2. Rozpisz kolejne czynności po polsku, żeby były zrozumiałe dla drugiej osoby.
  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.

Dlaczego warto zaplanować kroki przed pisaniem kodu

Przy krótkim zadaniu możesz od razu zobaczyć rozwiązanie i zapisać je w kodzie. W większym projekcie warto najpierw ustalić kolejność działań. Bez planu łatwo poprawiać jeden fragment tak, że przestaje pasować do pozostałych.

Program zrobi tylko to, co zapiszesz, więc nie pomijaj kroków, które dla człowieka są oczywiste. Możesz potraktować plan jak instrukcję parzenia herbaty. Nalej wody do czajnika, włącz go, włóż torebkę do kubka, zalej wrzątkiem i odczekaj trzy minuty. Podobnie rozpisz zadanie programistyczne, a potem sprawdź, czy w tej kolejności niczego nie brakuje.

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.

Taki zapis to pseudokod. Opisujesz w nim działanie programu bez trzymania się składni konkretnego języka. Masz już plan rozwiązania, który możesz przełożyć na JavaScript, Pythona czy Javę, a potem przetestować.

Od pseudokodu do JavaScriptu

Zapiszmy teraz te kroki w JavaScript:

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

Komentarze pokazują, jak kod odpowiada kolejnym krokom planu. Najpierw zapamiętujemy ocenę, potem porównujemy ją z pozostałymi i w razie potrzeby zmieniamy wynik. Możemy zapisać ten sam algorytm w Pythonie. Składnia będzie inna, ale kolejność działań pozostanie taka sama.

Sześć pytań przed otwarciem edytora

Jeśli nie wiesz, od czego zacząć nowe zadanie, odpowiedz po kolei na te pytania:

  1. Jakie dokładnie dane wejściowe otrzymuje program?
  2. Co ma być wynikiem?
  3. Jak wygląda rozwiązanie dla prostego przykładu?
  4. Jakie nietypowe dane lub sytuacje mogą się zdarzyć?
  5. Który fragment logiki mogę napisać i przetestować w pierwszej kolejności?
  6. Jak sprawdzę, czy program spełnia wymagania?

W zadaniu z ocenami taką nietypową sytuacją, czyli przypadkiem brzegowym, jest pusta tablica. Kod wyżej odwołuje się do grades[0], co przy pustej liście zwróci undefined. Przed napisaniem funkcji ustal, jak ma się wtedy zachować. Może na przykład zgłosić błąd albo zwrócić null.

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

Jeśli korzystasz ze sztucznej inteligencji podczas nauki, pokaż jej swój pseudokod i zapytaj, jakich kroków w nim brakuje. Możesz użyć takiego polecenia:

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.

Potem sprawdź uwagi modelu na własnych przykładach. W ten sposób uczysz się oceniać rozwiązania i nadal samodzielnie piszesz kod.

Jak to trenować i co psuje trening

Przed rozpoczęciem zadania rozpisz co najmniej trzy kroki po polsku. Na początku może to zajmować więcej czasu niż przejście prosto do edytora, ale za to zauważysz niejasności, jeszcze zanim napiszesz kod.

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

  • Pisanie kodu przed zrozumieniem problemu. Jeśli trudno Ci opisać rozwiązanie, wróć do treści zadania i prostego przykładu.
  • Próba rozwiązania wszystkiego naraz. Dziel duży problem na małe kroki i testuj każdy po kolei.
  • Pomijanie komunikatów o błędach. Przeczytaj komunikat i sprawdź wskazane miejsce w kodzie. Tam zacznij szukać przyczyny.
  • Kopiowanie kodu bez sprawdzenia, jak działa. Przed użyciem gotowego fragmentu prześledź jego działanie, żeby później umieć go zmienić.

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.

Ćwicz na własnym projekcie

Na indywidualnych zajęciach wspólnie planujemy rozwiązanie, zapisujemy je na kartce i sprawdzamy w kodzie. Pracujemy też nad zadaniami z Twojego projektu. Zobacz, jak wygląda nauka programowania ze mną, albo odezwij się i opowiedz, nad czym teraz pracujesz.

Kiedy podstawy będą już pewne, sprawdź kurs Full Stack z AI DevChallenge i przećwicz je przy większym projekcie. Zaczynamy od gotowego szkieletu projektu i wspólnie budujemy aplikację z AI, którą na koniec udostępnisz w sieci.

Mateusz Karwowski
Mateusz Karwowski

Jestem programistą i nauczycielem, magistrem inżynierem informatyki po Politechnice Warszawskiej. Uczę programowania i matematyki na zajęciach 1:1. Wspólnie rozwiązujemy zadania, piszemy kod i wyjaśniamy kolejne kroki.

Ustalmy, czego chcesz się nauczyć w programowaniu

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