Dziedziny współczesnej informatyki

Obecnie informatyka jest na tyle szeroką dyscypliną naukową, że podobnie, jak w matematyce, fizyce czy chemii, nie ma już specjalistów od wszystkiego. Zatem pojawiają się specjalności, które skupiają się wokół jednego bądź kilku zagadnień. Z faktu ogromnej dynamiki rozwoju informatyki wynika często, że osoby uprawiające dany dział muszą poświęcać mu tyle czasu, że nie mają już możliwości śledzić tego co dzieje się poza ich poletkiem. Poniżej zamieszczamy jedną z możliwych klasyfikacji dziedzin informatyki wymienionych w kolejności alfabetycznej.

Algorytmika

Algorytmika jest jedną z najstarszych dziedzin informatyki, wynika to bezpośrednio z zakresu jaki obejmuje, a jest nim tworzenie i badanie algorytmów. Poprzez badanie algorytmów rozumie się głównie zagadnienia związane z teorią obliczalności, dzięki której można stwierdzić czy dany algorytm da się w ogóle zrealizować w praktyce, a jeśli tak, to w jakim czasie. Należy podkreślić, że jest to jeden z działów, który swoim zakresem przenika prawie wszystkie inne, oraz niejednokrotnie wykracza poza samą informatykę, wnikając mocno w matematykę, technikę czy ekonomię. Patrząc na historię algorytmiki okazuje się, że najbardziej fundamentalne prace z teorii algorytmów pojawiły się w w latach trzydziestych. Można się temu dziwić, gdyż jak to wynikało z rysu historii informatyki, wtedy nie istniał jeszcze żaden komputer elektronowy a już na pewno elektroniczny. Jednak nie ma w tym nic niezwykłego, algorytmika w swoim aspekcie teoretycznym nie potrzebuje w ogóle, lub tylko w minimalnym stopniu komputerów. To właśnie w latach trzydziestych Alan Turing formułuje założenia Maszyny Turinga oraz wykorzystuje ją do formułowania teorii obliczalności. Stephen Kleene opisuje formalnie spójną klasę rekurencyjnie definiowalnych funkcji teorioliczbowych. Z kolei Alonzo Church wymyśla inny sposób opisu algorytmów, tzw. rachunek Lambda. Nieco później, bo w roku 1961, Andriej Markow proponuje jeszcze inny sposób opisu algorytmów - opis oparty na łańcuchach. Istnieje cała klasa algorytmów, które są poprawne i wiemy, że dają dobre rezultaty ale na przykład po czasie równym 3000 lat. O algorytmice będziemy jeszcze mówić później.

Bazy danych

W obecnym świecie żyjemy w zalewie informacji, którą należy przetworzyć i tym zajmują się wspomniane wcześniej algorytmy, ale również należy gdzieś tę informację magazynować. A jeśli magazynować to w taki sposób, by łatwo i szybko można było do niej sięgnąć i odnaleźć potrzebne dane. Rolę takiego inteligentnego magazynu spełniają bazy danych. Historycznie rzecz biorąc, bazy towarzyszyły informatykom od początku powstania komputerów, lecz różniła się ich forma i sposób przechowywania informacji. Można by nawet zaryzykować stwierdzenie, że już Hollerith opracowując nową metodę przeprowadzania spisu ludności posługiwał się bazą danych głosów w postaci kart perforowanych i na ich podstawie opracowywał raporty. Pojawienie się komputerów jakie znamy obecnie dało też początek bazom danych z prawdziwego zdarzenia. Z początku były to bardzo prymitywne technologie, do których można zaliczyć bazy hierarchiczne i bazy sieciowe. Posiadały one wiele wad, jak np. nadmiarowość danych, czy brak integralności. Pod koniec lat sześćdziesiątych matematyk E. F. Codd, pracujący w firmie IBM stworzył model relacyjnej bazy danych. Obecnie przede wszystkim wykorzystuje się relacyjne bazy danych, lecz od ponad 15 lat bardzo dynamicznie rozwijają się obiektowe bazy danych, w których daje się, lepiej niż w relacyjnych, zamodelować pewne dane. Do najnowszych trendów można również zaliczyć bazy oparte o technologię XML.

Grafika komputerowa

