Czym jest Informatyka?¶
Dziedzinę Informatyki trudno jest jednoznacznie zdefiniować. Prawdopodobnie wynika to z nadużywania słowa “komputer” dla wielu różniących się od siebie płaszczyzn. Jak zapewne wiesz, Informatyka nie jest po prostu nauką o komputerach, chociaż pełnią one ważną rolę pomocniczą m.in. jako główne narzędzie pracy programisty.
Informatyka skupia się na analizowaniu problemów, poszukiwaniu i wdrażaniu rozwiązań do nich pasujących. Mając do rozwikłania podane zagadnienie, celem informatyka jest opracowanie algorytmu, czyli szczegółowej listy instrukcji, która wykonana krok po kroku doprowadzi do osiągnięcia rozwiązania. Algorytmy są zdefiniowanym procesem, po wykonaniu którego dochodzimy do rozwiązania problemu. Mówiąc krótko - algorytmy są rozwiązaniem.
Informatyka może być rozumiana jako nauka o algorytmach. Jednak musimy wziąć pod uwagę istotny fakt, że dla pewnych problemów nie znajdziemy rozwiązania. Pomimo tego, że udowodnienie tego stwierdzenia jest poza zakresem tego opracowania, sam fakt, że niektóre problemy nie mogą być rozwiązane, jest istotny dla każdego informatyka. Mając to na uwadze, możemy w pełni zdefiniować Informatykę, jako naukę z jednej strony o rozwiązywaniu problemów, a z drugiej, o problemach bez rozwiązań.
Przy tematyce problemów i ich rozwiązań często pojawia się z zagadnienie, związane z możliwością zastosowania obliczeń. Uważa się, że problem można rozwikłać przy pomocy obliczeń, jeśli istnieje algorytm do jego rozwiązania. Prowadzi to do alternatywnej definicji Informatyki jako nauki o problemach, których rozwiązanie jest, lub nie jest, realizowalne metodą obliczeń. W każdym bądź razie, należy zaznaczyć, że słowo „komputer” nie zostało użyte, a więc należy traktować je całkowicie odrębnie od tematyki rozwiązywania problemów
W odniesieniu do procesu rozwiązywania problemów, Informatyka jest nauką o charakterze abstrakcyjnym, który pozwala spojrzeć na problemy i rozwiązania, jako dwa odrębne punkty widzenia - logiczne i fizyczne. Ich idea ujęta jest w poniższym przykładzie.
Weź pod uwagę pojazd, który dzisiaj prowadziłeś w drodze do szkoły lub do pracy. Jako kierowca, użytkownik samochodu, wchodzisz w konkretne interakcje, które pozwalają wykorzystać samochód w określony sposób (otwierasz auto, zapalasz silnik, wrzucasz bieg, przyśpieszasz, hamujesz, kierujesz). Z abstrakcyjnego punktu widzenia można powiedzieć, że jesteś świadomy logiki funkcjonowania pojazdu, w którą został wyposażony przez projektantów i dzięki której możliwe jest przemieszczanie z jednego miejsca do drugiego. Funkcje te czasami określane są jako interfejs.
Z drugiej strony mechanik, który naprawia twój samochód traktuje go w odmienny sposób. Musi wiedzieć nie tylko jak prowadzić, ale również szczegółowo znać wszystkie zasady działania poszczególnych jego funkcji, o których zwykły użytkownik nie ma pojęcia. Powinien rozumieć działanie silnika, przekładni skrzyni biegów, przepływ temperatury, itp. Całość określić można jako fizyczny punkt widzenia, ukazujący detale, które mają miejsce “pod maską”.
W podobny sposób używane są komputery. Większość użytkowników wykorzystuje komputer do pisania dokumentów, wysyłania i otrzymywania poczty email, przeglądania stron internetowych, odtwarzania muzyki, przechowywania zdjęć czy grania w gry. Statystyczny użytkownik nie posiada jednak szczegółowej wiedzy na temat, w jaki sposób aplikacje odpowiedzialne za ww. czynności są zbudowane, a więc postrzeganie komputera ma charakter czysto logiczny. Informatycy, programiści, administratorzy systemów czy wsparcie techniczne traktują komputer w zupełnie odmienny sposób. Posiadają niskopoziomową wiedzę na temat funkcjonowania systemów operacyjnych, konfiguracji protokołów sieciowych czy pisania skryptów odpowiedzialnych za kontrolę pewnych funkcji, o których zwykły użytkownik nie ma pojęcia.
Wspólną cechą obu przykładów jest to, że użytkownik, zwany również klientem, nie musi znać szczegółów budowy, o ile jest świadomy, w jaki sposób działa interfejs jemu przeznaczony. Interfejs to sposób, w jaki użytkownik komunikuje się z programem, którego implementacja często jest zawiła i skomplikowana. Innym przykładem abstrakcji jest moduł math języka Python. Raz zaimportowany pozwala na wykonanie określonych obliczeń, np:
>>> import math
>>> math.sqrt(16)
4.0
>>>
Jest to przykład abstrakcji proceduralnej. Nie musimy wiedzieć, jak pierwiastek kwadratowy jest obliczany, ale wiemy, jak wywołać i używać funkcję go obliczającą. Jeśli dokonamy poprawnego importu, możemy założyć, że funkcja zwróci poprawny wynik. Zdajemy sobie sprawę, że ktoś zaimplementował metodę obliczenia pierwiastka kwadratowego, ale my musimy tylko wiedzieć jak jej używać. Takie podejście często określa się mianem „czarnej skrzynki”. Nam jedynie potrzeba opisu interfejsu, czyli: nazwę funkcji, co jest potrzebne jako argumenty i co zostanie zwrócone. Szczegóły są ukryte wewnątrz implementacji (patrz rysunek 1).