Kako samostalno učiti programiranje na smeru za računare — koje knjige, koje video tutorijale, koje priručnike gledati?
Predgovor
Kada se osvrnem na svoj univerzitetski put, neizbežno osećam izvesno žaljenje, jer je ukupni nivo nastave na fakultetu bio ograničen, a i sam sam nedostajao inicijative da učim samostalno, pa sam protraćio prilično vremena.
Srećom, kada sam na poslu osetio pritisak preživljavanja, naglo sam se probudio, jer sam imao onaj osećaj hitnosti — ako ne iskoristim vreme za učenje, mogao bih završiti kao ovaj ili onaj kolega kojeg je kompanija nemilosrdno otpustila.
Tako sam konačno krenuo putem samostalnog učenja računarstva, na kojem nema povratka. Kažem da nema povratka zato što je računarska nauka ogroman sistem znanja; proveo sam mnogo godina, a i dalje osećam da na tom putu ostaje mnogo nepoznanica koje čekam da istražim.

Ali baš zato što ima toliko nepoznanica koje moram da istražim, svaki dan osećam da napredujem; ne moram uopšte da provodim godine kako bih stekao diplomu — samo oslanjajući se na sebe, mogu da dobijem obrazovanje svetske klase.
Na internetu svuda ima resursa za učenje, ali se mešaju oni najbolji sa onim bezvrednim. Ono što nam treba nisu „100 G" besplatnih video tutorijala, ni „500" besplatnih e-knjiga, već:
- koje predmete treba da učimo i zašto;
- koje su najbolje knjige ili video kursevi za te predmete.
Ako želiš da učiš fiziku, preporučujem ti da pratiš istoriju razvoja fizike: prvo klasičnu fiziku Njutna, zatim termodinamiku i elektromagnetizam, pa onda relativnost i kvantnu mehaniku, koje su potpuno srušile klasičnu fiziku, i na kraju elektrodinamiku, koja je prava tvrda srž.
Ceo taj proces učenja je od dna ka vrhu. Ali računarstvo se ne može tako učiti.
Prvo učiti kola, zatim fon Nojmanovu arhitekturu, pa napraviti računar? Onda učiti kako u asembleru napisati mini OS? Zatim učiti kako napisati prostiju verziju kompajlera? I tek na kraju učiti više programske jezike, poput Jave ili Pythona?
Očigledno, tako ne ide! Računarstvo je najbolje učiti od vrha ka dnu.
Na samom početku treba naučiti jedan viši programski jezik, na primer Javu. Kasnije, kada budeš upoznao probleme sa performansama Jave, shvatićeš — ah, pa Java je interpretirani programski jezik, dok je C kompajlirani programski jezik, pa se zato operativni sistemi poput Unixa/Linuxa pišu u C-u, jer tako treba maksimalno iskoristiti hardver.
Kada u Javi, u konkurentnom programiranju, naiđeš na pojmove poput „atomičnosti", „sinhronizacije", „asinhronosti", „procesa", „alokacije memorije", prirodno će ti se javiti mnogo pitanja, pa ćeš krenuti da učiš operativne sisteme i arhitekturu računara, i niz tvojih pitanja će postepeno biti rešen.
Kada otkriješ da je tuđi algoritam za neki poslovni zahtev u Javi mnogo brži od tvog, prirodno ćeš biti radoznao zašto je to tako. Zatim primetiš da drugi koriste drugačije strukture podataka od tebe, pa kreneš da učiš strukture podataka, a onda i neke efikasne algoritme, poput dinamičkog programiranja.
Učeći prema potrebama, zaista možeš savladati računarstvo. Ako bez ikakvih osnova programiranja kreneš da gložiš crne knjige poput „Duboko razumevanje računarskih sistema", brzo ćeš odustati.
Programski jezici
Postoji mnogo vrsta programskih jezika — Java, Python, C/C++, Go, JavaScript itd. Početnici su često vrlo uznemireni, jer se plaše gubitka, i to pre nego što uopšte steknu bilo šta.
Izabereš Javu — a često se čuje „život kratak, ja koristim Python"; izabereš Python — a čuješ „Go je miljenik Googlea, u punom je usponu"; izabereš Go — a čuješ „frontend (JavaScript obavezno) lakši za učenje"; izabereš JavaScript — a čuješ „C/C++ ispunjava osnovne zahteve modernog programiranja, temelj je mnogih programskih jezika."
I onda odeš u zabunu! Kako izabrati?
Ja sam počeo da učim Javu još u prvoj godini fakulteta; tada nisam imao izbora, jer nisam znao da postoje i drugi programski jezici (ššš), fakultet je tražio Javu, pa sam je učio. Moram reći da sam bio veoma srećan što sam dobro izabrao.
Možeš da pogledaš rang-listu programskih jezika (TIOBE, veoma autoritativna) — o promenama programskih jezika u poslednjih 10 godina. Java dugo drži vrh te liste i držaće ga još duže; kad jedan jezik ima tako upornu životnu snagu, zasigurno ima prednosti koje drugi nemaju, a njegova urođena konkurentnost ne može se zameniti.

