Informatyka

Expression for Church numerals in lambda calculus
Example of Computer animation produced using Motion captureHalf-adder circuit
Informatyka zajmuje się teoretycznymi podstawami informacji, algorytmami i architekturami układów ją przetwarzających oraz praktycznymi technikami ich stosowania.

Informatyka (niem. Informatik, ang. computer science, computing, computer engineering, IT, ICT)[1]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[2]. 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)[3][4][5]. 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”)[6], na wzór francuskiego informatique i niemieckiego Informatik.

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 Informatics Inc(ang.), 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[7]. 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[8]) 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)[9][10].

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[2]. Według Petera J. Denninga podstawowym pytaniem leżącym u podstaw informatyki jest: „Co można zautomatyzować?”[11]. 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[12]. W roku 2005, w ACM Computing Curricula[13] przedstawiono następujący opis:

Ogólnie rzecz biorąc, możemy zdefiniować informatykę (computing) jako jakąkolwiek zorientowaną na cel działalność wymagającą, korzystającą z lub tworzącą maszyny obliczeniowe. W związku z tym informatyka obejmuje projektowanie i budowanie systemów sprzętu i oprogramowania do szerokiego zakresu celów; przetwarzanie, strukturyzację i zarządzanie różnymi rodzajami informacji; obliczeniowe badania naukowe; sprawianie, by systemy komputerowe zachowywały się inteligentnie; (...) Lista jest praktycznie nieskończona, a możliwości są ogromne.

Przegląd dyscyplin informatycznych

Informatyka jest tylko o komputerach, tak jak astronomia tylko o teleskopach.

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[3][4]. 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)[14] – 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[3].

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[15]: 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ą.

Peter J. Denning z kolei w swoim artykule o informatyce[16] 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 to więcej niż dział informatyki. Tkwi ona w centrum wszystkich działów informatyki.

David Harel, Algorithmics. The Spirit of Computing[17]

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.

Comparison computational complexity.svgTree (computer science).svgTSP Deutschland 3.pngSimplexRangeSearching.svgContraction vertices.jpg
Analiza algorytmówProjektowanie algorytmówStruktury danychAlgorytmy zachłanneGeometria obliczeniowaAlgorytmy probabilistyczne

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

Teoria obliczeń dzieli się on na trzy główne części: teorię automatów, teorię obliczalności oraz teorię złożności. Teoria automatów zajmuje 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 odpowiedzią na pytanie, które problemy dają się rozwiązać przy pomocy komputera, a teoria złożoności – odpowiedzą na pytanie jak szybko da się to zrobić[18][19]. 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.

DFAexample.svgSyntax tree.svgComplexity classes.svgKellerautomat.svg
Teoria automatówJęzyk formalnyTeoria obliczalnościTeoria złożoności obliczeniowejAutomat 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[20]. 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[21].

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[22]. Przykładowymi obszarami PLT są semantyki formalne (ang. formal semantics), teoria typów (ang. type theory)[23] 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[24][25].

Logic.svgLambda lc.svgPython add5 syntax.svgProgramming paradigms.svg
Teoria typówTeoria kompilacjiTeoria języków programowaniaJęzyki programowaniaParadygmaty programowania

Inżynieria komputerowa

Inżynieria komputerowa (ang. computer engineering, niem. Technishe Informatik) – zajmuje się tworzeniem systemów komputerowych. Do jej zadań należy projektowanie, wytwarzanie, integracja i eksploatacja sprzętu cyfrowego, w tym urządzeń sieciowych. Początkowo zajmowała się głównie tworzeniem procesorów, a współcześnie ważną jej rolę stanowi także tworzenie sprzętu i sterowników dla systemów wbudowanych, które wraz z pojawieniem się koncepcji IoT mają coraz większe znaczenie[26]. Do jej zagadnień należy architekturą i organizacją systemów komputerowych na poziomie sprzętowym oraz oprogramowania sprzętowego.

Logika obliczeniowa i technika cyfrowa

Technika cyfrowa zajmuje się projektowaniem i analizą układów cyfrowych. Do jej elementarnych zagadnień należą bramki logiczne, rejestry, układy sekwencyjne i układy kombinacyjne. Obejmuje syntezę logiczną i odwzorowanie technologiczne[27]. Współcześnie jej zagadnienia są kształtowane z jednej strony przez języki opisu sprzętu, a z drugiej przez bezpośrednio programowalne macierze bramek[27][28]. Układy logiczne początkowo implementowano jako układy mechaniczne, następnie jako elektromechaniczne i dominujące współcześnie układy elektroniczne.

Architektura i organizacja komputerów

Architektura komputerów (AK) to główny obszar inżynierii komputerowej zajmujący się projektowaniem i podstawową strukturą systemów komputerowych oraz budową i organizacją ich podzespołów. Główny obszar AK stanowi architektura procesorów na którą składa się model programowy procesora oraz mikroarchitektura procesora[29]. Procesory są głównym elementem systemów komputerowych. Szczególna uwaga jest poświęcona na sposobie, w jaki procesor wykonuje instrukcje i uzyskuje dostęp do adresów w pamięci. Przykładowe zagadnienia to DMA czy kontroler[30][31]. Ważnymi obszarami AK są także magistrale oraz pamięci komputerowe. Pamięcią komputerową nazywa się różnego rodzaju urządzenia i bloki funkcjonalne komputera, służące do przechowywania danych i programów (systemu operacyjnego oraz aplikacji). Istnieje jej wiele rodzajów, m.in. rejestry procesora, pamięć podręczna procesora, pamięć RAM, dyski półprzewodnikowe (SSD), dyski twarde (HDD). Wyróżnia się pamięci zewnętrzne i wewnętrzne. Magistralę komunikacyjną (ang. bus) definiuje się jako zespół linii przenoszących sygnały oraz układy wejścia-wyjścia służące do przesyłania sygnałów między połączonymi urządzeniami w systemach mikroprocesorowych[32].

ABasicComputer.gifZ80 arch.svgIntel Nehalem arch.svgComputer system bus(fixed).svgUarm metal wiki2.jpg
Architektura procesorówArchitektura pamięciMagistraleMikroarchitektura procesorówPamięć komputerowaUrządzenia wejścia-wyjścia

Przetwarzanie równoległe i rozproszone

Obliczenia równoległe to obszar badający możliwość obliczeń, w której wiele instrukcji jest wykonywanych jednocześnie. Taka forma przetwarzania danych była wykorzystywana przez wiele lat, głównie przy wykorzystaniu superkomputerów, a szczególne zainteresowanie zyskała w ostatnich latach, z uwagi na fizyczne ograniczenia uniemożliwiające dalsze zwiększanie częstotliwości taktowania procesorów. Obliczenia równoległe stały się dominującym wzorcem w architekturze komputerowej, głównie za sprawą upowszechnienia procesorów wielordzeniowych. Ze względu na skalę można wyróżnić obliczenia równoległe na poziomie: bitów, instrukcji, danych i zadań. Współbieżność jest właściwością systemów, w których obliczenia wykonuje się jednocześnie i potencjalnie korzystają ze wspólnych zasobów i/lub wchodzą w interakcje ze sobą. Opracowano wiele modeli obliczeń równoległych, w tym sieci Petriego, rachunek procesowy (ang. process calculus) i model maszyny dostępu równoległego (ang. parallel random-access machine, PRAM). Kiedy wiele komputerów jest podłączonych do sieci podczas korzystania ze współbieżności, jest to nazywane systemem rozproszonym. w którym to komputery mają własną pamięć, a informacje są wymieniane, by osiągnąć wspólne cele.

