Jedan članak da potpuno upoznate Javu, zaista.
"Erge, šta je zapravo Java? Pričaj mi o tome."
"Sanmej, odmah prelaziš na stvar. Prvo idi kupi bratu paklicu cigareta, brat mora prvo da proveri tvoju iskrenost."
(pet minuta kasnije)
"Sanmej, zašto još uvek nisi otišla?"
"Erge, daj pare."
Zaista mi je rođena sestra, čak i za cigarete moram da izvadim pare, a još moram da joj dam i naplatu za trčanje. Deset minuta kasnije, Sanmej se vratila iz prodavnice u zgradi sa paklicom cigareta Panda. Upalio sam jednu Zippo upaljačem — ovaj upaljač mi je prva devojka poklonila za dvadeset prvi rođendan, kvalitet je stvarno dobar, i dalje ga koristim.
"Sanmej, slušaj, polako ću ti objasniti."
01. Poreklo Jave
Java je programski jezik visokog nivoa — robustan, objektno orijentisan i veoma siguran. Razvila ga je kompanija Sun 1995. godine; glavni programer se zove James Gosling, poznat kao otac Jave. To je čovek na slici ispod, kome se prilično proredila kosa.

"Sanmej, da li da još jednom razmisliš? Biti programer nije lako, lako možeš da ostaneš bez kose!"
"Erge, a zašto tebi nije opala kosa? Zato što nisi dovoljno dobar?"
Ovo dete, kako samo može da bude tako bezobrazna!
Pre nego što se zvao "Java", ovaj jezik se zapravo zvao Oak (hrast). Kako su došli na ideju o hrastu? James Gosling je sedeo u kancelariji, pogledao kroz prozor i ugledao hrast. Međutim, nažalost, Oak je već registrovala druga kompanija, pa je 23. maja 1995. godine jezik Oak preimenovan u Javu.
Ime Java nije bio prvi izbor Jamesa Goslinga, niti prvi izbor tima zaduženog za imenovanje. Ostali članovi tima su više voleli Silk (svila), ali se Goslingu nije sviđalo; on lično je voleo Lyric (lirska pesma), ali to nije prošlo kod pravnika. Na kraju, četvrto ime na listi — "Java" — se izdvojilo. Da li vas to podseća na osećaj kada porodica žuri da smisli ime za bebu pre nego što se rodi — jedno vam se ne sviđa, drugo ne odgovara drugom članu, i na kraju je dete dobilo ime "Pas" (😆).
James Gosling se seća da je "Java" predložio čovek po imenu Mark Opperman, koji je dobio inspiraciju u jednom kafiću. Zanimljivo je da je reč "Java" i englesko ime ostrva Java u Indoneziji, poznatog po proizvodnji kafe — slučajnost ili ne?
Ako hex editorom (na primer wxMedit) otvorite binarni fajl nastao kompilacijom Java izvornog koda (.class fajl, biće detaljnije objašnjeno kasnije, ne žurite), možete videti da su prva četiri bajta CA FE BA BE (magic broj koji definiše tip fajla), odnosno fraza "CAFE BABE" (beba iz kafića) — zar to nije prilično zanimljivo?