Java osnove

Možeš direktno da pogledaš Ergeovu Javinu stazu napretka, koja je razumljiv, duhovit i zabavan vodič za učenje Jave, a obuhvata osnove Jave, konkurentno programiranje u Javi, Java virtuelnu mašinu, Java enterprise razvoj, Java intervjue i druge ključne teme. Ako učiš Javu, fokusiraj se na Ergeovu Javinu stazu napretka 😄.
Sa Ergeovom Javinom stazom napretka ne moraš čak ni da čitaš „Java — suština jezika, 1. deo".

Iako se „Java — suština jezika, 1. deo" smatra knjigom koja je veoma pogodna kao uvod u Javu.
- Poglavlje 3: tipovi podataka, promenljive i konstante, operatori, niske, ulaz i izlaz, tok upravljanja, nizovi;
- Poglavlje 4: objekti i klase, konstruktori, final, static, parametri metoda, preopterećenje metoda, paketi, komentari;
- Poglavlje 5: nasleđivanje, polimorfizam, apstraktne klase, redefinisanje metoda, enumeracije, refleksija;
- Poglavlje 6: interfejsi, Lambda izrazi, unutrašnje klase, proxy;
- Poglavlje 7: izuzeci, try-with-resource, logovanje;
- Poglavlje 8: generički tipovi;
- Poglavlje 9: kolekcije, povezane liste, redovi, mape (Map), stekovi, algoritmi;
- Poglavlje 12: konkurentno programiranje, niti, sinhronizacija, synchronized, volatile, atomičnost, mrtvi blokovi, blokirajući redovi, ConcurrentHashMap, CopyOnWriteArrayList, bazen niti, Callable i Future, fork-join okvir, procesi;
Jer osnove Jave obuhvaćene u toj knjizi već su obuhvaćene i na sajtu Ergeova Java staza napretka! Preporučujem još dva video kursa za učenje Jave — klikni na link i ideš pravo tamo.

Jedan je od Dongli Jiedian, na Bilibiliju ima preko deset miliona pregleda

Drugi je od Shang Guigu, koji predaje nastavnik Song Hongkang
Konkurentno programiranje
Deo o konkurentnom programiranju je nešto teži i zahteva više vremena i pažnje da se temeljnije savlada.

