Informatyka

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania
Zobacz też: czasopismo „Informatyka”.
large capital lambda Językiem komputerów jest kod maszynowy
Prowadzone są badania by systemy informatyczne symulowały inteligencję Informatyka techniczna koncentruje się architekturze komputerów na poziomie sprzętowym
Informatyka zajmuje się teorią informacji i obliczeń oraz technikami jej wdrażania i stosowania w praktyce

Informatyka – dziedzina nauk ścisłych i techniki zajmująca się przetwarzaniem informacji, w tym metodami ich przetwarzania oraz technologiami wytwarzania układów je przetwarzających. Zajmuje się badaniem procesów, które wchodzą w interakcje z danymi i które mogą być reprezentowane jako dane w postaci programów. Umożliwia wykorzystanie algorytmów do manipulowania, przechowywania i przesyłania informacji cyfrowych, bada teorię obliczeń i praktykę projektowania systemów komputerowych. Według Petera J. Denninga podstawowym pytaniem leżącym u podstaw informatyki jest: „Co można (skutecznie) zautomatyzować?”[1].

Korzenie informatyki leżą w matematyce, lecz wraz z powstaniem komputerów rozwinęła się do odrębnej dyscypliny. Informatyka teoretyczna pozostaje jednak z nią nadal w ścisłej relacji – podobnie jak fizyka wykorzystuje do opisu język matematyczny.

Etymologia[edytuj | edytuj kod]

W języku polskim termin informatyka zaproponował w październiku 1968 Romuald Marczyński (w Zakopanem, na ogólnopolskiej konferencji poświęconej maszynom matematycznym), na wzór francuskiego informatique i niemieckiego Informatik. Branża informatyczna jest często określana jako branża IT.

Określenie „informatyka” nie ma jednoznacznego odpowiednika w języku angielskim. Najczęściej jest tłumaczona jako computer science – dosłownie: nauka o komputerze – co może być mylące i dlatego jest krytykowane w środowiskach akademickich i informatycznych[2]. Stąd proponowanych jest wiele alternatywnych nazw jak information technology (IT), information science, information engineering, information and computing technology, computing czy informatics. Obecnie pojęcia te są często używane zamiennie, w istocie obejmują ten sam obszar wiedzy, choć niekiedy z różnym podejściem[3].

Określenie computer science (CS) odnosi się przede wszystkim do informatyki rozumianej jako nauka ścisła, obejmującej informatykę teoretyczną i jej naukowe zastosowania, podczas gdy informatyka techniczna skupiająca się warstwie sprzętowej systemów komputerowych jest najczęściej tłumaczona jako computer engineering (CE), podobnie jak niemiecka technische Informatik rozumiana jako nauka inżynierska[4]. Natomiast określenie information technology (IT) jest najczęściej spotykane w kontekście tworzenia systemów informatycznych w rozumieniu biznesowym. Określenie software engineering (SE) dawniej odnosiło się ogólnie do programowania, lecz obecnie jest coraz częściej używane w kontekście zarządzania procesem wytwarzania oprogramowania. IT i SE są czasem na wzór niemiecki zbiorczo nazywane informatyką praktyczną (niem. praktische Informatik)[5][6].

Przegląd dyscyplin informatycznych[edytuj | edytuj kod]

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[7][8]. 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)[9] – 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 telekomunikacja, 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[10].

Informatyka teoretyczna[edytuj | edytuj kod]

Teoretyczna informatyka 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. Wśród jej głównych obszarów wyróżnia się:

Algorytmika[edytuj | edytuj kod]

 Osobny artykuł: Algorytmika.

Algorytmika zajmuje się projektowaniem i analizą algorytmów i struktur danych. Jest najstarszą i jedną z najważniejszych dziedzin informatyki. Wśród jej ważniejszych dyscyplin można wymienić projektowanie i analizę algorytmów, optymalizację kombinatoryczną, logiką algorytmiczną czy geometrię obliczeniową. Historycznie podstawowymi zagadnieniami są algorytmy sortowania, kompresji, przeszukiwania czy szyfrowania oraz metody numeryczne, m.in. aproksymacji, interpolacji i całkowania numerycznego. 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. Algorytmika stanowi trzon dla bardzo wielu innych gałęzi informatyki jak chociażby grafika komputerowa, uczenie maszynowe czy przetwarzanie obrazów.

Teoria informacji i kodowania[edytuj | edytuj kod]

 Osobny artykuł: Teoria informacji.

Teoria informacji zajmuje się problematyką informacji, w tym teorią 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, kod uzupełnieniowy, kod Hamminga, kod Graya czy kod znak-moduł.

Teoria obliczeń i automatów[edytuj | edytuj kod]

 Osobne artykuły: Teoria obliczeńTeoria automatów.

Teoria obliczeń to dział informatyki dzielący się na teorię obliczalności dostarczającą podstaw teoretycznych do odpowiedzi na pytanie czy dany problem jest możliwy do rozwiązania przy użyciu komputerów oraz na złożoność obliczeniową w uproszczeniu mówiącą jak szybko i jakim kosztem czasowym i pamięciowym da się to policzyć[11][12]. Jednym z ważniejszych jej obszarów jest teoria automatów. Przykładowymi zagadnieniami są Maszyna Turinga czy Hipoteza Churcha-Turinga.

Teoria języków programowania[edytuj | edytuj kod]

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

Informatyka kwantowa[edytuj | edytuj kod]

 Osobny artykuł: 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[17]. 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[18].

Przetwarzanie równoległe[edytuj | edytuj kod]

 Osobny artykuł: Obliczenia równoległe.

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ń.

Kryptologia[edytuj | edytuj kod]

 Osobny artykuł: Kryptologia.

Kryptologia zajmuje się szyfrowaniem tj. przekazywaniem i przechowywaniem informacji w sposób zabezpieczony przed niepowołanym dostępem. 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). Jest ściśle związana bezpieczeństwem komputerowym, jej ważniejsze metody to przykładowo metoda brute force czy kryptoanaliza liniowa. Kryptologię wykorzystuje się ją np. w rozwiązaniach zapewniających bezpieczeństwo kart bankomatowych, haseł komputerowych i handlu internetowego.

Metody formalne[edytuj | edytuj kod]

 Osobny artykuł: Metody formalne.

Metody formalne – tworzenie specyfikacji, projektowania i weryfikacji oprogramowania lub systemów informatycznych w języku matematycznym. 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.

Informatyka techniczna[edytuj | edytuj kod]

 Osobny artykuł: Inżynieria komputerowa.

Informatyka techniczna (z niem. Technische Informatik) nazywana także inżynierią komputerową (z ang. Computer engineering, czasem także hardware engineering) zajmuje się architekturą, projektowaniem, wdrażaniem, oceną i działaniem systemów komputerowych, w tym komunikacyjnych i wbudowanych na poziomie sprzętowym oraz oprogramowania sprzętowego. Historycznie informatyka techniczna jest opisywana jako interfejs między informatyką teoretyczną a elektrotechniką. Z drugiej strony informatyka nie ogranicza się jedynie do implementacji w układach elektronicznych, obecnie prowadzone są badania nad komputerami optycznymi, a nawet biologicznymi.

Technika cyfrowa[edytuj | edytuj kod]

 Osobny artykuł: Technika cyfrowa.

Współczesna technika cyfrowa obejmuje układy logiczne, syntezę logiczną i odwzorowanie technologiczne[19]. Jej zagadnienia kształtowane z jednej strony przez języki opisu sprzętu,, a z drugiej przez programowalne moduły logiczne[19]. Stanowi pomost łączący sprzęt z oprogramowaniem. Rozwój techniki cyfrowej jest bezpośrednio związany z rozwojem technologii mikroelektronicznych. Technologia dostarcza konstruktorom układów cyfrowych specjalizowane układy scalone (ang. Application Specific Integrated Circuits) o zasobach sprzętowych rzędu kilkudziesięciu milionów tranzystorów, co z punktu widzenia techniki cyfrowej jest równoważne kilku milionom bramek logicznych[20][21].

Architektura komputerów[edytuj | edytuj kod]

 Osobny artykuł: Architektura komputera.

Architektura komputerów (AK) to główny obszar informatyki technicznej zajmujący się projektowaniem i podstawową strukturą systemów komputerowych oraz budową i organizacją ich podzespołów. Jej główny obszar stanowi architektura procesorów na którą składa się model programowy procesora oraz mikroarchitektura procesora[22]. 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 zagadniania to DMA czy kontroler[23][24].

Magistrale i pamięci komputerowe[edytuj | edytuj kod]

Poza procesorami, 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[25].

Programowanie niskopoziomowe[edytuj | edytuj kod]

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[26].

Technika mikroprocesorowa[edytuj | edytuj kod]

Techniką mikroprocesorową nazywana jest gałąź informatyki skupiająca się na tworzeniu systemów przetwarzających informacje z wykorzystaniem mikrokontrolerów, czyli mikrokomputerów jednoukładowych, μC, MCU. Ze względu na ich stosunkowo niewielkie rozmiary i pobór mocy są stosowane do sterowania różnymi urządzeniami np. silnikami samochodowymi tworząc systemy wbudowane. Programowane są najczęściej w językach z rodziny C. Zagadnienia techniki mikroprocesorowej obejmują zarówno wewnętrzną architekturę, ich programowanie, jak i zastosowania mikrokontrolerów – do typowych zadań należy przykładowo obsługa kontrolerów transmisji szeregowej (m.in. UART, SPI, I2C), obsługa przetworników analogowo-cyfrowych czy wykorzystywanie w programie timerów μC, w tym tworząc wektory ich przerwań.

Systemy komputerowe[edytuj | edytuj kod]

 Osobny artykuł: System komputerowy.

System komputerowy to układ współdziałania dwóch składowych: sprzętu komputerowego oraz oprogramowania, działających coraz częściej również w ramach sieci komputerowej. Można mówić o następujących poziomach takiego systemu: sprzęt komputerowy, system operacyjny (oprogramowanie systemowe), oprogramowanie narzędziowe, oprogramowanie użytkowe (aplikacje). W pełni zautomatyzowany system komputerowy może działać bez udziału człowieka. Systemy komputerowe stanowią lub są jedną z części systemu informatycznego.

Teleinformatyka[edytuj | edytuj kod]

 Osobny artykuł: Teleinformatyka.

Teleinformatyka (również technologie informacyjno-komunikacyjne, technologie teleinformacyjne, także ICTakronim od ang. Information and Communication Technologies) – dział informatyki łączący ją z telekomunikacją, zajmujący się techniką przetwarzania, gromadzenia i przesyłania informacji w formie cyfrowej. W zakres pojęciowy technologii ICT wchodzą wszystkie media komunikacyjne (Internet, sieci bezprzewodowe, sieci Bluetooth, telefonia stacjonarna, komórkowa, satelitarna, technologie komunikacji dźwięku i obrazu, radio, telewizje itp.) oraz media umożliwiające zapis informacji (pamięci przenośne, dyski twarde, dyski CD/DVD, taśmy itp.), a także sprzęty umożliwiające przetwarzanie informacji[27][28].

Transmisja danych[edytuj | edytuj kod]

 Osobna strona: Kategoria:Transmisja danych.

Tansmisją danych nazywa się przesyłanie bądź wymianę danych pomiędzy komputerami wpiętymi w sieć, czy też pomiędzy komputerami a urządzeniami peryferyjnymi[29]. Wraz z rozwojem teleinformatyki powstało wiele rodzajów transmisji. Wyróżnia się transmisję synchroniczną i asynchroniczną. Możemy także rozróżnić przesyłanie danych równoległe i szeregowe[30][31].

Cyfrowe przetwarzanie sygnałów[edytuj | edytuj kod]

Cyfrowe przetwarzanie sygnałów (ang. Digital Signal Processing, DSP) polega na wykonywaniu pewnych operacji na sygnałach cyfrowych oraz interpretacją tychże sygnałów z wykorzystaniem komputerów lub innych układów przetwarzania informacji. Do głównych zastosowań należy przetwarzanie dźwięku, kompresja dźwięku, cyfrowe przetwarzanie obrazów, kodowanie wideo, przetwarzanie mowy, rozpoznawanie mowy oraz telekomunikacja cyfrowa.

Sieci komputerowe[edytuj | edytuj kod]

 Osobny artykuł: Sieć komputerowa.

Sieci komputerowe to gałąź informatyki mająca na celu projektowanie i administrowanie sieciami między komputerami na całym świecie. Sieć komputerowa to cyfrowa sieć komunikacyjna, która umożliwia węzłom współdzielenie zasobów. W sieciach komputerowych urządzenia komputerowe wymieniają się danymi za pomocą połączeń (łączy danych) między węzłami. 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. Współczesne sieci składają się z warstw, 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[32].

Protokoły i urządzenia sieciowe[edytuj | edytuj kod]

Jednymi z podstawowych zagadnianień 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[33]. 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ą hardwaru, oprogramowania lub obu jednocześnie[34].

Sieci telekomunikacyjne[edytuj | edytuj kod]

 Osobny artykuł: Sieć telekomunikacyjna.

Sieci telekomunikacyjne to systemy transmisyjne oraz urządzenia komutacyjne lub przekierowujące, a także inne zasoby, które umożliwiają nadawanie, odbiór lub transmisję sygnałów za pomocą przewodów, fal radiowych, optycznych lub innych środków wykorzystujących energię elektromagnetyczną. Poza sieciami komputerowymi, należą do nich także publiczne komutowane sieci telefoniczne (PSTN) czy sieci cyfrowe ISDN.

Systemy informatyczne[edytuj | edytuj kod]

Systemy operacyjne[edytuj | edytuj kod]

 Osobny artykuł: System operacyjny.

System operacyjny to oprogramowanie zarządzające systemem komputerowym, tworzące środowisko do uruchamiania i kontroli zadań. Najważnieszym 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 nazwywa się administratorami (pot. adminami). Współcześnie najważniejszą rodziną systemów operacyjnych jest GNU/Linux oraz Windows.

Systemy wbudowane[edytuj | edytuj kod]

 Osobny artykuł: System wbudowany.

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.

Systemy rozproszone[edytuj | edytuj kod]

 Osobny artykuł: Przetwarzanie współbieżne.

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 matematycznych do ogólnych 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.

Systemy baz danych[edytuj | edytuj kod]

 Osobny artykuł: Baza 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. Często termin baza danych jest również używany do luźnego odniesienia do dowolnego DBMS, systemu bazy danych lub aplikacji powiązanej z bazą danych. Wyróżnia się bazy proste do których należy kartotekowe i hierarchiczne, w tym sieciowe oraz złożone, przede wszystkim relacyjne, obiektowe, relacyjno-obiektowe, strumieniowe, temporalne czy nierelacyjne.

Systemy mobilne[edytuj | edytuj kod]

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.

Chmury obliczeniowe[edytuj | edytuj kod]

 Osobny artykuł: Chmura obliczeniowa.

Chmura obliczeniowa (także przetwarzanie w chmurze, ang. cloud computing) to model przetwarzania danych oparty na użytkowaniu usług dostarczonych przez zewnętrznego usługodawcę. Zasada działania polega na przeniesieniu całego ciężaru świadczenia usług IT (danych, oprogramowania lub mocy obliczeniowej) na serwer i umożliwienie stałego dostępu poprzez komputery klienckie. Dzięki temu ich bezpieczeństwo nie zależy od tego, co stanie się z komputerem klienckim, a szybkość procesów wynika z mocy obliczeniowej serwera. Pojęcie chmury nie jest jednoznaczne, w szerokim znaczeniu przetwarzanym w chmurze jest wszystko co jest przetwarzane na zewnątrz zapory sieciowej.

Interfejsy człowiek-komputer[edytuj | edytuj kod]

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. Istniej wiele rodzai 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.

Bezpieczeństwo komputerowe[edytuj | edytuj kod]

Bezpieczeństwo komputerowe to obszerna dziedzina zajmująca się zapewnieniem 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 rodzai 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[35][36].

Analiza wydajności obliczeniowej[edytuj | edytuj kod]

Analiza wydajności obliczeniowej to badania przepływu danych przez komputery, której ogólnym celem jest poprawa przepustowości, kontrola czasu odpowiedzi, efektywne wykorzystanie zasobów, eliminacja wąskich gardeł i szacowanie wydajności przy przewidywanych obciążeniach szczytowych. Podstawową metodą jest testowanie wzorcowe (pot. benchmarki), które służy do porównywania miedzy sobą mocy obliczeniowych systemów zawierających różne układy scalone i/lub różne architektury systemów.

Grafika komputerowa[edytuj | edytuj kod]

 Osobny artykuł: 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 rozwiją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.

Grafika rastrowa i wektorowa[edytuj | edytuj kod]

 Osobne artykuły: Grafika rastrowaGrafika wektorowa.

W grafika wektorowej obraz jest rysowany za pomocą odcinków lub łuków. Niegdyś w ten sposób powstawał obraz na ploterach kreślących, a jeszcze do lat 80. XX wieku były wykorzystywane monitory CRT, które kreśliły obraz w analogiczny sposób jak oscyloskopy. Natomiast w grafika rastrowej obraz jest zbudowany z prostokątnej siatki (matrycy) leżących blisko siebie punktów (tzw. pikseli). Głównym parametrem w przypadku grafiki rastrowej jest rozmiar bitmapy w pikselach podawany na ogół jako wymiary prostokąta.

Modelowanie trójwymiarowe[edytuj | edytuj kod]

 Osobny artykuł: Modelowanie (3D).

Modelowaniem trójwymiarywm nazywa się proces tworzenia i modyfikacji wirtualnych obiektów trójwymiarowych przy pomocy dedykowanych temu programów, zwanych modelerami. Implementując różne algorytmy graficzne dostarczają one zestaw niezbędnych narzędzi, a także często zbioru podstawowych figur (ang. primitives), np. prostopadłościanów, kul, torusów i innych, które można wykorzystać od razu przy budowaniu obiektów.

Renderowanie i animacje[edytuj | edytuj kod]

 Osobne artykuły: RenderowanieAnimacja komputerowa.

Przetwarzanie obrazów[edytuj | edytuj kod]

 Osobny artykuł: Cyfrowe przetwarzanie obrazów.

Gry i symulacje komputerowe[edytuj | edytuj kod]

 Osobne artykuły: Gra komputerowaSymulacja komputerowa.

Programowanie[edytuj | edytuj kod]

 Osobny artykuł: Programowanie komputerów.

Programowanie komputerów to proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów komputerowych w tym dla urządzeń mikroprocesorowych (mikrokontrolery). 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 jest bardzo szeroką i obecnie najpopularniejszą dziedziną informatyki, można w jego obrębie wyróżnić następujące obszary:

Podstawy programowania[edytuj | edytuj kod]

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ę nauke programowania są między innymi zmienne, tablice, instrukcje warunkowe, pętle czy wskaźniki, łańcuchy, funkcje, debugowanie czy biblioteki.

Programowanie obiektowe[edytuj | edytuj kod]

 Osobny artykuł: Programowanie obiektowe.

Większość nowoczesnych języków programowania jest obiektowa, tzn. programy w nich definiuje się za pomocą obiektów – elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podstawowe mechanizmy programowania obiektowego to klasy, klasy pochodne, dziedziczenie, polimorfizm czy hermetyzacja. Istnieje także wiele innych paradygmatów programownia np. funkcyjne, imperatywne czy logiczne.

Programowanie gier[edytuj | edytuj kod]

 Osobny artykuł: Programista gier komputerowych.

Gry komputerowe to rodzaj oprogramowania komputerowego przeznaczonego do celów rozrywkowych bądź edukacyjnyco i wymagającego 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.

Symulacje komputerowe[edytuj | edytuj kod]

 Osobny artykuł: Symulacja komputerowa.

Symulacja komputerowa to symulacja z wykorzystaniem modelu matematycznego, zapisanego w postaci programu komputerowego. Techniki symulacyjne są szczególnie przydatne tam, gdzie analityczne wyznaczenie rozwiązania byłoby zbyt pracochłonne, a niekiedy nawet niemożliwe, co często ma miejsce w systemach złożonych. Symulacje komputerowe można podzielić ze względu na przewidywalność zdarzeń na stochastyczne i deterministyczne. Ze względu na sposób upływu czasu dzielą się na te z czasem ciągłym oraz dyskretnym. Ze względu na formę danych wyjściwych dzielą się na dynamicze i statyczne, a ze względu na liczę użytych komputerów na lokalne i rozproszone.

Programowanie robotów[edytuj | edytuj kod]

Robotyka to inderdyscyplinalna dziedzina nauki na styku wielu dziedzin inżynierii. W informatyce koncentruje się głównie na algorytmach i programach komputerowych używanych do sterowania robotami. W związku z tym informatyka skupia się przede wszystkim na robotach autonomicznych, mobilnych i probabilistycznych. Główne obszary badane przez informatyków obejmują kontrolę, postrzeganie, SLAM (ang. Simultaneous localization and mapping) i planowanie ruchu.

Programowanie webowe[edytuj | edytuj kod]

Tworzenie stron internetowych to praca związana z tworzeniem strony internetowej. Tworzenie stron internetowych może rozciągać się od opracowania prostej pojedynczej statycznej strony HTML zwykłego tekstu po złożone aplikacje internetowe np. serwisy społecznościowe.

Inżynieria oprogramowania[edytuj | edytuj kod]

 Osobny artykuł: Inżynieria oprogramowania.

Inżynieria oprogramowania zajmuje się nie tyle tworzeniem samego programowania, lecz koncentruje się nad ogólnym przebiegiem jego tworzenia od strony biznesowej. 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.

Sztuczna inteligencja[edytuj | edytuj kod]

 Osobny artykuł: Sztuczna inteligencja.

Sztuczna inteligencja (SI, ang. Artificial intelligence, AI) to obszar informatyki zajmujący się komputerowym symulowaniem inteligencji – tworzeniem modeli zachowań inteligentnych oraz programów komputerowych symulujących te zachowania[37][38]. Szczególnym zainteresowaniem darzy się problemy które nie są efektywnie algorytmizowalne, jak rozpoznawanie obrazów, tłumaczenie maszynowe czy rozpoznawanie mowy. Dział ten obejmuje m.in. logikę rozmytą, obliczenia ewolucyjne, sieci neuronowe i sztuczne życie. SI bywa nazywane także inteligencją obliczeniową (ang. Computational Intelligence, CI). Jedną z wiodących technologii jest TensorFlow[39].

Uczenie maszynowe[edytuj | edytuj kod]

 Osobny artykuł: Uczenie maszynowe.

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. 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)[40]. Nazywa się tak połączone grupy węzłów, podobne do rozległej sieci neuronów w ludzkim mózgu.

Głębokie sieci neuronowe[edytuj | edytuj kod]

 Osobny artykuł: Deep learning.

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[41].

Rozpoznawanie wzorców[edytuj | edytuj kod]

 Osobny artykuł: 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.

Przetwarzanie i analiza danych[edytuj | edytuj kod]

Analiza danych (ang. data analysis) to proces przetwarzania danych w celu uzyskania na ich podstawie użytecznych informacji i wniosków. W zależności od rodzaju danych i stawianych problemów, może to oznaczać użycie metod statystycznych, eksploracyjnych i innych.

Eksploracja danych (data mining)[edytuj | edytuj kod]

 Osobny artykuł: Eksploracja danych.

Big data[edytuj | edytuj kod]

 Osobny artykuł: Big data.

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.

Bioinformatyka[edytuj | edytuj kod]

 Osobny artykuł: Bioinformatyka.

Bioinformatyka to interdyscyplinarna dziedzina nauki łącząca biologię z informatyką. Bioinformatyka obejmuje 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. Z bioinformatyką powiązane są: genomika, proteomika, metabolomika, transkryptomika i konektomika[42][43].

Informatyka chemiczna[edytuj | edytuj kod]

 Osobny artykuł: Informatyka chemiczna.

Informatyka chemiczna, także chemioinformatyka 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[44][45]. 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.

Geoinformatyka[edytuj | edytuj kod]

 Osobny artykuł: Geoinformatyka.

Geoinformatyka to obszar wiedzy łączący geografię z informatyką.

Informatyka afektywna[edytuj | edytuj kod]

 Osobny artykuł: Informatyka afektywna.

Informatyka afektywna to dział informatyki zajmujący się metodami i narzędziami rozpoznawania, analizy, interpretacji i symulacji stanów emocjonalnych użytkowników komputerów.

Informatyka medyczna[edytuj | edytuj kod]

 Osobny artykuł: Informatyka medyczna.

Informatyka medyczna zajmuje się przetwarzaniem, przechowywaniem, przesyłaniem oraz metodami tworzenia systemów przetwarzających informacje wykorzystywane w opiece zdrowotnej. Obejmuje między innymi przetwarzanie i analizę sygnałów medycznych (np. EKG), przetwarzanie i analizę obrazów medycznych, oprogramowanie aparatury medycznej czy standardy wymiany informacji HL7, DICOM czy systemy wspomagania diagnostyki (np. IBM Watson for Oncology).

Informatyka śledcza[edytuj | edytuj kod]

 Osobny artykuł: Informatyka śledcza.

Informatyka śledcza dostarcza cyfrowych środków dowodowych dotyczących przestępstw popełnionych cyfrowo lub przy użyciu systemów elektronicznych. Jej zadaniami są: zbieranie, odzyskiwanie, analiza i prezentacja cyfrowych danych, znajdujących się na różnego rodzaju nośnikach (dyski twarde komputerów, dyskietki, płyty CD, pamięci przenośne, serwery, telefony komórkowe itp.), oraz w coraz popularniejszych ostatnio systemach i serwisach zdalnego gromadzenia, przechowywania i przetwarzania danych, takich jak serwisy społecznościowe, przestrzeń dyskowa w chmurze czy wyszukiwarki internetowe.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. Wayback Machine, web.archive.org, 25 maja 2006 [dostęp 2020-01-15] [zarchiwizowane z adresu 2006-05-25].
  2. 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].
  3. Difference Between Computer Science & Information Technology | King, King University Online [dostęp 2020-01-16] (ang.).
  4. Technische Informatik Studium, www.ingenieurwesen-studieren.de [dostęp 2020-03-31].
  5. Informatyka o profilu praktycznym | Uniwersytet Gdański – University of Gdańsk, ug.edu.pl [dostęp 2020-03-31].
  6. Praktische Informatik Master of Science (M.Sc.) – FernUniversität in Hagen, www.fernuni-hagen.de [dostęp 2020-03-31].
  7. Computer Science as a Profession, web.archive.org, 17 czerwca 2008 [dostęp 2020-01-14] [zarchiwizowane z adresu 2008-06-17].
  8. 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.).
  9. CSAB, Inc., www.csab.org [dostęp 2020-01-14].
  10. Computer Science as a Profession, web.archive.org, 17 czerwca 2008 [dostęp 2020-01-14] [zarchiwizowane z adresu 2008-06-17].
  11. Computational Complexity: A Modern Approach / Sanjeev Arora and Boaz Barak, theory.cs.princeton.edu [dostęp 2020-03-27].
  12. en:Introduction to the Theory of Computation.
  13. List, Classic Papers in Programming Languages and Logic.
  14. 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].
  15. Overview of the four main programming paradigms, people.cs.aau.dk [dostęp 2020-03-27].
  16. KrishnamurthiShriram, Teaching programming languages in a post-linnaean age, „ACM SIGPLAN Notices”, 2008, DOI10.1145/1480828.1480846 [dostęp 2020-03-27] (ang.).
  17. Michael A. Nielsen, Isaac L. Chuang, Quantum Computation and Quantum Information (10th anniversary ed.), 2012, ISBN 978-0-511-99277-3.
  18. IBM zaprezentuje najpotężniejszy na świecie 53-kubitowy komputer kwantowy – NeeWS – GeekWeek.pl, www.geekweek.pl [dostęp 2020-03-27].
  19. a b TC Moduł 1 – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-01-15].
  20. TC Moduł 12 – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-03-28].
  21. TC Moduł 12 – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-03-28].
  22. Architektura komputerów, wykłady.
  23. P. Metzger, A. Jełowiecki, Anatomia PC, Helion, 2000.
  24. J. Biernat, Architektura komputerów, Wydawnictwo Politechniki Wrocławskiej, 2002.
  25. 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].
  26. Studia informatyczne MIMUW, Programowanie niskopoziomowe – Moduł 1.
  27. Główny Urząd Statystyczny / Metainformacje / Słownik pojęć / Pojęcia stosowane w statystyce publicznej, stat.gov.pl [dostęp 2020-03-29].
  28. Słownik pojęć Strategii Rozwoju Transportu do 2020 roku (z perspektywą do 2030 roku). W: Ministerstwo Transportu, Budownictwa i Gospodarki Morskiej [on-line]. mib.gov.pl. s. 26. [dostęp 2020-03-29]. [zarchiwizowane z tego adresu].
  29. Słów kilka na temat transmisji danych » CoreBlog – Blog IT [dostęp 2020-03-29].
  30. Słów kilka na temat transmisji danych » CoreBlog – Blog IT [dostęp 2020-03-29].
  31. Unknown, Technik-Informatyk: INTERFEJSY ORAZ RODZAJE TRANSMISJI DANYCH, Technik-Informatyk, 31 grudnia 2015 [dostęp 2020-03-29].
  32. Sieci komputerowe – Studia Informatyczne, wazniak.mimuw.edu.pl [dostęp 2020-03-29].
  33. Popularne urządzenia sieciowe, miroslawzelent.pl [dostęp 2020-03-29].
  34. Zestawienie protokołów, pasja-informatyki.pl [dostęp 2020-03-29].
  35. 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].
  36. Nikola Zlatanov, Computer Security and Mobile Security Challenges, 2015.
  37. Katalog Niemieckiej Biblioteki Narodowej, Kontrola Autorytatywna, portal.dnb.de [dostęp 2020-03-31].
  38. University of British Columbia, Faculty of Computer Science, Computational Intelligence and Knowledge.
  39. Bharath Ramsundar, Reza Bosagh Zadeh, Głębokie uczenie z TensorFlow, 2019, ISBN 978-83-283-5705-1.
  40. Jerzy Stefanowski, Wprowadzenie do maszynowego uczenia się, Instytut Informatyki, Politechnika Poznańska.
  41. Machine learning i deep learning – samouczące systemy. Leksykon 2017 | [dostęp 2020-03-29] (pol.).
  42. Paul G. Higgs, Teresa K. Attwood, Bioinformatics and Molecular Evolution, 15 grudnia 2004, DOI10.1002/9781118697078 [dostęp 2020-03-28].
  43. Jacek Błażewicz, Bioinformatyka i jej perspektywy, 2011.
  44. Gasteiger J.(Editor), Engel T.(Editor), Chemoinformatics: A Textbook, 2004, ISBN 3-527-30681-1.
  45. A.R. Leach, V.J. Gillet, An Introduction to Chemoinformatics, ISBN 1-4020-1347-7.