Šta je posao firmware inženjera u ARS Embedded Systems?

Nebojša Stojiljković je firmware inženjer u ARS-u od 2015. godine. On uglavnom radi od kuće, ali ponekad se zadesi i da navrati u kompaniju. Zato kolege u šali znaju da kažu za njega: “Priča se da postoji, ali ga niko nije video!“ Direktor i dalje čuva jedan sto za njega, jer se nada da će mu rad od kuće dosaditi.
Pored programiranja Nebojša se zanima i mrežnom i sistemskom administracijom. Preuzeo je inicijativu i da kontinuirano unapređuje IT sistem kompanije i mrežnu i sistemsku infrastrukturu.

1. Šta je posao firmware inženjera? Šta se podrazumeva pod „firmware development“?

Firmware inženjer je osoba koja se bavi razvojem specifičnog softvera niskog nivoa, a koji se izvršava na mikrokontrolerima. Firmware je dakle vrsta softvera čija namena je prvenstveno implementacija osnovnih funkcionalnosti elektronskih uređaja poput kontrolisanja digitalnih ulaza i izlaza, rada sa memorijom, komunikacije sa senzorima i drugim funkcijama. Pored ovih funkcija firmware često uključuje i neke kompleksnije komponente, kao što su mrežni protokoli, komunikacija sa cloud serverima itd. Firmware inženjer mora odlično da poznaje elektronske uređaje i računarske sisteme, kao i da je sposoban da razvije kvalitetan i stabilan firmware.

Jednostavnim jezikom, firmware je komponenta koja je spona između hardvera i softvera. Jedan većini poznat primer firmware-a je BIOS u PC računarima.

Razvoj firmware-a podrazumeva dizajniranje, implementaciju i testiranje programskog koda koji se koristi u elektronskim uređajima. To može uključivati sledeće aktivnosti:

  • Analiza zahteva: Firmware inženjer mora dobro da razume zahteve klijenta, kao i
    hardverske mogućnosti uređaja te da predloži optimalno rešenje.
  • Dizajn: Nakon analize zahteva, pristupa se dizajnu. Ovaj deo posla često izgleda kao
    prazan hod jer se više svodi na razmišljanje i isprobavanje nego kucanje koda.
  • Implementacija: Nakon što smo smislili rešenje, preostaje nam da ga iskucamo u nekom
    od programskih jezika.
  • Testiranje: Konačno kada je kod iskucan, isti je potrebno dobro istestirati kako se neka
    greška ne bi potkrala.

Ovde treba istaći da ova četiri koraka nisu jasno razdvojena niti ih radimo odvojeno. Danas je verovatno utopija da nam klijent da dokument od 200 strana zahteva, koji se potom analizira tri meseca, pa se razvija arhitektura još dva. Mnogo češće su to mali ciklusi analize, dizajna i implementacije od po nekoliko nedelja uz nadu da nam klijent neće reći da zapravo želi nešto drugo, što je u mojoj karijeri zapravo bio vrlo čest slučaj. Jednostavno, treba se navići na to da klijent najčešće ne zna šta hoće, a još češće ni šta je fizički moguće. Naše je da mu pomognemo da sazna.

2. Koje veštine mora da poseduje ili da razvija firmware inženjer?

Firmware inženjer mora da:

  • Dobro poznaje računarske jezike, prvenstveno C, a pored njega i dobro dođe i C++ kao i asembler.
  • Solidno poznaje i elektroniku, odnosno mora u najmanju ruku da zna da čita i analizira električne šeme.
  • Poznaje različite komunikacione protokole niskog nivoa kao što su SPI, I 2 C, UART, CAN, USB
  • Poznaje arhitekturu mikrokontrolera, ili bar bude spreman da čita uputstva koja često budu i po 1000 i više stranica.
  • Poznaje operativne sisteme za mikrokontrolere kao što su FreeRTOS, Zephyr eCos i Linux
  • Poznaje neke wireless protokole kao BLE, WiFi, 6LoWPAN, ZigBee, xBee itd
  • Poznaje neke osnovne algoritme i da ume da ih implementira
  • Poznaje i razume prinicipe i tehnologije debugovanja firmware-a
  • Ako radi u embedded Linux okruženju, treba da poznaje i POSIX, yocto, buildroot OpenWRT i druge razvojne alate za Linux
  • Da odlično poznaje git
  • Bude sposoban da se suoči sa tehničkim izazovima i da pronađe rešenja za njih.
  • Ima komunikacione sposobnosti i sposobnost rada u timu.