Možeš pogledati „Jednostavno i temeljno: Java višenitno programiranje", koju su javno objavili nekoliko tehničkih autoriteta koji su radili u velikim kompanijama; da bi napisali ovu knjižicu, pročitali su veliki broj knjiga i tehničkih blogova o Java konkurentnom programiranju, a dodali su i iskustvo sa prve linije fronta koje su stekli na poslu.
Nabrojaću ti intervjuska pitanja koja se često pojavljuju u oblasti konkurentnog programiranja, a koja možeš iskoristiti za samoproveru:
- Koja je razlika između paralelnog i konkurentnog?
- Koja je razlika između niti i procesa?
- Šta je demon-nit (čuvarska nit)?
- Na koliko se načina može kreirati nit?
- Koja je razlika između Runnable i Callable?
- Koja sve stanja može imati nit?
- Koja je razlika između sleep() i wait()?
- Koja je razlika između notify() i notifyAll()?
- Koja je razlika između run() i start() niti?
- Na koliko se načina može kreirati bazen niti?
- Koja sve stanja može imati bazen niti?
- Koja je razlika između submit() i execute() metoda u bazenu niti?
- Kako u Java programu obezbediti bezbedan rad više niti?
- Koji je princip eskalacije synchronized bloka u radu sa više niti?
- Šta je mrtva blokada (deadlock)?
- Kako sprečiti mrtvu blokadu?
- Šta je ThreadLocal? Koje su scenariji upotrebe?
- Objasni princip donje implementacije synchronized?
- Koja je razlika između synchronized i volatile?
- Koja je razlika između synchronized i Lock?
- Koja je razlika između synchronized i ReentrantLock?
- Objasni princip atomic?
- Da li poznaješ Java memorijski model (JMM), promenu redosleda i happens-before princip?
- Da li poznaješ AQS? Koji je princip? Česte komponente AQS: Semaphore (semafor), CountDownLatch (odbrojavanje), CyclicBarrier (kružna barijera);
- ReentrantLock, ReentrantReadWriteLock;
- Da li poznaješ CAS? Koji je princip?
- Konkurentni kontejneri: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue, BlockingQueue, ConcurrentSkipListMap;
- Future i CompletableFuture.
JVM

