Otvori glavni izbornik

Programer - zanimanje koje uključuje zadavanje niza instrukcija u formaliziranom programskom jeziku uređaju (računalu) koji u ovisnosti o sadržaju instrukcije obavlja neku radnju.

Niz instrukcija zovemo izvornim kôdom programa.

Danas se najčešće programiraju elektronička računala iako je moguće programirati i mehaničke uređaje kao što su posebni klaviri, šivaći strojevi i drugi (tj. elektro-mehanički uređaji).

Računarstvo je znanost koja uči programere o umijeću samog programiranja i stvaranja računalnih programa.

KlasifikacijaUredi

Nacionalna klasifikacija zanimanja iz 2010. godine[1] predviđa četiri različita zanimanja u programerskoj djelatnosti (251):

  • Analitičari/analitičarke sustava - 2511
  • Razvojni inženjeri/razvojne inženjerke za programsku podršku - 2512
  • Razvojni inženjeri/razvojne inženjerke internetskih i multimedijskih aplikacija - 2513
  • Programeri/programerke za razvoj aplikacija - 2514

Osim ovih određenih naziva, postoji i jedan grupni:

  • Razvojni inženjeri i analitičari/razvojne inženjerke i analitičarke za razvoj programske podrške d. n. - 2519

Ovi nazivi su moguće prikladni za uporabu u državnoj i javnoj upravi, gdje oznaka 2511 najvjerojatnije predstavlja sposobnije i iskusnije programere, koji zauzimaju upravljačke pozicije nad timovima programera u državnoj i javnoj upravi, oznake 2512 i 2513 se vjerojatno odnose na tzv. programere desktop (GUI) aplikacija (2512) odnosno mrežnih - internetskih aplikacija (2513), dok je oznaka 2514 najvjerojatnije namijenjena programerima početnicima.

U privredi ne postoji ovakva klasifikacija, nego se susreće nešto složeniji model, za iskusne programere sposobne razviti najsloženije računalne sustave rabe se dva naziva:

  • dizajneri računalnih sustava (software architect)
  • analitičari računalnih sustava (software analyst, ponekad systems analyst)

Iako se načelno bitno razlikuje razvoj tzv. desktop (GUI) aplikacija od razvoja mrežnih, odnosno web aplikacija, te programa odnosno aplikacija za mobitele, rastom brzine interneta i razlučivosti ekrana na mobitelima, zamjetno je postupno povećanje broja dostupnih web aplikacija na mobitelima, odnosno prijelaz na web aplikacije umjesto onih izrađenih specifično za mobitele.

Alternativno rješenje mrežnim aplikacijama je razvoj programa pomoću multiplatformskih GUI toolkita poput Qt-a ili GTK (postoje i brojni drugi, iako su ova dva najčešća, npr. wxWidgets) pomoću kojih se programi rade tipično u C++-u, a mogu se jednako izvoditi na svim Linux distribucijama, Mac OS X-u i Windowsima. Doduše Mozilla Firefox i Mozilla Thunderbird su odabrali drugi put, na Linuxu rabe GTK, ranije GTK2, danas GTK3[2], na Macu i Windowsima rabe native grafičke toolikite. Sličan je izbor LibreOffice, koji ima vlastiti vcl toolkit.[3]

Unatoč mogućoj klasifikaciji prema izboru toolkita ili ciljne platforme, najčešća je ona prema programskome jeziku, te je najčešća podjela na dvije ili tri razine:

  • mlađi programer u programskom jeziku X
  • programer u programskom jeziku X
  • stariji programer u programskom jeziku X

X može biti praktično svaki programski jezik danas u uporabi, od Basica (najčešće Microsoftov VisualBasic, za računovodstvene programe), Pascala (Delphi), do PHP-a, Jave, Pythona ili Perl-a. Nema smisla navoditi sve programske jezike, no smisleno je spomenuti da iako neki programski jezici nisu u širokoj uporabi, npr. Erlang koji se danas skoro isključivo rabi za telefonske centrale, obzirom da u Hrvatskoj postoji Ericsson Nikola Tesla, u Hrvatskoj ima smisla znati i poneki egzotičan programski jezik.

Sposobnosti odnosno kompetencije tražene od programeraUredi

Tipično se traži:

  • analitičnost
  • pedantnost
  • komunikativnost

Objašnjenje je samorazumljivo, programer koji nema nad sobom analitičara, nego komunicira direktno s kupcem, ako nije analitičan i ispunjava želje kupca bez razmišljanja o posljedicama će često raditi istu stvar nekoliko puta.

Programer koji nije pedantan će vječno istjerivati bugove. Ovo je danas olakšano time što su danas linteri često dio IDE-a, osim što ih je moguće rabiti kao zasebne alate.

Programer koji nije komunikativan će slabo prenijeti bilo šefu ili klijentu što ne valja u njihovim zamislima kako program treba izgledati, ishod slabe komunikacije je uvijek isti - dulje trajanje projekta, odnosno slabija kvaliteta bilo kôda ili konačnoga proizvoda.

Od znanja se tipično traži:

  • poznavanje određenog programskog jezika, tj. pisanja kôda u njemu, što se ugrubo može svesti na znanje naredbi za programski tok (petlje), tipove i strukture podataka
  • općenito poznavanje algoritama
  • poznavanje specifične tehnologije za određeno radno mjesto; za računovodstvene aplikacije uz određeni programski jezik podrazumijeva se napredno znanje SQL-a, jezika za upravljanje bazama podataka, tipično MSSQL dijalekta; za mrežne aplikacije najčešće se podrazumijeva najmanje osnovno znanje SQL-a, tipično MySQL, PostgreSQL ili SQLite dijalekta
  • poznavanje sustava za upravljanje i verzioniranje programskoga kôda

Napredne programerske sposobnostiUredi

Ovdje bi se moglo pisati o design patternima, ali ključno je - poznavati razne programerske metodologije i imati dobar osjećaj, tj. znati kada treba primjeniti koju tehnologiju odnosno metodologiju.

Jedan od osam ishoda učenja na predmetu "Objektno oblikovanje" na FER-u je:[4]

  „Objasniti prednosti agilnog pristupa razvoju informacijskih sustava i kako oblikovanje usmjereno domenom potpomaže takav agilni razvoj.”
(Objektno oblikovanje, ishod 8 od 8.)

Iako su moderne metodologije nesumnjivo korisne pri razvoju kôda u velikim sustavima, primjenjivanje bilo koje metodologije umjesto postojeće; npr. dodavanje UML dijagrama na postojeću dokumentaciju, ili kao zamjena postojeće dokumentacije - može biti korisno (ako je postojeća dokumentacija nepotpuna), ali jednako tako može biti samo suvišno trošenje vremena (ako je postojeća dokumentacija potpuna i dobra). Iterativni pristup umjesto metodologije vodopada (waterfall) je nužan tamo gdje klijent ne zna što želi, i želi to jučer. Ali tamo gdje su poslovni procesi jasno specificirani možda dulje od sto godina, te bilo kakve promjene ili improvizacije ne dolaze u obzir, u takvim slučajevima iterativni pristup može djelovati neozbiljno.

Dvije se metodologije odnosno prakse mogu izdvojiti kao korisne napredne prakse:

Prva praksa je djelomično samorazumljiva. U polju gdje nema očitih rješenja, ponekad je potrebno proći postupak "pokušaj-promašaj" x N-1, da bi se u N-tom koraku došlo do ishoda "pokušaj-uspjeh".

Druga je praksa jasnija, radi se ili o vidu mentorstva, gdje iskusniji programer uči neiskusnijeg primjerom, odnosno mlađi pokazuje što je naučio; ili se radi o pristupu - 4 oka (6 odnosno 8 ako su naočale u igri) na isti problem, te je mogućnost pogrješke kad dvije osobe gledaju istu stvar bitno smanjena, a izbjegava se slučaj da jedan programer pet minuta ili sat vremena gleda u jedan komad kôda. Ako dva dovoljno pedantna i dovoljno sposobna programera prolaze komad kôda s pogrješkom redak po redak, pogrješka se mora naći, pitanje je samo vremena, a motivacija u paru je bitno veća kad se traži pogrješka (bug) u tuđem (ali i svojem) programskom kôdu.

Napomena: sva navedena znanja, metodologije i prakse su stvar pojedinca, osim zadnje prakse (programiranje u paru), što je metodologija za koju je potrebno dvoje; navedena metodologija se uvodi ili spontano, ili odlukom uprave.

IzvoriUredi

  1. narodne-novine.nn.hr, pristupljeno 7. srpnja 2019.
  2. wiki.mozilla.org, objavljeno 6. veljače 2010., pristupljeno 8. srpnja 2019.
  3. docs.libreoffice.org, pristupljeno 8. srpnja 2019.
  4. www.fer.unizg.hr, pristupljeno 8. srpnja 2019.
  5. dev.to, "Hiring failure tolerant personalities", objavljeno 4. srpnja 2019., pristupljeno 8. srpnja 2019.
  6. www.freecodecamp.org, objavljeno 22. kolovoza 2017., pristupljeno 8. srpnja 2019.