Na czym polega programowanie

Do napisania tego tekstu przygotowywałem się od dłuższego czasu. Bardzo często ktoś totalnie niezwiązany z branżą IT pyta mnie, na czym właściwie polega moja praca i to całe programowanie. O pracy, czyli o tym jak przesiaduję przy komputerze i w zasadzie nie wiadomo co robię, chciałbym napisać jeden z moich kolejnych tekstów. Dziś skupię się na podstawach podstaw, czyli jak rozmawiać z Panem Komputerem.

Ready, steady, go!

Wbrew pozorom bardzo trudno jest wyjaśnić na czym polega programowanie tak totalnie od podstaw. No bo to nic innego jak rozmowa z komputerem, a może raczej korespondencja... Wysyłanie zlecenia, szydełkowanie, budowanie domu (czasem stawianie namiotu) i gotowanie w jednym. Na początek wytłumaczę niezbędne moim zdaniem pojęcie, bez którego trudno będzie pójść dalej.

Algorytm

Różne źródła podają zazwyczaj mniej więcej podobną definicję, że to skończony i uporządkowany ciąg jasno zdefiniowanych, prostych czynności koniecznych do wykonania jakiegoś zadania, osiągnięcia celu albo rozwiązania problemu. Jeżeli miałbym wskazać przykład z życia codziennego, algorytmem jest przepis kulinarny, który krok po kroku prowadzi nas od zbioru warzyw i przypraw do gara pełnego kapuśniaku. Albo np. instrukcja użycia kosy spalinowej, która prowadzi dosłownie kroczek po kroczku z jednego krańca chwastowego buszu aż na drugi koniec skoszonego trawnika.

Ważne jest także aby dobrze przygotowany algorytm nie pozostawiał wątpliwości. Jeżeli pojawia się pewna dobrowolność to powinna być ona obwarowana konkretnymi warunkami, np. “jeśli lubisz gdy mięso jest wypieczone, pozostaw potrawę w piecyku o pięć minut dłużej”. Właśnie to “jeśli” jest tutaj absolutnie kluczowe. Gdy Twoim celem jest napełnienie pustego wiadra piaskiem posługując się łopatą, to stwierdzenie “napełnij wiadro piaskiem” może być niewystarczające. Nieco bardziej szczegółowy algorytm może wyglądać następująco:

  1. Nabierz łopatą maksymalną ilość piasku i wsyp do wiadra.
  2. Jeśli wiadro nie jest pełne wróć do punktu 1, w przeciwnym wypadku idź do 3.
  3. Wiadro jest pełne.

Chyba trudno o bardziej łopatologiczny przykład algorytmu.

Co pan na to Panie Komputerze

No właśnie? Czy komputer nas zrozumie gdy w taki sposób opiszemy mu nasze zamiary? I tak i nie. Być może technologia prezentowana w filmach o Ironmenie i Avengersach nie jest jeszcze dostępna dla wszystkich domorosłych napełniaczy wiader, ale nie trudno wyobrazić sobie jak Tony Stark (nie nie nie! nie ten z “Gry o tron”, co z wami ludzie?) mówi do sztucznej inteligencji o imieniu Jarvis: “Napełnij mi to wiadro piachem” i wtedy bez wahania autonomiczny kombinezon podnosi koparkę i zasypuje wiaderko, wraz z całą piaskownicą, czterema tonami piasku.

Swoją drogą bez względu na stopień złożoności Jarvisa, na naprawdę niskim poziomie, mamy tu nadal do czynienia z bardzo dużą ilością warunków i zapętleń, czyli wspomnianych wcześniej “jeśli” oraz “idź do punktu X”. A bardzo początkująca wersja Jarvisa ukryta pod nazwa “Asystent Google” jest osiągalna dla większości użytkowników smartfonów. Na polecenie “OK Google Oblicz 4 plus 7 plus 15 plus 98” otrzymasz odpowiedź “((4 + 7) + 15) + 98 = 124”. Zwróć uwagę, że Google posłużył się algorytmem, w którym za każdym razem dodawał jedną kolejną liczbę (zdradzają to nawiasy) oraz zakończył, gdy nie miał już więcej liczb do dodania.

Wejście i wyjście

Możemy uogólnić, że każdy program realizowany przez komputer ma za zadanie przetworzyć dane wejściowe i zwrócić dane wyjściowe. W przypadku przepisu kulinarnego danymi wejściowymi jest zbiór warzyw i przypraw, czas gotowania, temperatura pieczenia. Natomiast wynikiem działania jest zupa. W przypadku zadania, które przed chwilą zadałem Asystentowi Google, dane wejściowe to zbiór liczb całkowitych, natomiast dane wyjściowe to ich suma.

Dane wejściowe mogą być wprowadzone do programu na wiele sposobów, na przykład z klawiatury przez użytkownika, gdy program zasygnalizuje, że to już najwyższa pora podać te liczby. Następnie przetworzone dane są zwracane na “wyjście”, czyli np. są wyświetlone na ekranie twojego komputera lub smartfona w różnej formie, w zależności od charakteru aplikacji, która została użyta. Wyświetlona strona internetowa to także wynik działania jakiegoś programu. Ale również wynik operacji matematycznych wyświetlony na niewielkim ekranie tradycyjnego kalkulatora to pełnoprawne dane wyjściowe.

So you want to be a programmer?

No dobrze panie kierowniku, ale co z tym programowaniem? Jak pisać program? Tutaj wkraczają języki programowania. Na razie przyjmijmy, że język do rozmowy z komputerem dobieramy w zależności od okoliczności. Najważniejsze jest jednak to, że wszystkie języki mają pewne cechy wspólne. Praktycznie w każdym języku jesteś w stanie zrealizować “jeśli” oraz wykonać zapętlenie (o których pisałem wcześniej), a co za tym idzie zrealizować algorytm. Bingo! Języki programowania służą do zapisywania algorytmów w sposób zrozumiały dla komputera. Poprawnie napisany program jest przetwarzany przez komputer, który znając kolejne kroki do wykonania i mogąc podejmować decyzję o następnych, realizuje dostarczone mu zadania i zwraca wyniki.

Aby nie przeciążyć zanadto czytelnika, w tym miejscu muszę się zatrzymać. Na tym etapie wiesz już, że chcąc napisać program komputerowy potrzebujesz algorytmów, które następnie zapiszesz przy pomocy wybranego języka programowania. O tym jak dobieramy język i od czego to zależy postaram się napisać już niebawem.