Knjiga „Duboko razumevanje Java virtuelne mašine" nastavnika Zhou Zhiminga apsolutno je prvi izbor za učenje Java virtuelne mašine. Od izlaska 2011. godine, prva dva izdanja su prodato u preko 300 000 primeraka; 3. izdanje je znatno prerađeno u odnosu na 2., bogatije je sadržajem i praktičnije.
- Drugi deo (poglavlja 2–5) uglavnom obuhvata upravljanje memorijom, sakupljanje smeća, praćenje performansi itd.;
- Treći deo (poglavlja 6–9) uglavnom obuhvata strukturu klasnog fajla, mehanizam učitavanja klasa, mašinu za izvršavanje bajtkoda itd.;
Drugi i treći deo su ključni za učenje. Nabrojaću intervjuska pitanja koja se često pojavljuju u oblasti JVM-a, a koja možeš iskoristiti za samoproveru:
- Objasni glavne sastavne delove JVM-a i njihove uloge?
- Objasni podatke o izvršavanju tokom rada JVM-a (runtime data area)?
- Šta je model delegiranja roditelju (parent delegation)?
- Objasni proces izvršavanja učitavanja klasa?
- Kako se utvrđuje da li objekat može biti prikupljen (obezbeđen)?
- Koje algoritme sakupljanja smeća ima JVM?
- Koje sakupljače smeća ima JVM?
- Detaljno predstavi CMS sakupljač smeća?
- Koje su sve sakupljače smeća za novu generaciju, a koji za staru generaciju? Koja je razlika?
- Ukratko objasni kako radi sakupljač smeća po generacijama?
- Koje alate za podešavanje (tuning) JVM-a poznaješ?
- Koje parametre za podešavanje JVM-a se najčešće koriste?
Učenje Java virtuelne mašine zapravo nije samo za intervju; pomaže nam i da dublje razumemo sam jezik Java, a postavlja i temelj za rešavanje problema u produkciji.
Spring
Na internetu uvek ima ljudi koji su vrlo radikalni i smatraju da učenje celog Spring ekosistema nema smisla, sa obrazloženjem da se tehnologije brzo smenjuju, da će okviri (frameworkovi) pre ili kasnije biti zamenjeni, pa ćeš kad naučiš možda otkriti da je okvir već zastareo. Neki će se i raspravljati: kako to da Java programeri postanu Spring programeri?
Šta da kažem? Za Java Web razvoj, Spring je već postao infrastruktura, ravnopravna sa Java osnovnom bibliotekom; ako želiš da postaneš kvalifikovan Java programer, Spring je obavezan put.
Još jedna važna stvar: u procesu samostalnog učenja nemaš vremena ni sposobnosti da od nule napraviš okvir podjednako moćan kao Spring. Sa Springom dolaze AOP i IoC, što znači da možeš da radiš neke enterprise projekte. Uostalom, Spring je okvir izgrađen na Javi, a njegovo jezgro su AOP i IoC — ako ti Java osnove nisu čvrste, nećeš savladati ni Spring.
Možeš prvo da učiš SSM (Spring + Spring MVC + MyBatis), a zatim Spring Boot. Pojava Spring Boota ne znači da su Spring i Spring MVC zastareli; po dizajnu, Spring Boot samo implementira automatsku konfiguraciju Springa i smanjuje teškoće pri postavljanju projekta.
Preporučujem dva videa:
Sporedne misije
Dosad je glavna linija, a sada dolaze sporedne misije — ako imaš vremena i energije, možeš ih odraditi. Sporedne misije služe da nakupiš ugled i iskustvo, da postaneš jači, kako bi u sledećoj rundi imao istaknutiji nastup.
Knjige:
- „Head First Java"
- „Java — razmišljanje u programskom jeziku"
- „Java konkurentno programiranje u praksi"
- „Effective Java"
- „Alibaba priručnik za Java razvoj"
- „Čist kod"
Video:
- Video kurs o Intellij IDEA od Shang Guigu
- Video kurs o Maven od Shang Guigu
- Video kurs o Gitu od Kuangshen Shuo
- Video kurs o JVM-u od Shang Guigu
Open source i zvanična dokumentacija:
Plaćeni kursevi:
- Java konkurentno programiranje u praksi
- Duboko rastavljena Java virtuelna mašina
- Netty — uvod i praksa: imitacija WeChat IM sistema za trenutne poruke
one more thing:
Što se tiče programskih jezika, želim da naučiš i još jedan programski jezik, a to je C — bilo na samom početku ili nakon Jave, svakako je potrebno.
Jer ono što učimo jeste računarska nauka (CS); C je star, ali zimzelen programski jezik koji ispunjava osnovne zahteve modernog programiranja, a njegova sintaksa je temelj mnogih programskih jezika, na primer Jave.
Preporučujem ti jedan kurs: „Uvod u programiranje — C jezik" profesora Weng Kaija sa Univerziteta Zhejiang, državni vrhunski kurs, veoma pogodan za početnike.

Pri preporuci ovog kursa, nastavnik Weng Kai je rekao: „Ovaj kurs je o tome kako se pišu programi za računare; ljudi koji ih pišu su obični ljudi, pa naravno i mi možemo naučiti kako da pišemo programe. Najosnije u učenju programiranja svodi se na to kako izraziti podatke, kako računati i kako pri tom računanju koristiti sredstva poput grananja i petlji."

Još jedna preporuka knjige: „C — programski jezik"; poznati uvodni programčić „hello World" zapravo je prvi put predstavljen u ovoj knjizi. Za studente računarskog smera, „C — programski jezik" obavezna je klasik.
Baze podataka
Kada učiš programski jezik, a ne manipulišeš podacima, čini se kao da taj jezik ima ljušturu, ali nema dušu.
SQL

„SQL — obavezno znanje" referentni je udžbenik na mnogim univerzitetima, među kojima su MIT i Univerzitet Ilinois; knjiga polazi direktno od SQL SELECT naredbe i obrađuje SQL znanja koja su najčešća i najpotrebnija u realnom radnom okruženju, izuzetno je praktična.

CodeWithMosh je u ovom trenutku najlogičniji, najjednostavniji i najrazumljiviji SQL video tutorijal na tržištu. Posebno za početnike, uzeti ovu verziju oblikuje dobar način razmišljanja i logiku pri pisanju SQL-a.
MySQL

