Iz ugla programera

Prostor za autentična iskustva, izazove i savete, pružajući uvid u svet programiranja direktno iz perspektive stručnjaka.

Blog Iz ugla programera
28.09.2023. ·
10 min

Kako da učite Data Science? (2) Formalno obrazovanje ili ne?

Evo nas na vreme za moje drugo izdanje Data Science Letters. Nastavljamo sa diskusijom o tome kako ući u Data Science i postati profesionalac u njoj, koje su pretpostavke, kakav background je poželjan, šta i koliko treba da učimo, na koji način da razmišljamo i kako sebe da dodatno motivišemo. U ovom izdanju, kao što sam obećao, hoću da se pozabavim pitanjem koje danas postaje sve zanimljivije i zanimljivije: da li nam je potrebno formalno obrazovanje i koliki je značaj naših akademskih titula za rad u Data Science? Kao što sam naglasio već u prvom izdanju ovog newsletter-a: mnogobrojni su i čudni putevi gospodnji, a vi čitate o samo jednom od njih. Autorovo lično iskustvo je neraskidivo od onoga što on piše i načina na koji razmišlja, tako da dok čitate ovo molim vas držite na umu da ja mogu da vam dam samo deo mogućeg iskustva, samo jednu perspektivu - onu koju sam sam stvorio i iz koje vidim stvari. Oslanjam se na to da posle decenija kontinuiteta u poslu koji je evoulirao iz Statistics, Quantitative Analytics, Data Mining u Big Data, Data Science, i Machine Learning možda mogu da pokušam da izvedem neke generalizacije, ali obećavam vam da ću to činiti veoma oprezno. Morate da čitate šta piše više ljudi, da razgovarate sa više ljudi, i po mogućstvu da probate da radite sa mnogima kako biste doneli zaključke za sebe. Hajde ovako: hoćete da uđete u Data Science jednog dana ozbiljno, niste naučnik, niste inženjer, imate interesovanja za analizu paterna različitih podataka, pomalo ste enciklopedista, hoćete i volite da programirate, ne bežite od matematike, fasciniraju vas vizuelizacije podataka i voleli biste da naučite kako se prave - pa, vidim vas narednih šest meseci na Google Data Analytics Professional Certificate programu na Coursera za svih $39 mesečno. U Google neće imati problem da razmatraju vašu aplikaciju za posao ako im umesto fakultetske diplome donesete ovakav sertifikat, ona čak ima i ustanovljen ekvivalent vrednosti u kreditima akademskih programa! Ovaj sertifikovani program je razvijen za uvodni nivo analitike podataka i oslanja se (naravno) na programski jezik R. Šta tek reći za poznatu Data Science Specialization u programskom jeziku R koju Johns Hopkins University već godinama nudi na Coursera: to ko prođe, i stvarno zna sve se što se tamo razmatra, ozbiljan je igrač na više zamislivih pozicija u Data Science. Ako mislite da sam sada ciničan i da kao doktor nauka gajim neku distancu prema obrazovanju putem kurseva: već dve godine, za polaznike iz Srbije i inostranstva, držim Data Science Sessions, sada već seriju šestomesečnih kurseva za Data Science u programskom jeziku R, i garantujem vam da ako to možete da prođete, naučite i izvežbate sve što je tim kursom pokriveno, ne vidim kako ne biste bili spremni za ma koju entry-level poziciju na tržištu (kurs je i planiran tako da zadovolji kriterijume koji se najčešće traže na entry-level pozicijama, dok pokriva i nešto više zanata od tog nivoa). Ok: jel' može to bez diplome neke STEM oblasti - može. Da vidimo zašto kursevi i programi rade i do koje mere. Zašto kursevi i obrazovni programi van akademije rade? Razlog je pre svega u tome što rad u Data Science zahteva praktičara - čoveka koji je u stanju da stvari koje uči i zna primenjuje na neposredne probleme, da izručuje rešenja, po čemu je disciplina uporediva (doslovce ovo mislim) sa zanatima i primenjenim umetnostima. Drugim rečima - i o ovome ćemo imati posebno izdanje newsletter-a uskoro - da li čovek mora da razume precizno, duboko i detaljno kako rade npr. optimizacioni algoritmi da bi mogao da oceni neki ML model - ne, ne mora. Pogotovo sa savremenim sredstvima za razvoj modela u Data Science, njihovu evaluaciju i serviranje u produkciona okruženja, apstrakcija od detalja takvih stvari je toliko visoka da ja mislim da neko treba da bude svestan toga (1) šta su optimizacioni algoritmi, (2) u načelu šta će pokušati da urade tj. koji problem da reše, (3) kako se oni odnose prema modelu koji se razmatra, i (4) na osnovu čega možemo da znamo da li je takav algoritam - ključan u svakom statističkom učenju - problem rešio uspešno na nekim podacima, ili nije. Više od toga treba da zna osoba koja će razvijati nove matematičke modele i suočiti sa problemom koji optimizacioni algoritam te modele može da oceni na podacima i kako ga implementirati, i to je mahom research koji se odvija u okvirima akademije ili sve češće u kompanijama kojima je research od ključnog značaja za proizvode (Google, Facebook i ekipa, rekao bih, odavno po tom pitanju šiju istraživanja na univerzitetima u Data Science i ML).  Ako hoćete to da radite (što sam ja radio do neke 2013 godine) - prvo, to i nije Data Science (može da se zove tako, ako hoćete, ali ona je primenjena, ne fundamentalna oblast) već doslovce fundamentalno istraživanje u matematici, nekoj empirijskoj nauci, i inženjeringu, drugo - za te stvari, lepo faks, pa Phd, godine laboratorijskog rada, i onda. Data Scientist čiji je posao neposredna primena modela statističkog učenja na određene podatke u svrhu rešavanja (nadamo se) dobro definisanog poslovnog problema uopšte ne mora da ima taj nivo obrazovanja da bi svoj posao radio dobro - pod uslovom da se matematike nije baš bojao toliko da nije nikad ni razumeo šta su optimizacije, čemu služe, okvirno kako rade, i ponovo, najvažnije: kako da znamo da li su nam problem rešile, ili nisu, u nekom konkretnom slučaju. Izabrao sam pitanje optimizacije samo kao primer; ima tu pregršt matematičkih i tehničkih detalja preko kojih je moguće apstrahovati, ponovo ukoliko se razume, odgovorno, čemu služe, šta rade, i kako njima bezbedno rukovati. Zbog ove razlike, kursevi za one koji hoće da uče i zagrizu rade. Gde su granice, koliki nivo znanja je neophodan? Primer. Da li bih zaposlio nekoga kao Data Scientist a da ne zna da objasni kako Gradient Boosting optimizuje seriju drveta odlučivanja i objasni mi algoritam do detalja, bih, zaposlio bih ga, ako zna da mi objasni: sve indikatore performanse (evaluaciju) tog modela (komplentu ROC analizu i izvedene metrike), da uradi njegovu kros-validaciju i tjunuje parametre u selekciji modela. Da li bih zaposlio nekoga u Data Science ko ne razume ili ne zna u ggplot2 ili matplotlib da mi nacrta površinu greške prostog linearnog regresionog modela za određene podatke i pokaže mi prstom tačku koju bi optimizacija trebalo da otkrije, ili ne zna da mi objasni šta je MLE za tek Binomijalni Logistički Regresioni model - ne, ne bih ga zaposlio. Rezon je: osobi koja zna ono prvo, to znanje neće mnogo pomoći u rešavanju neposrednih problema i učestvovanju u razvoju proizvoda ili usluga na osnovu njih (iako će ona sigurno biti sigurnija, samopouzdanija u svom radu - što i te kako vrednujem), dok osoba koja ne zna ono drugo ima sve šanse da slupa matematički model koji trenira u neki jarak (poznato još i kao: lokalni minimum :) i vrati neoptimalne rezultate, što je naravno pogubno po rešavanje ma kog problema, fundamentalnog ili primenjenog svejedno. Moji kursevi, na primer upravo Data Science Sessions u R (a uskoro će biti ponuđen i u Python), traže tačno ovu ravnotežu koju sam opisao. Ponovo: svaki stručnjak će verovatno imati svoje nijanse u pro et contra različitih pristupa, upoznao sam ljudi od onih koji misle da matematičko-tehnički detalji uopšte nisu bitni (i ti ljudi izvesno nisu u pravu) do onih koji ne bi zapošljavali u Data Science bez doktorata ni u ludilu (i niko od njih nije uspeo da mi odgovori na pitanje neposredne primene znanja takve dubine u realnim, svakodnevnim izazovima primene na tržištu). Suštinska je razlika, po mom mišljenju, da li ljude školujemo za primenu, ili za razvoj i istraživanje; budimo zato svesni da je Data Science na tržištu primena, veoma retko razvoj i istraživanje. Moje stav u tome je: čovek za Data Science mora da razume principe, i to savršeno, ali ne mora da poznaje duboke detalje svakog algoritma koji će koristiti (jer ako poznaje opšte principe dobro - znaće i da odgovorno koristi ma koji model sa kojim bude radio). Da li za te principe čovek mora da završi studije i stekne akademske titule: moj odgovor je ne, njih je moguće koncizno i čak temeljno naučiti i u okviru kursa ili nekog dužeg obrazovnog programa. Ali šta će nam onda... Akademija Ima to svoje: (1) Na kursevima je teško steći domensku ekspertizu: uzmite dva odlična polaznika nekog temeljnog Data Science kursa, i budite sigurni da u poslovima procene rizika bolje prolazi onaj koji je studirao ekonomiju ili psihologiju od onog koji nije; empirijska intucija za fenomene koji se modeliraju u primeni se bolje i detaljnije razvija tokom višegodišnjih akademskih studija. (2) Višegodišnje bavljenje nekom solidno matematizovanom, empirijskom naukom, što i dalje smatram najboljim načinom da se karijera nastavi u Data Science, je jednostavno nezamenljivo u tom smislu reči što vas vodi u najveću dubinu problematike matematičkog modeliranja u nekoj oblasti. Primer: neke 2012/13 valjda, pre nego što se odgovarajuća funkcija pojavila u jednom i sad verovatno u više R paketa, morao sam da ispišem na ruke kod za Voungov test kako bih poredio neugnježdene deskriptivne modele odlučivanja; dani su mi bili potrebni da se probijem kroz njegov naučni rad i budem siguran da nisam pogrešio negde u implementaciji. Drugi primer: ko nije video kanjone sa ravnim platoima u funkcijama verodostojnosti klase modela odlučivanja koju sam pomenuo, ne zna šta je pakao optimizacije, potpisujem. To iskustvo je zaista teško steći van konteksta fundamentalnog istraživanja. (3) Akademske titule: Za to me je najmanje briga, odmah da kažem, ali dozvolite mi da vam prepričam staru anegdotu sa američkog univerziteta na kome sam završio prve dve godine mojih doktorskih studija. Rikruteri iz velikih kompanija, sa berze i sl, znaju par puta godišnje da navrate i organizuju predavanja postdiplomcima gde im objašnjavaju kako stvari rade u poslu, kakav je job market, šta se traži, kako to sve izgleda i sl. To je za doktorante, onako ošamućene od fundamentalnih istraživanja, ispita, i prosečnih pet do šest sati sna pa tako mesecima, prilično značajno. Nekom prilikom, čovek sa berze drži predavanje pred studentima (ako me sećanje služi) filozofije i antropologije. Završi se to, prilaze filozofi i antropolozi sa pitanjem čoveče dragi kakve blage veze mi imamo sa procenom rizika investicije i predikcijom vremenske serije fjučursa tih i tih, čovek odgovara: vidite, ko god da uđe u našu firmu, mi znamo koliko vremena treba da ga obrazujemo. Ne tražim ja ovde to, nego me interesuju ljudi koji su u stanju da prežive pet godina pakla doktorskih studija. To ko može - nema ničega što ga mi posle ne možemo naučiti da radi. Tako da, da, ako mi neko donose solidan Phd i ide u Data Science, imaću poprilično više poverenja da uđem u saradnju sa njim nego sa nekim drugim. Ali to uopšte ne znači, kao što sam potencirao u ovom tekstu, da su akademske titule i formalno obrazovanje presudni. Presudno je kakav je čovek: ispite na svakom fakultetu, uključujući i doktorske studije, moguće je izlemati sa nekim ocenama, izvući neku tezu ovako ili onako, i poneti titulu. Šta je u umu, šta u srcu, a šta u prstima kad krene da se kodira, e to je pravo pitanje. Sve ostalo su znaci koji mogu i ne moraju da budu ključni. Manje me interesuje šta čovek zna (o čemu čovek govori), više me interesuje šta čovek može da uradi, a najmanje koja mu se skraćenica piše ispred imena. Ko hoće u Data Science sprema se na rad u oblasti koja ima direktne, merljive posledice: pomeriti projekat iz tačke A u tačku B, na vidljiv i objašnjiv način, je ono što se traži. Ko ima karakter za takav rad, taj ima i preduslove za ovu oblast.

