Specialisták vs. generalisták, avagy milyen irányba fejlesszük tudásunkat?
Minden szoftverfejlesztő tudástára számos különböző dolgot tartalmaz. Néhányan nagyon mélyen értenek egy adott technológiához, de kevés a rálátásuk egyéb területekre (ők a specialisták), mások sok mindennel foglakoztak egy kicsit, de a tudásuk mindegyik témában relatíve felületes, ők inkább generalistáknak mondhatók. Legtöbbünk valószínűleg valamilyen köztes helyen áll ezen a spektrumon, a mai gyorsan változó környezetben azonban érdemes lehet megfontolni a generalista irány felé történő elmozdulást.
Specialisták: mély tudás egy szűkebb területen
Specialistának tekinthető az, aki szakértő szintet ért el legalább egy területen/fejlesztői környezetben/technológiában/stb. Az ilyen szintű mély ismeretnek az az óriási előnye, hogy a tudás gyakorlatilag készségszintű, így ha egy adott projekt pont pontosan ezt a skillt igényli, ezek az emberek az átlagosnál sokkal gyorsabban állítanak elő magasabb minőségű munkát, és ezáltal komolyabb fizetési igényt is tudnak diktálni.
A specializálódásnak azonban hátránya is van. Ha például a projekt későbbi élete során jelentősen változik, növekszik, és bekövetkezik egy technológiai váltás, hirtelen más fejlesztőkre lehet szükség, akik a hiányzó ismereteket pótolni tudják. Ha a specialisták architekturális kérdésekben is beleszólnak a döntésekbe, gyakran a saját területük felé húz a szívük (hiszen a többi opció ismeretlen), még akkor is, ha az esetleg nem a legjobb választás az adott feladatra.
Generalisták: szélesebb, felületes tudás
Ezzel ellentétben a generalistáknak több időre van szüksége, hogy egy projekten elérjenek egy magasabb produktivitási szintet, hiszen számukra a használt technológiának is van egy tanulási görbéje.
Hogy egy példával éljünk, egy projekten esetleg C#-ot kell használni úgy, hogy előtte még kevés tapasztalatod van a nyelvvel, de dolgoztál már Javával, ami egy hasonló paradigmájú nyelv, környezet, így be tudsz kapcsolódni a munkába. A kódod az elején valószínűleg nem lesz a legmagasabb minőségű, esetleg néhol a C#-tól idegen megoldásokat használsz, de ez aztán idővel javul. Ugyanakkor a rálátásod más területekre olyan perspektívával, megoldási ötletekkel is felruházhat, amelyet esetleg mások nem látnak egyből.
Miért előnyös a diverzifikálás?
A való világban sok projekt igényel egymástól független skilleket, néha egészen váratlan összefüggésekben. Míg a generalisták valamilyen módon hasznosan tudnak hozzájárulni a legtöbbhöz, a specialistákat nézve viszont egyszerre kevés olyan munkáltató van, akiknek az igényei pont lefedik az adott szűk területet. Ez rövid távon nem különösebben probléma, hiszen az embernek egyszerre egyetlen munkahelyre van szüksége, hosszútávon a túlzott specializáció azonban kockázatos lehet.
Egy lapra feltenni mindent csak akkor kifizetődő, ha valaki látja a jövőt; ez pedig lássuk be, meglehetősen ritka tehetség. Gondoljuk csak végig, hány annak idején örökéletűnek hitt technológia szorult háttérbe a Flashtől elkezdve a Blackberryn át a Windows vastagkliens-fejlesztésig?
Végül, de nem utolsósorban, a top cégek általában a sok területet átívelő tudást díjazzák, és gyakran rotálják az emberek a különböző teamek között, pontosan azért, hogy generalistává képezzék őket. Emiatt érdemes folyamatosan side projektekkel vagy open source munkákkal új technológiák felé kacsintgatni.
Ajánlott a hosszabb, stabil időszakokat (ahol a jól ismert technológiákkal kiszámítható munkát állítunk elő) olyan periódusokkal váltogatni, ahol rövidő idő alatt próbára tesszük magunkat egy-egy új tanulnivalóval a folyamatos fejlődés érdekében.