„MySQL visokih performansi" industrijski je priznata klasična MySQL knjiga; nema u njoj raznih tajni za poboljšanje performansi, već zalazi u srž problema i detaljno objašnjava princip svakog unapređenja performansi, tako da sa malo snage postižeš velike efekte.

Ovaj video kurs od Shang Guigu zaista je prilično dobar: MySQL — osnove + napredni deo.
Redis

„Redis — duboko istraživanje ključnih principa i praktična primena" podeljena je na deo o osnovama i primeni, deo o principima, deo o klasterima, deo o proširenjima i deo o izvornom kodu — ukupno 5 velikih celina. Deo o osnovama i primeni obrađuje sadržaj koji je čitaocima najvrjedniji i koji mogu direktno primeniti u realnom radu; deo o principima i klasterima omogućava programerima da kroz jednostavnu tehničku površinu vide profinjeni donji svet; deo o proširenjima širi tehničke vidike i učvršćuje temelje, što pogoduje naprednom učenju; deo o izvornom kodu omogućava naprednim čitaocima da pročitaju i razumeju izvorni kod i time ovladaju ključnom tehničkom veštinom.
Onlajn sajtovi:
Druge knjige:
Plaćeni kursevi na GeekTime:
- SQL — obavezno znanje: od uvoda do praktičnog rada sa podacima
- MySQL — obavezno znanje: savladaj MySQL kroz realne projekte
- MySQL u praksi — 45 lekcija: od principa do prakse, Ding Qi te vodi da razumeš MySQL
- Redis — ključne tehnike i praksa: od principa do prakse, temeljno savladaj Redis
Strukture podataka i algoritmi
Najveća moć koju računarska nauka daje ljudima leži u poznavanju uobičajenih algoritama i struktura podataka. Pored toga, to takođe razvija sposobnost rešavanja raznih problema i pomaže u učenju u drugim oblastima.

Iako se zove „Algoritmi", algoritmi se temelje na strukturama podataka — nizovi, redovi, stekovi, hipovi, binarna stabla, heš tabele itd.; sve te strukture podataka su obuhvaćene ovom knjigom.

Ako više voliš video kurseve, preporučujem jedan video kurs sa Univerziteta Zhejiang, veoma sistematičan i klasičan, pogodan za potpune početnike.
Za vežbu, preporučujem ti da rešavaš zadatke na LeetCode; problemi na LeetCodeu često su zanimljivi i prate ih dobra rešenja i diskusije. Pored toga, u sve konkurentnijoj softverskoj industriji, ti problemi mogu ti pomoći da proceniš svoju sposobnost da odgovaraš na učestala pitanja na tehničkim intervjuima. Savetujem ti da rešiš bar 300 zadataka, kao deo učenja.

Moja zbirka „Beleške sa LeetCodea" obuhvata čak 300 zadataka i vrlo korisna je za one sa slabijim znanjem algoritama i za one koji žele da ga unaprede.
Moje iskustvo svodi se na prost pristup: od lakšeg ka težem, ponavljaš u krug, i nastojiš da koristiš programski jezik koji ti je poznat — na primer, ako si Java programer, nastoj da rešavaš u Javi, čime će i zadovoljstvo rešavanja znatno porasti.
Ako nisi izuzetno nadaren, nemoj se plašiti — na početku samo prepisuj zadatke; prvo otkucaj tuđe rešenje da bi usvojio način razmišljanja. Kad rešiš više zadataka, nastoj da kontrolišeš vreme; zadaj rok, ne dozvoli sebi da stalno razmišljaš i pišeš u nedogled — ako za pola sata ne rešiš, odlučno odustani i nauči napamet tuđi odgovor; nema potrebe da ti bude neprijatno; tek kad zaista uteraš, kreni da razmišljaš o sopstvenom pristupu rešavanju.
Možeš jednostavno da pratiš sledeći redosled tipova zadataka.
Niz → povezana lista → heš tabela → niska → stek → red → stablo → pretraga unazad (backtracking) → pohlepni pristup → dinamičko programiranje → graf
Druge knjige:
- Priručnik za dizajn algoritama
- Programerske bisere
- „Mač koji pokazuje na ponudu": tipična programerska pitanja sa intervjua u vodećim kompanijama
Plaćeni kursevi na GeekTime:
Arhitektura računara
Arhitektura računara, poznata i kao „sistemska arhitektura računara", važan je ugao za razumevanje donjih slojeva softvera, ali se lako previdi.