HelloWorld
0
22.09.2023. ·
17 min

Kako učiti Data Science?

Za početak, o tome zašto je bitno da (a) učite Data Science rešavajući neki problem koji ste rešeni da rešite, u nekoj oblasti koja raspaljuje vašu radoznalost i znači vam, te (b) da učite Data Science funkcionalno, odn. da što pre vaše učenje pretočite u praksu koja ne samo da je korisna i vama i drugima već vas potencijalno i plaća za to da kroz rad učite; o potrebi da neprestano stvarate prilike za tako nešto i ni slučajno ne propuštate prilike nastale pukom srećom ili sticajem okolnosti. Iz prve ruke Konačno, sa skoro pedeset godina, posle programiranja čitav život počevši od moje desete godine (da, da - 8 bita i 64 Kb RAM-a 80-ih), silnih škola i rada u fundamentalnim istraživanjima koji sam započeo još 1993 a koje je potrajalo dvadesetak godina, te više od dvadeset godina karijere u onome što se nekada zvalo Quantitative Analytics, pa Data Mining, i konačno Data Science i/ili Machine Learning - rešio sam da je vreme da počnem da delim iskustvo pređenog puta. Pišem u oblasti u kojoj sam prošao sve od rada u statističkom softveru poput SPSS ili Statistica 90-ih, MATLAB, zatim R i konačno Python, u prethodnih tridesetak godina; od 64Kb u kojima treba da naučite da programirate do iskustva rada u Big Data (i to baš, baš Big Data u mom konkretnom slučaju); od statističke analize bihejvioralnih eksperimenata, anketnih istraživanja, skala stavova u oblastima istraživanja javnog mnjenja, međunarodnim odnosima, javnom zdravstvu, bankarskom sektoru, gemblingu i FMCG, do skrejpovanja i razvoja Information Retrieval sistema from scratch, mentorisanja Data Science studenata američkog edu-startapa, analize paterna ponašanja editora Wikidata koja je graf sa kojih 90+ miliona čvorova, te razvoja ML za predikciju popularnosti sadržaja na socijalnim medijima. Iskustvo je neverovatno a investicija dan danas lepo vraća, najviše time što mi omogućava da živim radeći poslove u kojima uživam, tako da mi je granica između radnog vremena, slobodnog vremena i hobija praktično izbrisana. A to je veoma važna stvar u vašem životu, stvar koju treba da se trudite da postignete: da uživate, a ne da mrzite ceo svet ponedeljkom ujutru smatrajući da je 8h radnog vremena nešto što je prosto ujedeno od vašeg života da bi finansiralo preostalih 16h. Pare nisu toga vredne, verujte mi. Počeću sa postom naslovljenim: Kako učiti Data Science? Biće više nastavaka: praktično svaku od tema i motivacija kojih se dotaknem, elaboriraću u nekom kasnijem postu. Cilj mi je da pokušam pomognem onima koji su ili tek zainteresovani za Data Science kao moguć izbor za karijeru u istraživanju ili primeni, onima koji su tek počeli da uče, onima koji su naučili i traže posao, pa i onima koji su uveliko u Data Science - jer oni su odavno već shvatili da to znači učiti doslovce svaki dan. Izbor je dobar Data Science je dobar karijerni izbor, ako vas zanima, jer je danas svugde. Doslovce: kako je IT ušao u svaku moguću i nemoguću industriju i granu, tako je danas kao suza čista istina da u data intenzivnim okruženjima (engl. data intensive environments) - čitaj: gde god ima dosta podataka - za Data Scientista ima posla. A gde danas nema dosta podataka - pa, samo u poslu onih koji još nisu shvatili da bez stavljanja informacija u pogon u poslovnom okruženju više teško da ima pravog uspeha... Nema šanse da neko pravi pogrešan izbor životnog poziva ako se opredeljuje za Data Science: gap na tržištu rada je ogroman, potražnja za njima je velika, raste konstantno, i tek će da raste, jer su deo transformacije kompletne globalne ekonomije kroz ono što danas ljudi zovu Četvrtom industrijskom revolucijom. Često se pogrešno pretpostavlja da je uloga Data Science da automatizuje sve i svačiji posao i prepusti funkcionisanje sveta i privrede autonomnim algoritmima koji iz podataka uče i donose optimalne odluke. To jeste deo posla, ali (a) ne na svakoj Data Science poziciji, (b) ima i te kako posla koji ne podrazumeva primenu čitavog takvog ciklusa, u kome se od nas traži da (c) pomoću podataka i mašinskog učenja donosimo neke sasvim ljudske zaključke i preporuke, da (d) ponekad tek dovoljno lukavo vizuelizujemo neke podatke da bih ih neko drugi razumeo ili mogao da ih komunicira nekom trećem, te (e) često se naš posao sastoji u tome da uopšte iz nekih početnih, sirovih podataka tek dođemo do podataka koji ljudima nešto počinju da znače i na osnovu kojih će se tek kasnije razmatrati kuda dalje. Ali tog posla ima, i ima ga u toliko različitih oblasti i industrija, da je nesumnjiva jedna stvar: teško je da ako naučite Data Science nemate posla, i teško je da uz toliki raspon naše discpline kroz različita tržišta ne nađete neku nišu u kojoj će vam biti interesantno i izazovno da radite. Kako onda izgleda početak u Data Science? U kom trenutku, kako neko počne da stiče motivaciju, znanja i veštine, i počne da postaje Data Scientist? Moj odgovor je: ne znam. Jedino što po tom pitanju mogu da učinim za druge je da podelim moje lično iskustvo, dovedem nas danas do tek par izvesnih zaključaka (na kraju teksta), i podsetim da ima N (gde je N neki veliki ceo broj) izbora, iskustava, i ličnih priča drugačijih od moje kroz koje su ljudi ulazili i ulaze u ovu disciplinu. Evo kako je sve počelo za mene, ukratko i bez ulaženja u ličnu biografiju, ljubavi, muzički i filmski ukus ili sklonosti ka funkcionalnom ili objektno orijentisanom programiranju. Prva stvar, pretpostavke: počeo sam da programiram sa deset (brojem: 10) godina, prvo učeći BASIC iz baš ma kog časopisa o mikrokompjuterima koji je 80-ih mogao da mi dopadne šaka i pišući kod na svesci "na kockice" (tako je zovu, iako je papir, koliko ja znam, "na kvadratiće", ali Ok), i od neke 1986 na 8-bitnom Commodore 64 koji sam uspeo da iskukam na poklon od roditelja u ekonomski ne tako slatka vremena po građane ondašnje Jugoslavije. Koliko sam bio lud i predan u tome: pa, imao sam nekih šesnest godina kada sam u jednom ex-Yu časopisu o računarima objavio prvu recenziju kompajlera za programski jezik PASCAL... Interesovanje nikada nije prestalo: preko prijatelja iz Istraživačke stanice Petnica sam došao do fotokopija poglavlja čuvene "Algorithms + Data Structures = Programs" Niklaus Wirtha, pratio razvoje koliko sam mogao, i maštao da jednog dana razvijam ekspertske sisteme u (danas prilično zaboravljenom) programskom jeziku PROLOG za logičko programiranje. Šta drugo programere uopšte zanima do razvoj AI? Studije: ranih 90-ih, ako hoćeš da ideš u karijeru programiranja a živiš u Beogradu, to je bilo ili ETF, ili Matematika. Veliki je broj bio samoukih kao ja, ali opet - neka ozbiljna škola ti treba. Treba ne samo znati da programiraš, nego i razumeti matematička sredstva koja treba da pretočiš u algoritme, i onda u kod. Moj izbor (nerado; objasniću) je bila matematika; međutim, posle I semestra na Matematičkom je meni postalo jasno da jednostavno nisam osoba koja će svaki dan da vežba analizu i linearnu algebru tri, četiri sata dnevno, jer propustiš li jedne, dve vežbe za redom eto tebi problema kako da uopšte stigneš grupu sa kojom radiš do kolokvijuma ili ispita. A moja interesovanja su bila uska, i svakako vezana ne za baš sve u matematici: ono što nekoga zainteresovanog za računarstvo najviše interesuje, matematička logika, teorija formalnih jezika, teorija dokaza, izračunljivosti, meta-matematika. Iskreno nisam bio lud za verovatnoćom, statistikom i numeričkom analizom - oblastima za koje bi se reklo da zapravo predstavljaju same fundamente za Data Science. Ne - ja sam teoriju verovatnoće zavoleo kasnije. Sve u svemu, sa tih 18, 19 godina pala je nagla odluka da se studira nešto drugo, i to nešto sasvim drugo... posle prethodno položenih prijemnih ispita na matematici i fizici (izbor je bio matematika), položio sam prijemne ispite za Filozofski (filozofiju i psihologiju) i presrećan što sam sa tankim uspehom iz gimnazije uspeo u žešćoj konkurenciji da upišem psihologiju odlučio da nju i studiram. Nema više programiranja, nema više analiza i diferencijalnih jednačina, ide neki novi svet, neka nova interesovanja... Sve dok me na prvoj godini psihologije nisu sačekali ispiti iz statistike, fiziologije centralnog nervnog sistema, te oblasti kao što su psihofizika i kognitivna obrada informacija... Kad imate iza sebe prilično solidnu matematiku još iz gimnazije i godine programiranja u kojima svakako barate brojevima svaki dan, vidite šta je nastava psihologije na prvoj godini, okrenete se oko sebe i dođe vam skoro da se nasmejete bledim licima većine vaših kolega koji mahom dolaze sa bekgroundom društvenih nauka i humanističkih discplina, načitani Frojda i Junga (koje sam poprilično pročitao i sam i osećam samo najveće poštovanje za njihov rad i dan danas), kako u neverici slušaju o linearnoj regresiji, tome šta je histogram, a šta psihofizička funkcija za koju je Fehner verovao da je logaritamska a Stivens da je stepena - brzo shvatite da se nalazite na mestu koje je potencijalno veoma interesantno za vas. Tako je i bilo: nisam završio ni prvu godinu studija a već sam izveo moju prvu eksperimentalnu studiju u kognitivnoj psihologiji. Druga godina studija, prvi nastup na naučnoj konferenciji. Do kraja studija sam ih imao ne znam koliko i objavljena četiri naučna rada do neke dvadeset i četvrte ili dvadeset i pete godine: svaki je, po prirodi oblasti u kojoj sam istraživao, uključivao statističke modele podataka, najčešće analize varijanse i multipla linearne regresije. Interesovanja su mi se brzo proširila na ono što su osnove oblasti Unsupervised Learning danas (PCA, i MDS - nešto što se koristilo za redukciju dimenzionalnosti pre t-SNE i UMAP), jer su mi znanja u toj oblasti bila potrebna da bih istraživao u oblasti semantičkog pamćenja i distribucione - ili statističke, ako hoćete - semantike, koja me je veoma interesovala. Najbolje od svega je bilo otkriće da je mejnstrim teorija kognitivnih nauka - koje predstavljaju osnovu za istraživanja u oblasti veštačke inteligencije, a pored kognitivne psihologije obuhvataju mnoge druge naučne oblasti od neurobiologije do inženjeringa - nešto što se zove Computational Theory of Mind. Drugim rečima: psiholozi i filozofi koji su se bavili problemima saznanja i pitanjem inteligencije nisu pretpostavljali ništa drugo do ono što su u XX veku takođe pretpostavili matematičari, logičari i inženjeri, naime, da objašnjenje inteligencije leži u razumevanju ljudskog uma kao kompjutacione mašinerije. Bio sam, i ostao fasciniran time (iako danas ne verujem da je kompjutaciona teorija uma u stanju da objasni ljudsku inteligenciju u potpunosti). Oblast je bila prepuna matematičkih modela raznih kognitivnih funkcija: prepoznavanja, pamćenja, razumevanja značenja reči, donošenja odluka... I konačno, naučni rad je i te kako zahtevao dobro poznavanje verovatnoće i statistike da bi se analizirali i modelirali eksperimentalni podaci, a da biste matematičke modele mogli da primenite na podatke nije bilo dovoljno imati papir i olovku, dabome. Godine rada u SPSS, zatim STATISTICA, do momenta kada su me doktorske studije konačno dovele do MATLAB (kroz jedan od najboljih i najtežih kurseva koje sam ikada uzimao u životu, Simulation and Data Analysis na njujorškom NYU). Usput sam "pokupio" bejzijansku verovatnoću i statistiku i ostao ubeđeni subjektivista u teoriji verovatnoće do dan danas. Naravno da je programski jezik R bio sledeći logičan korak. R sam počeo da učim neke 2006. godine, mislim. Od 2013 godine, kada sam konačno završio rad na doktorskoj tezi, uključujući razvoj originalne bihejvioralne teorije odlučivanja i njene matematičke formulacije, do danas, teško da sam godišnje imao više od sedam dana da nisam napisao liniju R koda. Nešto Python sam znao s početka 2000-ih, ali me je R, specijalizovan za matematičku statistiku i tada visoko popularan samo u akademskoj zajednici prirodno više zainteresovao. Danas, u R radim bukvalno sve, uključujući i ono čemu jezik u suštini nije namenjen: održavanje i razvoj sajtova ili pisanje blogova : ) Od neke 2015. godine, kada sam već neko vreme prestao sa svakim akademskim angažmanom u istraživanjima ili nastavi i uzeo moju prvu poziciju koja se zvanično zvala Data Scientist, do danas, imam osećaj da sam završio još najmanje jedan fakultet radeći u Data Science. Istina, još od 2002 godine sam imao iskustva u istraživanjima javnog mnjenja (gde vam i te kako treba dobro znanje matematičke statistike), radio kao analitičar na međunarodnim projektima, radio u istraživanju tržišta, tako da mi nije bio toliki problem da nekako izađem na tržište kao konsultant u analizi podataka. Ali je realni rad u Data Science vremenom, a ponajviše od početka mog angažmana kao Data Scientist za Wikidata (2017 - 2022) - najluđi posao koji sam u životu radio - zahtevao mnogo više od dobrog R programiranja i poznavanja statističkih modela. SQL sam, ruku na srce, naučio još tokom nekih angažmana na razvoju Information Retrieval i Text Mining sistema u R za jednu međunarodnu fondaciju neke 2015, ako ne grešim, od kada datira i moja sklonost ka PostgreSQL, ali su ulaz u Big Data okruženja (Apache Hadoop i Spark) te potreba da razvijam kompletna softverska rešenja i plasiram ih u produkciona, virtuelna okruženja bili za mene priličan šok. Ali me je jedna stvar držala: ja sam, jednostavno, voleo sve to. I nikada mi nije predstavljalo problem to da nešto novo učim, toliko sam radoznao po prirodi da bih mogao da idem u školu za pare i polažem ispite do penzije (ako ikad u penziju uopšte i odem). Apache Spark je bila stvar koja me je naterala da se ozbiljnije vratim Python programiranju, i danas koristim Python i R uporedo u poslu - mada 90% koda koji pišem danas jeste u Python, dok R koristim za istraživačke faze projekata jer mi omogućava rapidan razvoj prototipa ma kog modela na kome radim. A i više ga volim : ) Vremenom, kroz posao, godinama, prešao sam kompletan put od čoveka koji koristi matematičku statistiku i modeliranje da bi testirao neku naučnu hipotezu ili teoriju do čoveka koji radi full-stack software development u Data Science: od istraživanja, preko prototipa, mašinskog učenja i selekcije modela, do njihovog plasiranja u produkciju upakovane u različite data proizvode u koordinaciji sa product i communications stranama posla. Pa ovo je lična priča: ponovo, šta su opšte pretpostavke, kako se ulazi u Data Science? Prvi način da vam pomognem u tome kako da uđete i kako da učite Data Science se sastoji u izvođenju nekoliko zaključaka iz ove moje profesionalne i lične priče, podsećajući vas da postoji bezbroj načina na koje možete da uđete u Data Science i učite tu oblast. 1. Treba da volite to, i da radite na nečemu konkretnom! Često ljudima koji me pitaju kako da počnu u Data Science odgovorim tako što ih pitam: koji problem vi pokušavate da rešite, a da to nije problem šta isplaćuje vašu mesečnu platu i plaća kiriju? Ja sam ono što me je odvelo u Data Science karijeru naučio rešavajući tri problema kognitivnih nauka koji su me najviše zainteresovali: problem odlučivanja, problem otkrića kauzalnih odnosa iz statističkih podataka, i problem značenja; sredstva kojima danas raspolažem u mom znanju i veštinama sam stekao radeći na rešavanju ovih problema. Za vas to može da bude nešto sasvim drugo, iz oblasti ekonomije, biologije, fizike, menadžmenta, inženjeringa, entertjmenta, kriptovaluta i NFTs, čega god hoćete, ali uvek je za učenje bolje da ispred sebe imate konkretan problem koji hoćete da rešite matematičkim sredstvima u Data Science nego da ga nemate: to ključno utiče na vašu motivaciju, da se bavite nečime što vas interesuje, što vam daje snage da napredujete. Ljudi znaju tokom kurseva u Data Science koje držim da me pitaju koji dataset treba da uzmemo i na njemu vežbamo R ili Python? Ja im obavezno odgovaram, vidite, na Kaggle i drugde ih ima milion - ali vi treba da odaberete onaj koji vas zanima, jer će vam svi drugi verovatno biti dosadni. 2. Treba da imate sreće, jeste - ali i da prilike za učenje stvarate i da ih koristite kada vam se pruže. Primetićete kako se u mojoj priči o početku karijere u Data Science stvari nekako perfektno slažu: čovek programira od malih nogu, čak i kad promeni faks da pobegne od matematike on uleti u oblast društvenih nauka koja je solidno matematizovana, dobije priliku da se bavi naukom, tokom studija se razbije od metodologije, verovatnoće i statistike, sve vreme nešto programira, ubada dobre poslove, i kako da na kraju ne postane Data Scientist? Pa čovek ima lude sreće! To samo zvuči tako kad se ispriča. Prvi časopis o računarima mi jeste otac doneo na poklon 1984. godine, ali nije on nego ja seo za sto, izvadio svesku i počeo da uči da programira (bez računara, zvuči kao vic danas). Kada sam upisao psihologiju, mogao sam te više prirodno-naučne ispite da ispolažem sa desetkama, slegnem ramenima, nakupim sertifikate za neke terapije i couching i danas razgovaram sa ljudima za novac kao što radi ogroman broj mojih kolega (zbog toga na tržištu koje je daleko više zasićeno nego ono u Data Science): ja sam izabrao da zagrizem i uđem u naučni rad pored redovnih studija; to je duplo više rada na studijama nego što se od vas traži. Nekih 2000/01, dok sam bio polaznik Beogradske otvorene škole, mogao sam da je završim i stavim u džep lepe preporuke za posao, odem i bavim se nekim reasearch managementom i uživam; ja sam predložio osnivanje istraživačkog centra koji bi se bavio razvojem Interneta i proučavanjem informacionog društva, tako stvorio priliku da oformim tim, izvedem istraživanja sa hiljadama ispitanika i naučim proces menadžmenta istraživanja od ideje do publikacije s leva na desno (četiri knjige smo mi u tom timu objavili zajedno 2002 - 2005; i to je trebalo napisati). Za doktorat, nisam morao da razvijam novi matematički model u teoriji odlučivanja, doktorira se i sa mnogo manje. Uopšte nisam morao da u životu prihvatam pozicije na kojima je trebalo da radim i back-end na Big Data u Hadoop i Spark, i mašinsko učenje, i razvoj RStudio Shiny dashboards, i njihovu produkciju u cloud okruženjima; mogao sam da kažem Ok, platite nekog Data inženjera za Big Data i zaposlite nekog juniora da radi dashboards, ja sam specijalista za ML i radim samo to - kao što danas radim na poziciji na kojoj se od mene zahteva samo ML, a u većini firmi kojima treba Data Science to što sam godinama radio ja radi tim ljudi. Ali je to za mene bio izazov - pa sam učio. Sve ono što nisam uradio je bilo da propustim priliku da učim kada bi mi se pružila pukom srećom, ili da propustim da priliku za učenje stvorim kada takve prilike nije bilo. U većini slučajeva, nisam uspevao samo to, već sam uspevao i da budem plaćen da radim posao koji je podrazumevao da na njemu mnogo učim. To bi bile pretpostavke: (1) da učite Data Science radeći na nečemu što vas interesuje i što volite, jer u suprotnom ozbiljno rizikujete da sebi zagorčate život ubrzo, te (2) da neprestano tražite prilike za učenje, kontekste u kojima će vaše učenje postajati funkcionalno i koristiti i vama i drugima (pri tom vas, kad god je to moguće, i plaćajući za to), i ne da prilike za učenje Data Science čekate nego da ih aktivno stvarate. Predlažite projekte, okupljajte timove, tražite podatke, otvorite blog i pišite šta i kako radite, i objasnite zašto je važno koji problem rešavate i zašto vam je do toga stalo. U narednim postovima, o tome da li i koliko teorije verovatnoće i statistike treba da znate da biste preuzeli neku poziciju u Data Science/ML, o tome da li vam trebaju master i doktorske studije da biste radili u Data Science (odmah da odgovorim: ne, ali nije ni loše ako je upravo to bio vaš razvojni put), kako da učite samo programiranje za Data Science, kako da organizujete vaše projekte tokom učenja (obavezno morate da imate projekat na kome radite dok učite Data Science), i drugim nadam se korisnim raspravama. Autor: Goran S. Milovanović

