Niewątpliwie każdy, kto postawi sobie za cel zostanie programistycznym poliglotą, wyrusza w tę podróż wyposażony w inny zestaw umiejętności. Moja dotychczasowa wiedza w zakresie języków programowania to efekt połączenia kilku lat pracy zawodowej, studiów oraz samodzielnej nauki „po godzinach”. Niektóre technologie znam lepiej, inne gorzej, jednak w żadnej z nich nie jestem póki co ekspertem. Dążę do bycia specjalistą w tematach, które na tę chwilę interesują mnie najbardziej, ale jednocześnie zamierzam poszerzać swoją wiedzę i zdolności w jak najszerszym zakresie.

To, co chcę osiągnąć na pierwszym etapie, określane jest fachowo jako T-shaped skills (umiejętności T-kształtne). Jest to taki profil posiadanych umiejętności, który odznacza się wyspecjalizowaniem w jednej dziedzinie (pionowa linia w literze T) oraz ogólną wiedzą w dużej liczbie innych tematów (linia pozioma). Brak owych szerokich umiejętności z wielu różnych dziedzin można nazwać modelem I-shaped, zaś, kontynuując literkowe analogie, specjalizację w dwóch dziedzinach (i dużą wiedzę ogólną) określimy jako π-shaped, natomiast eksperta w aż trzech tematach jako m-shaped.

Kształty modeli umiejętności (źródło)

Spojrzenie na powyższe rysunki skłonić może do zastanowienia się nad kształtem swoich obecnych umiejętności. Jak długie są wertykalne i horyzontalne linie naszych skilli? W którym kierunku chcemy je modyfikować? Dysponowanie szeroką wiedzą to z pewnością ogromna zaleta, ale dopiero dołączając do tego dogłębną specjalizację w określonej dziedzinie możemy stać się ekspertami, z których zdaniem liczą się inni.

Przechodząc do sedna niniejszego wpisu, chciałbym uczynić w nim krótkie podsumowanie mojego punktu wyjściowego. Jeśli miałbym dziś wymienić języki programowania, w których czuję się mocny, które uważam za swoje ulubione i które plasują się wysoko na liście kandydatów technologii, z których wybieram rozpoczynając tworzenie potrzebnych mi aplikacji, to byłyby to dwa języki: C++ oraz Python. Staram się aktualizować swoją wiedzę ich dotyczącą, być na bieżąco z nowymi standardami oraz literaturą tematyczną. Mogę powiedzieć, że w tych technologiach (zwłaszcza zaś w C++) osiągnąłem już taki etap, który pozwala mi widzieć ten niesamowity ogrom wiedzy, której jeszcze brakuje mi, bym mógł szczerze nazywać się specjalistą.

Są też takie technologie, z którymi sympatyzuję, w których miałem okazję pracować więcej niż tworząc podstawowe heloł-łordy, ale które z pewnością znam słabiej niż dwie wymienione powyżej. Do tej grupy zaliczyłbym przede wszystkim Javę oraz C.

Kolejny zbiór języków to te, z którymi zapoznałem się w stopniu minimalnym i mam chęci rozwinąć w przyszłości swoje umiejętności z nimi związane. W tej kategorii znajdują się: Perl, Bash, Ruby, Scala, Go, SQL, a także Asembler.

Ostatnia grupa to technologie, z którymi miałem do czynienia również na poziomie jedynie podstawowym, ale pałam do nich otwartą niechęcią lub mam stosunek co najwyżej neutralny. Będą to: JavaScript, PHP, Fortran, PostScript oraz Pascal.

O tych językach w najbliższym czasie z pewnością NIE będę pisał. Moim pierwszym celem jest bowiem poszerzenie programistycznej wiedzy ogólnej. Sięgnę zatem do tych technologii, w których wcześniej nie napisałem nawet linii kodu. Obiecuję też, że nie będę unikał i takich języków, które budzą we mnie negatywne odczucie i do których nie jestem dobrze usposobiony.

Powyższa lista stanowić będzie bazę do porównań, które będę przeprowadzał co jakiś czas, weryfikując tempo wzrostu mojej wiedzy programistycznej. Zachęcam, by wraz ze mną wyjść poza to, co (przynajmniej szczątkowo) znajome i pokusić się na wyprawę w dzikie ostępy informatyki. 🙂