Knjiga „Duboko razumevanje računarskih sistema" napisana je iz ugla programera i vrlo je praktična. Iako je sistemska arhitektura računara mnogo šira od onoga što ova knjiga obuhvata, ona je odlična polazna tačka.
Druge knjige:
- Elementi računarskih sistema — izgradnja modernog računara od nule
- Kako radi računar
- Arhitektura računara
- Arhitektura i dizajn računara — hardversko/softverski interfejs
- „Kod — skriveni jezik koji stoji iza hardvera i softvera računara"
Video kursevi:

Kada razumeš arhitekturu računara, dobijaš sistemsko shvatanje celokupnog razvoja softvera — bilo da je reč o hardverskim principima računara ili o softverskoj arhitekturi, dobro njima vladaš, a sa time dolaze i brojnije prilike za razvoj karijere. Ako želiš dublje da učiš arhitekturu računara, preporučujem video kurs sa HIT-a (Harbinskog instituta tehnologije), čija je ukupna ocena veoma visoka.
Arhitektura računara — HIT (Tang Shuofei)
Plaćeni kursevi:
„Veštica sunca" (Jiuyang Zhenjing) u romanu „Oslanjanje na nebesko mačevanje" Džina Jonga najjača je tajna veština unutarnje moći; „veštica sunca" za programere, po mom mišljenju, upravo je arhitektura računara, jer tu leži tajna kako CPU izvršava kod, tajna pretvaranja virtuelnih adresa, tajna brojeva sa pokretnim zarezom...
Duboko i pristupačno — arhitektura računara: ovladaj celokupnom arhitekturom računara
Operativni sistemi
Zašto učiti operativne sisteme? Prvo, zato što se pojavljuje na intervjuu; drugo, bez obzira na to koji programski jezik učiš, npr. Javu ili C/C++, moraš da komuniciraš sa operativnim sistemom — multi-nitni tehnike u Javi zapravo se oslanjaju na operativni sistem koji upravlja procesima i nitima; treće, učeći operativne sisteme, naučiš i o alokaciji memorije.

„Koncepti operativnih sistema" („knjiga zmaja") i „Moderni operativni sistemi" klasici su iz oblasti operativnih sistema. Međutim, te dve knjige nisu naročito ljubazne prema studentima, pa su na mnogo kritika.
Operativni sistem je ključni sistemski softver u računarskom sistemu koji upravlja raznim hardverskim i softverskim resursima i pruža dobro okruženje za izvršavanje aplikativnog softvera. Kurs operativnih sistema sa Univerziteta Tsinghua — XuetangX uzima glavne operativne sisteme kao primere, a kao eksperimentalno okruženje koristi nastavni operativni sistem ucore; predaje koncepte, osnovne principe i tehnike implementacije operativnih sistema i izrazito je preporučen video kurs.

Sporedna misija — Brzi kurs računarske nauke:

Vredi da ga svaki programer odradi — sve su to teme koje bi svako sa računarskim smerom trebalo da savlada, ili bar da upozna. Verzija je na engleskom sa kineskim titlom, pa gledanje ne predstavlja nikakav pritisak.
Plaćeni kursevi na GeekTime:
- Operativni sistemi u praksi — 45 lekcija: od 0 do 1, izgradi svoj operativni sistem
- Razgovor o Linux operativnom sistemu — uvodni kurs priča kao priča
Računarske mreže
S obzirom na veliki broj softverskih projekata na strani serverskog i klijentskog softvera za mrežne usluge, računarske mreže jedna su od oblasti računarstva čija je vrednost naj„neposrednija“.