Distributed-parallel.svgSuperscalarpipeline.png
An illustration of the dining philosophers problem.png
(c) Benjamin D. Esham / Wikimedia Commons, CC BY-SA 3.0
Przetwarzanie współbieżnePrzetwarzanie rozproszonePrzetwarzanie równoległePotokowośćProblem 5 filozofów

Programowanie niskopoziomowe

Oprogramowanie niskopoziomowe pisze się w językach niskiego poziomu. Są to głównie języki asemblera, stanowią symboliczny zapis instrukcji procesora i danych, który w prosty sposób odpowiada zapisowi binarnemu. Języki asemblerowe wprowadzone w celu czytelnej dla człowieka reprezentacji języków maszynowych komputerów. W przeciwieństwie do języków wysokiego poziomu, typowe języki asemblerowe charakteryzują się strukturą liniową (wierszową). Każdy wiersz tekstu może zawierać pojedynczą instrukcję procesora lub dyrektywę asemblera[33].

CPU block diagram.svgApple II Monitor.pngWikipedia in binary.gifX86 Paging 4K.svgIF-THEN-ELSE-END flowchart.svg
RozkazyKod maszynowyKod binarnyRejestryInstrukcje

Sieci komputerowe

Sieci komputerowe to gałąź informatyki mająca na celu tworzenie sieci między komputerami nazywanych węzłami, umożliwiając im współdzielenie zasobów. W sieciach komputerowych urządzenia komputerowe wymieniają się danymi za pomocą warstw sieciowych. W modelu OSI wyróżnia się warstwę aplikacji, prezentacji, sesji, transportową, sieciową, łącza danych i fizyczną, a w modelu TCP/IP – będącym podstawą struktury internetu – wyróżnia się warstwy aplikacji, transportową, internetową i dostępu do sieci. Te łącza danych są ustanawiane za pomocą mediów kablowych, takich jak skrętka lub kable światłowodowe, oraz mediów bezprzewodowych, takich jak np. Wi-Fi[34]. Jednymi z podstawowych zagadnień sieci są protokoły oraz urządzenia sieciowe. Do najpopularniejszych urządzeń sieciowych należy karta sieciowa, router, koncentrator, przełącznik, punkt dostępowy, most, ekspander zasięgu Wi-Fi (repeater Wi-Fi), adaptery PowerLine, serwery wydruku, kamery IP, bramki VoIP orazy telefony IP[35]. Protokołem komunikacyjnym nazywa się zbiór ścisłych reguł i kroków postępowania, które są automatycznie wykonywane przez urządzenia sieciowe w celu nawiązania łączności i wymiany danych. Definiują one syntaks, semantykę, synchronizację komunikacji oraz możliwe metody naprawiania błędów. Protokoły te mogą zostać wdrożone za pomocą hardware'u, oprogramowania lub obu jednocześnie[36].

Rozszerzonagwiazda.jpegKapsułkowanie danych wg modelu odniesienia OSI.svgDHCP session.svgSPOF pl.pngInternet map 1024.jpg
Topologie sieci komputerowejArchitektura sieciProtokoły siecioweUrządzenie siecioweInternet

Systemy operacyjne

Systemy operacyjny pełnią szczególną rolę w informatyce. Jest to oprogramowanie zarządzające systemem komputerowym, tworzące środowisko do uruchamiania i kontroli zadań. Najważniejszym elementem systemu operacyjnych jest jego jądro wykonujące i kontrolujące zadania m.in. planisty czasu procesora, ustalającego które zadanie i jak długo będzie wykonywane czy przełącznika zadań, odpowiedzialnego za przełączanie pomiędzy uruchomionymi zadaniami. System operacyjny posiada także swoją powłokę, czyli specjalny program komunikujący użytkownika z systemem operacyjnym oraz system plików – sposób ustrukturyzowanego zapisu danych na nośniku. Osoby administrujące systemami nazwa się administratorami (pot. adminami). Współcześnie najważniejszą rodziną systemów operacyjnych jest GNU/Linux oraz Windows.

Device-driver-pl.svgSystem operacyjny schemat ogolny.svgDir command in Windows Command Prompt.pngFSV-OSX-screenshot.png
SterownikiPlanistaJądro systemu operacyjnegoPowłoka systemowaSystem plików

Informatyka praktyczna

Programowanie komputerów to proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów komputerowych w tym dla urządzeń mikroprocesorowych (mikrokontrolery). Programowanie pod różnymi postaciami jest obecne w większości działów informatyki. Kod źródłowy jest napisany w języku programowania, z użyciem określonych reguł, może on być modyfikacją istniejącego programu lub czymś zupełnie nowym. Programowanie wymaga wiedzy i doświadczenia w wielu dziedzinach, jak projektowanie aplikacji, algorytmika, struktury danych, języki programowania i narzędzia programistyczne, kompilatory, czy sposób działania podzespołów komputera. Między programistami trwają debaty, czy programowanie komputerów jest sztuką, rzemiosłem czy procesem inżynieryjnym. Bezpośrednią formą sztuki w tej dziedzinie jest demoscena. Programowanie komputerów integruje ze sobą większość gałęzi informatyki. Istnieje wiele gałęzi rozwoju technik programowania, jednak wszystkie z nich bazują na wspólnych podstawach. Niezależnie czy to będzie aplikacja webowa w Javascript, gra komputerowa w C++ czy program mikrokontrolera w C, używają one podstawowych konstrukcji programistycznych. Podstawymi pojęciami od których zaczyna się naukę programowania są między innymi zmienne, tablice, instrukcje warunkowe, pętle, wskaźniki, łańcuchy, funkcje, debugowanie, biblioteki oraz zarządzanie pamięcią. Języki dzieli sią na generacje: 2GL, 3GL, 4GL, 5GL. Wyróżnia się między innymi języki akcji, języki algorytmiczne, języki dziedzinowe, języki interpretowane, języki kompilowane, języki mnemoniczne, języki nieproceduralne, języki niezależne komputerowo, języki niskiego poziomu, języki opisu zadań, języki problemowe, języki proceduralne, języki symulacyjne, języki uniwersalne, języki wysokiego poziomu i języki uniwersalne. Do najpopularniejszych języków programowania zalicza się: Java, C, Python, C++, Visual Basic .NET, C#, JavaScript, PHP, SQL, Język Asemblera, Swift, Objective-C, Ruby, Groovy, Go, Perl, Delphi, MATLAB, Visual Basic.

Programmiersprache Umfeld.pngFor loop.pngMapa conceptual del software libre.pngC Hello World Program.pngQuellcodebeispiel C++.png
Języki wysokiego poziomuPrzepływ sterowaniaBiblioteki programistyczneProgramowanie obiektoweProgramowanie strukturalne

Grafika komputerowa

Grafika komputerowa to dział informatyki zajmujący się cyfrową syntezą i manipulacją treści wizualnych. Ze względu na reprezentację danych dzieli się na grafikę rastrową i wektorową, a ze względu na charakter danych na grafikę dwuwymiarową, trójwymiarową i ruchomą. Obejmuje także obecnie szybko rozwijające się przetwarzenie obrazów. Grafikę komputerową można także podzielić na teoretyczną skupiającą się algorytmach graficznych i praktyczną, skupiającą się manipulacji obrazem czy modelowaniu 3D np. w programie Blender. Grafika komputerowa stanowi podstawę współczesnych gier, animacji, symulacji czy wizualizacji komputerowych. Renderowanie polega na analizie stworzonego wcześniej modelu danej sceny oraz utworzenie na jej podstawie dwuwymiarowego obrazu wyjściowego w formie statycznej lub animacji. Podczas renderowania rozpatrywane są m.in. odbicia, cienie, załamania światła, wpływy atmosfery (w tym mgła), efekty wolumetryczne itp.