HelloWorld
2
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
14.08.2023. ·
4 min

Freelancing platforme - koju izabrati

Bilo da već radite kao programer za domaću firmu i želite da zaradite dodatni dinar, ili želite u potpunosti da se posvetite freelancingu, uvek je dobro informisati se o samim platformama, koje su im prednosti i koje su im mane. Pošto sam zadnjih 5 godina freelancer (od sveukupno 6 godina radnog iskustva), mislim da imam barem neki kredibilitet u pisanju ovog “izveštaja”.  😀 Pisaću samo iskustva o platformama na kojima sam i sam radio. Upwrok Apsolutno najpopularnija freelancing platforma kod nas. Karakteriše je ogroman broj klijenata kao i ogroman broj freelancera. Ovo je bila moja prva freelancing platforma na kojoj sam krenuo da radim. Trebalo mi je dva tri meseca (uzmite u obzir da sam imao tek malo jače od godinu dana iskustva) da nađem prvog klijenta, sa kojim sam i radio najduže - skoro godinu dana. Kriterijumi za ulazak na platformu:  Praktično nepostojeći, bilo ko ko ima pristup internetu i ima nekog elementarnog znanja iz oblasti za koju se prijavljuje, može da se prijavi.  Satnice: Najmanja satnica za koju znam je 5$/hr. Najiskusniji frilenseri imaju satnice preko 40$/hr. Moja satnica, dok sam bio najaktivniji tamo, je bila 15$ (od sredine 2018 do sredine 2019) Provizija: Provizija se naplaćuje direktno od vašeg rada sa klijentom i trenutno iznosi 10%. Prednosti: Ogroman broj poslova, relativno lako se može doći do posla uz nekakvo iskustvo Mane: Baš zbog same veličine platforme i broja poslova i frilensera, vrlo je slaba kontrola  klijenata kao i frilensera. Čuo sam za dosta slučajeva gde su se frilenseri žalili da su bili scamovani od strane klijenata. Takođe, time tracking aplikacija meni lično ne odgovara iz razloga što mi skrinšotuje apsolutno sve što radim, koliko puta sam pritisnuo dugmiće na tastaturi kao i koliko pomeranja miša je bilo. Proxify Švedski startup Proxify je krenuo značajno da se širi i ono što ih karakteriše jeste da uglavnom traže evropske freelancere jer su im klijenti mahom iz Evrope. Tamo nažalost posao još nisam ni našao. Kriterijumi za ulazak na platformu: Za razliku od Upworka, ovde postoji više faza kroz koje prolazite. Prvo je razgovor sa HRom, onda nakon toga imate tehnički intervju i poslednji korak je zadatak koji morate da uradite i koji im posle toga šaljete Satnice: Ovde su satnice mnogo bolje, ali nažalost, koliko znam, gornja granica je postavljena na 32 EUR/h. Provizija: Provizija se ovde naplaćuje klijentu, a vi dobijate ceo iznos za koji ste radili. Prednosti: Ukoliko dobijete klijenta, to su uglavnom dugoročni projekti (6 i više meseci), za razliku od upworka gde zavisi od klijenta do klijenta da li je long ili short term projekat Mane: Vrlo malo poslova. Na toj platformi sam već par meseci i za poziciju Unity Developera je naišao samo jedan posao. Verujem da je za neke popularnije stack-ove izbor veći, ali ne bih da se zakunem da se posao može naći toliko lako čak i sa popularnijim tech stackom.  Toptal Toptal se po internetu reklamira kao freelancing platforma na kojoj se nalaze “Top 3%” freelancera iz celog sveta. Nakon uspešnog prolaska svih krugova, uspeo sam da nađem posao na platformi za svega nedelju dana. Kriterijumi za ulazak na platformu: Identični kao za ulazak na Proxify, s tim da se ovde tehniči intervju sastoji od dva dela, prvi je test gde radite zadatke bez bilo kakvog nadzora na codility platformi i imate 90 minuta da završite 3 zadatka. Drugi deo tehničkog zadatka je Live Screening gde imate nekoga ko gleda dok vi radite, i ti zadaci se uobičajno rešavaju za oko 5 do 10 minuta svaki. Bitno je da napomenem da su zadaci ovde drastično teži nego na proxifyu te je moj savet da pre apliciranja barem mesec dana svaki dan radite zadatke na leetcode-u ili njemu sličnim platformama, zato što zadaci uopšte neće biti naivni. Satnice: Baš zbog toga što se reklamiraju kao platforma za top 3% freelancera, satnice su u skladu sa tim. Minimum je ako se ne varam oko 25$, a što se maksimuma tiče - nebo je granica 😀 Provizija: Provizija je ista kao na Proxifyu, naplaćuje se klijentu i vi kao freelancer nikad ne znate koliki je to % a vama sleduje pun iznos vaše satnice. Prednosti: Po mom iskustvu, zaštićeni ste kao beli medved. Uvek na raspolaganju imate svog support agenta kome možete uvek da se obratite za bilo kakve nejasnoće/poteškoće. Klijenti su uglavnom dugoročni (6+ meseci) i satnice su stvarno visoke. Mana: Napsram prethodnih, nema toliko 😀 Jedina veća mana za ljude koji žele da pristupe platformi u ovom momentu je taj što je lista čekanja po nekoliko meseci (to ja lično pripisujem trenutnoj krizi na IT tržištu). Ukoliko želiš da se više informišeš o prednostima i manama freelance rada, baci oko na naš drugi blog na temu Da li je danas isplativije (i koliko) raditi kao frilenser ili kao regularno zaposlen?  

