01. Wszyscy ludzie są programistami, czyli zaczynamy.

Nie jest prawdą, że ludzie dzielą się na humanistów i tych z umysłami ścisłymi: słynnego “Małego księcia” napisał przecież lotnik, a “Alicję w krainie czarów” – matematyk.
Nie jest też prawdą, że to działa tylko w jedną stronę, więc że matematykom zdarzy się napisać wybitną powieść, ale powieściopisarzom na pewno nie zdarzy się dokonać złożonych obliczeń.
Wprost przeciwnie: dobrze skonstruowana fabuła wymaga zaangażowania wielu umiejętności z bardzo różnych dziedzin.

Dzisiaj chciałbym zachęcić Cię do rozpoczęcia własnej przygody z programowaniem.
Zresztą przygodę z programowaniem każdy i to dosłownie każdy rozpoczął już dawno temu, nawet sobie tego nie uświadamiając.
Przez większość czasu, wszyscy ludzie programują.

Weźmy dwa przykłady:

Przykład 1. Instrukcje warunkowe.

Ktoś zastanawia się nad spacerem po lesie w następny weekend:

Jeśli będzie ładna pogoda, to możnaby się przejść.
W przeciwnym wypadku, przecież nie muszę, mogę zrezygnować.
Jeżeli znów zrobią lockdowna, warto przygotować kanapki.
Jeśli nie, to może zje się jakiś obiad na koniec w znanej i lubianej restauracji.
Gdyby w tygodniu padało, może być dużo błota i kałuże, więc trzeba będzie wybrać krótszą trasę.
W przeciwnym wypadku, poszłoby się może tymi wąskimi ścieżkami na północ…

Takie planowanie, to jedna z podstawowych umiejętności używanych w programowaniu: pomyśl co może się w danej sytuacji wydarzyć i co można albo trzeba wtedy zrobić żeby osiągnąć zakładany cel.
W programie tego typu konstrukcje to instrukcje warunkowe: jeśli spełniony jakiś warunek, to wykonaj określoną czynność, albo sprawdź kolejny warunek, a w przeciwnym wypadku, zrób coś innego.

Przykład 2. Pętla.

Ktoś nalewając do wanny wody na gorącą i relaksującą kąpiel, może nawet nie myśli, że realizuje właśnie prosty, a niezbędny program:

  1. Sprawdź temperaturę wody.
  2. Jeśli jest za gorąca – odkręć bardziej zimną.
  3. W przeciwnym wypadku, gdy woda jest za zimna, odkręć bardziej ciepłą.
  4. Jeśli temperatura wody nie jest zadowalająca, to wróć do punktu 1.

W programowaniu nazywa się to pętlą – jakiś zbiór czynności, które muszą być powtarzane aż do chwili, gdy ich wykonywanie nie będzie dłużej potrzebne.

procedury

Zwykle nie analizujemy czynności składowych nalewania wody do wanny, traktujemy to działanie jako pojedynczą czynność samą w sobie.
Co więcej, wiadomo, że jest to tylko jeden z elementów składowych większej operacji pod tytułem kąpiel.

Na podobnej zasadzie, wyjazd na wakacje wymaga wykonania wielu jeszcze bardziej złożonych czynności:

  • Wybór miejsca, gdzie jedziemy;
  • Rezerwacja noclegów;
  • Zakup biletów;
  • Pakowanie plecaka;
  • Dotarcie na dworzec;
  • Przejazd;
  • Zainstalowanie się w miejscu docelowym;
  • Fajne spędzenie czasu;
  • Powrót;
  • Rozpakowanie plecaka.

Każdy z powyższych punktów składa się z wielu podpunktów i podpodpunktów, gdyby chcieć go dokładnie opisać, a to wszystko razem można zgrupować zbiorczo pod nazwą wyjazd na wakacje.

W programowaniu, takie grupy czynności nazywają się procedurami.

Każda procedura może wywoływać dowolnie wiele procedur składowych i być wywoływana przez procedury nadrzędne.

Programy i moduły

Program, to zbiór czynności, realizujących jakieś konkretne zadania. Opisany wyjazd na wakacje, to właśnie mógłby być program: banalnie prosty dla człowieka, niewykonalny aktualnie dla żadnej maszyny.

Jednak zawarte w programie “wakacje” elementy składowe, mogłyby być przydatne do innych celów, np. moglibyśmy chcieć kupić bilet dla kogoś, ułatwiając mu jego planowany wyjazd.