Raster graphic fish 20x23squares sdtv-example.pngDeCasteljau-evaluate point.svgTexture mapping demonstration animation.gifPavlovsk Railing of bridge Yellow palace Winter bw threshold.jpg
Grafika rastrowaGrafika wektorowaGrafika trójwymiarowaRenderowanie i animacjaCyfrowe przetwarzanie obrazów

Inżynieria oprogramowania

Inżynieria oprogramowania, także inżynieria systemów informatycznych – zajmuje się procesem i metodykami tworzenia systemów informatycznych: od analizy i określenia wymagań, przez projektowanie i wdrożenie, aż do ewolucji gotowego oprogramowania. Termin inżynieria oprogramowania po raz pierwszy został użyty w przełomie lat 1950/60 (ale oficjalnie za narodziny tej dyscypliny podaje się lata 1968 i 1969, w których miały miejsce dwie konferencje sponsorowane przez NATO, odpowiednio w Garmisch i Rzymie). Wyróżnia fazy produkcji oprogramwania: specyfikacji, projektowania, implementacji, integracji i ewoluacji, a także dostarcza systematycznych metodyk jego tworzenia, jak m.in. model kaskadowy, prototypowy czy zwinny, w tym scrum. Wprowadza takie pojęcia jak np. cykl życia programu czy metryka oprogramowania. Wyróżnia się także jej specjalizacje np. inżynieria systemów mobilnych, inżynieria systemów baz danych, inżynieria sytemów wbudowanych czy inżynieria gier komputerowych. Wzorcem projektowym (ang. design pattern) nazywa się uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz utrzymanie kodu źródłowego. Jest opisem rozwiązania, a nie jego implementacją. Architekturą oprogramowania nazwywa podstawową organizację systemu wraz z jego komponentami, wzajemnymi powiązaniami, środowiskiem pracy i regułami ustanawiającymi sposób jego budowy i rozwoju. Metody formalne – tworzenie specyfikacji, projektowania i weryfikacji oprogramowania lub systemów informatycznych w języku formalnym. Metody formalne najlepiej opisać jako zastosowanie dość szerokiej gamy podstaw teoretycznych informatyki, w szczególności rachunku logicznego, języków formalnych, teorii automatów, systemu dynamiki zdarzeń dyskretnych i semantyki programów, a także systemów typów i typów danych algebraicznych do specyfikacji i weryfikacji problemów w oprogramowaniu i sprzęcie.

UML Diagrams.jpgPrototyp.svgWikimedia Server Architecture (simplified).svgSoftwareDevelopmentLifeCycle.jpgCodeCmmt002.svg
Diagramy UMLWzorce projektoweArchitektura oprogramowaniaMetodyki wytwarzania oprogramowaniaMetody formalne

Cyberbezpieczeństwo i kryptologia

Kryptologia dzieli się na kryptografię, czyli gałąź wiedzy o utajnianiu wiadomości oraz kryptoanalizę, czyli gałąź wiedzy o przełamywaniu zabezpieczeń oraz o deszyfrowaniu wiadomości przy braku klucza lub innego wymaganego elementu schematu szyfrowania (szyfru). Przykładowe metody to atak brute force czy kryptoanaliza liniowa. Bezpieczeństwo komputerowe (ang. computer security'', pot. cybersecurity, hacking) zajmuje się zapewnianiem poufności i bezpieczeństwa danych. Osoby posiadające szeroką i zaawansowaną wiedzę informatyczną, lecz nieetycznie z niej korzystający nazywani są hakerami. Ich szczególnym zainteresowaniem jest wyszukiwanie luk (dziur) w systemach operacyjnych, programach, sieciach komputerowych czy urządzeniach do niej podłączonych w celu przejęcia nad nimi zdalnej kontroli. Wyróżnia się wiele klasycznych ataków komputerowych takich jak na przykład DDoS, HTTP Flood, UDP flood, smurf attack, session hijacking, a także wiele rodzajów wirusów komputerowych, trojanów, snifferów czy rootkitów. W odpowiedzi powstało wiele technik obrony systemów informatycznych, np. obrona w głąb, security through obscurity czy głębokie ukrycie[37][38].

Virus Blaster.jpgRkhunter on Mac OS X.pngCircle of spam.svgSHA-1.svgCPU ring scheme.svg
Wirusy komputeroweSniffery i RootkityBotnetFunkcje skrótuObrona w głąb

Bazy danych, eksploracja danych, danologia

Danologia (ang. Data science) wykorzystuje metody naukowe, procesy, algorytmy, narzędzia i systemy informatyczne do wydobywania wiedzy i spostrzeżeń z wielu danych strukturalnych i nieustrukturyzowanych, tzw. Big data. Eksploracją danych (ang. data mining) nazywa się jeden z procesów uzyskiwania wiedzy z baz danych. Idea eksploracji danych polega na wykorzystaniu szybkości komputera do znajdowania ukrytych dla człowieka (właśnie z uwagi na ograniczone możliwości czasowe) prawidłowości w danych zgromadzonych w hurtowniach danych. Big data to termin odnoszący się do dużych, zmiennych i różnorodnych zbiorów danych, których przetwarzanie i analiza jest trudna, ale jednocześnie wartościowa. Obecne użycie terminu big data zwykle odnosi się do użycia analizy predykcyjnej, analizy zachowania użytkownika lub niektórych innych zaawansowanych metod analizy danych, które wydobywają wartość z danych, a rzadko do określonego rozmiaru zestawu danych. Baza danych to zorganizowany zbiór danych, ogólnie przechowywanych i dostępnych z systemu komputerowego. Tam, gdzie bazy danych są bardziej złożone, często są opracowywane przy użyciu formalnych technik projektowania i modelowania. System zarządzania bazą danych (DBMS) to oprogramowanie, które współdziała z użytkownikami końcowymi, aplikacjami i samą bazą danych w celu przechwytywania i analizy danych. Oprogramowanie DBMS obejmuje dodatkowo podstawowe narzędzia do zarządzania bazą danych.

Systemy i technologie komputerowe

Systemy informatyczne (ang. information processing systems) może opisać jako zbiór powiązanych ze sobą elementów, które przetwarzają informacje, najczęściej z wykorzystaniem sprzętu i oprogramowania komputerowego.

Sztuczna inteligencja

