Java - opšta diskusija

Java je softverska platforma, kao i programski jezik koji ide uz tu platformu. Razvijena je od strane kompanije Sun Microsystems '90-tih godina, a glavna karakteristika joj je to da se jednom kompajliran Java bajtkod može izvršavati na svakom uređaju koja ima Java izvršno okruženje.

Iako je izvorna zamisao i namena bila potpuno drukčija, Java je početnu popularnost stekla najviše zbog veb apleta koje je bilo moguće pokretati unutar veb pregledača. Pod sloganom “Write once, run everywhere!” i uz žestok marketing i obećanja o svetloj budućnosti (kako to uvek i biva u svetu računarstva), Java je ubrzo stekla masovnu popularnost. Odjednom je bila korišćena za razne aplikacije, veb servere, igrice, kancelarijske alate, i tako dalje. Iako je većina tih obećanja (kako to uvek i biva u svetu računarstva) ostala neispunjena ili delimično ispunjena, i iako joj popularnost u blagom opadanju u poslednjih 10-ak godina, Java je i dalje najkorišćeniji programski jezik na svetu.

U Javi se jako forsira objektno orijentisan stil programiranja, jer je nastala u vreme kada su mnogi, uključujući i njene stvaraoce, verovali da je to superioran stil. Zbog toga je Java kod uniforman pa je obično relativno jasan i lako čitljiv, iako ponekad nepotrebno obiman. Java je jezik sa zaista ogromnom standardnom bibliotekom, u kojoj postoje rešenja za većinu problema. Takođe, zbog popularnosti, napisano je mnogo third-party biblioteka i framework-a za Javu, pa je obično samo potrebno umeti sastaviti kockice.

Java je zato robustan, moćan jezik koji čini neki srednji sloj kao jezik u kome se brže završi posao nego u C+±u, a dobiju efikasniji programi nego u Python-u. Lično nisam ljubitelj Jave, i mogao bih da napišem post 10 puta duži od ovoga kada bih navodio i objašnjavao sve njene mane, ali ne mogu poreći da ima i neke prednosti :))

Situacija još uvek takva da se, zbog velikog broja dostupnih Java programera, firme masovno opredeljuju da razvijaju softver u Javi, pa onda zbog te potražnje za Java programerima ljudi uče Javu i tako u krug.

Ipak, NIKAKO ne preporučujem Javu kao prvi jezik početnicima iz mnogo razloga. Rado ću navesti i razloge, al i ovo je već mnogo za uvodni post :slight_smile:

Ovde možete postavljati sva pitanja, iskustva, hvale i kritike u vezi sa ovim jezikom :slight_smile:

iako ponekad nepotrebno obiman

:lol:

A zašto je ne voliš? Zaštoooo? :frowning:

Ajde, kad si zapeo :))

Prvo, jezik je sam vrlo krut i nefleksibilan. Ima mnogo mogućnosti, ali ako želiš da uradiš nešto što nije predviđeno, bićeš prinuđen na mnoge kompromise. Samo to forsiranje objektno orijentisanog programiranja ume da sputava. Na primer, zašto ne mogu normalno da prosleđujem funkciju kao argument drugoj funkciji? Nego moram da pravim prazan objekat, da ubacujem funkciju kao njegovu metodu, pa ga instanciram i prosleđujem kao argument. Bezveze. Takođe, nije podržan operator overloading, jer smatraju da je kod koji koristi izmenjene operatore nedovoljno čitak. Ja mislim da je to potpuna glupost. Može se prevesti kao “Neki programeri ne razmišljaju i neuredni su, pa hajde da ih ne zbunjujemo”. Takođe, nema podrške za funkcionalno programiranje, mada je napravio neko hak za to, koji radi na vrlo ružan način, tako što je to zapravo preprocesor koji zamenjuje te funkcionalno napisane delove java kodom.

Java je dizajnirana od vrha do dna za rad sa integrisanim okruženjem. Što je okej dok sve radi. Međutim, dešava se da nešto odjednom prestane da radi i da nemaš pojma odakle da počneš da tražiš bagove. Jer sve je automatizovano i glavna ideja i jeste da se programer ne zamara time što se dešava u pozadini. Al u C+±u bar imaš izbor. Javu niko ni ne pomišlja da radi bez integrisanog okruženja, jer je sve iza zavese previše komplikovano.

Java nije baš sjajna za kombinovanje sa drugim programskim jezicima. Postoji interfejs za native kod, ali to znatno umanjuje takoreći jedinu prednost koju Java ima. Doduše, postoji sad još jezika koji rade na java virtualnoj mašini, kao što su Scala, Clojure i Jython, to su valjda negde pre par godina shvatili da je skriptovanje mnogo kul stvar koja mnogo olakšava život. A to još više doprinosi tom nekom osećaju da sa jedne strane imaš “normalno programiranje”, a sa druge “java programiranje”.

Na kraju, Oracle je vrlo sumnjiv sa svojim odnosom prema open-source-u, do sad su se pokazali nimalo dostojnim poverenja (MySQL, Open Solaris, Star Office). Sve mi se više čini da je politika da lagano, malo po malo, zapuste slobodnu javu i bace je u zaborav. Ne želim da mi mnogo toga zavisi od Jave u trenutku kada se to bude desilo.

A sad, pogledajmo alternative. U pythonu 10 puta više uradiš za isto vreme. Jednaka portabilnost. Jeste sporije, al ako ti baš treba brzina, kombinuješ sa C+±om, jebiga, uvek ima neki kompromis. Glavna stvar - fleksibilnost. U Javi to ne postoji :slight_smile:

Nikako se ne treba ograničavati na jedan programski jezik. Počneš da razmišljaš u jednom jeziku i onda ti svaki koji je moćniji od njega deluje čudno. Haskel i Lisp dolaze na um. Ono malo dodira što sam imao s njima me je vrlo impresioniralo iako je prva pomisao “fujfujfujfuj”. Funkcionalno je kul, a python ume i funkcionalno :))

Java je dovoljno zrela i robustna da se takoreći sve može raditi u Javi. Ali ja ne znam tu namenu za koju je Java najbolji izbor, iako možda i postoji. Java je dobar jezik da nađeš posao i to je sve :smiley:

@Klod
Lepo obrazloženo, nema šta… :slight_smile:

Jedino neslaganje sa tvojim stavovima imam u vezi Oracle…njihov odnos prema open sorsu nimalo se ne razlikuje od odnosa koji imaju svi ostali veliki igrači…Google, Samsung (Tizen), Apple, pa čak i Red Hat.
Radi se o ogromnim novcima koji su u igri, i potpuno je jasno da će se svi maximalno potruditi da ostanu u igri i zadrže svoje pozicije.

Na kraju krajeva, povratni efekat je i na dobrobit cele open source zajednice…dobro plaćeni i siti programeri će nešto i vratiti zajednici, oni gladni i ubogi ne valjaju ni sebi ni drugima :slight_smile:

Ljudi imam probleme sa sledicim zadacima,ako neko zna da ih uradi zamolila bih da mi napise resenje.Pozdav
[COLOR=rgb(0,0,0)]Napisati program kojim se određuju i ispisuju svi prosti brojevi od 2 do 1000.
[COLOR=rgb(0,0,0)]Napisati program kojim se određuju koji određuju jedinstveni brojevi m[COLOR=rgb(0,0,0)] i n[COLOR=rgb(0,0,0)] između 1 i 100 koji zadovoljavaju uslov |n2 – m * n – m2| = 1[COLOR=rgb(0,0,0)] i za koje je suma m2 + n2[COLOR=rgb(0,0,0)] najveća.
[COLOR=rgb(0,0,0)]Elektronski sat pokazuje tekuće vreme u satima, minutima i sekundama. Napisati program kojim se određuju svi momenti vremena u toku jednog dana takvi da je suma cifara na elektronskom satu jednaka broju 37.

Nema potrebe da praviš duple postove na drugim temama :slight_smile:

@ Jeca

Prvi je zaista onako - prost :slight_smile:
Ovaj algoritam se zove Eratostenovo sito. Dakle, uzmeš sve brojeve u intervalu od 2 do N i ideš redom i uzimaš najmanji koji nije izbačen. Taj je sigurno prost, i samo izbaciš sve njegove umnoške, odnosno sve brojeve koji su deljivi njime. To ponavljaš dok ne ostanu samo prosti.

Postoje, naravno efikasniji algoritmi, al ovaj je drevan i jednostavan. Na fedori sam, mrzi me da instaliram javu, a mrzi me i da rebutujem u manjaro, pa ti ga evo u c++, nije teško prevesti :slight_smile:
[ATTACH]3014.IPB[/ATTACH]

Treći je bezveze, samo uzmeš i proveriš sve, možda i može efikasnije, al ovde bi to sigurno bilo nepotrebno komplikovanje.
[ATTACH]3015.IPB[/ATTACH]

Za drugi mi ne pada ništa pametnije nego da proverim sve kombinacije, 100*100 nije mnogo različitih kombinacija, pa da čuvam koja uspe, zajedno sa vrednošću n²+m², pa prosto da izaberem najbolju. Mrzi me to da kucam sad, možda ću kasnije ako želiš. Naravno, verovatno postoji bolje rešenje, al ja ga sad ne vidim.

“When in doubt, use brute force” - Ken Thompson

@klod
Hvala puno,ovo su mi neke predispitne obaveze. :slight_smile:

Sad vidim, onaj unutrašnji for u prvom treba da ima

[FONT=arial][SIZE=14px]E ovako! Do sada ima neka osnovna iskustava po pitanju programiranja. Savladao sam osnove C-a i C+±a . Zbog toga meni je Java program jasniji u odnosu na početnika. Kupio sam knjigu za Java 7 programiranje kroz koju želim da prodjem kako bi znao osnovne stvari iz Javu :-D. [/FONT][/SIZE]Da li kada na letim na neki problem mogu da postavim pitanje?

Hahaha, pa što ne bi mogao, zato postoji tema :))

Potrebna mi je preporuka za literaturu na temu Jave. U obzir dolaze knjige , tutorijali, kursevi… sve sto moze pomoci u sto kvalitetnijem savladavanju.

Kakvog predznanja?
[LIST][] Lynda kursevi su jako dobri,
[
] Bruce Eckel - Misliti na Javi
[] Herbert Schildt - JDK 7 Kompletan Priručnik (pažnja: ogromna je)
[
] Laslo Kraus - Programski Jezik Java (ako možeš da pratiš Laslov tempo, imaš savladan C++ i Objektno Programiranje)
[/LIST]
Ove 3 sem Lynde smo dobili na VIŠER-u kao dodatnu literaturu, pa eto.

Predznanje?-recimo da nisam pao sa Mrasa. :smiley: Solidno razumevanje OOP, skolski(fakultetski) C++, dok smo Javu samo zagrebali. Proslo je neko vreme pa su se neke stvari i zaboravile ali recimo da nisam moler(bez uvrede bilo kome) pa zelim sada da programiram. :smiley:

Koliko paznju obracati na verziju Jave koja se koristi u nekoj literaturi? Da li je ok uzeti nesto starije pa vezbati npr “Misliti na Javi” je 5/6 a sada je aktuelna 7/8 ako se ne varam

Koliko shvatam, 7 je donela neke novine, 6 skoro niko više ne koristi za rad ali možda vrši posao za učenje, e sad ne znam za neke dodatne klase tipa Scanner, u kojoj su verziji dodatoj, ali pošto nam stiže 8 i još neka poboljšanja, verovatno je bolje da se od 7 krene.
Opet, ima više vrsti Jave, ona koja se fokusira na grafiku, ili na server aplikacije, aplikacije za web strane… I način učenja je malo drugačiji, postoji i knjiga Learning Java Through Graphical Approach, gde se ide direktno na GUI Javu i na tom principu se uči i OOP i ostalo.
Uglavnom, nađi par ovih knjiga, prelistaj po neko poglavlje, vidi šta ti najviše odgovara i to uzmi i kreni redom… B) :slight_smile:

Ja imam Herbert Schildt - JDK 7 Kompletan Priručnik , ali sam morao da prestanem sa Javom i da se zbog skole posvetim C-u.Inace knjiga ima 1225 strana ::slight_smile:

Skinuo sam:
[LIST][]Java Essential Training (Lynda)
[
]Thinking in Java(Bruce Eckel)
[*]još par manjih tutorijala
[/LIST]
za početak. Kontam da prođem Lindu pa da onda pređem na Thinking in Java ili Herbert Schildt - JDK 7 Kompletan Priručnik.
Kakva su mišljenja po pitanju ove knjige http://www.kupindo.com/Informacione-tehnologije/16399849_Java-SE-7-Tom-I-Osnove-prevod-devetog-izdanja ?

NetBeans postaje Apache projekat. Umesto CDDL + GPL v2 licenci, NetBeans će imati Apache licencu. Više imformacija: NetBeansProposal - Incubator Wiki

80-tih sam počeo sa Basic-om, Z80 i x86 Asemblerom, proučavao programiranje DOS oS-a. Krajem 80-tih sam bio doktor za Turbo Pascal, a 90-tih sam naučio Cobol i u njemu uradio prve komercijalne projekte, gde sam i zaradio pare. Ubrzo sam počeo programiranje u GUI i Visual Studio i nikako nisam bio zadovoljan sa MS tehnologijama, pa sam krenuo da učim Javu.
Zbog ogromnog nasleđa Cobol aplikacija, krenuo sam sa Obect Cobol i PERCobol (prekompajler za Javu). PERCobol mi je poslužio da migriram svoje projekte i Micro Focus ISAM datoteke u SQL. Konačno sam prešao na Javu i 15 godina radim u Javi. Napravio sam svoje klase i komponente, tako da zahvaljujući tome imam sada brz i olakšan razvoj. Više ne brinem o tome da li će mi aplikacija raditi na MAC OS X-u, Linux-u, ili Windows-u. Zapravo koristim NetBeans IDE u Linuxu i na MAC OS X-u i retko pokrećem Windows (samo jedan računar mi je na Windows-u zbog e-porezi i e-banking-a!).
Sve što sam želeo da niapišem napisao sam u Javi i meni Java nikako nije bila problem, niti se slažem s pojedincima da programer, koji ne razvija OS može imati probleme s Javom. Java je, zapravo, jako jednostavna. Ima svega par desetina naredbi, a ono što pravi problem su ugrađene biblioteke i dodatne biblioteke potrebne za različite projekte, koje programer mora naučiti da koristi.
Njakomplikovaniji je GUI (sa SWING-om recimo…) koji moraš dobro znati, pogotovu ako ćeš da pišeš profesionalne programe. Sa skoro par miliona linija koda u NetBeans-u nikada nisam imao problema, koje nisam mogao da rešim. Sa Visual Studio-om sam ih imao 100x više i neke nisam mogao da rešim. I danas radim u Javi, koristeći Swing, JDBC, Java EE i Vaadin.

Sa javom sam dakle rešavao sve probleme i toplo je preporučujem svima. Lutanje u ekperimentisanju sa jezicima po meni je gubljenje vremena, jer sa 30-togodišnjim iskustvom sam došao do zaključka da sa svakim programskim jezikom mogu izvući maksimum i uraditi sve što zamislim. Iako imam veliko iskustvo retko sam pribegavao za druge jezike, iako sam bio familijaran sa skoro svim, već sam koristio ono u čemu trenutno radim. Jedino sam koristio asembler dok sam radio u Cobol-u, jer sam morao da pišem neke servisne prekide u DOS-u, za štampanje kako bi ondašnji YUASCII, prevodio u CP852 kodnu stranu prilikom štampanja. Danas je to istorija jer Java koristi Unicode, za razliku od MS kompajelra na Windows-u, gde o tome moraš posebno voditi računa.

Retko aplikativci, poput mene i mojih kolega, dolaze u situaciju da rešavaju Javom sistemske probleme. Mada i toga ima, naročito ako je rad u mreži u pitanju, ili rad sa hardverom (recimo rad sa fiskalnim štampačima!). No i to nije problem, uvek možeš da nađeš neke biblioteke pisane 100% u Javi, ili pak sa nativnim delovima. Ako se radi o nativnim delovima, obično ih ima za sve tri poznate WLM (Windows, Linux Mac OS X) platforme, pa to ne pravi nikakav problem.

Ipak teško je praviti profesionalne aplikacije koristeći Java Swing i slične njemu biblioteke. Najbolje je iz Swing-a izvesti svoje komponente sa ponašanjima, koja će zadovoljiti Vaše kriterijume i to savetujem svim mladim programerima, koji rade na svojim projektima i koji nameravaju dugoročno da ih nadograđuju i održavaju. Ako rade u firmi, obično će tamo zateći već razvijene komponente, pa prionite na učenje.

Ah da! Slažem se da programer do svoje 30-te godine mora biti poliglota. Mora biti upoznat sa svim tehnologijama koje su aktuelne i koje se koriste trenutno. Tek takav programer, zavisno od posla, će se opredeliti za neki od jezika, ili će biti primoran da radi s onim, s kojim rade njegove kolege na projektu.