"Erge, možeš li da mi pokažeš jedan deo Java koda? Želim izbliza da ga osetim."
"Sanmej, evo odmah."
Nabrzinu sam tukao po tastaturi, detalji se nalaze na https://javasi.dev/overview/hello-world.html
"Evo, vidi, ovako nekako."
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}"Erge, šta je sve ovo, ništa mi nije jasno."
"Sanmej, ne žuri, ovaj kod 'Hello World' polako ćeš svariti kasnije, za sada neka te samo pozdravi."
"Dobro."
02. Kratka istorija razvoja Jave
Devedesetih godina dvadesetog veka nastaju jednočipovi računarski sistemi. Jednočipovi računarski sistemi su ne samo jeftini (prethodni računari su bili veoma glomazni i skupi), već i moćni, i mogu značajno da povećaju nivo inteligencije potrošačke elektronike.
Kako bi zauzela prednost na tržištu, kompanija Sun je 1991. godine osnovala projektni tim pod imenom "Green", na čelu sa Jamesom Goslingom, sa ciljem da razvije arhitekturu programa koja bi mogla da radi na raznim potrošačkim elektronskim uređajima.
Tim je najpre razmišljao da koristi C++ za pisanje programa, ali C++ je previše kompleksan i glomazan, a uz to je i raznolikost ugrađenih procesorskih čipova u potrošačkoj elektronici velika, tako da nije bilo lako napisati programe koji bi radili na više platformi — C++ nije bio dobar u prenosivosti.
Posle dužeg razmišljanja, tim je na kraju odlučio: na osnovu C++ napraviti novi programski jezik koji bi eliminisao kompleksne pokazivače i upravljanje memorijom iz C++, a istovremeno bio kompatibilan sa raznim uređajima. Ovaj jezik je prvobitno dobio ime Greentalk, sa ekstenzijom fajla .gt. Ime je prilično proizvoljno — pošto se tim zvao Green, nema nekog posebnog značenja.
Oak je drugo ime "Jave", i ovoga puta ima nešto više značenja. Oak (hrast) je simbol snage, izabran za nacionalno drvo u mnogim evropskim i američkim zemljama kao što su Sjedinjene Države, Francuska i Nemačka. Hrast izgleda ovako.

godine pojavio se prototip Oaka, ali kada je tim održao prezentaciju proizvođačima hardvera, nije dobio njihovo priznanje, pa je Oak ostavljen po strani.
godine tim je otkrio da Java više odgovara za Internet programiranje. Nakon toga, tim je pomoću jezika Oak razvio tehnologiju koja omogućava ugrađivanje malih programa u veb stranice radi izvršavanja — Applet. Applet se ne samo mogao ugraditi u veb stranicu, već se mogao i prenositi zajedno sa stranicom preko mreže.
Mora se uzdahnuti — tehnologija se stvarno brzo ažurira. Applet je spasao Oak i pretvorio ga u ponosnu Javu, ali je Applet vrlo rano nemilosrdno opran sa plaže. Zar to nije okrutno?
- godine Oak je preimenovan u "Javu", pošto je Oak već registrovala druga kompanija. Novo ime je najbolje trebalo da izrazi suštinu tehnologije: dynamic (dinamičan), revolutionary (revolucionaran), Silk (mekan kao svila), Cool (super) itd. Osim toga, ime je moralo da se lako piše i da zvuči zanimljivo.
Posle dugog biranja, tim je na kraju izabrao "Javu". Pažljivi čitaoci možda će primetiti da u reči "Java" postoji osetljiva reč, pa je neko vreme WeChat (u delu za nazive kolekcija članaka), u okviru zabrane osetljivih reči, čak zabranio i samu reč "Java". Ja sam tada morao da koristim fonetsku transkripciju "Džava" umesto "Java", uz dozu sarkazma.
"Java" je englesko ime ostrva Java u Indoneziji, poznatog po proizvodnji kafe, pa su čitaoci mogli videti da se reč Java često pojavljuje uz šolju kafe iz koje se diže para.

