Predgovor ========= Programiranje je ključna komponenta savremenog tehnološkog napretka. Njegova primjena obuhvata širok spektar oblasti, od razvoja softverskih sistema u industriji i nauci do unapređenja medicinskih tehnologija i analize velikih skupova podataka. Kao disciplina, programiranje omogućava rješavanje kompleksnih problema, optimizaciju resursa i kreiranje inovativnih rješenja koja značajno unapređuju različite aspekte modernog društva. Tehnološki razvoj, uključujući automatizaciju i napredne sisteme umjetne inteligencije, uveliko olakšava mnoge aspekte programiranja, ali osnovno razumijevanje njegovih principa ostaje neophodno. Programiranje nije samo skup tehničkih vještina, već način strukturiranog i analitičkog pristupa rješavanju problema. Ovakvo razumijevanje omogućava kreiranje pouzdanih, fleksibilnih i dugotrajnih rješenja koja se mogu prilagoditi različitim izazovima i potrebama. Python je izuzetno prikladan izbor za učenje programiranja, zahvaljujući svojoj jednostavnoj sintaksi i intuitivnom dizajnu. Njegova primjena obuhvata oblasti poput analize podataka, razvoja web-aplikacija, vještačke inteligencije i mnogih drugih tehnoloških grana. Python omogućava lako savladavanje osnovnih koncepata, dok njegova bogata biblioteka alata pruža moćan mehanizam za rješavanje složenih problema, čineći ga univerzalnim alatom za programere različitih nivoa iskustva. ## Ciljevi knjige Ciljevi ove knjige usmjereni su na postizanje osnovnog razumijevanja programiranja, sa posebnim naglaskom na ključne mehanizme rada programskog jezika Python. Umjesto da se fokusira na izradu većih ili praktičnih aplikacija, knjiga istražuje temeljne tehnike koje čine osnovu za dalji razvoj programerskih vještina. Ovaj pristup osigurava duboko i precizno razumijevanje osnovnih koncepata, koje je neophodno za uspješan nastavak učenja i primjene programiranja u složenijim kontekstima. Premda je pristup baziran na razvoju velikih i interaktivnih projekata često privlačan zbog svoje dinamike i mogućnosti neposredne primjene, on često vodi ka uvođenju složenih koncepata bez prethodnog strukturiranog osnova. Ovakav način rada može rezultirati površnim razumijevanjem i zanemarivanjem nekih bitnih aspekata programiranja koji nisu odmah potrebni za rješavanje konkretnog problema. Suprotno tome, ova knjiga koristi metodološki postupan pristup, gdje se koncepti uvode kroz pažljivo osmišljene kratke primjere. Svaki primjer jasno i precizno ilustruje specifični mehanizam rada jezika, omogućavajući čitaocima da temeljito savladaju osnovne tehnike prije nego što pređu na složenije teme. Poseban fokus stavljen je na razvijanje analitičkog načina razmišljanja, koji je neizostavan u svijetu programiranja. Razumijevanje strukture problema, sposobnost logičkog razlaganja i postupnog rješavanja predstavljaju osnovu koja se može primijeniti ne samo u programiranju, već i u mnogim drugim disciplinama. Kroz primjere i objašnjenja, knjiga pomaže čitaocima da razviju ove vještine, čineći ih spremnijim za suočavanje s kompleksnijim izazovima u budućnosti. Pored ove knjige, dostupna je i knjiga "Uvod u programiranje – Elementi teorije sa zbirkom riješenih zadataka", istih autora. Taj materijal dodatno proširuje sadržaj ove knjige fokusirajući se na rješavanje kratkih zadataka koji omogućavaju utvrđivanje koncepata kroz praktičan rad. Međutim, za razumijevanje i primjenu naprednijih tema, poput razvoja složenih softverskih sistema, web-aplikacija ili oblasti kao što su objektno orijentisano i funkcionalno programiranje, potrebno je konsultovati dodatnu literaturu. Knjiga namjerno ostavlja ove napredne koncepte po strani, držeći fokus na osnovama. Takav pristup omogućava čvrsto razumijevanje temeljnih elemenata programiranja, pružajući čitaocima stabilnu osnovu za dalji napredak u različitim pravcima unutar oblasti programiranja. ## Ciljana publika Knjiga je namijenjena svima koji žele savladati osnove programiranja, bilo da dolaze iz akademskog okruženja, profesionalnog svijeta ili lične želje za učenjem. Iako njen sadržaj prati kurikulum predmeta **Programiranje I**, koji se izučava na Odsjeku za matematičke i kompjuterske nauke Prirodno-matematičkog fakulteta Univerziteta u Sarajevu, knjiga je osmišljena tako da bude pristupačna širokom spektru čitalaca. Programiranje I je jednosemestralni predmet namijenjen studentima prve godine studija. S obzirom na raznolikost njihovog predznanja – od onih koji su se već susretali s programiranjem do onih koji se prvi put upoznaju sa ovom oblašću – nastavni plan ne pretpostavlja prethodno iskustvo. Prilagođenost sadržaja omogućava knjizi da bude korisna i onima izvan akademskog okruženja. Pogodna je za svakoga ko želi da nauči programirati, bez obzira na uzrast ili prethodno znanje. Bilo da je cilj razumijevanje osnovnih principa programiranja, razvoj analitičkog razmišljanja ili sticanje osnove za dalji rad u oblasti kompjuterskih nauka, knjiga pruža jasnu i metodičku podršku čitaocima na tom putu. Način na koji su autori pristupili pisanju dodatno doprinosi širokoj pristupačnosti sadržaja. Posebna pažnja posvećena je postepenom uvođenju pojmova i izbjegavanju stučnog žargona u početnim fazama, čime je stvoren materijal koji je podjednako koristan za akademske i neakademske kontekste. ## Struktura knjige Knjiga je struktuisana tako da omogućava čitaocima progresivan razvoj razumijevanja osnovnih programskih koncepata kroz programski jezik Python. Svako poglavlje obrađuje određeni skup tema, koje se postupno nadovezuju jedna na drugu, pružajući sistematičan pristup učenju. Knjiga se sastoji od 11 poglavlja: **Poglavlje 1: Uvod** Poglavlje uvodi osnovne principe na kojima se temelji rad računara i programskih jezika. Obrađuju se binarna reprezentacija podataka, ključni koncepti poput bitova i bajtova te osnovni elementi hardvera i softvera, uključujući procesore i memoriju. Također se ukratko razmatra evolucija programskih jezika, postavljajući temelje za razumijevanje rada savremenih računarskih sistema. **Poglavlje 2: Unos, procesiranje i ispis podataka** Fokus ovog poglavlja je na osnovnim operacijama unosa, obrade i prikaza podataka. Objašnjava se upotreba funkcija `input()` za preuzimanje korisničkog unosa i `print()` za ispis rezultata. Dodatno se razmatraju osnovne operacije nad stringovima i brojevima, kao i načini za formatiranje ispisa uz korištenje parametara `sep`, `end` i f-stringova. **Poglavlje 3: Strukture odlučivanja** U poglavlju se obrađuju osnovni principi donošenja odluka u programiranju kroz logičke operatore `and`, `or` i `not`. Uvode se strukture poput `if`, `if`-`else` i `if`-`elif`-`else`, koje omogućavaju uslovno izvršavanje koda. Poseban fokus stavljen je na operacije poređenja, prioritete operatora i pravilnu strukturu uslovnih izraza kako bi se osigurala jasnoća i efikasnost. **Poglavlje 4: Strukture ponavljanja** Poglavlje istražuje različite vrste ponavljanja u Pythonu, uključujući `while` i `for` petlje. Detaljno se objašnjava iteracija kroz liste, te korištenje funkcije `range()` za generisanje brojeva. Također su obrađene kontrolne naredbe poput `break` i `continue`, koje omogućavaju dodatnu fleksibilnost u upravljanju iteracijama. **Poglavlje 5: Funkcije** Funkcije su predstavljene kao osnovni alat za modularizaciju koda i ponovnu upotrebu logike. Objašnjava se njihovo definisanje pomoću ključne riječi `def`, rad s parametrima i povratnim vrijednostima, te način pozivanja funkcija unutar drugih dijelova programa. Razmatraju se i koncepti poput opsega varijabli (lokalni i globalni opseg) i podrazumijevanih vrijednosti parametara. **Poglavlje 6: Moduli** Poglavlje uvodi koncept modula kao alata za organizaciju koda u manje, povezane cjeline. Objašnjava se kako koristiti standardne Python module poput `math` i `random`, te kako kreirati i koristiti vlastite module. Također se razmatraju prednosti modularnog pristupa za bolje strukturisanje i održavanje programa. **Poglavlje 7: Liste** Liste se obrađuju kao ključna struktura podataka u Pythonu. Objašnjavaju se osnovne operacije poput dodavanja (`append`), uklanjanja (`remove`) i mijenjanja elemenata, te rad s indeksima i ugniježđenim listama. Posebna pažnja posvećena je metodama za sortiranje i filtriranje listi, kao i njihovoj primjeni u iterativnim strukturama. **Poglavlje 8: Rječnici i skupovi** Rječnici se uvode kao strukture podataka zasnovane na ključu i vrijednosti, dok se skupovi obrađuju kao kolekcije jedinstvenih elemenata. Poglavlje objašnjava osnovne operacije nad rječnicima, poput dodavanja i ažuriranja parova ključeva i vrijednosti, te metode za rad sa skupovima, uključujući uniju, presjek i razliku. **Poglavlje 9: Rad sa stringovima** Ovo poglavlje detaljno pokriva manipulaciju tekstualnim podacima kroz niz metoda koje Python nudi za stringove. Objašnjavaju se metode za pretraživanje (`find`), zamjenu (`replace`), dijeljenje (`split`) i spajanje (`join`) stringova. Također se razmatraju tehnike za formatiranje i uklanjanje nepotrebnih znakova. **Poglavlje 10: Datoteke** Poglavlje obrađuje rad s datotekama, uključujući otvaranje, čitanje i pisanje podataka u različitim formatima. Objašnjava se korištenje načina rada s datotekama poput `read`, `write` i `append`, te upravljanje greškama prilikom rada s fajlovima pomoću konstrukcije `try`-`except`. **Poglavlje 11: Rekurzivne funkcije** Rekurzivne funkcije se obrađuju kao tehnika gdje funkcija poziva samu sebe za rješavanje problema. Objašnjava se princip rada rekurzije, te razmatraju praktični primjeri poput računanja faktorijela ili Fibonaccijevog niza. Naglasak je na razumijevanju prednosti i ograničenja ovog pristupa, uključujući problem prekomjernog korištenja memorije. ## Upotreba velikih jezičkih modela Prilikom pisanja knjige korišteni su veliki jezički modeli za unaprjeđenje jezičke preciznosti i jasnoće teksta. Sav materijal prezentovan u knjizi pažljivo je kreiran i osmišljen od strane autora.