# Računarska nauka

**Računarska nauka** (engleski: *computer science*) jest naučna disciplina koja se bavi računarima, njihovim teoretskim i algoritmičkim temeljima, hardverom i softverom.

Ova disciplina izučava algoritme, podatkovne strukture, računarski i mrežni dizajn, informacione procese i umjetnu inteligenciju. Koristi se temeljima u matematici i inženjerstvu te uključuje neke tehnike iz polja kao što su teorija čekanja i posluživanja, vjerovatnoća i statistika.

Računarska nauka uz računarsko inženjerstvo, informacione sisteme, informacionu tehnologiju, softversko inženjerstvo smatra se dijelom pet srodnih ali odvojenih disciplina. Ovih pet disciplina međusobno su povezane u smislu da je računarstvo njihov predmet proučavanja, ali su odvojene jer svaka ima svoju istraživačku perspektivu i kurikularni fokus.

## Polja

Kao disciplina, računarska nauka obuhvaća niz tema, od teoretskih proučavanja algoritama do praktičnih pitanja implementacije računarskih sistema u hardveru i softveru. Četiri ključne discipline računarske nauke su: *teorija računanja*, *algoritmi i strukture podataka*, *programerska metodologija i jezici*, te *računarski elementi i arhitektura*. Pored ove četiri oblasti, CSAB također identifikuje polja kao što su softverski inženjering, umjetna inteligencija, računarsko umrežavanje i komunikacija, baze podataka, paralelno računanje, distribuirano računanje, interakcija čovjek-računar, računarska grafika, operativni sistemi i numeričko i simbolično računanje kao ostala važna područja računarske nauke.

### Teoretska računarska nauka

*Teoretska računarska nauka* je matematička i apstraktna. Njen cilj je razumjeti prirodu **izračuna** i pružiti efikasnije metodologije. Sve studije vezane za matematičke, logičke i formalne koncepte i metode mogu se smatrati teorijskim računarskim znanjem, pod uslovom da se motivacija povlači iz polja **računarstva**.

#### Strukture podataka i algoritmi

Strukture podataka i algoritmi su studije najčešće korištenih računarskih metoda i njihove računske efikasnosti.

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
|  WIKINIUM\_MATH\_PH\_0  |  |  |  |  |
| Analiza algoritama | Algoritmi | Strukture podataka | Kombinatorička optimizacija | Računarska geometrija |

#### Teorija računanja

Prema Peteru Denningu, temeljno pitanje na kojem se temelji računarska nauka je: "Šta se može (efikasno) automatizovati?" Teorija računanja fokusirana je na traženje odgovora šta je moguće izračunati i koja količina resursa je potrebna za izvršenje tih izračuna.

Čuveni P=NP? problem, jedan od Milenijskih problema, stoji za jedan od neriješenih problema u teoriji računanja.

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
|  |  | **P = NP?** | **GNITIRW-TERCES** |  |
| Teorija automata | Teorija računanja | Teorija računske kompleksnosti | Kriptografija | Teorija kvantnog računanja |

#### Teorija informacija i kodiranja

Teorija informacija je povezana s kvantifikacijom informacija. Teoriju je razvio Claude Shannon kako bi pronašao temeljna ograničenja u postupcima obrade signala, kao što su sažimanje podataka i pouzdano pohranjivanje i komuniciranje podataka. Teorija kodiranja je proučavanje svojstava koda i njihove prikladnosti za određenu primjenu. Kodovi se koriste za kompresiju podataka, kriptografiju, otkrivanje i ispravljanje grešaka, i za mrežno kodiranje. Kodovi se proučavaju u svrhu dizajniranja efikasnih i pouzdanih metoda prenosa podataka.

#### Teorija programskog jezika

Teorija programskog jezika grana je računarske znanosti koja se bavi dizajnom, implementacijom, analizom, karakterizacijom i klasifikacijom programskih jezika i njihovih pojedinačnih karakteristika. To je aktivno istraživačko područje, s brojnim posvećenim akademskim časopisima.

|  |  |  |
| --- | --- | --- |
|  WIKINIUM\_MATH\_PH\_1  |  |  |
| Teorija tipova | Dizajn kompajlera | Programski jezici |