07.08.2023. ·
3 min

Uticaj zračenja na rad programa?

Bagovi, nepredviđeni edge-case scenariji, nedovoljni resursi za rad programa - samo su neki od problema koji mogu da utiču na rad našeg programa a za koje smo sami krivi. Ali šta da radimo ukoliko naš program pukne jer je svemir tako odlučio? Kako tehnologija nastavlja da napreduje, i kako se naše digitalne strukture postaju sve manje i preciznije, čestice zračenja koje dolazi iz svemira postaju sve veća pretnja. Jedna od najneočekivanijih posledica ovog fenomena je mogućnost da svemirsko zračenje može da "okrene" bitove računarske memorije, menjajući njihove vrednosti iz 0 u 1 ili obrnuto. Svemirsko zračenje se sastoji od visokoenergetskih čestica koje putuju kroz svemir gotovo brzinom svetlosti. Kada ove čestice pogode elektronske komponente, mogu izazvati niz problema. Najvažniji za našu diskusiju je fenomen poznat kao "Single Event Upset" (SEU). SEU se događa kada jedan visokoenergetski događaj utiče na operaciju digitalnog uređaja. U kontekstu računarske memorije, to može značiti da visokoenergetska čestica pogodi bit memorije, "okrećući" njegovu vrednost. Na primer, bit koji je bio postavljen na 0 može se promeniti u 1, ili obrnuto. Iako se ovaj događaj može činiti trivijalnim, posledice mogu biti značajne. Ako se, recimo, bit koji je izmenjen nalazi u kritičnom delu sistema, njegova promena može dovesti do niza nepredviđenih posledica, uključujući pad sistema ili nepredviđeno ponašanje. Industrije koje su visoko zavisne od digitalne tehnologije, poput svemirske industrije, telekomunikacija i finansijskih institucija, ulažu značajne resurse u razumevanje i suzbijanje ovog problema. Primena metoda poput izdržljivosti na greške (error resilience), redundantnih sistema i korekcije grešaka u kodu su postale uobičajena praksa u borbi protiv ovog fenomena. Letelica Mars Rover Spirit, koju je lansirala NASA, počela je svoju misiju na Marsu 2004. godine. Međutim, sredinom 2003. godine, dok je letelica još uvek bila na putu ka Marsu, iznenada je prekinula komunikaciju sa kontrolom misije na Zemlji. Komunikacija je bila prekinuta nekoliko dana i taj incident je pretio da uništi misiju i baci ne baš male pare kroz prozor. Inženjeri su započeli analizu kako bi otkrili šta se dogodilo. Pošto su isključili druge moguće uzroke, zaključili su da je problem bio izazvan Single Event Upset (SEU) događajem. Veruje se da je visokoenergetska čestica svemirskog zračenja pogodila memoriju rovera, promenivši vrednost jednog bita. Ova promena je dovela do niza nepredviđenih problema u operativnom sistemu rovera, što je na kraju rezultiralo prekidom komunikacije. NASA je uspela da ponovno uspostavi komunikaciju sa roverom i nakon što su otkriveni i ispravljeni problemi, misija je uspešno nastavljena. Ovaj incident je bio značajan ne samo zato što je pokazao stvarne posledice svemirskog zračenja na svemirske misije, već i zato što je ilustrovao važnost ugradnje otpornosti na greške u kritične računarske sisteme. Nakon ovog incidenta, NASA i druge svemirske agencije su preduzele dodatne korake da poboljšaju otpornost svojih svemirskih letelica na svemirsko zračenje. Poučeni ovim i drugim iskustivma, najveći data centri na svetu imaju posebne nivoe zaštite protiv SEU događaja, ali se oni i dalje (doduše veoma retko) mogu desiti baš bilo kada i na bilo kom uređaju - od nekih stvari se možda nikad u potpunosti nećemo moći zaštititi.  

