Blog

Blog je mesto gde možeš da čitaš o navikama IT-evaca, najavama IT dešavanja, aktuelnostima na tržištu, savetima i cakama kako da uspeš na ovom dinamičnom polju.
Mi pratimo trendove, na tebi je da se zavališ u fotelju i čitaš :)

Tag: Java (117 rezultata)
13.02.2024. ·
5 min

Zašto developeri moraju da budu pametniji, a ne samo brži sa generativnom AI tehnologijom

Upravljanje generativnom veštačkom inteligencijom dovešće do velikih promena u kompanijskim procedurama i samom radu developera i načinu na koji je koriste, pogotovo ako u obzir uzmemo brzinu kojom se ona širi kroz sve sfere poslovnog života. Ključna stvar neće biti samo usvajanje novih alata, već transformacija načina na koji developeri vrše interakciju sa tehnologijom, rešavaju probleme i kreiraju nove paradigme priliom kreiranja softvera. Ova sveobuhvatna kulturna i proceduralna metamorfoza je od velikog značaja kako bi se na pravi način suočili sa rizicima koji dolaze sa GenAi tehnologijom. Među ovim rizicima svakako se izdvajaju tehnička „prenadutost“, kršenje intelektualne svojine i sami AI modeli. Validnost modela može predstavljati veliku brigu korisnicima usled pristrasnosti. Svaki model baziran je na podacima, a oni su svakako pristrasni. Čak i kada je ta pristrasnost prisutna u maloj meri, kako develolperi krenu da šire količinu tih podataka, pristrasnost će se neminovno povećavati. Zato je važno biti oprezan sa količinom podataka koja se koristi u ovim modelima jer će pristrasnost definitivno završiti u njima i uticati na njihov kvalitet. Generisani sadržaj moraće da poseduje i određene bezbednosne ograde. Čak i kada je u pitanju generisanje izvornog koda, taj kod nije kompletan i bitno je da postoji način da se odredi njegov kvalitet. Struktura Napredne tehnike kodiranja – kada mašina „sedi“ zajedno sa developerom i bavi se inicijalnim podizanjem koda – su u porastu, a najveći izazov koji to stvara može biti gomilanje tehničkog duga usled lošeg upravljanja veštačkom inteligencijom. Iz tog razloga, potrebno je razviti strukturu unutar koje GenAI neće biti isključivo zadužen za štancovanje koda. Znatno bolji pristup bio bi korišćenje GenAI tehnologije za poslovni problem koji se kodom rešava – kako možemo ovaj proces bolje da optimizujemo? Koji je najbolji način da pružimo podršku korisnicima dok se pridržavamo pravila i regulativa? Cilj nove strukture kompanije bi trebalo da bude kreiranje optimalnog radnog toka, umesto korišćenja AI tehnologije za puko izbacivanje koda radi automatizacije procesa koja je u mnogim kompanijama već pogrešno postavljena. Pritisak radnog mesta Čak i ako kompanija uspe da postavi adekvatan nadzor koda na svim nivoima, pritisak radnog okruženja može dovesti do grešaka i propuštanja bitnih stvari. Bitno je da kompanije osiguraju da korisnici imaju "sigurne verzije alata", a da zatim koriste GenAI kako bi stekle poslovnu prednost. A ta prednost bi mogla da leži u korišćenju AI tehnologije za brzinu i inovacije sa protokolima koji se staraju da sve bude usklađeno sa pravilima. GenAI tehnologija bi trebalo da se koristi za generisanje radnih tokova i struktura podataka, umesto za pretvaranje svih zaposlenih u developere, što zauzvrat može samo povećati tehnički dug. Pažnju bi trebalo obratiti i na zaposlene koji moraju da budu u stanju da ove modele “hrane” boljim i relevantnijim informacijama korišćenjem ograničenih i dobro proverenih kolekcija podataka koje generativni alati mogu isključivo da koriste. Bez ovoga, jako je teško osigurati najbolje prakse i standarde u radu prilikom kreiranja novih aplikacija i servisa. Za kompanije je važno i da uvek mogu da budu u mogućnosti da ponište ono što je GenAI uradio. Potrebno je da razvojni timovi budu širi i opsežniji, sa većom dostupnošću ili kraćim ciklusima testiranja. Izgrađene aplikacije treba da budu testirane radi provere funkcija validacije, poput toga da li su korišćeni odgovarajući okviri za enkripciju, i da li su akreditacije zaštićene na odgovarajući i ispravan način. Zabrane neće funkcionisati onako kako želimo Zabranjivanje developerima da koriste GenAI neće imati veliki uspeh. Ljudi će koristiti tehnologiju za koju veruju da će im olakšati život, bez obzira na to da li je ona u skladu sa pravilima kompanije, ili ne. Sa druge strane, kompanije bi trebalo da obrate pažnju na klizav teren mediokritetnog rada kada preopterećen tim krene da koristi GenAI kako bi popunio nastale rupe u tehničkom dugu ili nadomestio manjak veštine. Uprkos tome što GenAI napreduje velikom brzinom, veliki jezički modeli su i dalje loši u pomaganju ljudi prilikom pisanja koda i njegove produkcije. Neke vrste ograničenja mogu biti neophodne u vezi sa njegovom upotrebom od strane timova programera, i organizacije će i dalje imati zahtev za softverskim inženjeringom, uključujući dobre inženjere sa čvrstim iskustvom i snažnim praksama pregleda koda. Mnogi veruju da je GenAI dobar izvor za rešavanje manjih problema brzo, ali da ne poseduje veštinu za veću kompleksnost. Sa druge strane, ljudi su dobri u tome jer imaju uvid u stvari, razum i mogućnost držanja kompletne slike u svojoj glavi. Dobar inženjer može da dekonstruiše ono šta pokušava da uradi u mnoštvo malih problema, i GenAi može biti korišćen za njihovo rešavanje, ali kada se od njega traži rešavanje velikih i kompleksnih problema, tada rezultat može biti izuzetno loš. Zaštita autorskih prava Veliki tehnološki igrači počeli su da nude poslovna rešenja sa integrisanim zaštitama oko podataka, ali je malo pažnje do sada bilo poklanjano zaštiti autorskih prava i drugim IP rizicima koji se odnose na kod. Dovoljno je da pogledamo šta se desilo kada je Oracle tužio Google usled korišćenja Java API-ja – izgubio jer je sud smatrao da je on dovoljno modifikovan da bi se smatrao drugačijim, i iz tog razloga, organizacije bi trebalo da obrate pažnju na slične situacije i presedane kako bi bile spremne za potencijalne probleme u budućnosti. Sigurno nas očekuju presedani u vezi sa tim šta je i koliko neko modifikovao ili promenio i da li je to dovoljno da se kaže da to nije isto kao nešto drugo. Sa rasprostranjenom upotrebom GenAI, podaci vrlo lako mogu da se sliju sa Googlea ili Stack Overflowa, i u svemu tome, algoritam može replikovati nečiji IP. Uprkos brojnim problemima sa kojima se kompanije i developeri suočavaju kada su nove tehnologije u pitanju, sasvim je sigurno da in oni neće odvratiti ukoliko su benefiti značajnije veći.

31.01.2024. ·
5 min

Početak karijere u IT-ju: Izazovi tehničkog intervjua i kako ih savladati

Početak karijere u IT-ju: Izazovi tehničkog intervjua i kako ih savladati Započinjanje karijere u IT sektoru često je popločano nizom izazova, a jedan od najvažnijih je svakako tehnički intervju. HelloWorld.rs je nedavno imao priliku da razgovara sa Aleksandrom Markovićem na temu "Istine i zablude o radu u srpskoj IT industriji". Ovaj put, Marković nam pruža uvid u proces pripreme i prolaska kroz tehnički intervju kao neko ko je promenio pet kompanija i prošao osam tehničkih intervjua, a u par situacija je bio i sa druge strane stolice. Priprema za tehnički intervju Priprema je prvi i najvažniji korak ka uspešnom tehničkom intervjuu. Kako Marković objašnjava, "u skladu sa pozicijom za koju kandidat konkuriše, bitno je podsetiti se nekih fundamentalnih stvari”. Ova priprema uključuje ne samo osvežavanje znanja specifičnog za posao za koji se aplicira, već i vežbanje kako koncizno i efikasno preneti to znanje. Marković naglašava da je "vreme uglavnom ograničeno, pa ljudi cene kad se ne skreće mnogo sa teme", ističući važnost fokusa i preciznosti. Tehnološke veštine koje su na ceni Razumevanje koje tehnološke veštine su trenutno na ceni može bitno uticati na ishod intervjua. Marković ističe da su u svetu automatizacije testova "Java i Python sa odgovarajućim bibliotekama poput Seleniuma ili Pytesta, a ponegde i JavaScript" i dalje visoko tražene veštine. Međutim, on takođe podseća da je "najbitnija želja za učenjem", što znači da kandidati ne bi trebalo da se ograničavaju samo na tehnologije sa kojima su već upoznati. "To nije inženjerski pristup", dodaje on, podstičući kandidate da budu otvoreni za nova znanja i iskustva. Značaj formalnog obrazovanja Pitanje formalnog obrazovanja u IT sektoru često izaziva polemike, a Markovićeva perspektiva pruža jedan ugao gledanja kada je reč o ovom pitanju. "To se razlikuje od kompanije do kompanije", kaže on, priznajući da dok neke firme i dalje visoko cene formalno obrazovanje, druge daju prednost praktičnom iskustvu.  “'Kršteni' fakulteti su i dalje na ceni, naročito za pozicije sa višim senioritetom. Međutim, ima i onih slučajeva koji su formalno obrazovanje nadomestili dugogodišnjim radom”, objašnjava Marković. Ovo pokazuje da put ka uspehu u IT sektoru nije jednostran i da postoji više načina da kandidati pokažu svoju vrednost. Vrste tehničkih zadataka Razumevanje koje vrste tehničkih zadataka se mogu očekivati na intervjuu pomaže kandidatima da se adekvatno pripreme. Marković objašnjava da zadaci obično uključuju "kratka pitanja kroz koja se vidi da li kandidat barata onim što je napisao u CV-ju." On naglašava značaj transparentnosti i sposobnosti da kandidat odbrani svoje rešenje, dodajući da je "bitno tretirati intervju kao dvosmernu ulicu", što znači da i kandidat treba da ima priliku da postavlja pitanja regruteru i proceni da li je pozicija adekvatna za njega. Praksa i portfolio projekata Značaj prakse i portfolija projekata ne može se dovoljno naglasiti. "Veoma je važna," kaže Marković, objašnjavajući da kompanije sve više traže dokaze o praktičnom iskustvu kandidata. Savetuje kandidatima da aktivno rade na projektima koji mogu da pokažu njihove veštine i sposobnost za samostalan rad, kao i za rad u timu. Isticanje tokom tehničkog intervjua Kako se istaći tokom tehničkog intervjua? Marković savetuje da je "najbolje da znate sve što vas pitaju, pa i više od toga". Naravno, to dolazi sa razumevanjem i sposobnošću da se znanje jasno prenese.  "Bitno je da čovek ume da objasni i obrazloži to što zna", što implicira duboko razumevanje materije. Učenje iz grešaka Greške na tehničkim intervjuima su neizbežne, ali Marković ih vidi kao prilike za učenje. Deljenjem svojih slabih tačaka i otvorenošću za pitanja, kandidati mogu da pokažu svoju spremnost na učenje i adaptaciju, što je visoko cenjeno u IT sektoru. Suočavanje sa nervozom Nervozu tokom intervjua Marković smatra normalnom. "Nisam nešto bio nervozan, možda malo u početku, ali to vremenom prođe" kaže on, ističući ponovo da je intervju pre svega razgovor, prilika za obostranu ocenu i razmenu informacija. Važnost mekih veština Soft skills, poznate i kao meke veštine, predstavljaju niz ličnih atributa, socijalnih veština, komunikacijskih sposobnosti, i emocionalne inteligencije koje omogućavaju ljudima da se na efikasan način nose sa međuljudskim odnosima, stvaraju pozitivno radno okruženje, i efektivno komuniciraju sa drugima. Za razliku od hard skills, koje su specifične veštine i znanja potrebna za obavljanje određenih tehničkih zadataka ili poslova, soft skills su više povezane sa ličnošću pojedinca i načinom na koji funkcioniše sa drugima u profesionalnom kontekstu. Marković naglašava važnost ovih veština, objašnjavajući da "te veštine kasnije bitne i za odnos prema kolegama u timu i kompaniji". Profesionalizam, način izražavanja, i ponašanje na poslu ključni su za uspešnu karijeru u IT sektoru. Markovićeva iskustva i saveti služe kao dragoceni vodič za sve one koji teže da unaprede svoje karijere u IT sektoru. Kroz njegovu priču, vidimo da je kontinuirano učenje, otvorenost za nove tehnologije, i razvoj mekih veština, poput komunikacije, timskog rada, i emocionalne inteligencije, ono što čini pravog IT profesionalca. On ističe da tehnički intervju treba shvatiti kao priliku ne samo da pokažete svoje znanje, već i da demonstrirate svoje međuljudske veštine, adaptabilnost, i sposobnost za rast i učenje. U suštini, Markovićeva poruka je da, bez obzira na trenutni nivo znanja ili iskustva, strast prema učenju, spremnost na izazove, i razvoj celokupne ličnosti je ono što vodi ka uspehu. S ovim savetima i uvidima, HelloWorld.rs želi da inspiriše i podrži IT profesionalce i one koji teže da to postanu, podstičući ih da grade svoje karijere ne samo na čvrstim temeljima tehničkog znanja, već i na bogatstvu mekih veština koje su jednako važne za ostvarivanje dugoročnog uspeha i zadovoljstva u dinamičnom svetu IT-ja.

HelloWorld
0
25.12.2023. ·
2 min

IT tržište Srbije u prvih devet meseci: Pad potražnje za kandidatima i skok konkurisanja

Broj oglasa za IT pozicije u prvih devet meseci 2023. godine je manji za čak 52% u odnosu na isti period prošle godine, pokazali su najnoviji podaci sajta HelloWorld.rs. Najplaćeniji posao i ove godine u IT sektoru bila je Software inženjer, sa prosečnom platom između 1.807 i 1.985 evra. Istraživanje našeg sajta takođe pokazuje i sve veću potražnju za juniorima kojima je namenjeno čak 15% oglasa za posao, dok je potraga za seniorima konstantna i taj udeo oglasa je 22%. Pad broja oglasa primećen krajem 2022. godine Analizirajući podatke od januara do septembra 2023, uočen je značajan pad od 52% u broju IT oglasa u odnosu na isti period prošle godine. Ovaj trend primećen je u poslednjem kvartalu prethodne godine kada se desio i pad broja oglasa na sajtu. I pored toga, zabeležen je rekordan broj konkurisanja kandidata - u 2023. godini veće je za 55% u odnosu na 2022. Ovaj trend nastavlja se i u trećem kvartalu ove godine. Za Software inženjere nema krize U poslednjih nekoliko godina, IT sektor beleži sve veću potražnju za stručnjacima iz različitih oblasti. Dok se Software inženjeri i dalje nalaze  na ključnoj radnoj poziciji, postoje i drugi visoko traženi poslovi u IT-ju. Na listi najtraženijih su: Software Inženjer IT Help Desk / Support System Administrator / Inženjer Frontend Developer Data Warehouse / Business Intelligence Developer HelloWorld je radio na unapređenju platforme za prikaz informacija o platama, kako bi te podatke učinio preciznijim i relevantnijim za korisnike. Ovaj korak ima za cilj veću sigurnost korisnika sajta u to da prikupljeni podaci odražavaju što realniju sliku o platama u IT sektoru u Srbiji. U saradnji sa Data Science timom smo razradili metodologiju koja će nam omogućiti ovakav pristup. Najplaćeniji su i ove godine Software inženjeri, pored njih se visoko kotiraju i Project menadžeri. Ovako izgledaju prosečni opsezi plata po pozicijama: Software Inženjeri: Prosečna plata se kreće od 1.807 do 1.985 evra. QA Specijalisti: Zarade variraju od 1.047 do 1.245 evra. IT Help Desk: Prosečna plata je između 700 i 790 evra. Test Engineer: Zarade se kreću od 1.106 do 1.365 evra. Project Manager: Prosečna plata iznosi od 1.414 do 1.765 evra. Kada govorimo o najtraženijim tehnologijama u septembru 2023. godine to su: SQL, JavaScript, Cloud, Git i Java. Konstantna potražnja za seniorima i pad broja oglasa za rad od kuće U poređenju sa 2022. godinom, beležimo značajne promene u potražnji kadrova po senioritetu. Konkretno, potražnja za juniorima beleži skok sa 9% na 15%, dok je kod mediora uočen pad sa 68% na 63%. Seniori imaju stabilan udeo oglasa od 22%. U 2023. godini, udeo remote pozicija u ukupnom broju oglasa smanjen je sa 32% na 22%. Ova promena sugeriše prilagođavanje poslovnih modela kompanija, koje sve više naglašavaju potrebu za angažovanjem kadrova koji su fizički prisutni na radnom mestu.  

HelloWorld
0
21.12.2023. ·
4 min

COBOL postaje Java uz pomoć AI?

