Drodzy, dzisiejsze rozważania pragnę zadedykować mojemu ulubionemu Wydziałowi Matematyki, Fizyki i Chemii Uniwersytetu Śląskiego, który wpoił mi sporą część podstaw programowania oraz algorytmów. Wpis ten powstał właśnie dlatego, że w mojej głowie często pojawiały się pomysły na różne aplikacje, sporą część funkcji ale… bez konkretnego kodu.

Możecie uznać to za zboczenie zawodowe, gdy budzicie się rano i macie w głowie spory kawałek kodu, tak naprawdę, dosłownie „wyśniony”. Często jest to coś, co tylko przypomina kod… pseudokod!

Czym jest pseudokod?

Nie będzie to zbytnio odkrywczym, jeśli powiem Wam, że pseudokod to po prostu coś, co imituje kod, ale tak naprawdę nie jest żadnym językiem programowania. W prawdzie stosujemy w nim ogólne paradygmaty programowania, jednak nie odnosimy się do określonego języka.

Pseudokod jest więc narzędziem, pozwalającym nam określić sposób działania jakiejś funkcji lub całego programu, niezależnie od języka, w którym go napiszemy. Dla porównania możemy przedstawić go jako UML ale bez grafów.

Jak wygląda pseudokod?

Pseudokod nie jest niczym usystematyzowany – wręcz przeciwnie. Jego zapis jest dowolny, jednak należy pamiętać, by w prosty sposób mógł on opisywać problem, z jakim się spotykamy oraz aby inni programiści mogli go bez problemu zrozumieć.

Pseudokod można więc porównać z przepisem na wykonanie ciasta. Mamy informacje o składnikach, proporcjach ale bez określenia, czy mamy stosować mąkę firmy A, czy jednak firma B posiada w swojej ofercie bardziej dostosowany produkt do naszego „ciasta”

Sposób zapisu pseudokodu

Jak już wspomniałem, sposób zapisu pseudokodu może być całkowicie dowolny, przyjmijmy jednak, – jako przykład – że wygląda on tak:

zmienna(INT) a = 3;
zmienna(INT) b = 6;
zmienna(INT) c = wejście_funkcji()

jeżeli (a+b+c==9)
      zwróć prawda;
inaczej
      zwróć fałsz;

Opisany pseudokod jest banalnym przykładem oczywiście, jednak w bardziej złożonych problemach zdecydowanie może nam pomóc na na zasadzie rozbicia problemu na mniejsze kawałki.

Złożone problemy

Zakładając, że przed nami mamy bardziej złożony problem pobrania danych z sieci za pomocą urządzenia mobilnego:

Etap 1

pobierz(lista_newsletter) {
      zmienna(TABLICA) lista_adresów;
      zwróć lista_adresów;
}

Etap 2

jeżeli(JEST_INTERNET) {
      pobierz(lista_newsletter) {
            zmienna(TABLICA) lista_adresów;
            zwróć lista_adresów;
      }

} inaczej {
      zwróć NULL;
}

Etap 3

jeżeli(JEST_INTERNET) {
      pobierz(lista_newsletter) {
            zmienna(TABLICA) lista_adresów;
            zmienna(DESKRYPTOR_POŁĄCZENIA) polaczenie = nawiąż_połączenie_HTTP(serwer);
            jeżeli (DESKRYPTOR_POŁĄCZENIA == NULL) zwróć NULL;
            zmienna(STRING) dane = pobierz_dane_z_połączenia(polaczenie);
            jeżeli (dane == NULL lub dane.długość < 1) zwróć NULL;
                  spróbuj {
                  lista_adresów = parsuj_dane(dane);
                  } złap (zmienna(WYJĄTEK) błąd) {
                  loguj( błąd);
                  zwróć NULL;
                  }
            }

                  zwróć lista_adresów;
      }

} inaczej {
      zwróć NULL;
}

Bliżej algorytmów niż kodowania

To prawda, tworzenie pseudokodu to raczej algorytmika niż programowanie. To opis sposobu rozwiązania problemu za pomocą określonych, prostych instrukcji, niż budowania samego kodu programu.

Czy można programować bez użycia pseudokodu? Oczywiście! Jednak pseudokod, który uzupełni np. schemat UML większego problemu, doskonale spisze się w przypadku wytropienia błędów logicznych tworzonych, często bardzo złożonych algorytmów. Musimy bowiem pamiętać o tym, że programista nie tylko może popełnić błędy związane z semantyką języka, obsługą rezerwowania i zwalniania pamięci ale również błędy logiczne.

Przygotowywanie pseudokodu jest także doskonałym sposobem szybkiego zapisu pomysłu w chwili, gdy ten znajdzie się nagle w naszej głowie. Mamy tu dane wejściowe, dane wyjściowe oraz algorytm bazujący na tych danych i koniecznych do jego wykonania zestawach zmiennych środowiskowych – jednym słowem wszystko, o czym warto pamiętać podczas tworzenia uniwersalnego oprogramowania.

Pamiętajmy, że jesteśmy tylko ludźmi, a jako tak ułomny twór możemy popełniać błędy. Dobrze jest więc zachować dokumentację właśnie w formie pseudokodu, aby na spokojnie, z kartką i długopisem prześledzić w fotelu poprawność naszego myślenia.

      Zachęcam Was do używania pseudokodu, jest to naprawdę doskonałe narzędzie, które zapewni Wam o wiele więcej wolnego czasu poprzez eliminację godzin koniecznych na debugowanie czasami banalnych funkcji z nieznanym, idiotycznym błędem.

Pozdrawiam, M.M.