03.08.2023. ·
2 min

Koraci koje ne smete preskočiti pre lansiranja softvera: Ova ček-lista bi trebalo da pomogne

Lansiranje softvera je ključan trenutak u životnom ciklusu njegovog razvoja. To je trenutak kada se meseci ili godine napornog rada finalno predstavljaju svetu. Kako bi se osiguralo da sve prođe glatko, važno je izvršiti temeljne provere pre samog lansiranja. Evo sveobuhvatne ček-liste koju bi trebalo pratiti. 1. Funkcionalna provera Pre svega, važno je da softver radi kako treba. To znači da sve funkcionalnosti treba da budu potpuno operativne i da ispunjavaju specifikacije koje su bile definisane na početku razvoja. Testiranje funkcionalnosti treba da obuhvati sve aspekte softvera, od osnovnih funkcija do kompleksnijih procesa koji uključuju više koraka. 2. Provera korisničkog iskustva Korisničko iskustvo je takođe bitno za uspeh softvera. Ovo uključuje proveru da li je korisnički interfejs intuitivan i lako razumljiv. Takođe je bitno da se proveri da li su sve funkcije lako dostupne korisnicima. 3. Provera performansi Performanse softvera moraju biti na nivou koji je prihvatljiv za korisnike. To znači da softver mora brzo da se učitava, da ne sme biti usporenja i da je procesiranje informacija efikasno. 4. Bezbednosna provera Jedan od najbitnijih aspekata bilo kog softvera je bezbednost. Pre lansiranja softvera, treba da se izvrše sveobuhvatne bezbednosne provere kako bi se osiguralo da su svi podaci korisnika zaštićeni. 5. Provera kompatibilnosti Softver treba da bude kompatibilan sa svim glavnim operativnim sistemima i uređajima za koje se očekuje da će korisnici koristiti. Testiranje kompatibilnosti treba da uključi sve ove mogućnosti. 6. Provera dokumentacije Dokumentacija softvera mora biti kompletna i ažurirana pre lansiranja. Ovo uključuje tehničku dokumentaciju, korisničke priručnike, FAQ sekcije, i sve druge vidove dokumentacije koje korisnici mogu da koriste. 7. Provera infrastrukture Infrastruktura koja podržava softver, uključujući servere i mreže, mora biti spremna da izdrži opterećenje koje će lansiranje softvera doneti. Ovo uključuje proveru kapaciteta i skalabilnosti infrastrukture. 8. Planovi za hitne situacije Bitno je imati planove za hitne situacije u slučaju da nešto pođe po zlu. Ovi planovi treba da uključuju postupke za vraćanje na prethodnu verziju softvera, proceduru za rešavanje bezbednosnih propusta, kao i plan za komunikaciju sa korisnicima u slučaju problema. 9. Konačna provera Nakon što su svi ovi koraci provereni, poslednji korak je konačna provera. Ovo je još jedan, poslednji test da se osigura da je sve spremno za lansiranje. Ako se otkrije bilo kakav problem, sada je vreme da se on reši. Kada se svaki korak ove ček-liste temeljno pregleda i zadovolji, softver je spreman za lansiranje. Ali, važno je napomenuti da se proces ne završava tu. Lansiranje je samo početak nove faze u životu softvera, gde se stalno traže mogućnosti za unapređenje, rešavaju se iznenadni problemi, a stalno se rade i revizije na osnovu povratnih informacija korisnika. Lansiranje je izuzetno važan trenutak, ali putovanje tu tek zapravo počinje. Dok ova ček-lista može da vam posluži kao značajna priprema za lansiranje, ne zaboravite da je kontinuirano unapređenje i inovacija ključ za dugoročni uspeh vašeg softvera.

