Budi rockstar programer

5 min

Da odmah razvejem očekivanja: svaka reč iz naslova je pogrešna.

Transkript mog ne-baš-sjajnog govora sa poslednje OpenIT konferencije. Namenjen mladima, pa stoga naivno optimističan. Opaska: video zapis sa konferencija je poput porno filma - mnogo bolje je sve uživo, a nikada zadvoljavajuće za premotavanje.


Ako nekoga pitate kako se postaje programer, reći će vam da je neophodno savladati neki programerski jezik.

Tako nekako mi programeri započinjemo razvojni put. Deluje smisleno: biramo programerski ekosistem koji nam najviše leži i otiskujemo se u učenje osnovnih koncepata.

Brzo se dolazi do važnog zaključka: programski jezik se jedino može učiti (i naučiti) njegovom upotrebom. Nema prečica; knjige, tutorijali, kursevi, formalno obrazovanje - pomažu, ali na kraju sami morate sve to utkati u vaše znanje. Što više raznovrsnog koda vam “prođe kroz prste”, to više stičete dragoceno iskustvo. Ono što vredi nije poznavanje programskog jezika, već iskustvo stičeno programiranjem.

To važi za sve veštine kojima se čovek bavi. Upravo tako: programiranje jeste veština.

Ovakav pogled nas usmerava ka pragmatičnom pristupu učenju - brušenje kamena veštine programiranja. Većina stvari o kojima učimo su samo nekakve prakse (bolje ili lošije); i kao takve nisu apsolutne - to znanje primenjujemo na sebi sopstveni način. To je ujedno lepota programiranja, iskazivanje ideja kroz programerska rešenja, ali i njegova teža strana, jer do tih ideja treba doći.

Stav o programiranju kao veštini nas tera da razmišljamo o problemu koji rešavamo. Fokus na problem je važna komponenta softverskog razvoja. Ona se uči: treba razlikovati konceptualna rešenja od zakrpi. Tek tada možete preuzeti gotova softverska rešenja i razumeti kada se koriste; a ne slepo pratiti trendove ili šta tehnološke firme zapovedaju.

Ilustracija: kada na razgovoru na posao pitam kandidate kako stiču znanje - niko mi nije odgovorio: “pišem kod”. Svi pominju samo medijume: knjige, konferencije, kanale, tutorijale. Još jedan primer na koji sam osetljiv: obrasci programiranja (design patterns). Čini se da je bitno naizust znati im imena i implementacije, često se traže na razgovorima za posao. Takvo znanje, učenje kataloga - nema veliku vrednost u programiranju.

Umesto poznavanja kataloga, suština je poznavati problem koji iziskuje potrebu za obrascima. I potom taj problem - ovo je važno - znati ukloniti. Kada razmislite, obrasci su samo zakrpe problema. Bitne su, drže strukturu, ali nisu rešenje.


Izneo sam važan koncept: fokus na rešavanje problema. Da ponovim: učenje veštine programiranje je puko savladavanje alatke. No to nije dovoljno za njegovu upotrebu. Vrednost programiranja, odnosno alata, leži u njegovoj upotrebi - tačnije, u upotrebi za rešavanje problema.

To znači da ne posmatrate sebe kao programere. Volim da kažem da treba postati: inženjer. To je takav poziv koji je usmeren na pragmatično rešavanje problema. Inženjer zahteva nešto od sledećeg:

Da ponovo odgovorim na pitanje sa početka: kako se postaje dobar inženjer? Savladavanjem veštine komunikacije. Programiranje u timu je zapravo samo komunikacija sa drugim članovima kroz kod. Zakon koji je nazvan po Melvin Konvejevu to naglašava: dizajn softverskog sistema je kopija komunikacione strukture tima i organzacije.

Vi niste programeri. Vi postajete inženjeri. Rešavate probleme i donosite vrednost. Nebitno je na koji način poslujete - softversko inženjerstvo se bavi rešavanjem problema i donošenjem vredosti.


Da se vratimo na kamen iz naslova. Možete da ga brusite, jačate; međutim šta se dešava kada kamen stavimo u vodu? Ma koliko taj kamen vešt bio, on će potonuti. Bitno je, dakle, gde i kako postavljamo naš kamen - želimo da bude osnova izgradnje, a ne da završi na dnu vode.

Kamen je paralela za softversko inženjerstvo. Mora da nam bude jasna njegova poziciju u svetu oko nas. Inženjerstvo je presek dva domena: Znanja i Korisnosti. Te obratite pažnju: inženjerstvo nije nauka, nije dizajn, nije umetnost. Oni su takođe preseci drugih domena; ali ni jedno od njih nema ulogu kao softversko inženjerstvo.

O čemu pričam? O vrednostima. Danas je tehnologija svuda. Međutim, ta ista tehnologija ne pospešuje naše živote na način kako bi mogla. Tehnologija je zamišljena kao produžetak čoveka i njegovih mogućnosti. Danas se u vašim džepovima nalaze uređaji koji su višestruko moćniji od računara koji je odveo čoveka na Mesec. I kako koristimo tu moć? Tako što slikamo kućne ljubimce ili beskonačno skrolujemo tuđe trenutke?

Moć tehnologija koje koristimo u softverkom inženjerstvu je danas tolika, da se od inženjera zahteva nešto više nego od što je to slučaj u ostalim domenima. Da bi rešavali probleme, moramo poznavati probleme. A to zahteva izlazak iz udobnog kruga, da se osmeli da neprestano uči i kritički sagledava svet oko sebe.

Mi, kao softverski inženjeri, možemo pružiti svetu puno, ali ga moramo prvo razumeti. Mi smo Znanje i Korisnost, tu smo da osnažimo ljudska delovanja. Mi smo tu za pekare, učitelje, lekare, ekologe, umetnike, glumce, prodavce, bankare, komšije, porodice, društvene probleme, socijalne nejednakosti… naša dužnost je da razumemo i kritički sagledavamo svet oko nas, uočavamo probleme i vraćamo vrednosti nazad kroz rešenja. Jer svetu ne treba još jedno “Like” dugme. Svetu trebaju rešenja.

Da sumiram:

Budite programer iz hobija, softverski inženjer po vokaciji, a neprestano sagledavajte tehnologiju kroz moral i etiku.

🧧
Nisam definisan svojim stavovima. Stavove usvajamo, menjamo, nadograđujemo, ali oni ne čine nas same. Manje je važno da li se slažemo, koliko da se razumemo.