Iste godine, na konferenciji SunWorld, kompanija Sun je zvanično objavila verziju Java 1.0 i prvi put istakla slogan "Write Once, Run anywhere". Magazin Time je uvrstio Javu među deset najboljih proizvoda 1995. godine.
- januara 1996. objavljen je JDK 1.0, i Java jezik je dobio svoje prvo zvanično izvršno okruženje. JDK 1.0 je čisto interpretirajuća Java virtuelna mašina; glavne tehnologije su: Java virtuelna mašina, AWT (grafičko okruženje) i Applet.
Aprila su deset glavnih dobavljača operativnih sistema i računara objavili da će ugraditi Java tehnologiju u svoje proizvode. Do septembra, oko 83.000 veb aplikacija je koristilo Javu. Krajem maja održana je prva JavaOne konferencija u San Francisku, i od tada je JavaOne postala najveća tehnička manifestacija za milione Java programera širom sveta.
februara 1997. objavljen je JDK 1.1; glavne tehnologije: JAR fajl format, JDBC, JavaBeans, RMI (Remote Method Invocation).
decembra 1998. objavljen je JDK 1.2, što je jedna prelomna verzija. U ovoj verziji Sun je podelio Javu u tri pravca: J2SE za razvoj desktop aplikacija, J2EE za razvoj u preduzećima i J2ME za razvoj mobilnih aplikacija. Glavne tehnologije: EJB, Swing.
maja 2000. objavljen je JDK 1.3, koji je značajno izmenio Java 2D.
februara 2002. objavljen je JDK 1.4. Ovo je verzija u kojoj je Java zaista sazrela; poznate kompanije poput IBM-a i Fujitsua (Erge je nekada radio u ovoj japanskoj kompaniji iz Fortune 500 tri i po godine) su učestvovale. Glavne tehnologije: regularni izrazi, NIO.
septembra 2004. objavljen je JDK 5. Obratite pažnju da je Sun odbacio način imenovanja "1.x". JDK 5 je donelo velika poboljšanja u upotrebljivosti Java sintakse, na primer: automatsko boksiranje, generici, dinamičke anotacije, enumeracije, promenljivi broj argumenata i foreach petlja.
decembra 2006. objavljen je JDK 6. J2SE je postao Java SE 6, J2EE je postao Java EE 6, a J2ME je postao Java ME 6. JDK 6 je verovatno verzija sa najdužim životnim vekom u istoriji Jave. Glavni razlozi su: porast složenosti koda, svetska ekonomska kriza i Oracle-ovo preuzimanje kompanije Sun.
Poslednja zakrpa za nadogradnju JDK 6 bio je Java SE 6 Update 211, objavljen 18. oktobra 2018. — raspon od čak 12 godina!
februara 2009. objavljen je JDK 7, ali u skraćenom obliku. Mnoge dugo očekivane funkcije nisu bile završene, poput Lambda izraza. Glavni razlog je što je kompanija Sun zapala u poslovne probleme i više nije bila u stanju da gura razvoj JDK 7.
aprila 2009. kompanija Oracle je otkupila kompaniju Sun, čija je tržišna vrednost nekad premašivala 200 milijardi dolara, za 7,4 milijarde dolara — sunce je na kraju ipak zašlo. Za Javu, ovo "dete", može se reći da je i dobro i loše. Dobro je to što Oracle ima novca i može uložiti sredstva u razvoj Jave; loše je to što je Oracle "očuh" i prema Javi sigurno nije tako naklonjen kao Sun, već ide izrazito komercijalnim putem.
marta 2014. konačno je stigao JDK 8. Koraci su bili toliko spori, ali je na kraju ipak stigao — sa svojim najjačim oružjem, Lambda izrazima. Iako je JDK 19 već pred objavljivanjem, šala "nove verzije neka se objavljuju, ja ću i dalje koristiti Javu 8" i danas kruži.
septembra 2017. objavljen je JDK 9. Od tada, brzina kojom se objavljuju nove verzije JDK-a je programere ostavljala bez daha — jedna verzija na pola godine. Iako je Oracle imao dobru nameru, da izbegne rizik od kašnjenja zbog dodavanja funkcija, mora se priznati da je ritam ažuriranja verzija ipak previše učestao.
To dovodi do problema: jedva ažurirate verziju, a nakon šest meseci je Oracle više ne održava. Za ovaj problem, Oracle-ovo rešenje je prilično neobično — samo svaki šesti veliki JDK dobija dugoročnu podršku (Long Term Support, LTS).
JDK 8 je LTS verzija; JDK 11, objavljen 25. septembra 2018. godine, je LTS verzija; JDK 10, objavljen 20. marta 2018. godine, može se samo kratko spomenuti.
JDK 17, objavljen 2021. godine, je trenutno najnovija LTS verzija.
JDK 12, JDK 13, JDK 14, JDK 15, JDK 16, JDK 18 i JDK 19 su prelazni proizvodi, pomalo kao eksperimenti, i nisu baš omiljeni među programerima.
Java se razvija već više od 20 godina, i za programski jezik to zaista nije lako. Objektno orijentisana ideja koju Java predstavlja donela je revolucionarne promene u inženjerskoj oblasti, a ključno je da Java stalno prihvata promene.
U oblasti velikih podataka postoje Apache Kafka, Apache Samza, Apache Storm, Apache Spark i Apache Flink — osim što je Spark napisan u Scala-i, funkcijskom jeziku zasnovanom na JVM-u, ostali su napisani u Javi.
U eri oblaka Java se suočava sa izazovom ekosistema kontejnera (tehnologije poput Dockera) koji predvodi jezik Go. Međutim, sve je više velikih distribuiranih sistema zasnovanih na Javi, Java i dalje igra glavnu ulogu u oblaku i distribuiranim sistemima, i formirala je veliki ekosistem.
Iako su Java, C++ i C svi "ostareli" i stalno ih izazivaju drugi jezici, samo jakima je suđeno da prihvataju izazove, zar ne? Verujem da je budućnost Jave i dalje veoma svetla.
03. Karakteristike Jave
Iako je Java već napunila 25 godina, još uvek "nije istrošila svoj mač". U izveštaju Stack Overflow-a o popularnim programskim jezicima 2019. godine, Java se nalazi na petom mestu, a 41% anketiranih programera smatra da je Java i dalje popularan programski jezik.