HelloWorld
1
17.07.2023. ·
2 min

Photon Quantum - revolucija u razvoju Multiplayer igara

Ukoliko se bavite game developmentom na bilo kom nivou, sigurno ste nekada pomislili kako bi bilo dobro napraviti multiplayer igru. Međutim, pravljenje multiplayer igre je daleko teže nego pravljenje singleplayer igre jer, pored vaših veština pravljenja samih mehanika za igre, potrebno je znati kako optimizovati samu igru da šalje što manje saobraćaja kroz mrežu, kako da svi klijenti budu u sinhronizaciji konstantno, kako rešiti problem ljudi koji kasnije ulaze u sam meč i još mnogo, mnogo toga. Firma Photon, koja je veteran u pravljenju frameworka za razvoj multiplayer igara, pre nekoliko dana je izbacila svoj najnoviji proizvod - Photon Quantum.    Photon Quantum predstavlja potpuno determinističk framework, baziran na ECS šablonu (za ljude koji koriste Unity, ovo nema nikakve veze sa Unityevim ECSom 😄) , za pravljenje multiplayer igara. Šta tačno znači to deterministički? Znači da za određeni input koji korisnik kreira, identičan (što je najbitnije, u decimalu) će se taj input reflektovati na svakoj mašini koja se trenutno nalazi u tom meču. Zašto je to inače teško proizvesti? Zbog same prirode floating-point aritmetike na modernim računarima gde se većina decimalnih brojeva ne može prikazati baš takvi kakvi jesu već se zaokružuju na nekoj od poslednjih decimala.   Inženjeri iz Photona su to rešili tako što su napravili potpuno novu numeričku strukturu podataka koja se koristi umesto standardnih floating-point struktura kao što su float i double. Time se osigurava upravo to, da svaki otkucaj (eng. tick) simulacije na svim računarima izgleda isto. Takođe, Photon je morao da napravi i svoj endžin za fiziku baš iz tog razloga što svi komercijalni endžini za fiziku mahom koriste float i double za svoja računanja, pa je ipak bilo lakše da naprave svoj od nule nego da neki postojeći prilagode svojim potrebama.    Pored toga, baš zato što sama simulacija prihvata samo input, mogućnost cheat-ovanja je sveden na minimum, a ukoliko se koristi još i neki custom server, prema rečima Photonovih ljudi, ta mogućnost je ravna nuli.  Photon Quantum trenutno postoji samo za Unity, ali se aktivno razvija framework i za Unreal. 

