Ja imam dosta drugacije kriterije kvalitetnog programera od Time treka.
Za mene je dobar programer ne onaj koji zna 5, 10 i 10+ jezika. Dobar programer po meni cak ne mora da zna nijedan programski jezik, ako bi postojala neka druga mogucnost da se ustanovi da li taj programer moze probleme da rijesi na najoptimalniji moguci nacin, da rijesenje problema formulise tako da ga procesor sa najmanjim mogucim brojem taktova rijesi.
Ako bi taj prvi kriterij ispunilo recimo nekih 2% programera, od ta 2 procenta samo ce jedan veoma mali dio biti dobri software-inzinjeri.
Svakodnevnica svakog software-inžinjera je da radi sa stotinama i hiljadama modula, koji obuhvataju, hiljade, stotine hiljada, i milione redova koda. Biti u stanju sav taj Code tako organizovati da kompleksnost bude minimalna, da medjusobna zavisnost pojedinih modula bude minimalna, da kod bude dovoljno fleksibilan tako da ne samo da dopusta prosirenja, vec da su prosirenja i adaptacije koda moguce bez da se postojeci kod mijenja, da se izbjegne redundantan kod, da svaki modul ima tacno definisane zadatke koje obavlja, i odnos prema "vanjskom svijetu", da se razmislja apstraktno i da se pise apstraktan kod i genericki algoritmi, te da neki autsajder dok posmatra kod stekne utisak da svaki modul (ili klasa) predstavlja jednu ulogu ili jedan karakter neke price koja povezuje sve te likove... To je umjetnost koja granici sa genijalnoscu, i u tome se ocituju inzinjerske sposobnosti.
Znaci za mene biti dobar programer znaci biti dobar software-inžinjer, a biti dobar SI znaci formulisati rijesenje na najjednostavniji moguci nacin, i organizacija koda koja maksimalno ispunjava sve kriterije kvalitetnog software. Da li ce taj SI rijesenje problema formulisati u ovom ili onom jeziku, je po meni potpuno nebitno.
Ja kad razmisljam o software-u, ne mogu misliti samo na par funkcija ili par klasa, nego na hiljade klasa i modula koje cine aplikaciju, te jos vise hiljada malih problema za koje moraju da se napišu algoritmi. U skladu sa time je i moj stav u vezi vrednovanja programera.
Dobro je imati na umu 4 osnovna principa sistema (to je poznato onima koji su radili predmet "teorija sistema"), posto je naravno i software jedan sistem, a i ti principi sluze za ocijenjivanje sistema, pa tako i software:
-
modularitet - znaci srodne funkcije cija svrha je izvrsavanje nekog zadatka se nalaze u zajednickom modulu, a zavisnost od ostalih modula je svedena na minimum, u idealnom slucaju svaki modul komunicira samo sa jednim modulom
-
hijerarhija - uvijek postoji jedna kontrolna instanca koja upravlja i koordinise rad podredjenih instanci, i ta instanca ima nadredjenu instancu, itd.. - piramidalna organizacija
-
blackbox princip - manje vise znamo o cemu se radi, znaci bitno je da znamo STA modul radi, a ne KAKO to radi. Primjer: funkcija za racunanje kosinusa ocekuje kao input brojcanu vrijednost ugla, a rezultat je cos(x). Kako je ta funkcija izracunala cos(x) ne treba da nas interesuje
-
mogucnost upravljanja izvana - znaci svaki modul mora da ostavi otvorenu mogucnost da se izvana kontrolise njegovo ponasanje
Prog. jezik je samo alatka kojom rijesavamo probleme. Na IT olimpijadama se ne ocijenjuje koliko ko zna jezika, nego ko najbolje rijesava probleme, a podrazumijeva se da svi znaju prog. jezik koji se koristi na olimpijadi

Mene recimo ne moze oduseviti ako mi neko pokaze neki novi konstrukt iz nekog prog. jezika za koji nisam znao. Ali kad vidim kako je neko masivan problem rijesio na elegantan i toliko transparentan nacin, to mi dodje kao da sam pogledao maestralno izvodjenje nekog muzicara.