Za datę powstania tego działu informatyki uznaje się lata pięćdziesiąte, kiedy to w Massachusetts Institute of Technology zbudowano komputer Whirlwind wyposażony w grafoskop. Przez ponad dwadzieścia lat dziedzina ta była dostępna wyłącznie wtajemniczonym, głównie ze względu na bardzo wysokie koszty urządzeń, dość przypomnieć, że wszystkie terminale komputerowe w tamtych czasach były alfanumeryczne, zatem mogły wyświetlać wyłącznie znaki. W latach sześćdziesiątych widać już pewne zainteresowanie przemysłu grafiką komputerową. Firma General Motors wykorzystuje system DEC-1 produkcji IBM do projektowania samochodów. W ich ślady idą producenci samolotów oraz okrętów, a następnie praktycznie cały przemysł. W dzisiejszych czasach trudno sobie wyobrazić nowoczesnego projektanta bez elektronicznej deski kreślarskiej, i co ciekawe nie ma znaczenia czy będzie to architekt, czy też projektant ubrań. Grafika komputerowa oddaje ogromne usługi prawie w każdej dziedzinie współczesnego życia. Idąc do architekta, można obejrzeć swój przyszły dom, idąc do fryzjera można zweryfikować czy proponowana fryzura nam jest dla nas odpowiednia. Oczywiście trudno zapomnieć o całym przemyśle rozrywkowym, czyli grach i wszelkiego rodzaju multimediach, które coraz chętniej sięgają po tzw. produkty interaktywne. Wszystko to wymaga wsparcia od strony komputera zarówno od strony sprzętowej jak i programowej. Widać to wyraźnie w cenach elementów wchodzących w skład komputera, bardzo dobra karta graficzna potrafi kosztować tyle co reszta komputera. Aby wszystkie te programy działały bardzo wydajnie wymagają udoskonalania algorytmów do generowania obrazu.

Kryptografia

Odkąd sięga pamięć ludzka, to co cenne rzeczy próbowano ukryć przed wzrokiem czy dotykiem osób niepowołanych. Ponad 2000 lat temu dostrzeżono konieczność ukrywania informacji, na ten okres datuje się pierwszy znanym szyfrem - szyfr Cezara. W chwili obecnej trudno sobie wyobrazić transmisję jakichkolwiek ważniejszych danych w komputerach bez stosowania transmisji szyfrowanej przez protokół SSL. Większość programów pocztowych zawiera już wsparcie do szyfrowanego połączenia, a łącząc się z bankiem w celu sprawdzenia stanu konta, serwer banku wymusza na przeglądarce połączanie za pomocą tak zwanego protokołu https, który jest niczym innym jak zwykłym protokołem http przepuszczanym przez SSL. Dziedzina wiedzy zajmująca się badaniem, tworzeniem i łamaniem szyfr ów to właśnie kryptografia. Jej gwałtowny rozwój zaczął się od roku 1975 i do dzisiejszego momentu pozostaje jedną z najdynamiczniej rozwijających się dziedzin. Należy zaznaczyć, że jest ona przede wszystkim dziedziną matematyki. Ponieważ jednak tak powszechnie jest wykorzystywana w ochronie informacji stąd też badaniem jej zajmują się również informatycy.

Programowanie

Programowanie jest jednym z działów informatyki, który jest właśnie z nią kojarzony, nawet przez osoby niedoświadczone. Do niedawna samo stwierdzenie Jestem programistą, brzmiało prawie jak Jestem wszechmogący. Faktem jest, że języki programowania, będące jednym z elementów całości zagadnienia związanego z programowaniem, pojawiły się u zarania współczesnej informatyki. Chodź jak wiemy, możemy dopatrywać się ich korzeni jeszcze wcześniej przy okazji maszyna analitycznej Babbage'a oraz Pani hrabiny Ady. Niemniej jednak, języki programowania w formie w jakiej je znamy obecnie, a raczej pradziadkowie dzisiejszych języków programowania, pojawiły się w momencie powstania idei maszyny von neumannowskiej, która pozwalała przechowywać dane i program jednocześnie w pamięci. Można zatem przyjąć, że współczesne języki programowania narodziły się w latach pięćdziesiątych ubiegłego wieku. Choć od tego czasu języki bardzo się zmieniły, ich cel pozostał taki sam. Jest nim dostarczenie wygodnej formy przekazu naszych myśli do komputera w celu uzyskania pewnego konkretnego efektu. Oczywiście sposób zapisu, czyli wyrażania naszych myśli musi być odpowiednio precyzyjny, będziemy zresztą o tym jeszcze mówić dalej. Programowanie to jednak nie tylko same języki programowania, to również wszelkiego rodzaju narzędzia wspomagające proces wytwarzania oprogramowania, tworzenia dokumentacji technicznej czy dokumentacji użytkownika. Co więcej cały proces tworzenia oprogramowania doczekał się wielu modeli i sposobów analizowania oraz porównywania. Powstała oddzielna gałąź informatyki pod nazwą inżynieria oprogramowania, której zadaniem jest właśnie systematyzowanie i badanie procesów związanych z tworzeniem oprogramowania.