„Računarske mreže — pristup odozgo nadole" jedna je od knjiga koju posebno volim; mali projekti i zadaci u knjizi veoma vrede vežbe, posebno Wireshark labs deo.

Mikrotečaj računarskih mreža na Bilibiliju je veoma dobar video kurs, toplo ga preporučujem.
Druge knjige:
Frontend i fullstack
// TODO
Distribuirani sistemi
// TODO
Engleski jezik
Za nas programere, engleski je važan kao vazduh — u svakom dahu se oslanjamo na njega. Ako kvalitet vazduha nije dobar, zarad ne osećaš manjak kiseonika? Isto tako, ako ti je engleski malo slabiji, i programiranje će ti biti naporno.
Kad dobro vladaš engleskim, lako čitaš i pregledaš najnoviju stranu tehničku dokumentaciju.
Kad dobro vladaš engleskim, možeš da plutaš morem izvornog koda i neometano crpiš ono najbolje.
Kad dobro vladaš engleskim, možeš prijatno da slušaš javne kurseve prestižnih univerziteta poput Stanforda na internetu, prateći prave velikane i učeći najčistiju, najsvojeniju tehniku.
Kad dobro vladaš engleskim, u najgorem slučaju — dok kuckaš kod, više ne moraš da brineš da li su imena metoda, promenljivih i klasa dovoljno elegantna.