#### Formalne metode

Formalne metode su posebna vrsta matematički zasnovane tehnike za specifikaciju, razvoj i provjeru softverskog i hardverskog sistema. Formalne metode najbolje se opisuju kao primjena širokog spektra teoretskih osnova računarstva, posebno logičkih kalkulacija, formalnih jezika, teorije automata i programske semantike, ali i sistem tipova i algebratskih tipova podataka na probleme u hardverskoj i softverskoj specifikaciji i verifikaciji.

### Računarski sistemi

#### Računarska arhitektura i računarski inženjering

Računarska arhitektura jest konceptualni dizajn i struktura jednog računarskog sistema. Najviše je fokusirana na način na koji centralni procesor obavlja i dohvaća adrese u memoriji. Područje često uključuje discipline računarskog inženjerstva i elektrotehnike, odabir i međusobno povezivanje hardverskih komponenti za stvaranje računara.

|  |  |  |
| --- | --- | --- |
|  |  |  |
| Booleova algebra | Mikroarhitektura | Multiprocesiranje |
|  |  |  |
| Sveprisutno računarstvo | Arhitektura sistema | Operativni sistemi |
|  |  |  |
| Procesorska jedinica | Ulaz/izlaz | Interpreter |

#### Analiza performansi računara

Analiza performansi računara je studija koja analizira rad računara sa ciljevima poboljšanja propusnosti, upravljanjem vremenskog odziva, efikasnog korištenja resursa, uklanjanja uskih grla i predviđanja performansi pod očekivanim najvećim opterećenjima. Mjerila (benchmark) se koriste za poređenje performansi.

#### Istovremeni, paralelni i distribuirani sistemi

Istovremenost je svojstvo sistema u kojima se istovremeno vrši nekoliko računanja. Brojni matematički modeli razvijeni su za opće istovremeno računanje , uključujući Petrijeve mreže, proračune procesa i PRAM (Parallel Random Access Machines) Više paralelnih međusobno poveznih računara zovemo distribuirani sistem. Računari unutar distribuiranog sistema imaju svoju privatnu memoriju, a informacije se mogu razmjenjivati kako bi se postigli zajednički ciljevi.

#### Računarske mreže

Ova grana računarske nauke ima za cilj upravljanje mrežama između računara širom svijeta.

#### Računarska sigurnost i kriptografija

Računarska sigurnost jest grana koja se bavi ciljem zaštite informacija od neovlaštenog pristupa, poremećaja ili izmjena. Kriptografija je praksa i proučavanje skrivanja (šifriranja) i otkrivanja (dešifriranja) informacija. Savremena kriptografija u velikoj je mjeri povezana s računarskom naukom, jer se mnogi algoritmi za enkripciju i dešifriranje zasnivaju na njihovoj računskoj složenosti.

#### Baze podataka

Baza podataka namijenjena je organizovanju, pohranjivanju i pronalaženju velikih količina podataka. Digitalnim bazama podataka upravlja se pomoću sistema za upravljanje bazama podataka za pohranu, stvaranje, održavanje i pretraživanje podataka, putem modela baze podataka i jezika upita.

### Računarske aplikacije

#### Računarska grafika i prikaz

Računalna grafika je proučavanje digitalnih vidljivih sadržaja i uključuje sintezu i manipulaciju slikovnim podacima. Studija je povezana s mnogim drugim poljima računarske nauke, uključujući računarski vid, obradu slike i računarsku geometriju i uveliko se primjenjuje u područjima specijalnih efekata i video igara.

#### Interakcija između čovjeka i računara

Istraživanje koje razvija teorije, principe i smjernice za dizajnere korisničkog interfejsa kojem je za cilj da stvori odgovarajuće korisničko iskustvo na svim vrstama i oblicima računara kao što su lični računari, laptopi i mobilni uređaji.

#### Naučno računanje i simulacija

Naučno računarstvo jest polje proučavanja koje se bavi izgradnjom matematičkih modela i tehnika numeričke analize i korištenjem računara za analizu i rješavanje naučnih problema. Velika upotreba naučnog računanja je simulacija različitih procesa, uključujući računsku dinamiku fluida, fizičke, električne i elektroničke sisteme i sklopove, kao i društvene situacije (posebno simulaciju rata).