Sieci komputerowe

W chwili obecnej sieci komputerowe są jednym z najlepiej ugruntowanych działów informatyki. Ich korzenie sięgają 1957 roku kiedy to Departament Stanu USA powołał do życia Agencję Zaawansowanych Projektów Badawczych Departamentu Obrony USA (ang. Advanced Research Projects Agency, (ARPA)). Jednym z jej celów było opracowanie takiej formy komunikacji komputerów, która byłaby wygodna a jednocześnie odporna na ataki militarne. Pod koniec 1969 roku stworzono eksperymentalną sieć opartą na wymianie pakietów danych, projekt ten pod nazwą ARPANET wykorzystywał protokół NCP (ang. Network Control Protocol). Umożliwiał on logowanie na zdalnym komputerze, drukowanie na zdalnej drukarce oraz przesyłanie plików. Na początku rozwój sieci nie był zbyt dynamiczny, dla przykładu w 1973 roku ARPANET składała się z 23 komputerów. Dzisiejszą siłę sieć zawdzięcza globalizacji, która była możliwa dzięki zastosowaniu jej do celów cywilnych. Zaczęto dostrzegać, że można ją wykorzystywać do ułatwienia komunikacji na prawie wszystkich płaszczyznach. I tak w 1972 roku zostaje wysłana pierwsza wiadomość elektroniczna (e-mail). W 1974 roku zostaje opracowana specyfikacja protokołu TCP/IP, który został w tym samym roku uznany oficjalnym protokołem w sieci i pozostaje nim po dziś dzień. Autorami specyfikacji TCP/IP byli Vinton Cerf i Robert Kahn. W 1980 roku sieć ARPANET liczyła 400 serwerów. Dziewięć lat później w sieci było już 100 000 komputerów. Stało się to głównie za sprawą przyłączenia się do poparcia tej idei Narodowej Fundacji Nauki USA (ang. National Science Foundation), która stworzyła własną sieć NFSNET i dołączyła się do istniejących. Sieć ta stała się na tyle wydajna, że w roku 1990 zastąpiła całkowicie ARPANET i stała się oficjalnym szkieletem Internetu. Z pewnością większość użytkowników kojarzy Internet z dwoma usługami: pocztą elektroniczną i stronami WWW. Jednak o ile poczta jest usługą wiekową (jak na historię sieci) to WWW powstało dopiero w 1992 roku, a technologię tę opracował Tim Berners-Lee. Należy pamiętać, że sieci komputerowe to nie tylko Internet, w ich skład wchodzą również sieci lokalne, czy osiedlowe. Ponadto dziedzina ta zajmuje się również badaniem wydajności sieci i opracowywaniem nowych algorytmów do przekazywania w niej informacji. W połączeniu z kryptografią dba o bezpieczeństwo przesyłanej informacji niezależnie od jej nośnika, a obecnie poza tzw. przewodem, transmisja danych odbywa się za pomocą: podczerwieni, promieni laserowych, czy fal radiowych. O sieciach komputerowych będziemy jeszcze mówić.

Systemy operacyjne