Zakup biletu, jak wiemy, jest dość złożoną procedurą, która wykorzystuje pewną ilość procedur składowych:

  • Sprawdź rozkład połączeń między miejscem startu i celu określonego dnia;
  • Określ, który środek transportu będzie najwygodniejszy pod względem ilości przesiadek i czasu oczekiwania na kolejnych etapach;
  • Dla wybranego środka transportu, przejdź na stronę jego operatora i dokonaj zakupu;
  • Jeśli operator nie udostępnia możliwości zakupu przez internet, dokonaj rezerwacji telefonicznej.

Gdybyśmy zakup biletu wyodrębnili z programu wakacje do osobnego kontenera, to moglibyśmy do niego sięgać w różnych programach, tam gdzie zakup biletu byłby potrzebny.

Takie kontenery z procedurami gotowymi do użycia przy różnych okazjach, to moduły.

Nie wiemy, jak nasze mózgi składują procedury zakupu biletów i pakowania plecaka, czy te czynności są pogrupowane w jakikolwiek logiczny sposób, a może znajdują się w artystycznym nieładzie, w którym tylko mózg właściciela jest w stanie się połapać?

Programiści aplikacji, mają pod tym względem trudniej, gdyż muszą trzymać się pewnych konwencji, aby wracając do swoich programów po latach, mieć szanse je poprawiać i rozwijać.
Jeśli do edycji jakiegoś programu zabierze się ktoś inny, też byłoby dobrze, gdyby miał szansę coś w nim skutecznie zmienić.

Prócz określonych konwencji umieszczania modułów w osobnych plikach, istnieją też w kodzie programu tzw. komentarze.
Są to teksty ignorowane przez urządzenie wykonujące program, ale przydatne dla człowieka, który przeglądałby kod programu bądź modułu.

Informacje, zmienne i stałe

Pod względem sposobu postępowania, zakup biletu z Warszawy do Gdańska nie różni się zbytnio od zakupu biletu z Opola do Poznania.
Zakup biletu na środę jest dokonywany praktycznie identycznie jak zakup na sobotę.

Procedura zakupu biletu jest jedna, ale może działać z kilkoma parametrami: miejscowość startu, cel, termin podróży, preferowany środek transportu, miejsce przy oknie, itd..
Zależnie od tych parametrów, sposób jej działania będzie nieco inny.

Zmienna to informacja przechowywana w programie pod jakąś nazwą, np. miejsce rozpoczęcia podróży.
Zmienne mogą istnieć jako pamięć całego programu, albo modułu, lub jako parametry przekazywane do procedur.

Miejscowość naszych wakacji jest istotna nie tylko dla procedury zakupu biletu stąd tam, ale też później, gdy tę samą procedurę będziemy wykonywać dla biletu powrotnego.

Nasze mózgi w sobie tylko znany sposób przechowują informacje i umożliwiają ich szybkie wyszukiwanie po nazwie.
Myślimy np. najlepsze wspomnienie z ostatnich wakacji i już w głowie rozwija się zbiór emocji, zapamiętanej sekwencji wydarzeń, osób, wrażeń zmysłowych, tworzących to najlepsze wspomnienie.

Programiści aplikacji i urządzeń, znowu mają gorzej, wszystkie używane przez nich zmienne nie tylko muszą mieć konkretne nazwy, ale też na ogół być konkretnego typu: liczba, kawałek tekstu, jakiś obrazek, fragment audio lub wideo…
Skoro wszyscy na co dzień operujemy dużo ciekawszymi zmiennymi, wielowymiarowymi, takimi jak choćby wspomnienia, to koncepcja informacji tak prostych jak zwykły kawałek tekstu, albo liczba, nie może być niczym trudnym.

Stałe w odróżnieniu od zmiennych, posiadają tylko jedną, stałą wartość, która nie może ulegać zmianie.
Przykładowo, jeśli w jakimś programie sprawdzalibyśmy, czy naciśnięto na klawiaturze klawisz Control, to moglibyśmy sprawdzać, czy zmienna zawierająca informację o wciśniętym klawiszu, ma wartość 17.
Dużo łatwiej i czytelniej, byłoby jednak zdefiniować stałą o nazwie KLAWISZ_CONTROL i wartości 17, a następnie sprawdzać, czy zmienna z wciśniętym klawiszem ma wartość równą stałej KLAWISZ_CONTROL.