|  |  |  |  |
| --- | --- | --- | --- |
|  |  |  |  |
| Numerička analiza | Računarska fizika | Računarska hemija | Bioinformatika |

#### Umjetna inteligencija

Umjetna inteligencija (UI) jest naučna oblast u kojoj se izučavaju izračunavanja da bi se izračunavanjem omogućila percepcija, rezonovanje i činjenje. Od svog nastanka u kibernetici na Dartmouth konferenciji (1956), istraživanje umjetne inteligencije je bilo interdisciplinarno, oslanjajući se na područja ekspertize kao što su primijenjena matematika, matematička logika, semiotika, elektrotehnika, filozofija uma, neurofiziologija i društvena inteligencija. UI je popularno povezan s robotskim razvojem, ali glavno polje praktične primjene je u područjima razvoja softvera, koja zahtijevaju računarsko razumijevanje. Polazna tačka u kasnim četrdesetim bila je pitanje Alana Turinga "Mogu li računari razmišljati?". Pitanje i dalje ostaje praktično bez odgovora.

|  |  |  |
| --- | --- | --- |
|  |  |  |
| Mašinsko učenje | Računarski vid | Obrada slike |
|  |  |  |
| Prepoznavanje uzorka | Neuralne mreže | Evoluciono računarstvo |
|  |  |  |
| Zastupanje i obrazloženje znanja | Obrada prirodnog jezika | Robotika |

### Softversko inženjerstvo

Softversko inženjerstvo je stroga primjena inženjerstva, naučnih i matematičkih principa i metoda u ekonomičnoj proizvodnji kvalitetnog softvera. Nastao je kao nužna potreba vezana za programiranje i izradu softvera početkom 1970-ih godina.

## Podjela računara

Postoje tri osnovna tipa računara: analogni, digitalni i hibridni.

### Analogni računari

Analogni računari obrađuju podatke predstavljene kontinualnim promjenjivim vrijednostima, kao što su napon i struja. Predstavljaju fizičku analogiju matematičkog problema koji treba riješiti. Kako su u stanju da vrlo brzo rješavaju obične diferencijalne jednačine, pogodni su za primjenu u simulaciji modela procesa i opreme u realnom vremenu. Također se koriste u analizi mreža, kao što su elektrodistributivne mreže u elektroenergetskim postrojenjima.

Tačnost rezultata kod ovih računara je ograničena tačnošću mjerenja ulaznih veličina, kao i tolerancijom korišćenih komponenti.

Proračuni se izvode simulacijom prijenosnih funkcija matematičkih jednačina, pomoću sabirača, invertora i drugih sklopova na bazi operacijskih pojačala. Na ovaj način se svako sabiranje, integriranje i druge operacije iz jednačine izvode istovremeno u odvojenim operacionim pojačalima koja rade paralelno. Na izlazu je dato rješenje, uz minimalno kašnjenje, u kontinualnoj formi, pa se kaže da ovi računari daju opće rješenje date jednačine.

### Digitalni računari

Digitalni računari vrše operacije nad varijablama u diskretiziranoj formi. Radi ekonomičnosti, jednostavnosti i pouzdanosti elektronskih uređaja sa dva stanja (prekidači, tranzistori, releji, itd.) digitalni računari koriste binarni sistem predstavljanja brojeva. Kao posljedica toga, tačnost rezultata zavisi od broja binarnih cifara kojima se predstavljaju varijable.

```
**Primjer:**  sa 10 bita ono je 0,1%
```

Za razliku od analognih računara koji rade paralelno, digitalni računari rade redoslijedno. Operacije se obavljaju jedna po jedna i rezultat je numerički, za razliku od općeg (npr. osciloskop) kod analognih. Da bi se dobilo opće rješenje jednačine, potrebno je obaviti niz iteracija proračuna sa svim vrijednostima ulaznih parametara. Zbog toga su digitalni računari sporiji od analognih u pogledu rada u realnom vremenu. Međutim digitalni računari su u stanju da broje, pretražuju i razmještaju podatke u skladu sa vrlo detaljnim programskim instrukcijama koje su smještene u memoriji. Za razliku od analognih računara, digitalni računari mogu se programirati da izvršavaju najrazičitije zadatke. Rezultati aritmetičkih i logičkih operacija se prevode u slova, brojeve ili simbole razumljive operatoru ili signale razumljive računaru.

