Seturi de abilități largi vs. înguste: abilități de inginerie software demistificate
Publicat: 2022-03-11Fiecare inginer software are un set de abilități compus din diferitele abilități pe care le-a dobândit. Un set de abilități este „profund și îngust” dacă ați stăpânit una sau două abilități și puțin altceva; este „larg și superficial” dacă poți face puțin din toate fără a fi un expert în vreun domeniu.
Cei mai mulți dintre noi suntem undeva la mijloc, cu câteva abilități puternice, câteva medii și multe lacune. În acest articol, aș dori să discut despre spectrul larg și profund și să argumentez că apropierea de capătul larg ar beneficia de majoritatea programatorilor.
Lățimea și adâncimea sunt, desigur, relative. De exemplu, puteți fi un expert în dezvoltarea web, sau doar în dezvoltarea web la nivelul clientului sau doar în JavaScript. Toate acestea sunt abilități „profunde și înguste” într-un anumit sens, dar ultima este mult mai restrânsă decât prima.
De asemenea, seturile de abilități „profunde și largi” și „superficiale și înguste” sunt ambele posibile: primul înseamnă că toată lumea vrea să te angajeze, iar al doilea înseamnă că încă nu ai învățat nimic semnificativ. Deoarece nu sunt foarte comune, nici nu merită discutate în detaliu.
Tipuri de abilități și seturi de abilități ale inginerului software
Adânc și îngust
A avea un set de abilități profunde înseamnă că ești expert în cel puțin un domeniu.
Luați SQL: Să presupunem că știți totul despre teoria bazelor de date relaționale; avantajele și dezavantajele MySQL, PostgreSQL, Oracle și SQLite; cum să optimizați interogările; când și cum să denormalizezi o bază de date etc. Clienții care caută această abilitate specifică vor dori să te angajeze cât mai curând posibil și cu un motiv întemeiat. Vei da drumul la sol și vei oferi valoare așa cum puțini alții ar putea.
Cu toate acestea, dacă proiectul se extinde sau se schimbă semnificativ, veți fi înlocuit sau completat de programatori cu abilitățile care vă lipsesc. Chiar și fără modificări majore, ați putea sugera modificări arhitecturale? Clientul ar putea fi mai bine cu o bază de date NoSQL sau cu nicio bază de date, dar expertiza dumneavoastră restrânsă vă poate influența împotriva acestor opțiuni necunoscute.
Lat și superficial
Pe de altă parte, dacă sunteți un generalist care nu este un expert în domeniu, veți avea nevoie de ceva timp pentru a dezvolta noi proiecte înainte de a atinge productivitatea maximă.
Pentru a da un exemplu, poate că trebuie să faceți un proiect Python și nu ați mai folosit niciodată acel limbaj. Totuși, probabil ați auzit câteva lucruri despre el (dinamic, interpretat, multi-paradigmă) și experiența dvs. cu alte limbi va face tranziția mult mai ușoară.
Codul pe care îl scrieți inițial poate să nu fie Pythonic (cu tupluri, înțelegeri sau generatoare), dar veți ști de unde să începeți. Veți face progrese constante și modulele dvs. bine factorizate vor fi ușor de îmbunătățit mai târziu. Perspectiva ta largă asupra tehnologiei îți va oferi idei pe care alții le-ar putea rata.
Când proiectul se schimbă, vei fi mai degrabă un atu pentru echipa ta decât o datorie.
Abilități în lumea reală
În termeni geografici, seturile înguste de abilități arată ca munți înalți, iar seturile largi sunt ca platourile. Folosind această analogie, seturile de abilități tipice sunt probabil să prezinte câțiva munți, un deal ici și colo și o mulțime de câmpii.
Un programator aleatoriu ar putea fi grozav la SQL și Python, bine la programarea web și la algoritmi și foarte îngrijorat de majoritatea altor lucruri, cum ar fi depozitele de bază, serverele OAuth sau aplicațiile native. Un astfel de programator ar trebui să continue să-și exploateze domeniile de expertiză, în același timp să găsească și să umple golurile de cunoștințe.
Este posibil ca această strategie să le servească cel mai bine de-a lungul anilor.
De ce trebuie programatorii să-și diversifice seturile de abilități
Multe proiecte necesită abilități care nu au legătură, combinate în moduri imprevizibile. În timp ce inginerii cu calificare generală ar putea contribui util la majoritatea dintre ele, setul de abilități ale unui expert se va potrivi cerințelor precise ale puținilor angajatori. Aceasta nu este neapărat o problemă pe termen scurt, deoarece aveți nevoie de un singur loc de muncă pentru a plăti facturile.
In orice caz…
Supraspecializarea este riscantă. Punerea ouălor într-un singur coș ar putea fi bine dacă poți prezice viitorul mai bine decât oricine altcineva, dar această abilitate este rară și nu are legătură cu abilitățile tehnologice. Luați în considerare cererea de abilități de programare Windows în mileniul nostru. Sau întrebați-vă: ar fi putut mulți dintre noi să ghicească traiectoriile respective ale Android, Flash, Nokia sau Blackberry în urmă cu un deceniu?