Već smo navikli da svakog dana čitamo vesti i najave koje imaju veze sa veštačkom inteligencijom i njenom sadašnjom i budućom upotrebom. Ipak čini se da je skorašnja najava kompanije IBM možda i jedan od najvećih projekata u kojima bi AI mogao da učestvuje, a vreme će pokazati da li je IBM zagrizao preveliki zalogaj. U centru pažnje je programski jezik COBOL (Common Business Oriented Language). On je važan iz razloga što se na njega oslanja veliki deo svetskog poslovanja i finansijskih sistema. A koliko je zapravo veliki taj deo? Procentualno, 43 procenata svih bankarskih sistema funkcioniše putem COBOL-a, 95 procenata svih aktivnosti vezanih za bankomate u Americi i oko 80 procenata svih transakcija vezanih za lične kreditne kartice. Da budemo još precizniji, na dnevnom nivou, COBOL je uključen u promet oko 3 hiljade milijardi dolara! Dnevno! Ako se malo osvrnemo na istoriju COBOL-a, videćemo da je sve u vezi njega fascinantno, pa i sam problem koji sada zadaje glavobolje brojnim finansijskim sistemima i institucijama širom sveta. Ovaj programski jezik je nastao daleke 1959. godine. Dizajniran je za komercijalne i poslovne sisteme i postao je standard u svetu tokom šezdesetih godina, kada su računari i programski jezici pravili svoje „prve korake“. Zanimljivo je da su u njegovom nazivu krije anagram „be cool“ (B COOL). Žena koja se naziva „majkom COBOL-a“  je Grejs Hoper. Bila je jedan od pionira u programiranju i prva žena koja je doktorirala matematiku na prestižnom Jejlu. Kasnije je doktorirala i fiziku, a o tome koliko je bila jedinstvena govori i njen čin kontra-admirala u američkoj mornarici. Ipak, ako realno sagledamo sled događaja, ova fascinantna žena nije bila baš majka COBOL-a, već bi se pre mogla nazvati „bakom“. Ona nije direktno učestvovala u njegovom stvaranju, ali jeste postavila temelje i omogućila nastanak COBOL-a, jer je njena uloga bila ključna u pronalasku „poslovnog argumenta“ za njegovo stvaranje. Za one koji žele više da saznaju o Grejs, izguglajte je, pa ćete biti u prilici da vidite kakve ona veze ima sa korišćenjem reči „bug“ u računarskom svetu, njeno objašnjenje na temu „zašto računari moraju da budu mali, da bi bili brzi“ i kroz kakve je sve izazove prošla, ne bi li dokazala ljudima da „računari mogu da pišu programe, a ne samo da računaju“. Svet zavisi od 64-godišnjeg programskog jezika koji niko više ne zna A sad da se vratimo na glavni problem koji trenutno opterećuje ljude koji se bave protokom novca na našoj planeti. Veoma mali broj programera poznaje ovaj jezik, a i oni koji ga znaju u većini slučajeva su pred penzijom. Još manji broj programera je zainteresovan da ga nauči, jer je programiranje u njemu, za današnje standarde, dosadno, plus kompajliranje traje jako dugo. Budući da ga skoro niko više i ne uči, programeri koji mogu raditi u COBOL-u su sve teže dostupni, a zamene su retke. Ovaj problem IBM planira da reši uz pomoć veštačke inteligencije, tačnije uz pomoć generativnog pomoćnika za kodiranje „watsonx“ . On je zvanično predstavljen u maju 2023. godine, a naziv nosi (kao i njihov prvi AI kompjuter Watson), po osnivaču i prvom izvršnom direktoru IBM-a Tomasu Votsonu. Njihova ideja je da pomognu klijentima da „refaktorišu svoje aplikacije pisane u COBOL-u, tako što će ih razbiti na manje delove, koje će klijent sam selektovati, kako bi u tom trenutku izvršio modernizaciju iz COBOL-a u Javu“.  Ono na čemu insistiraju je da je ovo „poboljšanje produktivnosti, a ne zamena za aktivnost programera“. Po njihovim rečima, programer je neophodan u ovom procesu, jer će on biti uključen u upotrebu AI alata i pomoći će klijentu u odabiru usluge. To sve zvuči jako lepo i efikasno, međutim nisu svi ubeđeni da će IBM uspeti u ovom poduhvatu, jer se mnogi sećaju prethodnog AI eksperimenta kompanije IBM, „Watson Health“, koji nije ispunio svoja velika očekivanja. Ljudi iz IBM-a priznaju da nemaju „studije slučaja“ za ovaj projekat, kao ni bilo kakve garancije da bi njihova ideja mogla da bude uspešno završena, jer je u pitanju neproverena tehnologija, međutim optimizam grade na svom velikom iskustvu. Prevod koda uz pomoć AI svakako zvuči obećavajuće, pa nam ostaje samo da čekamo i da vidimo da li će COBOL nastaviti da odoleva vremenu ili će kombinacija programeri + veštačka inteligencija,  uspeti da ga pošalju u više nego zasluženu penziju.

HelloWorld
1
04.12.2023. ·
4 min

Da li je JavaScript zaista nastao za samo 10 dana?

JavaScript je programski, skriptni jezik koji ne može samostalno da se koristi, već je za njegovo izvršavanje potrebno posebno okruženje, tzv. runtime environment. Najčešće, takvo okruženje je web browser u koji je ugrađen JavaScript kompajler, a sve to zajedno omogućava programerima da dinamički menjaju web sadržaj, bez pozivanja servera, već se sva „magija“ dešava na lokalnom računaru. Postoji i serverska JavaScript platforma Node.js, ali o tome neki drugi put. U 2023. godini, JavaScript  gotovo da nema konkurenciju, jer ga koristi čak 98,6% web sajtova (W3Techs.com). StackOverflow je 2022. godine sproveo anketu među programerima i ispostavilo se da JavaScript koristi više nego bilo koji drugi programski jezik, čak 67,9%  profesionalnih developera. Kada je nešto toliko popularno i uspešno, normalno je da krenu neke glasine i priče od kojih mogu da nastanu i legende, a legenda u ovom slučaju kaže : „JavaScript je nastao za 10 dana!“ Da bismo proverili istinitost ove tvrdnje, moramo da se vratimo u 1995. godinu, april mesec i trenutak kada Netscape angažuje Brendana Ajka i pred njega zaista postavlja rok od 10 dana, kako bi napravio prototip programskog jezika koji se izvršava u Netscape pretraživaču. Važno je napomenuti da su u tom trenutku suštinski postojala samo dva pretraživača - Netscape Navigator i Internet Explorer - koji su se borili za dominaciju na vebu. Svaki od njih je uvodio različite funkcije u pokušaju da pomeri tržišni udeo u svoju korist, te je Ajk predstavljao neku vrstu „tajnog oružja“ u ovom digitalnom ratu. Netscape je, u najvećoj meri, privukao pažnju Microsofta, jer je Netscape smatrao da su web pretraživač i server nova forma operativnog sistema, a ne samo jedna aplikacija. Odgovor Majkrosofta ogledao se u vidu iznenadne promene fokusa na internet, u okviru izdanja OS Windows 95. Rok od famoznih 10 dana I dok su „ljudi u odelima“ smišljali strategiju i naredne korake, kako bi svoje kompanije što bolje pozicionirali pred „internet bum“ koji je očekivao planetu, Ajk je stvarao novi jezik. Iako je imao samo 24 godine, iza sebe je već imao bogato iskustvo u kreiranju novih programskih jezika, jer je još kao student Univerziteta u Ilionisu osmislio jedan „samo za sebe“, kako bi eksperimentisao sa sintaksama. Takođe, kod prethodnog poslodavca, Silicon Graphics, osmislio je programski jezik koji je služio za kreiranje ekstenzija za alatke za nadgledanje mrežnog saobraćaja. Dakle, sam programski jezik za Ajka nije bio nikakav problem, njemu je najveći izazov predstavljao drugi deo zadatka, a to je da novonastali programski jezik „treba da liči na Javu, ali ne sme da joj predstavlja konkurenciju, treba da bude jednostavniji i da mogu da ga koriste i programeri amateri“, nešto slično kao Microsoft Visual Basic. Naravno, najvažnija stvar je bila da može lako da se „ugnezdi“ u Netscape browser. Rok od famoznih 10 dana je, u stvari, bio povezan sa planiranim objavljivanjem verzije Netscape 2.0 Beta. Ono što je Ajk zamislio bilo je to da „ugradi“ napredne funkcije u JavaScript, a da pritom ne koristi jezičku sintaksu, kako bi jezik na prvi pogled izgledao jednostavno i lagano, ali bi iskusni programeri mogli iskoristiti njegovu stvarnu moć. Osnovnu sintaksu je uzeo iz C programskog jezika. Čitav proces se dešavao u periodu od 6. do 15. maja 1995. godine, kada je „svetlost dana“ ugledao, programski jezik, prvobitno nazvan Mocha. Do septembra, naziv jezika promenjen je u LiveScript, da bi konačno u decembru Netscape i Sun Microsystems (njihova je Java) u zajedničkom saopštenju objavili nov naziv koji i danas poznajemo - JavaScript. E, sad, da li je tačna tvrdnja da je JavaScript nastao za 10 dana? Odgovor je i da i ne. Ono što je bila verzija Mocha i ovo što danas imamo, nema veze jedno sa drugim. JavaScript koji danas poznajemo je nastajao godinama, menjao se i prilagođavao vremenu. I sam Ajk je jednom izjavio da je inicijalna Mocha bila daleko od savršenog programskog jezika. U početku je „imala posla“ sa veoma jednostavnim web aplikacijama i to je razvojnom timu i samom Ajku dalo dosta vremena, da, praktično, u hodu i „iza kulisa“ doteruju ovaj projekat i ispravljaju nedostatke. JavaScript kao veliki pobednik u „ratovima pretraživača“ Ovu „bitku“ web browsera iz 1995.godine  Netscape je lagano dobio, ponajviše zahvaljujući Ajku, međutim, Microsoft se nije predavao tako lako. Stvorili su klon i nazvali ga „JScript“, što je dalje navelo Netscape da podnese zahtev da se JavaScript standarizuje u okviru ECMA (European Computer Manufacturers Association). Posle ovog događaja postalo je jasno da je JavaScript veliki pobednik u „ratovima pretraživača“.  Što se Ajka tiče, on je dalje nastavio svoj fantastični karijerni put tako što je 1998. godine, kao jedan od osnivača, osnovao Mozilu, čiji se Firefox pretraživač, praktično, smatra za naslednika Netscape-a. Mozilu je napustio 2014. godine, a nagradno pitanje za kraj bi moglo da bude, šta mislite, koja osoba stoji iza besplatnog i privatnosti korisnika okrenutog pretraživača Brave, koji je u ponudi od 2015. godine?

HelloWorld
3
11.09.2023. ·
2 min

Zašto većina programera treba da nauči osnove funkcionalnog programiranja

Objektno-orijentisano programiranje (OOP) dominira većim delom savremene softverske industrije. Jezici kao što su Java, C++, C# i Python pružaju moćne alate i paradigme koje omogućavaju razvoj sofisticiranih aplikacija. Međutim, postoji još jedan pristup programiranju koji dobija sve veću popularnost - funkcionalno programiranje (FP). I dok se možda čini da su OOP i FP dijametralno suprotni, oni se zapravo mogu međusobno dopuniti. Evo nekoliko razloga zašto bi programeri koji praktikuju OOP trebali da se upuste u učenje nekog od funkcionalnih jezika. Razumevanje različitih paradigmi: Programiranje nije samo o sintaksi i alatima. Ono je i o načinu razmišljanja. Učenjem funkcionalnog programiranja, programeri se izlažu drugačijem načinu razmišljanja i rešavanju problema. Ova raznolikost može poboljšati sposobnost programera da bira pravu paradigmu za određeni problem. Bezbednost i pouzdanost koda: Funkcionalno programiranje često naglašava neizmenljivost i čiste funkcije (funkcije koje ne izazivaju sporedne efekte). Ovi koncepti mogu značajno smanjiti greške u kodu, čineći softver stabilnijim i predvidljivijim. Povećana produktivnost: Mnogi funkcionalni jezici nude snažne apstrakcije koje omogućavaju brži razvoj softvera. Haskell, na primer, pruža moćne tipove podataka i funkcije višeg reda koje mogu značajno smanjiti količinu potrebnog koda. Lakše paralelno izvršavanje: U vreme kada se hardver sve više oslanja na višejezgarnu arhitekturu, sposobnost paralelnog izvršavanja postaje ključna. Funkcionalno programiranje, sa svojim naglaskom na neizmenljivost i čiste funkcije, prirodno je prilagođeno paralelnim operacijama. Unapređenje veština: Baš kao što učenje novog jezika može poboljšati vaše sposobnosti u maternjem jeziku, učenje funkcionalnog programiranja može unaprediti vaše veštine u OOP. Možete početi da ugrađujete neke od principa FP-a u vaš OOP kod, čineći ga efikasnijim i čistijim. Interoperabilnost: Savremeni softverski projekti često kombinuju različite tehnologije i paradigme. Na primer, Scala je jezik koji kombinuje objektno-orijentisano i funkcionalno programiranje. Poznavanje oba pristupa može vam pružiti prednost kada radite na takvim projektima. Priprema za budućnost: Dok je OOP trenutno dominantna paradigma, trendovi u industriji se stalno menjaju. Funkcionalno programiranje postaje sve popularnije, posebno u određenim oblastima poput distribuiranih sistema, analize podataka i web programiranja. Iako objektno-orijentisano programiranje nudi mnoge prednosti, postoji mnogo toga što programeri mogu naučiti iz funkcionalne paradigme. Učenje funkcionalnog programiranja može vam pružiti nove alate, tehnike i perspektive koje će obogatiti vaše veštine kao programera. U današnjem brzo evoluirajućem svetu tehnologije, prilagodljivost i kontinuirano učenje su ključni, a razumevanje više paradigmi je korak u pravom smeru.

07.09.2023. ·
2 min

IT tržište Srbije: Nastupa faza stabilizacije broja oglasa

Tržište rada IT industrije u Srbiji polako ulazi u fazu stabilizacije broja oglasa za posao. Prema istraživanju koje je sproveo najposećeniji sajt za zapošljavanje IT kandidata HelloWorld.rs, pad potražnje za IT kadrovima se zaustavlja i broj oglasa postepeno počinje da raste. Blagi trend rasta broja IT oglasa od aprila 2023. Kada poredimo trend potražnje za IT kadrovima za period januar – jun prošle godine i prvu polovinu ove godine, zabeležen je pad broja IT oglasa u prvih šest meseci 2023. za 49%. Što se tiče prva dva kvartala ove godine i tu se desio blagi pad broja oglasa u drugom kvartalu u odnosu za prvi za 9%. Posle aprila 2023. ukupni broj oglas raste te je u junu mesecu u odnosu na maj zabeležen rast broja oglasa od 27%. Takođe, manja potražnja, naročito inostranih kompanija koje su nudile mogućnost za rad od kuće, doveli su do pada broja oglasa za remote pozicije u prvoj polovini 2023. godine  za 11 procenata u odnosu na isti period prošle godine. Od oktobra 2022., beleži se rast jedinstvenog broja kandidata koji konkurišu na IT oglase. Kada se uzme u obzir da se u tom istom periodu smanjuje broj oglasa na tržištu, veća aktivnost IT kandidata na tržištu se javlja kao posledica nesigurnosti koja se oseća kod njih. Veća potražnja za junior kandidatima Potražnja za IT kandidatima je u odnosu na prošlu godinu sveukupno je manja, ali je došlo do procentualnih promena potražnje kandidata po senioritetu. Tako je potražnja za junior kandidatima veća za 7% u prvoj polovini ove godine u odnosu na isti period prošle godine. Takvoj slici je nesumnjivo doprineo ukupan pad potražnje za seniorskim i mediorskim pozicijama u odnosu na 2022. za čak 57%. Takođe, u prvoj polovini 2023. godine kandidati su se češće prijavljivali na juniorske i seniorske pozicije, dok su se u 2022. godini procentualno manje prijavljivali na te dve kategorije. Procenat istih kandidata koji su istovremeno konkurisali na juniorske i mediorske poziciji veći je za 3%, a 5% više kandidata konkuriše istovremeno na seniorske i mediorske pozicije u prvih šest meseci 2023. u odnosu na 2022. Pozicija Software Developer i dalje najtraženija na tržištu U prvoj polovini ove godine, baš kao i prošle godine, Software Developer i IT Help desk/Support ostaju na vrhu liste najtraženijih pozicija na IT tržištu rada.  Pored ove dve navedene, ostale pozicije koje se izdvajaju kao najtraženije za period januar-jun 2023. su: System administrator/Engineer, ERP/SAP/ABAP Consultant, Fronted Devoloper Kompanije najviše vrednuju poznavanje SQL-a i JavaScripta-a, ali takođe su u potrazi za stučnjacima koji se dobro snalaze u tehnologijama kao što su GIT, Linux, Cloud, Agile, Python, Java, Windows i CSS.

07.09.2023. ·
7 min

How I made the Spring Boot startup analyser

It's no secret that Spring applications can sometimes freeze at startup. This is especially noticeable as a project develops: the new service starts quickly and shows great responsiveness, then it acquires some serious functionality, and the final distribution package swells by dozens of megabytes. Now, to simply launch that service locally, you have to wait for half a minute, a minute, two... At such moments of waiting, the developer may ponder: why on Earth is it taking so long? What’s going on? Maybe I shouldn't have added that particular library? Hi, my name is Alexey Lapin, and I am a Lead Developer at Luxoft. In this article, I’ll talk about a web application for analysing the startup phase of Spring Boot services, which uses data from the startup actuator endpoint. This tool may help answer the questions above. Foreword I made this application for myself to understand a new Spring module that I hadn't seen before and practice on the front end. I saw various solutions on the internet, but they either did not work or have not been updated for a long time, and I wanted to create an up-to-date auxiliary tool for the Spring Boot functionality. Spring Boot Startup Endpoint Starting with version 2.4, Spring Boot has an ApplicationStartup metric that records events (steps) that occurred during the service startup and an “actuator endpoint” that makes a list of these events. Here's what it looks like: {     "springBootVersion": "2.5.3",     "timeline": {         "startTime": "2021-09-06T13:38:05.049490700Z",         "events": [             {                 "endTime": "2021-09-06T13:38:05.159435400Z",                 "duration": "PT0.0898001S",                 "startTime": "2021-09-06T13:38:05.069635300Z",                 "startupStep": {                     "name": "spring.boot.application.starting",                     "id": 0,                     "tags": [                         {                             "key": "mainApplicationClass",                             "value": "com.github.al.realworld.App"                         }                     ],                     "parentId": null                 }             },             ...             {                 "endTime": "2021-09-06T13:38:06.420231Z",                 "duration": "PT0.0060049S",                 "startTime": "2021-09-06T13:38:06.414226100Z",                 "startupStep": {                     "name": "spring.beans.instantiate",                     "id": 7,                     "tags": [                         {                             "key": "beanName",                             "value": "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory"                         }                     ],                     "parentId": 6                 }             },             ...         ] ….} } A detailed description of all message fields can be found in the Spring Boot Actuator documentation, but I think it’s all in all pretty straightforward. The event has an “id” and a “parentId”, which allows one to have a tree view. There is also a “duration” field, which shows the time spent on the event + the duration of all associated events combined. The “tags” field contains a list of event attributes, such as the name or class of the generated bean. To enable the collection of data on load events, you must pass an instance of the BufferingApplicationStartup class to the setApplicationStartup method of SpringApplication. In this case, a constructor is used that accepts the number of events to record. All events above this limit will be ignored and will not be included in the startup endpoint’s output. @SpringBootApplication public class App {     public static void main(String[] args) {         SpringApplication application = new SpringApplication(App.class);         application.setApplicationStartup(new BufferingApplicationStartup(1000));         application.run(args);     } } By default, this endpoint has a path of /actuator/startup and supports GET methods for receiving events and POST for receiving events and clearing the buffer, so subsequent calls to this endpoint will return an empty list of events Okay, let's go. We will consider the information provided by the startup endpoint as our data for analysis. The analyser web application is a single-page application (SPA) without a back end. It works like magic: you just need to upload the events that occurred during the service startup, and it will visualise them. The uploaded data is neither transferred nor stored anywhere. I chose Typescript as my go-to programming language, as it seemed like a better option for a Java developer compared to Javascript due to its strong typing and object-oriented programming features. I found it very easy to switch from Java to Typescript and quickly write a working code. As my UI framework, I chose Vue.js 3. To be clear, I have nothing against React, Angular and other front-end frameworks, but at that time Vue.js seemed like a good option due to the low entry threshold and excellent preset tools. Then it was time to choose the component library. It needed to be compatible with Vue.js 3 and have components for working with tables. I considered Element Plus, Ionic Vue, and Naive UI, but due to the availability of customisable components for working with tables, I ended up using the PrimeVue library. The application has a navigation bar with Analyser elements (this is the main screen of the application), Usage (user instructions) and a link to the project's GitHub repository. The main page of the application displays a form for entering data, which can be done in three different ways. The first way is to put a link to the deployed Spring Boot service. In this case, an HTTP request will be made to the specified endpoint and the data will be uploaded automatically. This method is applicable for cases when the service is available from the internet or is deployed locally. Note that loading by url may require additional service configuration in terms of CORS headers and Spring Security. The second and third ways are loading a JSON file or its actual content. The deployed application is located at https://alexey-lapin.github.io/spring-boot-startup-analyzer/ For the analyser demo, I used my own Spring Boot service deployed on Heroku. This service implements the back end of the RealWorld project. The desired endpoint can be found at https://realworld-backend-spring.herokuapp.com/actuator/startup. The service is configured to send correct CORS headers to GET requests from the analyser. Once you load the events using one of the specified methods, the data is visualised in a tree structure. Note that all rows that have child items are hidden. To navigate through this tree, you can use the “>” icons to the left of the item ID, or expand/hide all rows simultaneously using the Expand All / Collapse All buttons. If there are many events, it may take some time to render the expansion of all rows. In the table view, all events are displayed at once. All columns, except for Tags, can be sorted. CI + hosting On one of the previous projects, I was involved in the global DevOps transformation of our client and worked on automating the release cycle processes and building CI/CD pipelines. It was an interesting experience, which now helps me to resolve issues related to writing the source code of products. In this case, as with most of my open-source software projects, I used GitHub as my git hosting, as it provides many useful tools for CI, artefact storage, documentation, project management, static site hosting, etc. For the needs of the analyser, I specifically used Actions and Pages. GitHub Actions is configured to run a workflow on events like “pull request”, “commit to master”, and “push a tag”. Pushing a tag will also deploy the assembled project to GitHub Pages, as well as build the Docker image and send it to Docker Hub. In addition to the analyser’s public instance on GitHub Pages, you can use the Nginx-based Docker image. The latter can be useful, for example, for those cases when Spring Boot services are located on the organisation's internal network, from which there is no internet access, but Docker is available and it is possible to load the image. To start the container, run the following command: docker run -d --name sbsa -p 8080:80 lexlapin/spring-boot-startup-analyzer If you need to access this container through a reverse proxy, then pass the path through the environment variable: (UI_PUBLIC_PATH): docker run -d --name sbsa -p 8080:80 -e UI_PUBLIC_PATH=/some-path lexlapin/spring-boot-startup-analyzer Things to improve In the future, I plan to refine the screen with the analysis results. Plus, it would be useful to add a tab with a summary of event types, their number and total elapsed time, such as the number and total time spent to create beans. Another possible feature is building charts on short pivot tables — especially since PrimeVue provides such an opportunity through the Chart.js library. In tree view and table view, colour coding can be done to highlight long events. Additionally, it is worth adding event filtering — for example, by type. Conclusion The proposed analyser allows one to conveniently visualise the data received from the startup actuator endpoint, estimate in detail the time spent on various types of events that occur during the service startup, as well as generally process startup information more efficiently. The application has a public instance on GitHub Actions and is also available as a Docker image. This application was successfully used on one of Luxoft’s projects to analyse the loading of slowed-down services and helped to detect several classes with suboptimal logic in the constructors.