Upotreba Jave u Kini daleko premašuje onu u inostranstvu, pa Java ima veće tržišno učešće u Kini. Bilo 2020. ili 2021, 2022, 2023. godine, u kratkom roku teško je poljuljati dominantan položaj Jave.
Iako se ovih godina stalno priča da je Java "previše zasićena", mogu samo reći da takvih glasova ima svake godine — samo ih saslušajte i idite dalje.
Mnoge velike internet kompanije koriste Javu. U Kini najpoznatija je svakako Alibaba, a u inostranstvu najpoznatija je svakako Google. Pa zašto je Java tako popularan?
1) Jednostavnost
Java pruža programerima jednostavno i lako iskustvo korišćenja. U poređenju sa drugim objektno orijentisanim jezicima, dizajn i ekosistem biblioteka Jave imaju ogromnu prednost. Java je eliminisala retko korišćene, teško razumljive i zbunjujuće osobine C++, kao što su aritmetika pokazivača, preopterećivanje operatora i ručno upravljanje memorijom.
Java omogućava alokaciju na steku, automatsko prikupljanje smeća i automatsko upravljanje memorijom, što u određenoj meri smanjuje poteškoće za početnike.
2) Prenosivost
Ako bi se Java direktno kompilirala u binarni kod koji operativni sistem prepoznaje, jedan identifikator bi možda bio 1100 pod Windows operativnim sistemom, a 1001 pod Linux-om. U tom slučaju, program koji radi pod Windows-om ne bi mogao da radi u Linux okruženju.
Da bi rešio ovaj problem, Java prvo kompilira u bajtkod, koji zatim JVM (Java virtuelna mašina) interpretira i izvršava, sa ciljem da pretvori ujednačen bajtkod u binarni kod koji operativni sistem prepoznaje, a zatim ga izvrši. Za različite operativne sisteme postoji odgovarajuća verzija JVM-a, pa je Java na taj način postigla prenosivost.
3) Bezbednost
Java je pogodan za mrežna/distribuirana okruženja, i da bi se postigao ovaj cilj, uložen je ogroman trud u bezbednost. Pomoću Jave mogu se izgraditi programi otporni na viruse i neovlašćene izmene.
Od samog početka, Java je dizajnirala mnoge mehanizme za zaštitu od napada, na primer:
- Prekoračenje steka u toku izvršavanja, što je uobičajen način napada crva.
- Verifikacija bajtkoda, koja osigurava da kod bude u skladu sa JVM specifikacijom i sprečava zlonamerni kod da ošteti okruženje izvršavanja.
- Bezbedno učitavanje klasa, koje sprečava nepoverljiv kod da ometa rad Java programa.
- Sveobuhvatan API podržava širok spektar usluga šifrovanja, uključujući digitalne potpise, sažetke poruka, (simetrične i asimetrične) šifre i generatore ključeva.
- Bezbedna komunikacija, uz podršku za HTTPS i SSL, štiti integritet i privatnost podataka u prenosu.
4) Konkurentnost
Java je izuzetno uspešna u oblasti višenitnog programiranja. Ukoliko operativni sistem to podržava, niti u Javi mogu iskoristiti više procesora, što donosi bolji odziv pri interakciji i ponašanje u realnom vremenu.
04. Oblasti primene Jave
"Erge, da li će Java nastaviti da bude popularan?" — Sanmej je trepnula svojim dugačkim trepavicama i rekla mi.
"Naravno! To je pre svega zahvaljujući širokom spektru scenarija primene Jave." — odgovorio sam odlučno.
Oblast velikih podataka:
Kao i Python, Java zauzima dominantan položaj u oblasti velikih podataka, i mnogi okviri za obradu podataka velikog obima zasnovani su na Javi.
- Apache Hadoop, za obradu velikih skupova podataka u distribuiranom okruženju. Hadoop koristi arhitekturu sa glavnim i pomoćnim čvorovima, gde glavni čvor kontroliše ceo distribuirani računarski stek. Hadoop je popularan među kompanijama koje treba da obrađuju i analiziraju podatke velikog obima.
- Apache Spark, koji se često koristi u velikim ETL (tehnologija skladišta podataka) sistemima, prediktivnim analizama i programima za izveštavanje.
- Apache Mahout, za mašinsko učenje, na primer klasifikaciju, klasterizaciju i preporuke.
- JFreechart, za vizualizaciju podataka; pomoću njega se mogu napraviti razne vrste grafikona, kao što su tortni grafikoni, stubičasti grafikoni, linijski grafikoni, grafikoni rasturenih tačaka, boks-grafikoni, histogrami itd.
- Deeplearning4j, za izgradnju različitih tipova neuronskih mreža; može se integrisati sa Spark-om i pokrenuti na GPU (grafičkom procesoru).
- Apache Storm, za obradu tokova podataka u realnom vremenu; jedan Storm čvor može obraditi milione poslova u sekundi.
Oblast interneta stvari (IoT):