Zbog svih gore navedenih prednosti, digitalni računari su postali neophodno sredstvo u današnjem vremenu.

### Hibridni računari

Hibridni računari kombinuju prednosti analognih i digitalnih računara. Oni su nastali kao rezultat pokušaja da se objedine brzina analognih računara i lahkoća upravljanja digitalnim računarima. Tako se može sprovesti proračun čitave familije funkcija automatskim (digitalnim) mijenjanjem parametara jednačina u analognom dijelu računara.

Drugi način organizacije hibridnih računara je onaj u kome upravljačke funkcije obavlja digitalni računar,  a poslove integrisanja ili rješavanje diferencijalnih jednačina obavlja analogni računar.

Ovi računari koriste i kontinualne i diskretne vrijednosti podataka. U posljednje vrijeme koriste se za simulaciju rada nuklearnih reaktora, svemirskih letjelica, kod kojih je veoma važno vjerno predstavljanje dinamičkog sistema.

## Brojni sistemi

Ljudi su svoje ruke i prste od davnina koristili kao pomoćno sredstvo za brojanje. Ipak, takav brojni sistem nije najefikasniji niti najpogodniji za korištenje u računarskim mašinama.

Za razliku od ljudi, računari rade s brojevima koji imaju ograničen broj cifara, a time i konačnu (ograničenu) preciznost. Često se za računarsku tehnologiju kaže da je digitalna, jer se zasniva na ciframa - digitima. Za matematiku cifra 15 uvijek znači jedno te isto, ali se može predstaviti na neograničeno mnogo načina.

Jedna od osnovnih namjena numeričke prezentacije broja je mogućnost manipulisanja ciframa. Ako neko pokuša sabirati ili množiti, ili čak da bazira ozbiljan račun na rimskim brojevima, koji su još uvijek u upotrebi naći će se pred velikim problemom. Mnogi će pomisliti kada vide hexadecimalne brojeve, da je takvo nešto užasno komplikovano, iako poslije boljeg sagledavanja njihove strukture, da se zaključiti da su možda čak podesniji od decimalnih brojeva. Razvoj matematike u Evropi je krenuo tek pošto su se upoznali sa arapskim decimalnim brojnim sistemom. Ono što je glavno u ovom sistemu jeste radix (r), odnosno baza. Za sve brojeve manje od radixa definišu se simboli i oni idu od prezentacija za ništa (0) pa do (r-1).

Ovi brojevi predstavljaju prvi razred numeracije, što kod dekadnih brojeva nazivamo jedinicom, odnosno jednocifrenim brojem. Ovo se pravilo primjenjuje na brojeve sa dvije cifre (dvocifreni broj). Dobijeno rješenje za n se zaokružuje na prvi manji cijeli broj (n mora biti cijeli broj).

Kod zapisa brojeva pojavljuju se dva parametra: broj znakova za cifre i broj mjesta potrebnih za zapis broja. Imamo četiri upotrebljiva brojna sistema (prikaz s bazom sistema respektivno): 2-Binarni, 8-Oktalni 10-Decimalni i 16-Hexadecimalni.

## Kodovi i kodiranje

Znakovi kojima se ljudi služe u međusobnoj komunikaciji, pa i u komunikaciji s računarom, dakle oni koji se nalaze na tastaturi računara, moraju poprimiti binarni oblik prije obrade u elektronskom računaru. Elektronski elementi od kojih je građen računar mogu poprimiti samo dva različita stanja od kojih se jedno označava sa 1, a drugo sa 0. To je veza s binarnim brojnim sistemom, ali se zapisi podataka u računaru ne tumače uvijek kao binarni brojevi, već kao binarni zapis.Kada čovjeku zatreba uvid u sadržaj tih zapisa, on ga dobiva u njemu prilagođenom zapisu, skupom semantičkih znakova. Postupci kojima se to omogućava nazivaju se kodiranje odnosno dekodiranje.Proces kodiranja se provodi na način da se pojedinim semantičkim znakovima pridružuje odgovarajuća kombinacija binarnih nula i jedinica koje kreiraju fizički zapis semantičke vrijednosti. Pretpostavka uspješnog komuniciranja računara u razmjeni ili obradi podataka se zove dogovor o skupu znakova koji će se u radu s računarom koristiti, te pripadnim binarnim kombinacijama za svaki od znakova i zadaći koja se za svakog treba izvršiti. Dogovor se vremenom proširuje i dograđuje, a on je ili standard države ili preporuka neke međunarodne organizacije.Skup svih znakova koji se tako koriste naziva se apstraktna abeceda, koja zajedno s pripadnim binarnim (ili nekim drugim) kombinacijama čini kod. Pojedini znakovi u kodu nazivaju se elementi koda, a pripadna im zamjena, bilo da je u pitanju binarna kombinacija, neki drugi znak ili nešto treće, naziva se kodna zamjena.

## Reference

## Dalje čitanje

### Općenito

* Tucker, Allen B. (2004). *Computer Science Handbook* (2nd izd.). Chapman and Hall/CRC. ISBN 978-1-58488-360-9. CS1 održavanje: nepreporučeni parametar (link)
* Tucker, Allen B. (2004). *Computer Science Handbook* (2nd izd.). Chapman and Hall/CRC. ISBN 978-1-58488-360-9. CS1 održavanje: nepreporučeni parametar (link)
* van Leeuwen, Jan (1994). *Handbook of Theoretical Computer Science*. The MIT Press. ISBN 978-0-262-72020-5. CS1 održavanje: nepreporučeni parametar (link)
* Ralston, Anthony; Reilly, Edwin D.; Hemmendinger, David (2000). *Encyclopedia of Computer Science* (4th izd.). Grove's Dictionaries. ISBN 978-1-56159-248-7. CS1 održavanje: nepreporučeni parametar (link)
* Edwin D. Reilly (2003). *Milestones in Computer Science and Information Technology*. Greenwood Publishing Group. ISBN 978-1-57356-521-9.

### Probrana literatura

* Knuth, Donald E. (1996). *Selected Papers on Computer Science*. CSLI Publications, Cambridge University Press. CS1 održavanje: nepreporučeni parametar (link)
* Collier, Bruce (1990). *The little engine that could've: The calculating machines of Charles Babbage*. Garland Publishing Inc. ISBN 978-0-8240-0043-1.
* Cohen, Bernard (2000). *Howard Aiken, Portrait of a computer pioneer*. The MIT press. ISBN 978-0-262-53179-5.
* Tedre, Matti (2014). *The Science of Computing: Shaping a Discipline*. CRC Press, Taylor & Francis.
* Randell, Brian (1973). *The origins of Digital computers, Selected Papers*. Springer-Verlag. ISBN 978-3-540-06169-4.

### Članci

* Peter J. Denning. *Is computer science science?*, Communications of the ACM, April 2005.
* Peter J. Denning, *Great principles in computing curricula*, Technical Symposium on Computer Science Education, 2004.
* Research evaluation for computer science, Informatics Europe report Arhivirano 18. 10. 2017. na Wayback Machine. Shorter journal version: Bertrand Meyer, Christine Choppy, Jan van Leeuwen and Jorgen Staunstrup, *Research evaluation for computer science*, in Communications of the ACM, vol. 52, no. 4, pp. 31–34, April 2009.

### Kurikulum i klasifikacija

* Association for Computing Machinery. 1998 ACM Computing Classification System. 1998.
* Joint Task Force of Association for Computing Machinery (ACM), Association for Information Systems (AIS) and IEEE Computer Society (IEEE CS). Computing Curricula 2005: The Overview Report. September 30, 2005.
* Norman Gibbs, Allen Tucker. "A model curriculum for a liberal arts degree in computer science". *Communications of the ACM*, Volume 29 Issue 3, March 1986.

## Vanjski linkovi

* Računarska nauka na Curlie