În sfârșit, angajatorii de top prețuiesc abilitățile diverse. Facebook nu atribuie noi angajați echipelor decât după șase săptămâni de la începerea lor. Google încurajează transferurile interne și rulează mai multe programe de rotație. Chiar dacă îți place să lucrezi independent, menținerea opțiunilor deschise nu va strica. Dacă te-ai gândi vreodată să lucrezi pentru acele companii, va trebui să fii cel puțin un generalist.
Presupunând că sunteți convins și doriți să vă diversificați abilitățile, cum ați face asta?
Cum să diversificați și să îmbunătățiți abilitățile tehnice
Ai putea schimba bani pentru abilități:
- Acceptați o rată mai mică în timp ce treceți la un domeniu necunoscut. Dacă sunteți cu 75% la fel de productiv ca de obicei, o reducere temporară a salariului de 25% este corectă. Îl vei ridica destul de curând.
- Efectuați lucru demonstrativ neplătit cu abilitățile pe care le doriți în timp ce aplicați pentru locuri de muncă care le necesită. Dacă se dovedește că nu ești pregătit pentru schimbare, aceasta este totuși o lecție utilă de învățat.
De asemenea, puteți schimba timpul pentru abilități:
- Contribuiți la un proiect open-source. Veți primi sfaturi și validare, veți da înapoi comunității și poate fi remarcat de potențialii angajatori sau colegi de muncă.
- Faceți un proiect personal pentru bucurie, inspirație și o schimbare față de munca de zi cu zi. De exemplu, am clonat jocul pre-smartphone Snake în timp ce învățam React.
Trebuie să cauți oportunități de învățare, dar nu poți face asta constant. Pentru proiectul meu de interviu Toptal, am folosit Node.js și Backbone, niciunul dintre acestea nu aveam prea multă experiență. A fost distractiv, dar ritmul de învățare necesar nu a putut fi susținut luni de zile.
În mod ideal, ați alterna perioade lungi de stabilitate (cu o producție și un venit constant) și intervale scurte când vă provocați să învățați ceva nou. Cât de des faceți acest lucru din urmă depinde de mai mulți factori, cum ar fi setul dvs. actual de abilități, cererea de pe piață și obiectivele dvs. personale.
De ce lățimea este bună pentru angajatori
În ceea ce privește angajatorii, abilitățile profunde vor fi întotdeauna necesare în unele scenarii:
- Când există puțină încredere sau angajament de timp între angajator și angajat.
- Când sunt probabile rezultate catastrofale (cum ar fi incidente de confidențialitate sau securitate).
- Când sunt necesare aptitudini ezoterice.
- Cand termenele sunt urgente si nenegociabile.
Cu toate acestea, multe proiecte nu bifează niciuna dintre aceste casete, iar managerii lor de angajare ar trebui să ia în considerare ingineri bine rotunjiți. Se transferă multe abilități tehnice, cum ar fi testarea și documentația de cod, și toate abilitățile soft (cum ar fi comunicarea). Reziliența contează chiar și atunci când produsele nu se schimbă complet; dacă partea pe care ați angajat-o pentru tarabe, un generalist poate lucra la următoarea prioritate.
Având în vedere importanța seturilor largi de competențe, ar trebui să încurajăm dezvoltatorii să se diversifice și ar trebui să comunicăm importanța cunoștințelor largi angajatorilor care ar putea fi prea concentrați pe „ani de experiență” cu diverse domenii și abilități.
Scopul final este un istoric al clienților mulțumiți; pe lângă abilitățile hard și soft, asta dovedește capacitatea inginerului de a trece la zone necunoscute. Este, de asemenea, un stimulent puternic pentru freelanceri să nu se aventureze în noi domenii înainte de a fi pregătiți să facă acest lucru.
Găsirea echilibrului corect
Când abilitățile largi sunt subevaluate, unii dezvoltatori buni sunt inactivi, iar unele proiecte bune sunt cu personal insuficient sau peste buget. A cere o potrivire perfectă a setului de competențe este ca și a solicita munca la fața locului, în sensul că face mai dificilă potrivirea ofertei (muncă calificată) cu cererea (muncă recompensă).
Nimic din toate acestea nu este un argument împotriva expertizei în domeniu; va conta întotdeauna și va fi răsplătit frumos. Ar trebui să ținem cont de faptul că, de asemenea, competențele largi contează mai mult decât este aparent.