Ova lista može verovatno ići u nedogled, jer samo operativnih sistema ima barem 100, C++ je verovatno nemoguće naučiti u potpunosti, a različiti problemi i izazovi se svaki dan gomilaju. Na sve to, u firmware svetu, skoro svaki projekat je unikatan i drugačiji od prethodnog, pa posao nikad ne prelazi u rutinu. Zato, da bi neko bio dobar firmware inženjer, on prvenstveno mora da bude veoma uporan i veoma temeljan. Dobar firmware inženjer čita dokumentaciju za sve što ne zna, i spreman je na činjenicu da šabloni praktično ne postoje.

3. Šta su trendovi/predviđanja kada pričamo o firmware?

Neki od trendova koji se pojavljuju u oblasti firmware-a su:

  • Povećana upotreba open-source firmware-a: Sve više proizvođača elektronskih uređaja se okreće open-source firmware-u, što omogućava korisnicima da pristupe izvornom kodu i da ga modifikuju po potrebi.
  • Povećana upotreba mikrokontrolera sa više jezgara: Sve više uređaja se koristi mikrokontrolere sa više jezgara, što omogućava da se više funkcija izvršava paralelno i time se povećava performansa uređaja.
  • Povećana upotreba machine learning-a: Machine learning se sve više koristi u razvoju firmware-a za poboljšanje performansi uređaja i pružanje boljih funkcionalnosti.
  • Povećana upotreba cloud tehnologija: Cloud tehnologije se sve više koriste za pohranjivanje podataka i za pružanje dodatnih funkcionalnosti uređajima, što zahteva prilagođavanje firmware-a da bi se to podržalo.

Ovo su trendovi koji će uticati na razvoj firmware-a u budućnosti i zahtevati od firmware inženjera da budu sposobni da se prilagode novim tehnologijama i da razviju firmware koji ih podržava.

4. Kakva je potražnja za firmware inženjerima? Da li je ovo zanimanje budućnosti? Gde se zapošljavaju firmware inženjeri?

Što se tiče ovog zanimanja, bar narednih 10 godina će biti uzlazni trend kako u potražnji tako i u isplativosti posla. Potražnja raste godinama, a ponuda ni izbliza ne stiže potražnju i taj trend će se
nastaviti barem u neko dogledno vreme. Zašto je to tako? Firmware inženjeru je neophodno bar tri, četiri godine i mnogo truda da savlada samo osnovne tehnologije, dok za isto vreme u svetu web development-a ljudi postanu praktično seniori.
Dodao bih da je ovo zanimanje ipak namenjeno specifičnom soju ljudi koji vole da se bave egzotičnim tehnologijama, kojima ne smeta spor i postepeni napredak, i za one koji su spremni na činjenicu da njihov kod većinu vremena neće uopšte raditi i da najčešće neće imati nikakvu ideju zašto. Ukratko, ovo je idealan posao za one koji posao rade strpljivo i bez panike.

5. Kako izgleda tvoj posao u ARS-u?

Momentalno, radim za klijenta čiji je primarni biznis filtracija vode za piće i industriju. Radim na uređajima koji prate potrošnju filtera, kako bi se planirala proizvodnja istih u narednom periodu. Konkretno, trenutno radim u programskom jeziku C i uz korišćenje FreeRTOS operativnog sistema. Pre toga sam imao vrlo zanimljiv projekat baziran na Linux-u gde sam bio zadužen za finalnu integraciju sistema. Tu sam uglavnom koristio Bash za automatizaciju nekih procesa i napisao sam nešto malo koda za Linux kernel. Na nekom sledećem projektu, verovatno ću raditi nešto sasvim drugo.
Programski jezik kojim se ja koristim gotovo isključivo je C, mada se za firmware development koristi i C++, a u poslednje vreme popularnost stiče i RUST. Pored C-a dobro poznajem i Bash kao i Python. Radio sam na projektima od onih najjednostavnijih, preko FreeRTOS-a, Zephyra-a pa sve do složenih sistema zasnovanih na Linuxu. Većina projekata na kojima sam radio odnosila se na IoT, obično vezana za AVS ili Azure Cloud.
Kada mogu da biram, za rad koristim Linux. Kao profesionalno, tako i kod kuće što me čini Linux entuzijastom. Kad već mogu da spomenem, koristim Arch i kucam u vim-u, jer sam tako u mogućnosti ;). Smatram da je Linux mnogo pogodniji za firmware development, jer većina alata prirodno radi na Linuxu i interakcija sa hardverom je prostija. Nažalost, dosta mladih inženjera dolazi iz Windows sveta, na njemu su navikli da rade, odnosno da igraju igrice  i prelazak na Linux im je često dosta trnovit i bolan pa se ipak odlučuju na sitne patnje sa Windowsom.
Što se tiče programskih jezika, zaista volim da kodiram u C-u. C je star preko 50 godina i izdržao je test vremena, iako mu se svakih desetak godina “nađe” neka zamena koja po pravilu propadne. C je jezik malog formata, sa tek tridesetak reči koje čine sitaksu, a ipak dovoljno moćan da se u njemu mogu napisati veoma kompleksni algoritmi i uostalom, čitavi operativni sistemi. Uz njega, kao što sam pomenuo, često koristim Bash za pisanje skripti koje mi pomažu da neke stvari uradim brže i poonekad Python.

6. Zbog čega voliš svoj posao?

Volim svoj posao jer je izazovan i to je zapravo ono što me vodi. Uvek sam voleo da se bavim egzotičnim i manje popularnim stvarima pa sam tako odabrao posao koji danas radim. Veoma često novi projekat zahteva učenje novih tehnologija i to mi ne pada teško. Ja na svoj posao zapravo gledam kao da treba da prihvatim izazov ili rešim problem, iako put do rešenja ponekad može biti frustrirajući.

7. Kad si baš pogrešio na poslu?

Juče, a verovatno ću i danas. Grešim kao i svi, svaki dan. Često mi se desi da kad vidim svoj kod od pre par godina, posmislim „ala sam bio glup“. No greške u firmware developmentu uglavnom nisu katastrofalne i daju se popraviti, osim ako nešno ne spalimo. Nije mi se često događalo, ali ne mogu reći da nije uopšte. Pogrešno napisan firmware kod može da fizički ošteti uređaj i to se ponekad događa.

8. Šta ti se najviše dopada u ARS-u?

Svašta je u ARS-u dobro, inače ne bih ostao 7 godina u istoj firmi. Prvo, gajimo neformalne odnose, otvoreni smo jedni prema drugima, a i družimo se privatno, van posla. Pored toga, imam mogućnost da radim na daljinu pa sam veći deo posla premestio na selo gde sada živim. Uz sve to, kako se amaterski bavim mrežnom i sistemskom administracijom, ARS mi je kao mini laboratorija gde mogu da primenim svoje znanje iz tih oblasti.

9. Koje treninge, edukacije i obuke si pohađao u ARS-u?

U ARS-u svako dobije trening koji je mu je potreban. Ne bih navodio pojedinačne treninge, jer svaki novi projekat zahteva neku drugu tehnologiju i učenje nikad ne prestaje, a ARS je kompanija koja to neguje i podržava.

10. Ko si ti privatno?

Kada ne radim u firmi, uglavnom se bavim nekim od svojih hobija kojih imam više nego što postižem. Preselio sam se na selo, pa se tu zanimam sa baštom, sušenjem mesa i proizvodnjom vina, a kada je vreme loše igram šah preko interneta, na žalost prilično loše. Jednog dana planiram da započnem sasvim mali pčelinjak. Pored toga, sakuljam i čitam knjige, najviše naučnu fantastiku, ali imam i lepu kolekciju „ozbiljne“ literature. Nisam imun ni na dobre stripove. Kad mogu da biram, slušam dobru muziku, od džeza do metala. Takođe, držim se što dalje od društvenih mreža pa nemam ni jednu. Sa prijateljima više volim da se vidim uživo kad mogu.