Tutorijal za učenje engleskog koji je Li Xiaolai, bivši nastavnik engleskog u New Orientalu, objavio na GitHubu prilično je dobar; engleski mu se zove „everyone can use english", kineski naslov „Svi mogu koristiti engleski", i ima 5,4k zvezdica.
CV
Kako napisati CV kako bi stvorio jedinstvenog sebe? Kako da poslodavac zna šta si radio i šta znaš? Nabrojaću ukratko.
- Lični podaci
- Ime i prezime
- Uzrast
- Mobilni telefon
- E-pošta (preporučujem Gmail, jer na suptilan način deluje „visoko/profesionalno", dajući poslodavcu osećaj stručnosti)
- Obrazovanje
Dovoljno je navesti samo najviši stepen; ako imaš doktorat, navedi doktorat, nema potrebe da navodiš kada si upisao master; ako si osnovne studije, navedi osnovne, nema potrebe da navodiš kada si prešao sa više škole. Ako ti je obrazovanje skromnije, ne brini — možeš se više istaći kroz iskustvo na projektima.
- Radno iskustvo
U skladu sa zahtevima poslodavca, možeš napraviti izvesna podešavanja — na primer, ako konkurišeš na poziciju u razvoju, nema potrebe navoditi prethodno iskustvo u održavanju sistema ili testiranju.
Ako imaš bogato radno iskustvo, nastoj da ga navedeš u obrnutom hronološkom redosledu, jer su kasniji projekti zasigurno teži i tehnički zahtevniji, zar ne? Nemoj stepen po stepen silaziti nadole.
Znaj meru — ne nabrajaj do u detalje sve aspekte svih projekata. Dovoljno je da obrazložiš tri važna projekta: koji je kontekst projekta, koja je tvoja uloga u njemu, koja je tehnološka stolica korišćena (najbolje one tražene u oglasu), i najbolje je da istakneš u čemu si dao poseban doprinos (kao dokaz da zaista imaš sposobnosti).
- Bonus poeni
- Imaš blog sa lepom posećenošću.
- Imaš open-source rad sa mnogo zvezdica.
- Objavio si neke tehničke knjige.
- Imao si izlaganje na industrijskim konferencijama.
- Učestvovao si na poznatim takmičenjima i ostvario odlične rezultate.
- Zapamti: CV nije samo uvod u sebe u užem smislu — npr. ja sam Chenmo Wang Er, imam 18 godina, iz Luoyanga sam, diplomirao sam na tom i tom fakultetu. Takav CV je previše bled.
CV je kao letak za reklamu u liftu — pun je žive životne snage, viče, ne mu treba previše uljepkavanja, samo jak, jasan, „gol“ ponos.
Na primer: ja sam Chenmo Wang Er, 2019. sam učestvovao u razvoju projekta XXX. Kao ključni programer u timu, ne samo da sam na vreme završavao sopstvene zadatke, već sam dizajnirao i efikasan keš middleware, čime sam znatno poboljšao performanse sistema.
Nakon što je taj middleware pušten u rad, performanse web frontenda porasle su sa 10 QPS na 120 QPS, a broj servera smanjen je sa 10 na 5.
Zahvaljujući dotadašnjem dobrom učinku, 2020. sam unapređen u glavnog odgovornog za projekat; iako je u timu bilo samo 15 ljudi, ipak smo izneli preko 20 miliona PV dnevno.
E, takav CV li ti prija, osvežava te; dok dokazuješ svoju vrednost, bez suvišnog uljepkavanja, poslodavcu delujeteš kao pouzdan, želi da te hitno „dobije", kako te ne bi besplatno odvela druga kompanija.
Sadržaj CV-a ne treba da bude predug; nastoj da ne pređe jednu stranicu, jer poslodavac nema toliko vremena da ti prelista CV. Prilično verujem u prvi utisak — dobar CV se jednim pogledom pamti, zaista.
Nakon što sam se zaposlio u Alibabi, shvatio sam kako zaista treba pisati CV
Iskustva sa intervjua i pitanja
Možeš da prelistaš zbirku pitanja koju sam priredio; podeljena je u devetnaest modula: Java osnove, kontejneri, multi-nitnost, refleksija, kopiranje objekata, Java Web modul, izuzeci, mreže, obrasci dizajna, Spring/Spring MVC, Spring Boot/Spring Cloud, Hibernate, MyBatis, RabbitMQ, Kafka, Zookeeper, MySQL, Redis, JVM — ukupno 208 pitanja:

Možda najkompletniji i najtvrđi materijal za „pripremu" za Java intervj u 2021. godini

Izvinite! Ovaj intervjuski vodič sa preko 100k zvezdica na GitHubu učinio je da se „razmem"
Sve na jednom mestu — sažetak

Sve e-knjige sam stavio u drugi repozitorijum:
Česta pitanja i odgovori
Kome je namenjen ovaj vodič za samostalno učenje?
- Inženjeri koji sami uče softversko inženjerstvo
- Polaznici kratkih kurseva
- „Rano zreli" srednjoškolci
- Studenti koji žele da postanu pravi majstori
- Mlađi inženjeri koji žele da pređu na sledeći nivo
Mora li se strogo poštovati preporučeni redosled učenja?
Redosled koji preporučujem prvenstveno ti služi da kreneš; ako iz neke jake želje više voliš da učiš u drugačijem redosledu, nije problem — hrabro kreni!
Važan „preduslov":
- Najbolje je da kreneš od jednog programskog jezika, a zatim ga širiš i vertikalno i horizontalno;
- Najbolje je da prvo naučiš arhitekturu računara, pa operativne sisteme;
- Najbolje je da prvo naučiš računarske mreže i operativne sisteme, pa distribuirane sisteme.
Šta je sa ovim ili onim programskim jezikom?
Učenje određenog programskog jezika i učenje jedne oblasti računarstva nisu u istoj dimenziji — u poređenju, učenje programskog jezika je lakše; ako ti je već poznat jedan programski jezik, npr. Java ili C, učenje drugog biće ti vrlo lako.
Šta je sa ovom ili onom popularnom tehnologijom?
Nijedna tehnologija nije toliko važna koliko učenje ključnih delova računarstva, ali to što si pun entuzijazma za učenje neke popularne tehnologije zaista je pohvalno.
Ko je napisao ovaj vodič?
Glavni autor je Chenmo Wang Er. Uz dovoljno vremena i motivacije, vrlo sam siguran da možete samostalno savladati sve gore navedene kurseve.
E-knjige obuhvaćene ovim vodičem mogu se preuzeti iz sledećeg repozitorijuma:
