Razlika između inačica stranice »Programer«

Dodana 8.173 bajta ,  prije 1 godinu
dopuna
m (Bot: migracija 1 međuwiki veza sada dostupnih na stranici d:q5482740 na Wikidati)
(dopuna)
'''Programer''' - zanimanje koje uključuje zadavanje niza instrukcija u formaliziranom [[programski jezik|programskom jeziku]] uređaju ([[računalo|računalu]]) koji u ovisnosti o sadržaju instrukcije obavlja neku radnju.
 
Niz instrukcija zovemo izvornim kodomkô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|Računarstvo]] je znanost koja uči programere o umijeću samog programiranja i stvaranja računalnih programa.
 
== Klasifikacija ==
 
Nacionalna klasifikacija zanimanja iz 2010. godine<ref>[https://narodne-novine.nn.hr/clanci/sluzbeni/2010_12_147_3736.html narodne-novine.nn.hr], pristupljeno 7. srpnja 2019.</ref> 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 aplikacije|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 [[Windows]]ima. Doduše [[Mozilla Firefox]] i [[Mozilla Thunderbird]] su odabrali drugi put, na Linuxu rabe GTK, ranije GTK2, danas GTK3<ref>[https://wiki.mozilla.org/index.php?title=Category:Backends&oldid=200321 wiki.mozilla.org], objavljeno 6. veljače 2010., pristupljeno 8. srpnja 2019.</ref>, na Macu i Windowsima rabe ''native'' grafičke toolikite. Sličan je izbor [[LibreOffice]], koji ima vlastiti ''vcl'' toolkit.<ref>[https://docs.libreoffice.org/vcl.html docs.libreoffice.org], pristupljeno 8. srpnja 2019.</ref>
 
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 [[Basic]]a (najčešće Microsoftov VisualBasic, za računovodstvene programe), [[Pascal]]a (Delphi), do [[PHP]]-a, [[Java|Jave]], [[Python]]a 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 programera ==
 
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 isti stvar nekoliko puta.
 
Programer koji nije pedantan će vječno istjerivati bugove. Ovo je danas olakšano time što su danas [[linter]]i č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 [[Upravljanje izvornim kôdom|verzioniranje programskoga kôda]]
 
== Napredne programerske sposobnosti ==
 
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:<ref>[https://www.fer.unizg.hr/predmet/objobl www.fer.unizg.hr], pristupljeno 8. srpnja 2019.</ref>
 
{{citat|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:
 
* sposobnost za povremeno neustrašivo testiranje i promjenu sustava<ref>[https://dev.to/veebuv/hiring-failure-tolerant-personalities-a64 dev.to], "Hiring failure tolerant personalities", objavljeno 4. srpnja 2019., pristupljeno 8. srpnja 2019.</ref>
* [[programiranje u paru]]<ref>[https://www.freecodecamp.org/news/the-benefits-and-pitfalls-of-pair-programming-in-the-workplace-e68c3ed3c81f/ www.freecodecamp.org], objavljeno 22. kolovoza 2017., pristupljeno 8. srpnja 2019.</ref> - [[:en:Pair programming|''Pair programming'']]
 
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.
 
== Izvori ==
 
{{izvori}}
 
[[Kategorija:Programsko inženjerstvo]]
[[Kategorija:Zanimanja]]
 
[[arz:مبرمج]]
[[de:Programmierer]]
[[hi:प्रोग्रामर]]
[[ka:პროგრამისტი]]