16.06.2023. ·
3 min

WebAssembly - alternativa JavaScript-u

Ukoliko se do sada niste susreli sa WebAssembly-jem definitivno vredi da odvojite malo vremena i proučite šta sve ovaj alat može da ponudi. Ukratko, WebAssembly je nastao 2017. godine sa ciljem da se ponudi alternativa JavaScript-u (koji, iako je među najpopularnijim programskim jezicima, ima veoma izražene mane) prilikom pisanja frontend koda (koda koji se ne izvršava na serverima već na korisnikovoj mašini). Glavna razlika između WebAssembly-a i JavaScript-a je u tome što WebAssembly omogućava izvršavanje koda napisanog u drugim jezicima, kao što su C/C++ ili Rust, dok je JavaScript specifičan jezik za web i već se izvršava u pretraživačima (browser-ima). WebAssembly pruža veću brzinu izvršavanja i sigurnost, dok JavaScript nudi jednostavnost i široku podršku.   Od 2017. godine, kada je i nastao, nastalo je dosta alata koji omogućavaju da se kod pisan u drugim programskim jezicima umesto u običan asemblerski kod - kompajlira u WebAssembly kod, čime postaje dostupan za korišćenje iz pretraživača. Ljudima je, osim ideje da prave nove aplikacije i prevode ih u WebAssembly, palo na pamet da pokušaju da u njega prebace i neke postojeće programe - tako smo čak dobili i verzije nekih od ranije veoma popularnih video igrica koje možemo pokrenuti iz svog pretraživača (kao što su DOOM iz 1993. godine, Fallout 2, SimCity 2000 itd).  Koje su to prednosti koje WebAssembly nudi?  Efikasnost izvršavanja: WebAssembly je dizajniran da se izvršava brže od JavaScripta. Wasm kod se prevodi u binarni format koji se izvršava u virtualnoj mašini pretraživača. Ovaj binarni format je dizajniran da bude efikasan i brz za izvršavanje, omogućavajući optimizacije koje se mogu postići na niskom nivou.  Bliskost mašinskom jeziku: WebAssembly koristi mašinski jezik specifičan za virtualnu mašinu pregledača, što omogućava da se kod izvršava na nižem nivou od JavaScripta. To znači da se kompleksne operacije i algoritmi mogu izvršavati brže jer je pristup hardverskim resursima direktniji.   Kontrola memorije: WebAssembly omogućava programerima precizniju kontrolu nad memorijom u poređenju s JavaScript-om. Ovo je posebno korisno za aplikacije koje zahtevaju rad s velikim količinama podataka ili izvođenje zahtevnih algoritama. Precizna kontrola memorije omogućava efikasnije upravljanje podacima i izbegavanje nepotrebnih alokacija i dealokacija.  Primeri framework-ova koji omogućavaju jednostavan rad sa WebAssembly-jem:  Blazor: Blazor u suštini nudi prevođenje C# u WebAssembly, a kao i sam C# jezik, razvio ga je i održava ga Microsoft. Blazor nudi dvije glavne varijante: Blazor Server i Blazor WebAssembly. Blazor Server koristi SignalR za održavanje veze sa serverom i omogućava dinamičko ažuriranje korisničkog interfejsa, dok Blazor WebAssembly izvršava C# kod direktno u pregledaču, što omogućava offline funkcionalnost i nezavisnost od servera.  Rust sa Yew-om: Yew je Rust-ov frontend framework inspirisan React-om koji omogućava razvoj web aplikacija koristeći Rust jezik. Yew koristi WebAssembly za izvršavanje Rust koda u web pretraživaču. On se ističe po performansama, sigurnosti i Rust-ovoj filozofiji "zero-cost abstractions". Yew koristi virtualni DOM (Document Object Model) za efikasno ažuriranje korisničkog interfejsa samo u delovima koji su se promenili. Takođe nudi mogućnost razvoja po komponentama, rukovanja događajima i rad s asinhronim zahtevima.  U poređenju sa već poznatim JavaScript framework-ovima, Yew i Blazor imaju manji ekosistem, manje su prihvaćeni od strane inženjera i zahtevaju učenje novog jezika (Rust ili C#). Takođe, izvršavanje putem WebAssembly-a može imati neočekivane poteškoće u odnosu na JavaScript, jer mogu zahtevati dosta više koda da bi se neke jednostavne stvari uradile. 