Sztuczna inteligencja (SI, ang. Artificial intelligence, AI) to obszar informatyki zajmujący się komputerowym symulowaniem inteligencji – tworzeniem modeli zachowań inteligentnych oraz systemów komputerowych symulujących te zachowania[39][40]. Szczególnym zainteresowaniem darzy się problemy które nie są bezpośrednio algorytmizowalne, jak rozpoznawanie obrazów, tłumaczenie maszynowe czy rozpoznawanie mowy. Sztuczna inteligencja jest związana z logiką rozmytą, algorytmami ewolucyjnymi, sieciami neuronowymi, robotyką i sztucznym życiem. SI bywa nazywane także inteligencją obliczeniową (ang. Computational Intelligence, CI). Uczeniem maszynowym (ang. Machine learning, ML) nazwa się analizę procesów uczenia się oraz tworzeniem systemów, które doskonalą swoje działanie na podstawie doświadczeń z przeszłości. Jedną z wiodących technologii jest TensorFlow[41]. Systemy te posiadają zdolność do samouczenia się i nazywa się je systemami samouczącymi. Podstawowymi metodami ML są symboliczne uczenie się (nazywane także indukcyjnym, ang. symbolic/inductive learning) oraz sztuczne sieci neuronowe (ang. artificial neural networks)[42]. Nazywa się tak połączone grupy węzłów, podobne do rozległej sieci neuronów w ludzkim mózgu. Głębokie sieci neuronowe (także głębokie uczenie maszynowe, ang. deep learning lub differential programming) to podkategoria uczenia maszynowego – nazywa się tak metody oparte na sztucznych sieciach neuronowych z uczeniem reprezentatywnym (ang. feature learning lub representation learning). Uczenie się może być nadzorowane, częściowo nadzorowane lub nienadzorowane[43]. Sztuczne życie (ang. artificial life, AL, niem. Künstliches Leben, KL) to kierunek badań, zorientowany na zrozumienie i wykorzystanie istoty życia. Pomysłodawcą i ojcem chrzestnym tego podejścia był amerykański matematyk i informatyk Christopher Langton, który zaproponował je w 1986 roku. Dziedzina obejmuje między innymi: tworzenie różnorodnych modeli życia oraz prowadzenie symulacji w środowisku programowym, sprzętowym i biochemicznym, symulacje ewolucji biologicznej oraz innych procesów biologicznych za pomocą metod informatycznych, badania i symulacje układów niebiologicznych, zachowujących się podobnie jak układy biologiczne (np. automatów komórkowych), algorytmy ewolucyjne i ewolucję programów komputerowych.

Artificial neural network.svgKernel Machine.svgTensorflow logo.svgDnaconformations.pngRule alignment.gif
Sieć neuronowaUczenie maszynoweTensorFlowAlgorytmy ewolucyjneInteligencja rozproszona

Systemy wbudowane i obliczenia czasu rzeczywistego

Systemy wbudowane to systemy komputerowe specjalnego przeznaczenia, który staje się integralną częścią obsługiwanego przez niego sprzętu komputerowego (hardware). System wbudowany musi spełniać określone wymagania ściśle zdefiniowane pod kątem zadań, które ma wykonywać. Każdy system wbudowany oparty jest na mikroprocesorze (lub mikrokontrolerze) zaprogramowanym do wykonywania ograniczonej liczby zadań lub nawet wyłącznie do jednego zadania. W systemach wbudowanych najpopularniejszymi modelami programowymi procesorów są RISC oparte na zasadach architektury harvardzkiej lub ARM. W systemach czasu rzeczywistego wynik i efekt działania jest zależny od chwili wypracowania tego wyniku. Systemy wbudowane współcześnie znajdują zastosowania np. do w autonomicznych pojazach, w ineternecie rzeczy czy w urządzeniach rozrywkowych.

Widzenie komputerowe i rozpoznawanie wzorców

Rozpoznawanie wzorców (ang. pattern recognition) to pole badawcze w obrębie uczenia maszynowego. Może być definiowane jako działanie polegające na pobieraniu surowych danych i podejmowaniu dalszych czynności zależnych od kategorii do której należą te dane. W rozpoznawaniu wzorców dąży się do klasyfikacji danych (wzorców) w oparciu o wiedzę aprioryczną lub o informacje uzyskane na drodze statystycznej analizy danych służącej wydobywaniu cech obiektów. Klasyfikowane wzorce to zazwyczaj grupy wyników pomiaru lub obserwacji definiujące położenie odpowiadających im punktów w wielowymiarowej przestrzeni cech.

Intersection over Union - object detection bounding boxes.jpgCosine Series Plus Noise TFM.pngOpenCV Logo with text svg version.svgCorner.pngCluster-2.svg
Computer VisionRozpoznawanie mowyOpenCVPrzetwarzanie języka naturalnegoAnaliza skupień

Przetwarzanie obrazów i mowy

Sygnały cyfrowe to strumienie bitów informacji, ich przetwarzanie polega na wykonaniu na nich pewnych operacji oraz ich interpretacją. Do głównych zastosowań należy przetwarzanie dźwięku, kompresja dźwięku, segmentacja obrazów, kodowanie wideo, przetwarzanie mowy, rozpoznawanie mowy oraz telekomunikacja cyfrowa.

Gry komputerowe i symulatory

Gry komputerowe to rodzaj oprogramowania komputerowego przeznaczonego do celów rozrywkowych lub edukacyjnych, wymagające od użytkownika (gracza) rozwiązywania zadań logicznych lub zręcznościowych. Gry komputerowe mogą być uruchamiane na komputerach osobistych, specjalnych automatach, konsolach do gry, telewizorach, telefonach komórkowych oraz innych urządzeniach mobilnych. Gry, podobnie jak symulacje komputerowe mają wirtualizować pewien fragment rzeczywistości. Zaawansowane gry i symulacje są pisane w czystych językach programowania, najczęściej obiektowych – jak Simula czy C++ lub są oparte na silnikach jak Unity. Dla mniej wymagających symulacji powstały także uniwersalne programy.

Osmosis computer simulation.jpgScreenshot phun.PNGBattle for Mandicor 0.0.5.pngRaytracing reflection.pngActivemarker2.PNG
Silniki graficzneGra symulacyjnaTworzenie gry komputerowejRenderowanieModelowanie trójwymiarowe

Interfejsy i interakcje człowiek-komputer

Interakcją człowiek–komputer nazywa się wzajemne oddziaływanie między człowiekiem a komputerem zachodzące poprzez interfejs użytkownika, czyli część sprzętu i oprogramowania zajmującą się obsługą urządzeń wejścia-wyjścia przeznaczonych dla interakcji z użytkownikiem. Istnieje wiele rodzajów interfejsów, są to m.in. wiersz poleceń, interfejs tekstowy czy interfejs graficzny. Obecnie prowadzone są intensywne badania nad wirtualną rzeczywistością, a także interfejsami mózg-komputer.

Linux command-line. Bash. GNOME Terminal. screenshot.pngHead-mounted display and wired gloves, Ames Research Center.jpgImage-AR TD0.jpgThe.Matrix.glmatrix.2.pngReactable Multitouch.jpg
Wiersz poleceńRzeczywistość wirtualnaRzeczywistość rozszerzonaInterfejs mózg–komputerUser experience

Technologie webowe, mobilne i multimedia

Aplikacja internetowa (ang. web application), zwana również aplikacją webową – program komputerowy, który pracuje na serwerze i komunikuje się poprzez sieć komputerową z hostem użytkownika komputera z wykorzystaniem przeglądarki internetowej użytkownika, będącego w takim przypadku interaktywnym klientem aplikacji internetowej. Od komputerów mobilnych (np. smartfony, tablety) oczekuje się, że mogą być swobodnie transportowane podczas normalnego użytkowania, oraz pozwalają na przesyłanie danych, głosu i wideo. System mobilny, także przetwarzanie mobilne (ang. mobile computing) obejmuje komunikację mobilną oraz sprzęt i oprogramowanie mobilne. Kwestie komunikacyjne obejmują sieci ad hoc, infrastrukturę sieci, a także właściwości komunikacyjne, protokoły, formaty danych i konkretne technologie. Typowy sprzęt mobilny zawiera często różne sensory, np. akcelerometry, które są w stanie wykrywać i odbierać sygnały. Najważniejsze mobilne systemy operacyjne to iOS oraz Android Linux, gdzie dominują języki Java i Kotlin[44].

