Linus Torvalds, twórca systemu Linux, powiedział kiedyś, że programowanie to mówienie komputerowi, co ma robić. Ta wyjątkowo prosta definicja jest zdecydowanie moją ulubioną, bo właśnie tym jest programowanie. Dajemy komputerowi jakieś instrukcje do wykonania, a komputer je wykonuje, dokładnie tak, jak je zapisaliśmy. Dzięki programowaniu możemy powiedzieć komputerowi, żeby coś wyświetlił, policzył, wydrukował czy wysłał. Na razie może brzmieć to jak czarna magia, ale pomyślmy przez chwilę o grach komputerowych.
Wyobraźmy sobie grę akcji, w której biegamy, strzelamy, rozmawiamy, zdobywamy punkty doświadczenia, bronie, wszystko wydaje się więc bardzo skomplikowane, ale weźmy na tapet podstawową mechanikę i rozłóżmy ją na czynniki pierwsze:
- wciskamy strzałkę i postać porusza się w wybraną stronę
- wciskamy klawisz strzału i JEŻELI mamy naboje to strzelamy do przeciwnika
- wbiegamy pomiędzy wrogów, zaczyna się walka i DOPÓKI nasz przeciwnik żyje, strzela do nas i próbuje nas zabić
Słowa JEŻELI i DOPÓKI są wyróżnione, ponieważ pełnią one w programowaniu bardzo istotną rolę.
Czym jest programowanie?
Generalnie cała idea programowania opiera się na trzech prostych konceptach:
- rzecz numer 1 – instrukcje do wykonania czyli właśnie takie rzeczy jak na wciśnięcie klawisza PRZESUŃ postać w wybraną stronę, na wciśnięcie ikony ZAPISZ plik, na wciśnięcie innej ikony WYDRUKUJ dokument
- rzecz numer 2 – tak zwane instrukcje warunkowe czyli jak sama nazwa wskazuje, instrukcje, które wykonujemy, gdy spełniony zostanie jakiś warunek, to jest właśnie to JEŻELI. Wciskamy klawisz strzału i JEŻELI mamy naboje to STRZELAMY do przeciwnika, JEŻELI NIE mamy, WYŚWIETLAMY informację “brak amunicji”. Albo wciskamy strzałkę na klawiaturze, JEŻELI jest to strzałka w lewo, PRZESUWAMY postać w lewo, JEŻELI jest to strzałka w prawo, PRZESUWAMY postać w prawo.
- rzecz numer 3 – tak zwane pętle, dzięki którym zdefiniowane instrukcje wykonujemy albo określoną ilość razy albo DOPÓKI spełniony jest jakiś warunek. Czyli jeżeli mamy grę, w której losujemy liczbę od 1 do 100, a następnie gracz musi ją odgadnąć, możemy użyć pierwszego rodzaju pętli i zapytać gracza o wylosowaną liczbę na przykład pięć razy. Możemy też użyć drugiego rodzaju pętli i pytać go tak długo, DOPÓKI nie odgadnie.
I tak właśnie wygląda cała logika w programowaniu. Mówimy komputerowi jakie instrukcje ma wykonać i jakie warunki muszą być spełnione, żeby te instrukcje wykonał. Oczywiście te trzy rzeczy – instrukcje warunkowe, pętle oraz same instrukcje – w różny sposób łączymy ze sobą, na przykład tworząc pętlę wewnątrz pętli, dodając instrukcje warunkowe wewnątrz pętli lub uruchamiamy pętlę, gdy wcześniej zostanie spełniony jakiś warunek, ale to wszystko. W programowaniu nie ma nic więcej. Czegokolwiek nie chcielibyśmy zaprogramować, zrobimy to przy użyciu tylko tych trzech konceptów.
Czym jest algorytm?
Warto tutaj również wyjaśnić pojęcie algorytmu, bo tak właśnie nazywamy ten zestaw instrukcji dla komputera. Algorytm to nie jest pojęcie powiązane tylko z komputerami, bo algorytmy znajdziemy dosłownie na każdym kroku w naszym życiu. Gdy gotujemy obiad zgodnie z przepisem znalezionym w internecie lub w książce kucharskiej, wykonujemy kolejne kroki algorytmu – weź kilogram ziemniaków, obierz ziemniaki, JEŻELI jesz mięso dorzuć mięso, a w przeciwnym wypadku wybierz wegański odpowiednik, zmieszaj całość i gotuj DOPÓKI włączony stoper nie pokaże 15 minut.
Albo gdy rano dzwoni budzik, ale chcemy jeszcze chwilę pospać i ustawiamy tryb drzemki – weź telefon do ręki, wyłącz budzik i powtórz to wszystko trzykrotnie, wstań, umyj zęby, pójdź do kuchni, zastanów się czy wolisz kawę czy herbatę, JEŻELI herbatę, zagotuj wodę, JEŻELI kawę to zdecyduj się czy wolisz kawę z ekspresu czy rozpuszczalną, JEŻELI rozpuszczalną, zagotuj wodę, JEŻELI z ekspresu, uruchom ekspres, i tak dalej, i tak dalej.
Ten ostatni algorytm w bardzo fajny sposób zilustrowałem w filmie Czym jest programowanie?. Zachęcam do obejrzenia, bo nie tylko przekazuję w nim konkretną wiedzę, ale możecie też w nim zobaczyć moje wyjątkowe umiejętności aktorskie 🙂
W jaki sposób piszemy instrukcje dla komputera?
To teraz jeszcze pytanie, w jaki sposób te instrukcje dla komputera – co komputer ma zrobić i kiedy – piszemy. Komputer nie rozumie takiego języka, którym posługujemy się my, tak naprawdę komputer rozumie tylko dwie informacje – 1 lub 0 oznaczające czy w układzie płynie lub nie płynie prąd – więc musimy podejść do tego odrobinę inaczej. Tutaj nie będziemy wchodzić zbyt mocno w szczegóły działania komputerów, w takim bardzo dużym skrócie powiem jedynie, że każdy komputer składa się z tysięcy małych urządzeń zwanych tranzystorami, których zadaniem jest przetwarzanie płynącej przez nie energii elektrycznej i wysyłając tę energię czyli 1 – lub nie wysyłając czyli 0 – przekazujemy komputerowi konkretne informacje. Ten ciąg zer i jedynek płynących w układzie może reprezentować tekst, obraz czy dźwięk. Tak naprawdę wszystko co widzimy i robimy na komputerze na pewnym poziomie jest właśnie tym ciągiem zer i jedynek.
W programowaniu na szczęście tych zer i jedynek nie piszemy. To co robimy zamiast tego, to wybieramy jakiś język programowania – o wyborze języka programowania piszę tutaj – i w tym wybranym języku programowania piszemy nasz kod. Zawsze wychodzę z założenia, że najlepiej jest ilustrować wszystko przykładami, także teraz pokażę Wam kod w języku Python, będący implementacją bardzo prostego algorytmu – pytamy użytkownika o wiek i na podstawie odpowiedzi, wyświetlamy informację czy użytkownik jest pełnoletni czy nie.
age = int(input("Ile masz lat?"))
if age >= 18:
print("Jesteś pełnoletni / pełnoletnia")
else:
print("Jeszcze nie możesz kupić piwa w sklepie")
Jak widzimy, taki kod – nawet gdy nigdy wcześniej nie mieliśmy do czynienia z programowaniem – jest dość czytelny. Podstawowa znajomość języka angielskiego wystarcza do zrozumienia, za co on odpowiada.
Kompilowanie i interpretowanie kodu
I tak właśnie wyglądają języki programowania – korzystając z słów i wyrażeń zdefiniowanych w danym języku – piszemy instrukcje dla komputera. Następnie taki kod tłumaczony jest przez narzędzie zwane kompilatorem lub interpreterem – w tym artykule nie będziemy się tym zajmować, ale wspomnę jedynie, że istnieją tak zwane języki kompilowane, języki interpretowane oraz języki będące połączeniem języków kompilowanych i interpretowanych – na tak zwany język maszynowy (machine code) czyli język zrozumiały dla komputera, a mówiąc precyzyjniej na język zrozumiały dla procesora, bo to procesor będący w środku naszego komputera odpowiedzialny jest za wykonanie wszystkich instrukcji.
Języki programowania – tak jak tradycyjne języki – różnią się od siebie, mają różną składnię czyli zestaw reguł dotyczących tworzenia kodu w danym języku, ale ogólne koncepty, o których wspominałem – czyli instrukcje warunkowe, pętle oraz same instrukcje do wykonania – są uniwersalne i zasady programowania są zawsze takie same, niezależnie od języka, który wybierzemy.
Czym zajmuje się programista?
I chociaż programista zajmuje się przede wszystkim pisaniem kodu, to ta praca zaczyna się jeszcze wcześniej. Na początku musimy zrozumieć, jaki problem rozwiązujemy, co dokładnie chcemy osiągnąć i na co musimy zwrócić uwagę, a następnie musimy przełożyć rozwiązanie problemu na konkretny algorytm i dopiero na ostatnim etapie zaimplementować ten algorytm w postaci kodu. Znowu posługując się konkretnym przykładem – załóżmy, że mamy do zrobienia rejestrację użytkowników w systemie. Na początku musimy zdecydować, gdzie będziemy zapisywać użytkowników, musimy zdecydować, jakie będą kryteria trudności hasła, czy chcemy wysyłać potwierdzenie rejestracji na maila, czy chcemy skorzystać z opcji rejestracji przy pomocy konta Facebookowego lub Googlowego, potem układamy sobie plan – w głowie, na kartce lub na ekranie komputera – jak chcemy to zrobić i przekładamy to wszystko na instrukcje w konkretnym języku programowania.
Jeżeli interesuje was jak to wygląda dokładniej – bo poza samym pisaniem kodu, mamy jeszcze pracę w zespole, kontakt z klientem, zarządzanie naszymi aplikacjami – odsyłam do artykułu Jak wygląda dzień programisty?.