Szerokie i wąskie zestawy umiejętności: demistyfikacja umiejętności inżynierii oprogramowania
Opublikowany: 2022-03-11Każdy inżynier oprogramowania posiada zestaw umiejętności składający się z różnych umiejętności, które nabyli. Zestaw umiejętności jest „głęboki i wąski”, jeśli opanowałeś jedną do dwóch umiejętności i niewiele więcej; jest „szeroki i płytki”, jeśli możesz zrobić wszystkiego po trochu, nie będąc ekspertem w żadnej dziedzinie.
Większość z nas jest gdzieś pośrodku z kilkoma mocnymi umiejętnościami, kilkoma przeciętnymi i wieloma lukami. W tym artykule chciałbym omówić szerokie spektrum i argumentować, że zbliżenie się do szerokiego zakresu przyniosłoby korzyści większości programistów.
Szerokość i głębokość są oczywiście względne. Na przykład możesz być ekspertem w tworzeniu stron internetowych lub po prostu w tworzeniu stron internetowych po stronie klienta lub po prostu w JavaScript. Wszystkie te umiejętności są w pewnym sensie „głębokie i wąskie”, ale ta ostatnia jest znacznie węższa niż pierwsza.
Możliwe są także „głębokie i szerokie” oraz „płytkie i wąskie” umiejętności: pierwszy oznacza, że wszyscy chcą cię zatrudnić, a drugi oznacza, że jeszcze nie nauczyłeś się niczego sensownego. Ponieważ nie są one zbyt powszechne, nie warto też ich szczegółowo omawiać.
Rodzaje umiejętności i umiejętności inżyniera oprogramowania
Głębokie i wąskie
Posiadanie głębokiego zestawu umiejętności oznacza, że jesteś ekspertem w co najmniej jednej dziedzinie.
Weźmy SQL: Powiedzmy, że wiesz wszystko o teorii relacyjnych baz danych; zalety i wady MySQL, PostgreSQL, Oracle i SQLite; jak optymalizować zapytania; kiedy i jak zdenormalizować bazę danych itp. Klienci poszukujący tej konkretnej umiejętności będą chcieli zatrudnić Cię JAK NAJSZYBCIEJ i nie bez powodu. Uderzysz w ziemię i zapewnisz wartość, jak mało kto.
Jeśli jednak projekt znacznie się rozszerzy lub zmieni, zostaniesz zastąpiony lub uzupełniony przez programistów o brakujących Ci umiejętnościach. Czy nawet bez większych zmian byłbyś w stanie zaproponować zmiany architektoniczne? Klient może być w lepszej sytuacji z bazą danych NoSQL lub w ogóle bez bazy danych, ale twoja wąska wiedza może skłaniać cię do tych nieznanych opcji.
Szeroka i płytka
Z drugiej strony, jeśli jesteś generalistą, który nie jest ekspertem w dziedzinie domeny, będziesz potrzebować trochę czasu, aby przyspieszyć nowe projekty, zanim osiągniesz maksymalną produktywność.
Aby dać przykład, być może musisz zrobić projekt w Pythonie, a nigdy wcześniej nie używałeś tego języka. Mimo to prawdopodobnie słyszałeś o tym kilka rzeczy (dynamicznych, interpretowanych, wieloparadygmatycznych), a twoje doświadczenie z innymi językami znacznie ułatwi przejście.
Kod, który początkowo piszesz, może nie być Pythonowy (z krotkami, wyrażeniami lub generatorami), ale będziesz wiedział, od czego zacząć. Będziesz robić stałe postępy, a Twoje dobrze przemyślane moduły będzie można później łatwo ulepszyć. Twoje szerokie spojrzenie na technologię podsunie Ci pomysły, które inni mogą przegapić.
Kiedy projekt się zmieni, staniesz się atutem dla swojego zespołu, a nie zobowiązaniem.
Umiejętności w prawdziwym świecie
Pod względem geograficznym wąskie zestawy umiejętności wyglądają jak wysokie góry, a szerokie jak płaskowyże. Używając tej analogii, typowe zestawy umiejętności mogą zawierać kilka gór, tu i ówdzie wzgórze oraz wiele równin.
Przypadkowy programista może być świetny w SQL i Pythonie, OK w programowaniu internetowym i algorytmach, i naprawdę obawia się większości innych rzeczy, takich jak zrzuty rdzenia, serwery OAuth lub aplikacje natywne. Taki programista powinien nadal wykorzystywać swoje obszary specjalizacji, jednocześnie znajdując i wypełniając luki w wiedzy.
Ta strategia prawdopodobnie będzie im najlepiej służyła przez lata.
Dlaczego programiści muszą dywersyfikować swoje umiejętności
Wiele projektów wymaga niepowiązanych umiejętności połączonych w nieprzewidywalny sposób. Podczas gdy inżynierowie o szerokich kwalifikacjach mogą wnieść pożyteczny wkład w większość z nich, zestaw umiejętności eksperta będzie odpowiadał precyzyjnym wymaganiom kilku pracodawców. To niekoniecznie jest problem na krótką metę, ponieważ potrzebujesz tylko jednej pracy, aby zapłacić rachunki.
Jednakże…
Nadmierna specjalizacja jest ryzykowna. Włożenie jajek do jednego koszyka może być w porządku, jeśli potrafisz przewidzieć przyszłość lepiej niż wszyscy inni, ale ta umiejętność jest rzadka i nie ma związku z umiejętnościami technicznymi. Rozważ zapotrzebowanie na umiejętności programowania Windows w naszym tysiącleciu. Lub zadaj sobie pytanie: czy wiele z nas mogło odgadnąć trajektorie Androida, Flasha, Nokii lub Blackberry dekadę temu?