Informatyka stosowana

Informatyka w biologii, chemii i kognitywistyce

  • Bioinformatyka (z niem. Bioinformatik) – interdyscyplinarna dziedzina obejmujmująca rozwój metod obliczeniowych służących do badania struktury, funkcji i ewolucji genów, genomów i białek. Ponadto odpowiada za rozwój metod wykorzystywanych do zarządzania i analizy informacji biologicznej gromadzonej w toku badań genomicznych oraz badań prowadzonych z zastosowaniem wysokoprzepustowych technik eksperymentalnych[45].
  • Chemioinformatyka (z niem. Chemoinformatik), także informatyka chemiczna to nauka zajmująca się wykorzystaniem informatyki do rozwiązywania różnorodnych problemów chemicznych jak np. teoria grafów chemicznych czy badania przestrzeni chemicznej[46][47]. Te techniki, nazywane często metodami in silico, wykorzystywane są do przeprowadzania obliczeń w blisko związanej z nią chemii obliczeniowej oraz w chemii kwantowej i procesie projektowania leków. Nauka ta znajduje zastosowanie w wielu gałęziach przemysłu chemicznego do analizy i przetwarzania danych chemicznych.
  • Neuroinformatyka (z niem. Neuroinformatik) znajduje zastosowania w kognitywistyce, przy badaniu przetwarzania informacji przez systemy nerwowe w celu zastosowania ich w systemach technicznych, m.in. w tworzeniu modeli obliczeniowych, narzędzi analitycznych i baz danych do udostępniania, integracji i analizy danych eksperymentalnych oraz rozwoju teorii na temat funkcji układu nerwowego. W kontekście INCF neuroinformatyka odnosi się do informacji naukowych na temat podstawowych danych eksperymentalnych, ontologii, metadanych, narzędzi analitycznych i modeli obliczeniowych układu nerwowego. Informatyka kognitywna także odnosi się do zastosowań w kognitywistyce[48]. Jednym z najbardziej znanych specjalistów kognitywstyki w Polsce jest Włodzisław Duch. Kolejnym powiązanym obszarem jest informatyka afektywna.
Genome viewer screenshot small.pngEvolution fate duplicate genes - vector.svgTE-Nervous system diagram.svgThe protein interaction network of Treponema pallidum.pngSvm separating hyperplanes.png
BioinformatykaGenoinformatyka(ang.)NeuroinformatykaChemioinformatykaInformatyka afektywna

Dalsze zastosowania

  • Geoinformatyka – zajmuje się numerycznym przetwarzaniem i analizowaniem informacji geograficznej (geoinformacji). Geoinformatyka jest opisywana jako nauka i technika zajmująca się strukturą i charakterem informacji geograficznych, jej przechwytywaniem, klasyfikacją, przetwarzaniem, przedstawieniem i wizualizacją[49]. Do zastosowań geoinformatyki zalicza się kartografię, geodezję, GPS, fotogrametrię, teledetekcję, analizę danych przestrzennych, mapowanie webowe i nawigację.
  • Informatyka mechaniczna, także mechainformatyka (z niem. Maschinenbauinformatik) – zastosowania informatyki w mechanice. Zajmuje się m.in. informatycznymi aspektami druku 3D, programowania CNC, mechaniki komputerowej, oraz oprogramowaniem do projektownia CAD.
  • Informatyka medyczna – zajmujuje się zbieraniem, przetwarzaniem, przechowywaniem, udostępnianiem i przesyłaniem danych medycznych oraz metodami tworzenia urządzeń i systemów informatycznych wykorzystywanych w medycynie. Informatyka medyczna znajduje zastosowania między innymi w systemach wspomagania diagnostyki (np. IBM Watson for Oncology)[50], oprogramowaniu robotów medycznych, systemach rejestracji, przetwarzania i analizy sygnałów i obrazów medycznych oraz systemach teleinformatycznych dla telemedycyny[51].
  • Informatyka materiałowa – zastosowania informatyki w materiałoznawstawie i inżynierii materiałowej.

Edukacja

Szkoła podstawowa, liceum i technikum

W ramach I etapu edukacji (klasy I-III) uczniowie mają zajęcia z edukacji informatycznej w ramach edukacji wczesnoszkolnej. Klasy IV-VIII (II etap edukacyjny) realizują przedmiot informatyka[52]. Najważniejszym celem kształcenia informatycznego uczniów jest rozwój umiejętności myślenia obliczeniowego (z ang. computational thinking), skupionego na kreatywnym rozwiązywaniu problemów z różnych dziedzin ze świadomym i bezpiecznym wykorzystaniem przy tym metod i narzędzi wywodzących się z informatyki[53]. Takie podejście, rozpoczęte w szkole podstawowej, jest kontynuowane w liceum ogólnokształcącym i technikum zarówno w zakresie podstawowym, jak i rozszerzonym. Przedmiot informatyka jest realizowany przez wszystkich uczniów w każdej klasie, począwszy od klasy I szkoły podstawowej i jest kontynuowany w liceum ogólnokształcącym i technikum[53].

Studia wyższe

Informatyka jest wykładana na uniwersytetach oraz na politechnikach. Na politechnikach programy studiów są nastawione na zagadnienia inżynierskie, a na uniwersytetach na zagadnienia naukowe. Istnieją także programy studiów nastawione na praktyczne zastosowania. Z uwagi na ograniczoną liczbę miejsc oraz fakt że informatyka jest chętnie wybieranym kierunkiem studiów, obowiązują na nią stosunkowo wysokie progi punktowe. W roku akademickim 2018/2019 zgłosiło się 42759 chętnych[54]. W najlepszych uczelniach w kraju w pierwszej kolejności są przyjmowani finaliści Olimpiady Informatycznej. Spośród najlepszych jest wyłaniana reprezentacja Polski na różne międzynarodowe konkursy informatyczne np. Akademickie mistrzostwa świata w programowaniu zespołowym[55].

Zobacz też