Funkcje

Funkcja jest to procedura, która zwraca jakąś informację.

Zatem zakup biletu, nie jest procedurą, a funkcją, która zwraca informację o zakupionym bilecie, albo informację, że nie udało się go kupić.

Funkcje mogą kojarzyć się z matematyką i jest to słuszne skojarzenie.
Matematyczna funkcja dla wartości, czyli parametru x, zwracała wartość y zależną od x.
Para wartości x (dany parametr) i y (zwrócona dla niego wartość), to ściśle określony punkt w układzie współrzędnych, przez który ta funkcja przebiega.

Podsumowanie

Raczej nie zastanawiamy się, że planując wakacyjny wyjazd, a później dokładnie pilnując kolejnych elementów tego planu, tam gdzie potrzeba wprowadzając szybkie poprawki i ulepszenia, usuwając elementy, które stały się nieaktualne lub zbędne, jesteśmy programistami, a jednocześnie jednostkami wykonującymi to oprogramowanie.

Programujemy nie tylko samych siebie, ale też siebie na wzajem.

Rodzice programują swoje dzieci (“Umyj rączki, powiedz panu dzień dobry”), ale też dzieci programują swoich rodziców, (“Jeśli nie kupisz mi tego ciastka, popsujesz mi dzień.”).

Nauczyciel, planujący i koordynujący pracę jakiejś klasy, albo szef robiący to samo z podległymi mu pracownikami, to też muszą być świetni programiści, żeby programowany przez nich zespół osób osiągnął dobre efekty.

Wspominany na początku autor powieści, tworząc fabułę, chce zaprogramować czytelnika, który pod wpływem czytanych kolejnych zdań tekstu, będzie przeżywał różne emocje, a na podstawie dostarczanych wybiórczo przez autora informacji, będzie próbował rozwikłać zagadki fabuły, chociaż na końcu i tak zapewne okaże się, że najważniejszego elementu tej łamigłówki mu brakowało, albo został podany w sposób łatwy do przegapienia.

Jeśli ktoś nadal twierdzi, że nie jest programistą, niech się zgłosi w komentarzu do tego wpisu.

5 komentarzy

  1. Nie znam wielu podręczników programowania, ale to pierwszy, który nie zaczyna się od Hello world i super! jeśli tak dalej wam pójdzie to jest szansa na świetny materiał!

  2. Teoretycznie, czyli nie zajmując się na razie tym jak to w rzeczywistości jest zrobione w Eltenie, mogłoby tak być, że:
    Menu programu to byłaby procedura główna, wyświetlająca jakieś opcje i obsługująca klawisze skrótu.
    Jeśli wybrano opcję "Forum" to uruchom procedurę forum.
    Jeśli wybrano opcję "Blogi", uruchom procedurę Blogi.
    Procedura forum mogłaby budować swoje podmenu:
    Jeśli wybrano opcję "Moje śledzone wątki" uruchom procedurę wyświetl śledzone wątki.
    W przeciwnym wypadku, jeśli wybrano Grupy popularne wśró moich znajomych, uruchom procedurę Wyświetl grupy popularne wśród znajomych użytkownika.

    Procedura "moje śledzone wątki" mogłaby wyglądać tak:
    – Pobierz z serwera listę śledzonych przez użytkownika wątków;
    jeśli nie ma żadnych śledzonych, wypowiedz komunikat "Brak śledzonych wątków".
    w przeciwnym wypadku, czyli jeśli użytkownik ma jakieś śledzone wątki:
    – utwórz kontrolkę interfejsu listy;
    – umieść na liście informacje o wątkach pobrane z serwera.
    – Po naciśnięciuEntera lub kliknięciu jakiegoś wątku z listy, uruchom procedurę "wyświetl wątek forum".
    I tak dalej.

  3. Nie twierdzę, że nie jestem programistą, bo to co piszesz, jest bardzo logiczne. Chciałem jednak zapytać. Tak jak np. Elten ma kategorię Forum, Blogi, Wiadomości, Co nowego i tak dalej. Te kategorie są w pewnym sensie kontenerami. Dobrze rozumiem? Pomiędzy nimi są oczywiście procedury mniej lub bardziej nadrzędne. Dalej już tylko instrukcje warunkowe i tp.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *