144px|alt=Expression for Church numerals in lambda calculus|Programowanie komputerów|link=Programowanie komputerów 144px|alt=Plot of a quicksort algorithm|Algorytmika|link=Algorytmika 144px|alt=Example of Computer animation produced using Motion capture|Sztuczna inteligencja|link=Sztuczna inteligencja 144px|alt=Half-adder circuit|Architektura komputera|link=Architektura komputera Informatyka zajmuje się teoretycznymi podstawami informacji, algorytmami i architekturami układów ją przetwarzających oraz praktycznymi technikami ich stosowania. Informatyka (, ) – nauka ścisła oraz techniczna zajmująca się przetwarzaniem informacji, w tym również technologiami przetwarzania informacji oraz technologiami wytwarzania systemów przetwarzających informacje. Zajmuje się rozwiązywaniem problemów obliczeniowych, opisem procesów algorytmicznych oraz tworzeniem programów komputerowych i częściowo sprzętu komputerowego (z wyłączeniem zagadnień materialnych i energetycznych). Informatyka początkowo stanowiła część matematyki, z czasem wyodrębniła się do oddzielnej dyscypliny. W języku polskim termin „informatyka” zaproponował w październiku 1968 r. Romuald Marczyński (w Zakopanem, na ogólnopolskiej konferencji podczas wykładu zatytułowanego „Informatyka, czyli maszyny matematyczne i przetwarzanie informacji”), na wzór francuskiego informatique i niemieckiego Informatik.

Historia

Etymologia Termin informatics nie mógł zostać wprowadzony do słownictwa amerykańskiego z uwagi na problemy prawne – istniało tam przedsiębiorstwo o nazwie , co zablokowało chęć zmiany nazwy ACM na Society for Informatics. Wówczas popularny był już tam termin computer science – dosłownie: „nauka o komputerze” – co może być mylące, stąd spotykał się często z krytyką środowisk akademickich. Proponowano wiele alternatywnych nazw, m.in. Computer Studies, Computics, Computing Science, Computation Science, Information engineering, Information Technology. Association for Computing Machinery będące najważniejszą organizacją branżową przyjął termin computing na nazwę ogólnej dyscypliny. Częściowo powrócono jednak później do computer science ze względu na to, że termin ten się silnie zakorzenił. Współcześnie określenie computing odnosi się do całej dyscypliny, a computer science to jej część w której obowiązuje rygor naukowy, podczas gdy informatyka techniczna skupia się na aspektach praktycznych i traktowana jest jako nauka inżynierska. W informatyce technicznej można wyróżnić szereg specjalności, takich jak inżynieria komputerowa (computer engineering, technische Informatik) związana z tworzeniem sprzętu komputerowego i oprogramowania wbudowanego, technologia informacyjna (information technology), współcześnie najczęściej spotykana w tworzeniu oprogramowania dla zastosowań biznesowych, inżynieria oprogramowania (software engineering), odnosząca się ogólnie do programowania, lecz ściśle związana z zarządzaniem procesem wytwarzania oprogramowania. SE i IT są czasem na wzór niemiecki zbiorczo nazywane informatyką praktyczną (niem. praktische Informatik).

Przetwarzanie informacji jest różnie interpretowane, przez co istnieją różne definicje informatyki. Uniwersytet Edynburski definiuje ją jako naukę o systemach obliczeniowych, w której centralną notacją jest transformacja informacji. Według Petera J. Denninga podstawowym pytaniem leżącym u podstaw informatyki jest: „Co można zautomatyzować?”. Według teorii Stuarta C. Shapiro, informatyka jest nauką przyrodniczą, która bada procedury. Adam Olszewski wyróżnił pięć rodzajów obiektów, które są przedmiotem zainteresowania informatyki: funkcje efektywnie obliczalne, algorytmy, programy komputerowe, realizacje i maszyny. W roku 2005, w ACM Computing Curricula przedstawiono następujący opis:

Przegląd dyscyplin informatycznych

Jako dyscyplina informatyka obejmuje szereg tematów, od teoretycznych badań nad algorytmami i teorią obliczalności po praktyczne zagadnienia związane z implementowaniem systemów obliczeniowych zarówno w warstwie sprzętowej, jak i oprogramowaniu. CSAB, dawniej zwana Computing Sciences Accreditation Board – w skład której wchodzą przedstawiciele Association for Computing Machinery (ACM) oraz IEEE Computer Society (IEEE CS) – identyfikuje cztery obszary, które uważa za kluczowe dla informatyki: teoria obliczeń, algorytmy i struktury danych, języki i metodologia programowania oraz budowa i architektura komputerów. Oprócz tych czterech podstawowych obszarów, CSAB identyfikuje również takie dziedziny, jak inżynieria oprogramowania, sztuczna inteligencja, sieci komputerowe i komunikacja, systemy baz danych, obliczenia równoległe, obliczenia rozproszone, interakcja człowiek-komputer, grafika komputerowa, systemy operacyjne oraz metody numeryczne i symboliczne jako będące ważnymi dziedzinami informatyki.

Początkowo towarzystwa ACM i IEEE CS publikowały własne oddzielne zalecenia dotyczące programów studiów. Z czasem postanowiono utworzyć wspólną dyscyplinę oraz wspólne zalecenia dotyczące programów kształcenia. W pracach nad ujednoliceniem programów studiów uczestniczyły organizacje: ACM, IEEE Computer Society, Association for Information Systems, ACM SIG Information Technology Education, British Computer Society, International Federation for Information Processing, ABET and CSAB. Wyróżniono 5 głównych specjalizacji: inżynieria komputerowa (ang. computer engineering, CE), informatyka naukowa (ang. computer science, CS), systemy informacyjne (ang. information systems, IS), technologia informacji (ang. information technology, IT), inżynieria oprogramowania (ang. software engineering, SE). W 2020 podobna grupa organizacji przygotowała programy studiów dla kolejnych 2 specjalizacji: cyberbezpieczeństwo (ang. cybersecurity) oraz danologię (ang. data Science). W Niemczech zwyczajowo dzieli się natomiast na informatykę teoretyczną, techniczną, praktyczną oraz realizacje i stosowaną. center|Architektur der Informatik Peter J. Denning z kolei w swoim artykule o informatyce pogrupował treści w następujące działy: algorytmy i struktury danych, języki oprogramowania, architektura komputerów i oprogramowania, systemy operacyjne i sieci, inżynieria oprogramowania, bazy danych i wyszukiwanie informacji, sztuczna inteligencja i robotyka, grafika komputerowa, interakcja człowiek–komputer, symulacje komputerowe i obliczenia numeryczne, informatyka ekonomiczna, bioinformatyka. Jednocześnie dla każdego z tych obszarów zaproponował podział na trzy podejścia dotyczące strony teoretycznej, abstrakcyjnej oraz twórczej.

Informatyka teoretyczna Teoretyczna informatyka (ang. theoretical computer science) ma ducha matematycznego i abstrakcyjnego, ale motywację czerpie z praktycznych i codziennych obliczeń. Jej celem jest zrozumienie natury obliczeń, w konsekwencji czego wprowadza ich coraz bardziej efektywne metody. Jest ona częścią matematyki i informatyki, która grupuje matematyczne podstawy informatyki. Jej najważniejsze obszary to teoria obliczeń, teoria informacji oraz algorytmika. Informatyka teoretyczna stara się odpowiedzieć na fundamentalne pytania w informatyce np. P versus NP problem i stanowi trzon dla bardziej praktycznych dziedzin.

Algorytmika. Algorytmy i struktury danych

Algorytmika zajmuje się projektowaniem i analizą algorytmów i struktur danych. Jest najstarszą i jedną z najważniejszych dziedzin informatyki. Wśród jej podstawowych obszarów można wymienić projektowanie i analizę algorytmów, geometrię obliczeniową, optymalizację kombinatoryczną oraz logikę algorytmiczną. Historycznie podstawowymi zagadnieniami są algorytmy sortowania, kompresji, przeszukiwania czy szyfrowania oraz metody numeryczne. Algorytmy podlegają klasyfikacji, wyróżniając np. algorytmy zachłanne jak algorytm Dijkstry czy algorytm Kruskala, metody generowania liczb losowych, metody optymalizacji itd. Do podstawowych struktur danych należą rekord, tablica, stos, lista, kolejka, drzewa czy grafy. Próbą połączenia idei struktur danych i algorytmów jest paradygmat programowania obiektowego. 96px 96px 96px 96px 96px 96px Analiza algorytmów Projektowanie algorytmów Struktury danych Algorytmy zachłanne Geometria obliczeniowa Algorytmy probabilistyczne

Teoria obliczeń. Języki, automaty, złożoność

Teoria obliczeń dzieli się na trzy główne części: teorię automatów, teorię obliczalności oraz teorię złożoności. Teoria automatów zajmuje się definicjami i własnościami modeli obliczeń, matematycznymi modelami maszyn liczących. W uproszczeniu zajmuje się ona odpowiedzią na pytanie czym jest komputer, teoria obliczalności zajmuje się odpowiedzią na pytanie, które problemy dają się rozwiązać przy pomocy komputera, a teoria złożoności – odpowiedzią na pytanie jak szybko da się to zrobić. Przykładowymi zagadnieniami są Maszyna Turinga czy Hipoteza Churcha-Turinga. Języki formalne stanowią podstawę badań nad językami komputerowymi, jak i naturalnymi w lingwistyce. Systemy formalne są tworzone i badane zarówno jako samodzielne abstrakcyjne twory, jak i systemy opisu rzeczywistości. 130px 96px 120px 96px Teoria automatów Język formalny Teoria obliczalności Teoria złożoności obliczeniowej Automat komórkowy

Teoria informacji i kodowania

Matematyczna teoria informacji zajmuje się problematyką informacji, w tym podstawami teoretycznymi dla przetwarzania i przesyłania informacji, np. w celu ich transmisji lub kompresji. Przykładowo wprowadza takie pojęcia jak komunikat, entropia, ciało skończone czy bit będący podstawową jednostką w informatyce. Teoria kodowania zajmuje się tworzeniem i analizą reprezentacji danych w komputerze. Wyróżnia się m.in. kodowanie znaków czy kodowanie transportowe, do których należą np. kod stałopozycyjny.

Informatyka kwantowa

Informatyka kwantowa to gałąź informatyki łącząca ją z mechaniką kwantową, w której do przetwarzania informacji wykorzystywane są własności układów kwantowych. Elementarnym nośnikiem informacji kwantowej jest kubit, kwantowy odpowiednik bitu. Stan kubitu opisany jest przez dowolną kombinację liniową stanów bazowych. W najbardziej popularnym modelu kwantowego przetwarzania informacji, operacje na kubitach są reprezentowane za pomocą bramek kwantowych. Najbardziej spektakularny sukces informatyki kwantowej to kwantowa kryptografia. Natomiast najbardziej obiecującym kierunkiem badań są prace dotyczące idei kwantowego komputera. Dynamiczny rozwój technologii w ostatnich latach spowodował, że gałąź ta wyłamuje się poza czysto-teoryczne rozważania. Stworzono pewne realizacje bramek kwantowych, a na targach CES w 2018 roku amerykańskie przedsiębiorstwo informatyczne IBM zaprezentowała swój działający, 50-kubitowy komputer kwantowy.

Teoria języków programowania, typów, kompilacji

Teoria języków programowania (ang. Programming language theory, PLT) to dziedzina informatyki zajmująca się projektowaniem, wdrażaniem, analizą, charakteryzacją i klasyfikacją języków programowania oraz ich indywidualnymi cechami. Przykładowymi obszarami PLT są semantyki formalne (ang. formal semantics), teoria typów (ang. type theory) czy metaprogramowanie. Na języki programowania składa się składnia, semantyka i biblioteki standardowe, zazwyczaj posiadają co najmniej obsługę wejścia-wyjścia, obsługę plików, obsługę wielowątkowości, zarządzanie pamięcią operacyjną, podstawowe typy danych, funkcje do zarządzania nimi np. operacje na ciągach znaków. Ważnym obszarem PLT jest też teoria kompilacji, na której proces składa się wykonanie poleceń preprocesora, analiza leksykalna, analiza składniowa, analiza semantyczna, optymalizacja kodu wynikowego i generacja kodu. Języki klasyfikuje się według poziomu abstrakcji na którym operują na języki niskiego poziomu oraz języki wysokiego poziomu, wyróżnia się także wiele paradygmatów programowania. 96px 96px 96px 96px 96px Teoria typów Teoria kompilacji Teoria języków programowania Języki programowania Paradygmaty programowania

Inżynieria komputerowa