HelloWorld
1
23.08.2023. ·
3 min

Kotlin - Češki proizvod sa preporukom Gugla

Programski jezik „Kotlin“ osmišljen je tako da bude pristupačan i lagan za učenje, sa akcentom na izbegavanju nekih uobičajenih problema, koji su „nervirali“ Java programere, ali, sa druge strane, 100% je kompatibilan sa „Javom“, te se bez problema može kombinovati sa postojećim „Java“ projektima i, takođe, postojeći „Java“ kod se može pozvati iz „Kotlina“. Razvila ga je poznata softverska kompanija iz Češke, „JetBrains“, a posebno zanimljivo je to da je sam naziv „Kotlin“ nastao po istoimenom ostrvu u Finskom zalivu, koje se nalazi 20 km zapadno od Sankt Peterburga. Sa razvojem su počeli još 2010. godine, ali prva zvanična, stabilna verzija Kotlin 1.0 objavljena je tek 15. februara 2016. godine. Cilj je bio da se stvori savremen programski jezik, koji bi, kao što smo već napomenuli, bio kompatibilan sa postojećim Java kodom, ali sa unapređenom produktivnošću programera. Razvojni tim, na čelu sa Andrejom Breslavom, želeo je to da ostvari poboljšanim funkcijama i sintaksom, koji bi olakšali programiranje. Alternativa Javi Tako se desilo da je 2012. godine „Kotlin“  ponuđen kao open-source, što je svakako doprinelo njegovoj popularnosti, ali najznačajniji trenutak za „Kotlin“ dogodio se 2017., kada ga je „Gugl“ zvanično podržao i preporučio kao alternativni programski jezik za razvoj Android aplikacija. Naravno, alternativa Javi. Jedna od glavnih karakteristika „Kotlina“ je njegova konciznost. Ovo omogućava programerima da napišu manje linija koda, a da opet ostvare isti rezultat kao da koriste Javu. Kraći i čistiji kod postaje posebno koristan u razvoju naprednih aplikacija, jer omogućava lakše korišćenje funkcijskih i reaktivnih paradigmi. Kroz upotrebu Kotlin sintakse, poput „nullable“ tipova, „extension“ funkcija i „Smart Casts“, programeri mogu smanjiti broj grešaka i poboljšati produktivnost. Odlično se kombinuje sa velikim brojem alatki Važno je napomenuti da „Kotlin“ ima potpunu integraciju sa „Android Studiom“, glavnim razvojnim okruženjem za Android aplikacije. To znači da kad započnete sa razvojem aplikacije, „Android Studio“ će pružiti punu podršku za „inteligentno ispravljanje grešaka“ i „automatsko generisanje koda“. Za kreiranje naprednih aplikacija, „Kotlin“ se odlično kombinuje sa velikim brojem biblioteka i alatki. Među njima su „Dagger“ (dependency injection), „Retrofit“ (za rad sa REST API-ma), „Room“ (lokalna baza podataka), „RxJava“ (reaktivno programiranje) i drugi. „Kotlin“ je, takođe, savršen jezik za primenu savremenih arhitekturnih obrazaca, poput „Model-View-Viewmodel“(MVVM) ili „Clean“ arhitekture. MVVM je popularan zbog razdvajanja poslovne logike od korisničkog interfejsa, dok „Clean“ arhitektura olakšava testiranje i održavanje koda. Savršen izbor za Android developere Neke od naprednih funkcija koje imate na raspolaganju su: - Ekstenzije: Možete da definišete ekstenzije i tako proširite funkcije postojećih Android klasa, pa ćete, pored bolje organizacije, dobiti i znatno pojednostavljen kod. -„Inline“ funkcije: One služe da poboljšaju performanse i smanje opterećenje memorije, posebno u slučaju ponovljenih poziva funkcija. - „Lambda“ izrazi: Ovo je jedna od najboljih funkcija „Kotlina“, pošto lambde možete koristiti u skoro svakom aspektu jezika i lambda sintaksa vam daje mogućnost da kod pišete kao da koristite oblasno-specifičan jezik (DLS), a ne jezik opšte namene (GPL). - „Null Safety“: Bezbednost igra važnu ulogu u razvoju naprednih aplikacija, pa pored „neizmenjivih varijabli“ imate na raspolaganju i „Null Safety“. Ovaj mehanizam služi za rešavanje „NullPointerException“ grešaka, pa samim tim povećava pouzdanost aplikacije. Kao zaključak, mogli bi da kažemo da „Kotlin“ sa sobom donosi puno dobrih stvari: u pitanju je svestran i moćan programski jezik koji je idealan za razvoj naprednih Android aplikacija. Njegove karakteristike, velika fleksibilnost i podrška od strane „Gugla“ i razvojne zajednice, čine ga savršenim izborom za sve Android developere. U osnovi, to je „čistiji“ i kraći kod, ali sa dodatkom fantastičnih funkcija, koje će onima koji tačno znaju šta žele doneti bezbroj benefita.

HelloWorld
0
Da ti ništa ne promakne

Ako želiš da ti stvarno ništa ne promakne, prijavi se jer šaljemo newsletter svake dve nedelje.