Oracle navodi da su fleksibilnost i popularnost glavni razlozi zbog kojih IoT programeri biraju Javu. Java pruža veliki broj API biblioteka koje se lako mogu primeniti u ugrađenim aplikacijama. U poređenju sa drugim programskim jezicima, poput C-a, Java se pri prelasku sa jedne platforme na drugu ponaša glatkije i ređe greši.
Na primer, Samsung-ova SmartThings platforma koristi Javu za razvoj dela svog rešenja za pametne domove.
Oblast finansijskih usluga:
- Četbotovi, zahvaljujući brojnim faktorima kao što su prenosivost, održivost i vizualizacija, Java je postao najbolji alat za razvoj četbotova.
- Detekcija i upravljanje prevarama, banke i finansijske kompanije koriste AI (veštačka inteligencija) alate za otkrivanje finansijskih prevara i prevara sa kreditnim karticama, a Java se često koristi za razvoj ovih AI alata.
- Sistemi za trgovanje, dinamička optimizacija kompilacije u toku izvršavanja koju pruža Java virtuelna mašina u mnogim slučajevima ima bolje performanse od kompajliranih jezika (kao što je C++), što čini da sistemi za trgovanje rade glatkije.
- Mobilni novčanici, mobilni novčanici razvijeni na osnovu AI i Java algoritama mogu pomoći korisnicima da donose pametnije odluke prilikom trošenja novca.
Oblast Web-a:
Java tehnologija je dala snažan podsticaj razvoju Web oblasti, i postoji mnogo glavnih okvira za Java Web razvoj:
- Spring okvir, lagan okvir kontejnera za inverziju kontrole (IoC) i orijentisan na aspekte (AOP), koji prožima sve aspekte Java EE tehnologije; velika većina Java aplikacija može imati koristi od Spring okvira.
- Spring MVC okvir, lagan Web okvir tipa vođenog zahtevom, zasnovan na implementaciji MVC (Model-View-Controller) obrasca dizajna u Javi.
- MyBatis okvir, odličan okvir perzistentnog sloja podataka, koji može uspostaviti mapiranje između klasa entiteta i SQL izjava, i predstavlja poluautomatsku implementaciju ORM-a (Object Relational Mapping, mapiranje objektnih relacija).
- JavaServer Faces okvir, koji je razvio Oracle, lako povezuje prezentacioni sloj sa kodom aplikacije i pruža skup API-ja za prikaz i upravljanje UI komponentama.
- Spring Boot okvir, proširenje Spring okvira, koje olakšava kreiranje nezavisnih, produkcijski zasnovanih Spring aplikacija.
- Spring Cloud okvir, proširenje Spring Boot-a, skup alata za izgradnju distribuiranih sistema.
Ukratko, Oracle tvrdi da Java radi na 97% računara preduzeća — prilično impresivno.
05. Da li se isplati učiti Javu?
"Erge, da li učenje Jave uopšte ima budućnost? Da li ću moći da nađem posao posle diplome?"
"Sanmej, za sada, Java nije samo programski jezik — to je i tehnički sistem sastavljen od niza računarskih programa i specifikacija. Ovaj tehnički sistem pruža kompletno okruženje podrške za razvoj softvera i primenu na više platformi, i široko se koristi u sledećim oblastima."
- desktop aplikacije;
- Web aplikacije;
- aplikacije za preduzeća, koje odražavaju prednosti Jave u pogledu bezbednosti, balansiranja opterećenja i klasterizacije;
- mobilne aplikacije, uglavnom Android;
- ugrađeni sistemi;
- robotika;
- igre.
Do danas, Java tehnički sistem je privukao više od 10 miliona programera softvera (vremenom će ovaj broj samo rasti) i predstavlja najveći tim za razvoj softvera na svetu. To što je Java stekao tako široko priznanje ne dolazi samo zbog toga što je strukturano rigorozan, objektno orijentisan programski jezik, već i zbog mnogih drugih prednosti koje se ne smeju zanemariti:
- oslobođenje od okova hardverske platforme, uz ostvarenje ideje "jednom napiši, svuda pokreni";
- upravljanje memorijom je relativno bezbedno, izbegava se većina problema curenja memorije i prekoračenja granica pokazivača;
- ostvareno je otkrivanje vrućih tačaka i kompilacija u toku izvršavanja, što omogućava Java aplikacijama da s vremenom postignu više performanse;
- postoji kompletan skup interfejsa aplikacija, kao i brojne biblioteke trećih strana iz komercijalnih institucija i open source zajednice.
Sve ovo zajedno znatno povećava efikasnost razvoja softvera.
Na sledećoj slici je prikazana zarada na pozicijama za Javu na jesenjem ciklusu zapošljavanja generacije 2023, za koju se kaže da je "najteža u istoriji".

I zarada na pozicijama za Javu na jesenjem ciklusu zapošljavanja generacije 2024.

Za poziciju Java backend inženjera u Xiaohongshuu-u, diplomac sa univerziteta iz Projekta 985 može dobiti godišnji paket od 480.000 juana, što je zaista zastrašujuće, pa tako učenje Jave ipak donosi "dobar novac".
"Ooo, dobro, onda ću prvo početi da učim kroz "Put ka naprednoj Javi"!"