System operacyjny jest wyspecjalizowanym programem, który umożliwia funkcjonowanie systemu komputerowego. Jest to program ściśle związany z architekturą konkretnego komputera w tym przede wszystkim z procesorem. Głównym zadaniem systemu operacyjnego jest dostarczanie podstawowych operacji dostępu do urządzeń i zasobów systemu komputerowego. Od jego jakości i wydajności w dużej mierze zależy wydajność całości systemu komputerowego. W dniu dzisiejszym istnieje cała gama systemów operacyjnych na komputery klasy PC oparte o procesory rodziny INTEL. Przykładowymi systemami dla takich komputerów są MS-DOS, rodzina systemów Windows, Linux, rodzina systemów BSD, kilka komercyjnych systemów klasy UNIX. Co więcej systemy rodziny UNIX, w tym Linux i BSD, są systemami posiadającymi swoje wersje na inne wersje procesorów np. PowerPC. Istnieje również cała gama systemów operacyjnych specjalizowanych na konkretną maszynę i przeznaczonych do specjalnych celów, przykładami mogą tu być AS/400 czy OS/390. Trudno dzisiaj powiedzieć, który system był tym pierwszym. Wiemy na pewno, że w roku 1964 w firmie IBM zaczęto tworzenie systemu operacyjnego z przeznaczeniem na komputery MainFrame, bardzo złożonego i wydajnego systemu operacyjnego dla maszyn S/360 i ich późniejszych następców. Były to ogromne komputery przeznaczone do ciągłej pracy i najwyższego obciążenia, projektowane z myślą o profesjonalnych systemach. Z kolei historia rodziny systemów UNIX sięga roku 1965, kiedy to trzy organizacje Bell Telephone Laboratories, General Electric Company i Massachusetts Institute of Technology w ramach projektu MAC podjęły próbę stworzenia systemu operacyjnego nazwanego Multics. Zadaniem tego systemu było dostarczenie mechanizmów pozwalających na jednoczesny dostęp do danego komputera przez wielu użytkowników oraz wsparcie do obliczeń i współdzielenia danych pomiędzy jego użytkownikami. Niestety prace nad tym systemem nie zostały zakończone i ponieważ nic nie wskazywało, że kiedykolwiek to nastąpi, Bell Laboratories odłączyło się od tego projektu i około roku 1970 stworzyło pierwszą wersję systemu UNIX pracującego na maszynach PDP-11. W chwili obecnej zarówno OS/390 jak i UNIX istnieją jako dojrzałe i profesjonalne systemy operacyjne. Niejako na drugim końcu stoją systemy takie jak rodzina Windows i MacOS, które od samego początku były projektowane jako systemy nastawione na łatwość obsługi i przeznaczone na popularne komputery. Co prawda istnieją obecnie wersje zarówno Windows jak i MacOS z przeznaczeniem na serwery, jednak nie to było ich pierwotnym przeznaczeniem. O systemach operacyjnych będziemy jeszcze mówić.

Sztuczna inteligencja

Pomimo, iż termin sztuczna inteligencja (ang. Artificial Intelligence) powstał stosunkowo niedawno, to próby stworzenia urządzeń inteligentnych sięgają dość daleko wstecz. Za pierwsze należy zapewne uznać wysiłki zmierzające w kierunku skonstruowania automatu potrafiącego grać w szachy, które niestety ze względu na niedostatki w rozwoju ówczesnej techniki, najczęściej okazywały się mniej lub bardziej zręcznymi oszustwami. Pierwsza połowa XX wieku, to okres upływający pod znakiem robotyzacji. Pojawiają się wizje maszyn wyglądających i zachowujących się jak ludzie. Pod koniec lat 50-tych stajemy się świadkami narodzin informatyki jako dyscypliny naukowej. Dyscypliny zajmującej się przetwarzaniem danych i wykorzystującej w tym celu nowe urządzenie nazwane komputerem. Wkrótce, na fali ogólnoświatowego zachwytu nad możliwościami jakie otworzył komputer, powstają pierwsze proste programy zdolne do zadawania pytań i udzielania odpowiedzi na pytania zadane przez człowieka. Dziś jednak wcale nie jest łatwo powiedzieć czym jest inteligencja?; w znacznej mierze jest to spowodowane brakiem zrozumienia natury ludzkiego mózgu. Przez lata pojęcie sztucznej inteligencji ulegało przeobrażeniom, zależnie od bieżącego stanu rozwoju myśli ludzkiej - począwszy od automatu do grania, przez maszynę potrafiącą wykonywać pewne czynności za człowieka aż po urządzenie zdolne samodzielnie podejmować decyzje. Nie podejmuję się w tym miejscu udzielić odpowiedzi na pytanie czym jest inteligencja. Zamiast tego powiem czego od sztucznej inteligencji oczekuje się obecnie. Otóż celem jest rozwój w kierunku stworzenia systemu, który potrafiłby zachowywać się jak istota inteligentna, tj. na podstawie zgromadzonej wiedzy i znanych przesłanek podejmowałby decyzje wykazujące znamiona racjonalności. Pod terminem system można rozumieć program komputerowy, maszynę lub cokolwiek innego. Również pojęcia wiedza i racjonalność są tak samo mało precyzyjne jak i termin inteligencja. Sztuczna inteligencja jako nauka ukierunkowana na stworzenie systemu naśladującego istoty rozumne z istoty rzeczy korzysta z opisu pewnych ich zachowań, budowy czy obserwowanych mechanizmów nimi rządzących. Nie dziwi zatem prowadzenie badań związanych ze sztucznymi sieciami neuronowymi, algorytmami genetycznymi, systemami działającymi w oparciu o logikę rozmytą, czy też badających zachowania populacji | algorytmy mrówkowe, algorytmy symulujące rój pszczół itp. Można powiedzieć, że zakres badań obejmuje wszystko co się rusza. Tak jest w istocie a wynika to z komplementarności tych poddziedzin sztucznej inteligencji. Na przykład sztuczne sieci neuronowe stosują stochastyczne algorytmy dopasowania modeli poprzez uczenie nadzorowane lub nie, opierające się na nieprecyzyjnych (obarczonych pewnym błędem, tzw. szumem) danych numerycznych. Złagodzenie wymogów precyzji w procesie tworzenia modeli, a co najważniejsze dla nas ludzi, możliwość opisu złożonych systemów za pomocą zmiennych pojmowanych intuicyjnie (na przykład: lodowato, zimno, w sam raz, ciepło, gorąco) to z kolei zaleta systemów przetwarzających informacje w oparciu o zbiory rozmyte i wnioskowanie przybliżone. Połączenie obu wspomnianych wyżej dziedzin pozwala na stworzenie systemu operującego nieprecyzyjnymi określeniami zależnymi od zaistniałego kontekstu (logika rozmyta) oraz jednocześnie zdolnego do uczenia się (sztuczne sieci neuronowe). Doskonałym ich uzupełnieniem stają się algorytmy genetyczne poszukujące optymalnego rozwiązania (na przykład parametrów sieci neuronowej) na drodze kolejnych przybliżeń dobieranych poprzez wykorzystanie mechanizmów mutacji i krzyżowania chromosomów oraz oceny przez tak zwaną funkcję przystosowania. Jak więc widać, sztuczna inteligencja to bardzo szeroka dziedzina wiedzy łącząca w sobie matematykę, biologię, fizykę chemię, filozofię, lingwistykę i wiele innych dyscyplin, o której precyzyjnie za wiele powiedzieć nie można. Pewne jedynie jest to, że na dzień dzisiejszy w związku ze sztuczną inteligencją zadajemy więcej pytań niż otrzymujemy odpowiedzi.

Teoria informacji

Teoria informacji jest jedną z niewielu dziedzin dla których znamy dokładną datę narodzin. Jest to rok 1948 kiedy to 32-letni matematyk Claude Shannon publikuje pracę w piśmie Bell System Technical Journal. Ta właśnie praca uznawana jest za podstawową w tej dziedzinie, jednak zanim opiszemy wyniki Shannona, spróbujmy ogólnie opowiedzieć czym zajmuje się ta dziedzina. Teoria informacji zajmuje się informacją, jej transmisją, jak i również kodowaniem danych w celu pewniejszego lub szybszego przesłania jej od nadawcy do odbiorcy. Kodowanie nie należy tu mylić z szyfrowaniem, gdyż nie jest celem tutaj ukrycie informacji, a wyłącznie zapewnienie, że dotrze ona do celu w całości lub jeśli nastąpi przekłamanie to o tym się dowiemy. Najprostszym kodem jaki większość zna jest kod Morse'a, który został skonstruowany by za pomocą bardzo skromnego zbioru znaków (kropka, kreska) móc przekazać całe zdania dowolnego języka opartego o litery łacińskie. Należy podkreślić, że próba przekazania jakiejkolwiek informacji przez dowolny nośnik może się nie powieść, lub informacja może zostać zniekształcona. Chyba każdy z nas pamięta dziecięcą zabawę w głuchy telefon, podobnie jest w przypadku rozmowy przez zwykły analogowy telefon, słychać trzaski i czasami słowa dochodzą zniekształcone. Shannon w swojej pracy podał warunki jakie muszą być spełnione by informacja dotarła bez zniekształceń, co więcej pokazał on drogę w jaki sposób przekazać informację lepiej bez zmiany parametrów kanału transmisyjnego. O teorii informacji będziemy jeszcze mówić.

GÓRA         SZKOŁA         

©2007-2016 Łukasz Ługowski, Młodzieżowy Ośrodek Socjoterapii nr 2 „KĄT”. Wykonanie:
Licencja Creative Commons - zdjęcia, rysunki i obrazy należą do uczniów i pracowników MOSu „KĄT”; kilka przyjaciół i znajomych

Podziękowania: Uczniowie, nauczyciele & „KĄTowi” przyjaciele!