14.06.2023. ·
3 min

Intel ili AMD – koji procesor je bolji izbor za programere?

Ako si programer koji svakodnevno koristi više aplikacija za kodiranje u isto vreme, potreban ti je procesor koji je dovoljno brz da izađe na kraj sa svim tim zahtevnim procesima.  Bez obzira na svestranost i broj aplikacija koje koristite, izbor procesora je prilično oskudan i svodi se na dve opcije na tržišu – Intel i AMD.  Ukoliko koristite jezičko programiranje, onda i Intel i AMD koriste isti set instrukcija. Međutim, ukoliko je vaš fokus na dubokom učenju, podacima, visual studiu, C++, Pythonu, Javi... onda bi pažljiv odabir procesora mogao da vam znatno olakša život.  Zahtevi novih programera naspram onih iskusnijih koji rade na kompleksnijim razvojnim projektima su različiti, i zbog toga se postavlja pitanje: Da li je skupi Intel CPU pravi izbor za sve, ili za prvu grupu posao može obaviti i prosečan AMD procesor?  Nakon čitanja narednih faktora, sigurni smo da ćete lakše doneti odluku o vašem budućem procesoru.  Šta čini neki procesor boljim izborom za programiranje? Jezgra   Kada su u pitanju jezgra, Intel ili AMD procesor koji nudi izuzetne single-core performanse je dovoljno dobar da izvrši sve vaše programerske zahteve.  Možete da kupite i procesor sa više jezgara, ali bi on takođe trebalo da isporuči izuzetne single-core rezultate.  Drugim rečima, procesor sa jednim jezgrom i većom clock brzinom će bez ikakve sumnje unaprediti performanse vaših programa.  Međutim, ukoliko se bavite razvojem igara, onda je najbolji izbor procesor sa više jezgara. AMD nudi više jezgara po nižoj ceni, dok su Intelovi procesori skuplji i poseduju manji broj jezgara.  Sa druge strane, Intel je ispred AMD-a kada su u pitanju single-core performanse, a to je nešto što vam je zaista potrebno ako tražite procesor za programiranje.  Pritom, ukoliko koristite više aplikacija kao što su Visual Basic i Python, C++, recimo, onda vam je potrebno više jezgara.  Odabir generacije I Intel i AMD mogu da obave većinu poslova koje im nametnete, sem ukoliko ste se fokusirali na AI duboko učenje ili data science. Onda vam je potreban procesor koji je u stanju da brže izlazi na kraj sa velikim setovima podataka.  Takođe, ukoliko vaši projekti imaju veze i sa grafikom, onda se AMD nameće kao idealan izbor.  Intel procesori novije generacije (Core i7 i Core i9) pokazali su se kao odličan izbor za programere, dok su AMD Ryzen 7 procesori favoriti kada su u pitanju performanse u softverskom razvoju.  Za one koji tek ulaze u programiranje i kojima je potreban CPU za osnovne zadatke, Intel Core i5 i Ryzen serija 5 procesora su više nego adekvatan izbor.  Zaključak Kodiranje iz godine u godinu postaje sve kompleksnije. Od pisanja osnovnih komandi do mašinskog učenja, gotovo sve u back endu zahteva kodiranje. Kompleksne programerske aplikacije više zavise od single-core performansi. I tu je Intel u većoj prednosti, dok je AMD mnogo bolji u ponudi sa više jezgara.  Ako ste profesionalni programer, Intel bi bio bolji izbor za savladavanje kompleksnih kompjuterskih zadataka, dok je za sve one na nešto nižem nivou znanja i obaveza AMD više nego solidan izbor. 

HelloWorld
2
Da ti ništa ne promakne

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