Przypisy

  1. Informatics Europe – Informatics Job Platform, www.informatics-europe.org.
  2. a b What is informatics?
  3. a b c Computer Science as a Profession, web.archive.org, 17 czerwca 2008 [dostęp 2020-01-14] [zarchiwizowane z adresu 2008-06-17].
  4. a b National Research Council, Computer Science: Reflections on the Field, Reflections from the Field, 4 października 2004, ISBN 978-0-309-09301-9 [dostęp 2020-01-14] (ang.).
  5. Computer Science or Informatics? Wstęp do informatyki.
  6. Karolina Wasielewska: Cyfrodziewczyny. Wydawnictwo Krytyki Politycznej, 2020. ISBN 978-83-66232-87-7.
  7. Marian Adamski: Informatyka – nauka, sztuka, czy rzemiosło?. „Uniwersytet Zielonogórski” – Miesięcznik Społeczności Akademickiej, 2002-09-30. [dostęp 2017-07-15].
  8. Technische Informatik Studium, www.ingenieurwesen-studieren.de [dostęp 2020-03-31].
  9. Informatyka o profilu praktycznym | Uniwersytet Gdański – University of Gdańsk, ug.edu.pl [dostęp 2020-03-31].
  10. Praktische Informatik Master of Science (M.Sc.) – FernUniversität in Hagen, www.fernuni-hagen.de [dostęp 2020-03-31].
  11. Wayback Machine, web.archive.org, 25 maja 2006 [dostęp 2020-01-15] [zarchiwizowane z adresu 2006-05-25].
  12. 46. spotkanie – Granice informatyki, Filozofia w informatyce, 22 listopada 2017 [dostęp 2020-04-19].
  13. The Joint Task Force for Computing Curricula 2005, Computing Curricula 2005 [zarchiwizowane z adresu 2014-10-21].
  14. CSAB, Inc., www.csab.org [dostęp 2020-01-14].
  15. The Joint Task Force for Computing Curricula, A volume of the Computing Curricula Series, web.archive.org, 2015 [dostęp 2020-04-17] [zarchiwizowane z adresu 2014-10-21].
  16. Peter J. Denning, Computer Science: The Discipline.
  17. prof.Krzysztof Diks, slajd z wykładu, moment 12:28.
  18. Michael Sipser, Wprowadzenie do teorii obliczeń.
  19. Computational Complexity: A Modern Approach / Sanjeev Arora and Boaz Barak, theory.cs.princeton.edu [dostęp 2020-03-27].
  20. Michael A. Nielsen, Isaac L. Chuang, Quantum Computation and Quantum Information (10th anniversary ed.), 2012, ISBN 978-0-511-99277-3.
  21. IBM zaprezentuje najpotężniejszy na świecie 53-kubitowy komputer kwantowy – NeeWS – GeekWeek.pl, www.geekweek.pl [dostęp 2020-03-27].
  22. List, Classic Papers in Programming Languages and Logic.
  23. Robert L. Constable, Naïve Computational Type Theory, Dordrecht: Springer Netherlands, 2002, s. 213–259, DOI10.1007/978-94-010-0413-8_7, ISBN 978-1-4020-0608-1 [dostęp 2020-03-27].
  24. Overview of the four main programming paradigms, people.cs.aau.dk [dostęp 2020-03-27].
  25. KrishnamurthiShriram, Teaching programming languages in a post-linnaean age, „ACM SIGPLAN Notices”, 2008, DOI10.1145/1480828.1480846 [dostęp 2020-03-27] (ang.).
  26. definicje, www.iszkowski.eu [dostęp 2020-05-18].
  27. a b TC Moduł 1 – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-01-15].
  28. TC Moduł 12 – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-03-28].
  29. Architektura komputerów, wykłady.
  30. P. Metzger, A. Jełowiecki, Anatomia PC, Helion, 2000.
  31. J. Biernat, Architektura komputerów, Wydawnictwo Politechniki Wrocławskiej, 2002.
  32. Wykład II. Pamięci półprzewodnikowe. Studia stacjonarne inżynierskie, kierunek INFORMATYKA Architektura systemów komputerowych – PDF Darmowe pobieranie, docplayer.pl [dostęp 2020-03-31].
  33. Studia informatyczne MIMUW, Programowanie niskopoziomowe – Moduł 1.
  34. Sieci komputerowe – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-03-29].
  35. Popularne urządzenia sieciowe, miroslawzelent.pl [dostęp 2020-03-29].
  36. Zestawienie protokołów, pasja-informatyki.pl [dostęp 2020-03-29].
  37. Daniel Schatz, Rabih Bashroush, Julie Wall, Towards a More Representative Definition of Cyber Security, „Journal of Digital Forensics, Security and Law”, 12 (2), 2017, DOI10.15394/jdfsl.2017.1476, ISSN 1558-7215 [dostęp 2020-03-28].
  38. Nikola Zlatanov, Computer Security and Mobile Security Challenges, 2015.
  39. Katalog Niemieckiej Biblioteki Narodowej, Kontrola Autorytatywna, portal.dnb.de [dostęp 2020-03-31].
  40. University of British Columbia, Faculty of Computer Science, Computational Intelligence and Knowledge.
  41. Bharath Ramsundar, Reza Bosagh Zadeh, Głębokie uczenie z TensorFlow, 2019, ISBN 978-83-283-5705-1.
  42. Jerzy Stefanowski, Wprowadzenie do maszynowego uczenia się, Instytut Informatyki, Politechnika Poznańska.
  43. Machine learning i deep learning – samouczące systemy. Leksykon 2017 | [dostęp 2020-03-29] (pol.).
  44. Łukasz Majchrzyk, Najpopularniejsze języki programowania (styczeń 2019 r.), mobiRANK.pl, 10 stycznia 2019 [dostęp 2020-04-16].
  45. Jacek Błażewicz, Bioinformatyka i jej perspektywy, 2011.
  46. Gasteiger J.(Editor), Engel T.(Editor), Chemoinformatics: A Textbook, 2004, ISBN 3-527-30681-1.
  47. A.R. Leach, V.J. Gillet, An Introduction to Chemoinformatics, ISBN 1-4020-1347-7.
  48. Wydawnictwo AGH – Podstawy informatyki kognitywnej, www.wydawnictwoagh.pl [dostęp 2020-08-22].
  49. P.L.N. Raju, Fundamentals of Geographic Information Systems.
  50. IBM Watson for Oncology [dostęp 2020-04-18].
  51. Informatyka medyczna to przyszłość – WSIiZ wykształci potrzebnych specjalistów!, WSIiZ w Rzeszowie [dostęp 2020-04-19].
  52. Edukcja informatyki w szkole podstawowej – Portal Oświatowy, www.portaloswiatowy.pl [dostęp 2020-04-03].
  53. a b Podstawa programowa – Informatyka – Liceum/technikum, podstawaprogramowa.pl [dostęp 2020-04-19].
  54. Wojciech Martyński, Kierunki studiów 2020 (Najlepsze i najbardziej przyszłościowe), InterviewMe, 11 sierpnia 2015 [dostęp 2020-04-03].
  55. Stefan Jackowski, Jak zmieniał się Wydział Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego w latach 1991–2016.

Media użyte na tej stronie

Internet map 1024.jpg
Autor: The Opte Project, Licencja: CC BY 2.5
Mapa części Internetu oparta o stan z 15 stycznia 2005, dane ze strony opte.org. Każda linia wytyczona jest między dwoma węzłami, reprezentującymi dwa adresy IP. Długość linii wskazuje na opóźnienie między tymi węzłami. Ten wykres reprezentuje niecałe 30% sieci klasy C osiągalnej przez programy zbierające dane na początku 2005 roku. Linie są pokolorowane w zależności od odpowiadającym im alokacjom RFC 1918 w następujący sposób:
  • Ciemnoniebieski: net, CA, US
  • Zielony: com, org
  • Czerwony: mil, gov, edu
  • Żółty: JP, CN, TW, UA, de
  • Magenta: uk, it, pl, fr
  • Złoty: br, kr, nl
  • Biały: nieznany
Prototyp.svg
Autor: jarling, Licencja: CC BY 3.0
prototype design pattern, language german
Osmosis computer simulation.jpg
Autor: Original uploader was Lazarus666 at en.wikipedia, Licencja: CC-BY-SA-3.0

This is a shot from a three dimensional computer simulation of the process of en:osmosis. The blue en:mesh is impermeable to the larger balls, whereas all of the balls are (in the animated version) bouncing about according to the rules of physical simulation of the kinetics of an ideal gas. Averaged over long period of time, each ball has has the same kinetic energy as each of the other balls, even though at any given moment the velocities are distributed according to the appropriate en:Boltzmann functions. Likewise, each species (in this case color) of balls (as a group) exerts time averaged force (due to the bouncing) upon the walls of the box, which corresponds to the partial en:pressure contribution associated with that group. These properties emerge even though the collision function used in the simulation is trivial, to wit:

void Mass::collide (Mass *X)
{
  vector v_cm;
  v_cm = (velocity*mass+X->velocity*X->mass)/(mass+X->mass);
  velocity = v_cm*2 - velocity;
  X->velocity = v_cm*2 - X->velocity;
  m_bCollision = true;
  X->m_bCollision = true;
}
Accordingly, one can make theoretical assumtions about the behaviour of such mixtures according to the application of Dalton's law of partial pressures, and so on, and thereby gain some insights into how certain physical processes really work.
Artificial neural network.svg
Autor: en:User:Cburnett, Licencja: CC-BY-SA-3.0
An example artificial neural network with a hidden layer
Quellcodebeispiel C++.png
A Code Example in C++ (Screenshot of Dev-C++)
DFAexample.svg
An example of a DFA state diagram
Thread pool.svg
(c) I, Cburnett, CC-BY-SA-3.0
A simple thread pool. The task queue has many waiting tasks (blue circles). When a thread opens up in the queue (green box with dotted circle) a task comes off the queue and the open thread executes it (red circles in green boxes). The completed task then "leaves" the thread pool and joins the completed tasks list (yellow circles).
Rule alignment.gif
flocking rule: alignment
Battle for Mandicor 0.0.5.png
Autor: Battle for Mandicor project, Licencja: GPL
screenshot of an early phase of developement of Battle for Mandicor v 0.0.5, really ugly graphics
Architektur-der-informatik.png
(c) Mkleine, CC-BY-SA-3.0
Versuch, die Architektur der Informatik zu visualisieren. Urheber: Matthias Kleine (selbst erstellt, März 2005)
Rozszerzonagwiazda.jpeg
network topology
Svm separating hyperplanes.png
Graphic showing 3 Hyperplanes in 2D. H3 doesn't separate the 2 classes. H1 does, with a small margin and H2 with the maximum margin.
CPU ring scheme.svg
Autor:

User:Sven, original Author User:Cljk

This file was made by User:Sven
Nuvola apps locale.svg
Translation

If this image contains text, it can be translated easily into your language. If you need help, contact me

SemiPD-icon.svg
Flexible licenses

If you want to use this picture with another license than stated below, contact me

Nuvola apps email.png
Contact the author

If you need a really fast answer, mail me. If you need only a fast answer, write me here.

, Licencja: CC-BY-SA-3.0
This explains the CPU ring scheme.
TE-Nervous system diagram.svg
Autor:
TheEmirr-logo.svg
, Licencja: CC BY 3.0
Nervous system.
Dnaconformations.png
Autor: Mauroesguerroto, Licencja: CC BY-SA 4.0
A-DNA, B-DNA, and Z-DNA conformations of DNA.

12 base-pair steps composed by 13 base-pairs are show in a side view and top view.

The symmetrical features of the double-helix are highlighted with the top view panel.
Superscalarpipeline.png
Autor: unknown, Licencja: CC-BY-SA-3.0
Kernel Machine.svg
Autor:
Vector:
, Licencja: CC BY-SA 4.0
Kernel machines are used to compute non-linearly separable functions into a higher dimension linearly separable function.
X86 Paging 4K.svg
Autor: RokerHRO, Licencja: CC BY-SA 3.0
Schematic drawing of translation of linear to physical addresses in 32 bit protected mode. Page size: 4 KiByte, no PAE
Uarm metal wiki2.jpg
Autor: Siaopan, Licencja: CC BY-SA 4.0
uarm metal wiki2
TSP Deutschland 3.png

Kürzester Rundreiseweg durch die 15 größten Städte Deutschlands (14 sind genannt, Dortmund fehlt).

Insgesamt sind 14!/2 = 43.589.145.600 verschiedene Wege möglich.
System operacyjny schemat ogolny.svg
Schemat systemu operacyjnego
Wikipedia in binary.gif
Autor: User:Atyndall (See account on English Wikipedia), Licencja: CC BY-SA 3.0
The ASCII binary translation of the word Wikipedia morphs into the English translation.
Intel Core2 arch.svg
(c) I, Appaloosa, CC-BY-SA-3.0
Intel Core 2 architecture.
Kellerautomat.svg
Pushdown automaton, self-made
Wikimedia Server Architecture (simplified).svg
Autor: Ryan lane, Licencja: CC BY-SA 3.0
A simplified version of the Wikimedia server infrastructure, showing the core architecture of a single datacenter.
Complexity classes.svg
This is a diagram of complexity classes for Complexity classes P and NP.
Kapsułkowanie danych wg modelu odniesienia OSI.svg
Autor: ToAr, Licencja: CC BY-SA 4.0
Kapsułkowanie danych wg modelu odniesienia OSI
Linux command-line. Bash. GNOME Terminal. screenshot.png
Sample of Bash in GNOME Terminal. Screenshot taken in Fedora. Results of ping, pwd, cd, yum and ls command.
Half Adder.svg
Basic Half Adder Circuit.
The.Matrix.glmatrix.2.png

The Matrix - Screenshot of the famous GLMatrix screensaver
Sorting quicksort anim.gif
(c) en:User:RolandH, CC-BY-SA-3.0
Animacja algorytmu sortowania szybkiego sortującego tablicę losowych wartości.
Virus Blaster.jpg
Hex dump of the Blaster worm, showing a message left for Microsoft founder Bill Gates by the programmer
DeCasteljau-evaluate point.svg
Autor: Wojciech Muła, Licencja: CC-BY-SA-3.0
Algotytm deCasteljau - wyznaczanie punktu na krzywej Beziera
Syntax tree.svg
SVG version of Syntax tree.png. Shows a breakdown of the sentence "Colorless green ideas sleep furiously".
Lambda calculus-Church numerals.png
Church encoding of the natural numbers in lambda calculus
Intel Nehalem arch.svg
Autor: Appaloosa, Licencja: CC-BY-SA-3.0
Intel Nehalem microarchitecture
CPU block diagram.svg
Autor: , Licencja: CC-BY-SA-3.0
Block diagram of a hypothetical simple CPU, showing instruction fetch, decode, data registers, ALU, and memory interface, and major relationships.
FSV-OSX-screenshot.png
Autor: Software by Daniel Richard G., Licencja: LGPL
Screenshot of File System Visualizer, showing a user's home directory on Mac OS X
For loop.png
Autor: self, Licencja: CC BY 4.0
For loop illustration, from i=0 to i=2, resulting in data1=200
Image-AR TD0.jpg
Screenshot of mobile augmented reality game.
UML Diagrams.jpg
Autor: Kishorekumar 62, Licencja: CC-BY-SA-3.0
A collage of UML diagrams including use case diagram, class diagram, activity diagrams, sequence diagrams, deployment diagram,component diagrams, composite structure diagram, package diagrams.
MIMD.svg
(c) I, Cburnett, CC-BY-SA-3.0
Flynn's Taxonomy of a MIMD design: multiple instruction, multiple data. Each "PU" (processing unit) does not necessarily correspond to a processor, just some functional unit that can perform processing. The PU's are indicated as such to show relationship between instructions, data, and the processing of the data.
Circle of spam.svg
Autor: odder, Licencja: CC-BY-SA-3.0
Schemat wysyłania mailowego spamu.
Device-driver-pl.svg
Komunikacja pomiędzy aplikacjami użytkownika a sprzętem
Apple II Monitor.png
Zrzut ekranu monitora kodu maszynowego komputera Apple II
Corner.png
Photograph taken by author and output of algorithm written by author using Matlab programming language.
C Hello World Program.png
Autor: Esquivalience, Licencja: CC0
A C program that prints Hello World when invoked
Python add5 syntax.svg
Autor: Xander89, Licencja: Copyrighted free use
example of Python language
Raster graphic fish 20x23squares sdtv-example.png
Autor: Andreas -horn- Hornig, de:Benutzer:Sjr, Licencja: CC BY-SA 2.5


Deutsch:
Beispiel für SDTV-Auflösung an dieser Rastergraphik eines Fisches. Bestehend aus 20x23 Quadraten
English:
An example for SDTV-resolution using a raster graphic of a fish. Made of 20x23 squares.

Originalbild/Original photo: Image:Raster graphic fish 40X46squares hdtv-example.jpg

created on de:Benutzer Diskussion:Andreas -horn- Hornig/Bildwerkstatt
SoftwareDevelopmentLifeCycle.jpg
Autor: Abrahamsson, P., Salo, O., Ronkainen, J., & Warsta, J., Licencja: CC BY-SA 3.0
It shows that agile methods are focused on different aspects of the software development life-cycle.
Screenshot phun.PNG
Autor: unknown, Licencja: GPL
phun windows screenshot
Comparison computational complexity.svg
Autor: Cmglee, Licencja: CC BY-SA 4.0
Graphs of number of operations, N vs input size, n for common complexities, assuming a coefficient of 1
Compiler.svg
(c) I, Surachit, CC-BY-SA-3.0
An ideal multi-language, multi-target compiler
SimplexRangeSearching.svg
Simplex range searching.
Evolution fate duplicate genes - vector.svg
Autor: Smedlib, Licencja: CC BY-SA 4.0
The three evolutionary fates of duplicate genes. Vectorized version of original work by Veryhuman.
Intersection over Union - object detection bounding boxes.jpg
Autor: Adrian Rosebrock, Licencja: CC BY-SA 4.0
An photo of a stop sign with two bounding boxes: ground-truth and prediction.
Pavlovsk Railing of bridge Yellow palace Winter bw threshold.jpg
The bridge with a delicate iron-cast railing. Pavlovsk park.
ABasicComputer.gif
Autor: Lambtron, Licencja: CC BY-SA 4.0
Block diagram of a basic computer with uniprocessor CPU. Black lines indicate data flow, whereas red lines indicate control flow. Arrows indicate the direction of flow.
Activemarker2.PNG
Modified version of en:Image:Activemarker2.jpg - no logo. Old version was PD, this also PD by me.
Raytracing-schemat.png
(c) Wojciech mula z polskiej Wikipedii, CC BY-SA 2.5
Sposób określania barwy piksela w raytracigu.
IF-THEN-ELSE-END flowchart.svg
Autor: Vectorized by Snubcube based on https://commons.wikimedia.org/wiki/File:IF-THEN-ELSE-END_flowchart.png, Licencja: CC-BY-SA-3.0
A flowchart detailing the use of the IF-THEN command using HP-BASIC.
Head-mounted display and wired gloves, Ames Research Center.jpg
A woman wearing a head-mounted display incorporating Pop Optics goggles developed by NASA's Ames Research Center, and wired gloves. The goggles are now displayed in the Dulles Annex of the National Air and Space Museum of the Smithsonian Institution.
Logic.svg
Autor: It Is Me Here, Licencja: CC BY-SA 3.0
SVG version of ¬(p˄¬p)
Cluster-2.svg
Cluster (IA)
An illustration of the dining philosophers problem.png
(c) Benjamin D. Esham / Wikimedia Commons, CC BY-SA 3.0

An illustration of the dining philosophers problem.

Philosophers clockwise from top - Plato, Konfuzius, Socrates, Voltaire and Descartes.
Computer system bus(fixed).svg
Autor: W Nowicki, Licencja: CC BY-SA 3.0
An updated version of the file on http://commons.wikimedia.org/wiki/File:Computer_system_bus.svg#file with fixed I/O to Address Bus
Programmiersprache Umfeld.png
Autor: VÖRBY, Licencja: Copyrighted free use
Zusammenhänge zum Begriff 'Programmiersprache'
Reactable Multitouch.jpg
Autor: Daniel Williams from NYC, USA, Licencja: CC BY-SA 2.0
A Reactable at the Altman Center in 2007
SHA-1.svg
Autor: unknown, Licencja: CC BY-SA 2.5
Z80 arch.svg
Autor: Appaloosa, Licencja: CC-BY-SA-3.0
Z80 architecture
Distributed-parallel.svg
Autor: Miym, Licencja: CC BY-SA 3.0
Distributed and parallel systems
Tensorflow logo.svg
Vector logo of Tensorflow
OpenCV Logo with text svg version.svg
The OpenCV logo is composed of the 3 capital letters O, C, V arranged in a triangle. The logo combines several motifs in the spirit of Open Source and Computer Vision. SVG-version.
Rkhunter on Mac OS X.png
Autor: Oryginalnym przesyłającym był CyberSkull z angielskiej Wikipedii, Licencja: GPL
rkhunter 1.2.7 on Mac OS X v10.4.3's Terminal. This is a screen shot of GPL-licensed software
SPOF pl.png
Autor: , Licencja: CC-BY-SA-3.0
Przykład Single Point of Failure
The protein interaction network of Treponema pallidum.png
Autor: Häuser et al., Licencja: CC BY 1.0
The protein interaction network of T. pallidum including 576 proteins and 991 interactions. Nodes are color-coded according to TIGR main roles. Proteins involved in DNA metabolism are shown as enlarged red circles.
Texture mapping demonstration animation.gif
Autor: Drummyfish, Licencja: CC0
This is an animation I made with Blender and GIMP. It show mapping of a 2D hand-painted texture onto a simple 3D model of a house. I used my own 3D model and texture, from my RPG item collection, both under CC0. I release this animation as CC0 as well.
SIMD cpu diagram1.svg
(c) Decora z angielskiej Wikipedii, CC BY-SA 3.0
Diagram showing SIMD cpu. made by Decora (talk) 00:13, 13 October 2011 (UTC) using Ubuntu, Inkscape, and http://freetengwar.sourceforge.net/tengtelc.html Tengwar Telcontar font by Johan Winge, J. Wust, and others at the Free Tengwar Font Project.
Contraction vertices.jpg
Autor: Jxfeng, Licencja: CC BY-SA 3.0
An example of contraction of two vertices in a graph
Tree (computer science).svg
Autor: Paddy3118, Licencja: CC BY-SA 4.0
A generic, and so non-binary, unsorted, and with duplicated labels; arbitrary diagram of a tree.

Based on https://commons.wikimedia.org/wiki/File:Binary_tree.svg but made to not be a binary tree. Created using graphviz and dot:

digraph wikip {

   node [fontsize=12 height=0.1 nodesep=0.25 width=0.1]
   2.1 -> 7 -> 2.2
   7 -> 10
   7 -> 6 -> 5.1
   6 -> 11
   2.1 -> 5.2 -> 9 -> 4
   2.1 [label=2 color=brown fontcolor=green fontname=bold]
   2.2 [label=2]
   5.1 [label=5]
5.2 [label=5]
DHCP session.svg
Autor: Gelmo96, Licencja: CC BY-SA 4.0
An illustration of a typical non-renewing DHCP session; each message may be either a broadcast or a unicast, see User talk:Dsimic § File:DHCP session en.svg for more details
Programming paradigms.svg
Autor: MovGP0, Licencja: CC BY-SA 3.0
Overview over different programming paradigms