Wreszcie najlepsi pracodawcy wysoko cenią różnorodne umiejętności. Facebook przypisuje nowych pracowników do zespołów dopiero po sześciu tygodniach od ich startu. Google zachęca do transferów wewnętrznych i prowadzi kilka programów rotacyjnych. Nawet jeśli lubisz pracować jako freelancer, otwieranie opcji nie zaszkodzi. Jeśli kiedykolwiek rozważałbyś pracę dla tych firm, musiałbyś być przynajmniej trochę generalistą.
Zakładając, że jesteś przekonany i chcesz zdywersyfikować swoje umiejętności, jak byś to zrobił?
Jak dywersyfikować i doskonalić umiejętności techniczne
Możesz wymienić pieniądze na umiejętności:
- Zaakceptuj niższą stawkę podczas przechodzenia do nieznanego pola. Jeśli jesteś jak zwykle produktywny w 75%, tymczasowa obniżka wynagrodzenia w wysokości 25% jest sprawiedliwa. Niedługo go podniesiesz.
- Wykonuj bezpłatną pracę demonstracyjną z umiejętnościami, które chcesz, podczas ubiegania się o pracę, która ich wymaga. Jeśli okaże się, że nie jesteś gotowy na zmianę, nadal jest to przydatna lekcja.
Możesz także wymienić czas na umiejętności:
- Wkład w projekt typu open source. Otrzymasz porady i potwierdzenie, oddasz się społeczności, a być może zostaniesz zauważony przez potencjalnych pracodawców lub współpracowników.
- Zrób osobisty projekt dla radości, inspiracji i zmiany w codziennej pracy. Na przykład sklonowałem grę Snake przed smartfonem podczas nauki Reacta.
Musisz szukać możliwości uczenia się, ale nie możesz tego robić stale. Do mojego projektu wywiadu Toptal użyłem Node.js i Backbone, z którymi nie miałem dużego doświadczenia. Było fajnie, ale wymagane tempo nauki nie mogło utrzymać się miesiącami.
Idealnie byłoby, gdybyś naprzemiennie stosował długie okresy stabilności (ze stałą produkcją i dochodami) i krótkimi przerwami, gdy rzucasz sobie wyzwanie, by nauczyć się czegoś nowego. To, jak często robisz to drugie, zależy od kilku czynników, takich jak Twoje obecne umiejętności, zapotrzebowanie na rynku i Twoje osobiste cele.
Dlaczego szerokość jest dobra dla pracodawców
Jeśli chodzi o pracodawców, w niektórych sytuacjach zawsze wymagane będą głębokie umiejętności:
- Gdy między pracodawcą a pracownikiem jest niewielkie zaufanie lub zaangażowanie czasowe.
- Kiedy prawdopodobne są katastrofalne skutki (takie jak incydenty dotyczące prywatności lub bezpieczeństwa).
- Kiedy wymagane są umiejętności ezoteryczne.
- Gdy terminy są pilne i nie podlegają negocjacjom.
Mimo to wiele projektów nie spełnia żadnej z tych opcji, a ich kierownicy ds. Rekrutacji powinni brać pod uwagę dobrze uzdolnionych inżynierów. Transfer wielu umiejętności technicznych, takich jak testowanie i dokumentacja kodu, oraz wszystkich umiejętności miękkich (takich jak komunikacja). Odporność ma znaczenie nawet wtedy, gdy produkty nie zmieniają się całkowicie; jeśli część, którą wynająłeś do straganów, generalista może pracować nad kolejnym najwyższym priorytetem.
Biorąc pod uwagę znaczenie szerokich umiejętności, powinniśmy zachęcać programistów do dywersyfikacji i powinniśmy komunikować znaczenie szerokiej wiedzy pracodawcom, którzy mogą być zbyt skupieni na „latach doświadczenia” w różnych dziedzinach i umiejętnościach.
Ostatecznym celem jest historia zadowolonych klientów; oprócz twardych i miękkich umiejętności, świadczy to o zdolności inżyniera do przechodzenia do nieznanych obszarów. Jest to również silna zachęta dla freelancerów, którzy nie zapuszczają się w nowe dziedziny, zanim nie będą na to gotowi.
Osiągnięcie właściwej równowagi
Kiedy szerokie umiejętności są niedoceniane, niektórzy dobrzy programiści są bezczynni, a niektóre dobre projekty mają za mało personelu lub przekraczają budżet. Wymaganie idealnego dopasowania zestawu umiejętności jest jak praca na miejscu, ponieważ utrudnia dopasowanie podaży (wykwalifikowana siła robocza) do popytu (praca nagradzająca).
Nic z tego nie jest argumentem przeciwko ekspertyzie domeny; to zawsze będzie miało znaczenie i zostanie sowicie wynagrodzone. Powinniśmy tylko pamiętać, że szerokie umiejętności również mają większe znaczenie, niż się wydaje.