Nastoletni
Programiści

Logo Nastoletnich Programistów

Wyniki ankiety, czyli jak wygląda (nie)przeciętny nastoletni programista. Część 1.

Mała retrospektywa: pamiętacie co zostało opublikowane na facebookowej grupie NP 11 marca? Prawdopodobnie nie. Skąd to wiem? Z wyników ankiety, którą wtedy opublikował jeden z administratorów. A mój post postara się ją wam nieco przybliżyć. Zapraszam!

Nazywam się Adam Jachowicz, jestem z Nastoletnimi od ich początków (dołączyłem do grupy 3 maja 2015, mogę się już chyba nazywać weteranem?). Większość z Was kojarzy mnie (jeżeli w ogóle, bo apogeum aktywności osiągnąłem bardzo dawno) z bycia głównym redaktorem bloga http://programistycznepieklo.pl. No i jak możecie się domyślać – to mnie przypadło podsumowanie wyników ankiety. Sama przyjemność!

Przeciętny członek NP jest mężczyzną (cóż za zdziwienie), ma 15-17 lat. Jego głównym obszarem zainteresowań jest desktop, zwykle ma też jakieś doświadczenie z webdevelopmentem. Zna też C++, oprócz tego zwykle PHP i JS, rzadziej Javę, SQL i C#. Nigdy nie pracował ani nie wykonywał żadnego zlecenia. Ocenia swoją satysfakcję z programowania na 8.5 w skali od 1 do 10. Jeżeli przyszedłeś tylko po to co obiecywał tytuł – to tyle, możesz już zamknąć tę stronę.

Jeżeli jednak chcesz zobaczyć coś więcej…

Analiza danych pochodzących od respondentów – czyli coś dla chcących WIĘCEJ

Czas odpowiedzieć na pierwsze pytanie jakie może nasuwać się uważnemu czytelnikowi – skąd wiem, że większość osób będących członkami NP nie wiedziało o ankiecie? Albo konkretniej, że większość osób jej nie wypełniła?

Ankietę (na dzień 01.04.2017) wypełniło 388 osób (ale pod uwagę wziąłem tylko 372, dalej okaże się czemu) – to mało jak na 5754 członków… Tak na dobrą sprawę to bardzo mało – dokładnie 6.47% grupy. Można by dyskutować, czy taka próbka nadaje się do analizy, ale to jedyne do czego mam dostęp, więc… ¯\_(ツ)_/¯

Płeć

Myślę że nie będzie tu niespodzianki, więc nie ma się co rozpisywać:

Wyk. 1: rozkład płci.

W sumie może i jest co napisać na ten temat… Oczywiście no offence i te sprawy, ale… kobiety wyglądają trochę jak błąd statystyczny ( ͡° ͜ʖ ͡°)

Wiek

Wyk. 2: Rozkład wieku

Tu już na szczęście robi się trochę ciekawiej. Znaczy, no, kobiety nadal wyglądają jak błąd statystyczny ( ͡° ͜ʖ ͡°) ale widać tu już jakieś ciekawsze powiązania. Przykładowo, kształt wykresu powinien być dla niektórych znajomy… Tak, to bardzo ładna krzywa normalna. Co prawda przesunięta nieco w stronę młodszych, ale nadal normalna.

Przykład dystrybucji normalnej zmiennych losowych.

Krzywa normalna (dzwonowata) – jedna z ważniejszych krzywych w statystyce ze względu na jej częste występowanie w naturze (m. in. krzywa wykresu obrazującego rozkład wartości IQ czy wzrostu lub nawet błędu pomiarowego). Posiada pewne ciekawe właściwości, ale ich tłumaczenie nie wchodzi jednak w zakres tego artykułu.

Jest jeszcze jedna rzecz która powinna się rzucić w oczy po analizie etykiet słupków… Jeżeli to zauważyłeś – moje osobiste gratulacje. Jeżeli nadal tego nie widzisz – istnieje słupek 20 jak i „>20”, ale pary „13” i „<13” już nie widać. Jak to się stało? No, nie chcę przywoływać nazwisk i imion, ale pewien z administratorów którego imię zaczyna się na A i kończy na lbert zapomniał dodać takiej opcji w ankiecie ( ͡° ͜ʖ ͡°) No nic, na potrzeby tego artykułu musimy założyć że każde „<13” jest tak naprawdę odpowiednikiem „<14”.

Technologia

W ankiecie trzeba było wybrać technologię na dwa sposoby – podać swoją główną oraz wszystkie znane technologie. Najpierw zajmiemy się tą główną:

Wyk. 3: Rozkład głównej technologii

Wartości procentowe odnoszą się do ogółu respondentów.

Co tu widzimy? Połowa członków NP jako target swoich programów wybiera głównie desktop, a 1/3 pisze stronki. Także nic zaskakującego, w końcu C++ i JS jest jednym z najbardziej ooops, jeszcze tu nie dotarliśmy 😉 Pod Innymi kryją się odpowiedzi takie jak:

konsolka,
Inne, (???)
asm, ale reverse engineering różnych technologii,
Teamspeak.

Skoro mamy dane dotyczące wieku jak i dane dotyczące technologii, możemy je skorelować – to dwa z ciekawszych wykresów:

Jak widać – wraz z wiekem więcej osób dryfuje z desktopa do innych technologii. Czemu tak się dzieje? Ano dlatego, że im młodszy jesteś, tym większe prawdopodobieństwo że dopiero się uczysz. A od czego zwykle zaczynają młodzi adepci programowania? Od C++. Potem dopiero zaczyna się odkrywanie technologii która jest ci bliska – najpierw zawsze jest ten proces nauki. Nie dziwi też to że nie przechodzą do webdevu – tak właściwie to następuje tu rotacja w obie strony, ponieważ drugim zestawem języków od którego często zaczynamy przygodę z programowaniem jest HTML, CSS i JS. A czemu wzrósł udział mobilek i mikrokontrolerów, i to akurat względem desktopa? Proste – programując na desktop, łatwiej jest się potem przerzucić na którąś z tych technologii niż na webdev.

Ten trend łatwiej będzie zauważyć na tym wykresie:

Wyk. 5: Porównanie procenta grup wiekowych wybierających Desktop/Web jako ich główną technologię.

Wartości procentowe obu słupków przy wieku nie sumują się do 100%, ponieważ są to wartości żywcem wyciągnięte z takiego jak powyżej wykresu kołowego – ważne są tu różnice w wysokości słupków, które wraz z wzrastającym wiekiem utrzymują w miarę stały trend malejący. Błędy, małe skoki w górę czy wielki skok nie pasujący do tezy przy grupie 20 czy >20 jest spowodowany wielkością próbki – tak jak mówiłem, jest trochę za mała by wyciągać z niej dokładne wnioski bezpośrednio, jednak pewnych rzeczy jako człowiek z doświadczeniem w takich rzeczach mogę się domyślić na podstawie nawet i takich danych 🙂

Wyniki drugiego związanego z technologią pytania nie powinny być zaskoczeniem po przeczytaniu wcześniejszego tekstu:

Wyk. 6: Procent wybierających dane technolgie.

Tutaj wartości nadal nie sumują się do 100%, ale tu powód jest prostszy – pytanie było pytaniem wielokrotnego wyboru i dotyczyło wszystkich znanych technologii. Ogólnie to nic ciekawego, ale mogę przywołać to co tym razem znalazło się pod pojęciem Inne:

Skryptowanie gier,
LUA (Multi Theft Auto: San Andreas),
dużo, (???)
Serwery, bazy danych,
Games,
Teamspeak,
STM32.

Po technologii czas na to co dla mnie osobiście jest najciekawszym zbiorem wektorów danych…

Języki

Zanim pokażę pierwszy wykres związany z tym działem muszę was ostrzec – praktycznie każdy wykres tutaj może dla was wyglądać tak samo. Muszę was jednak zapewnić że nie są takie same – wrażenie takie może się wziąć z tego, że próbują one pokazać jak najwięcej danych w jak najmniejszej/najefektywniejszej/najczytelniejszej postaci. No i kolorki są podobne. 🙂

Nie przedłużając, pierwszy kolos:

Wyk. 7: rozkład poziomu znajomości dla każdego z języków w ankiecie

Może na początku wytłumaczę co dokładnie ten wykres tak właściwie przedstawia. Po lewej mamy języki. Na dole jest liczbowa reprezentacja zaawansowania – wygodniej było się z tym obchodzić w kodzie, myślę że jest też bardziej przejrzyście na wykresach. Cyfry oznaczają:

  • 0 – Nie znam,
  • 1 – Nowicjusz,
  • 2 – Amator,
  • 3 – Średnio zaawansowany,
  • 4 – Zaawansowany,
  • 5 – Ekspert.

W ten sposób mogę traktować zaawansowanie w języku jako ciągłe, liniowe pasmo a nie jako zbiór 6 stopni – wygodniej 🙂

Wykres na górze przedstawia procent wszystkich respondentów mających dane zaawansowanie w danym języku. Przykładowo: 83 procent wszystkich respondentów nie zna Assemblera, 11 procent w jakiś sposób się z nim zetknęło ale tylko około 6 procent może się pochwalić pełniejszą wiedzą.

Możecie zauważyć, że na wykresie procenty dla Assemblera sumują się nie do 100, a do 101 procent – powodem są błędy zaokrągleń, niestety :/

Oprócz tego wykres posortowany jest tak, że język z największym średnim poziomem znania jest na górze, a ten z najmniejszym – na dole. Dzięki temu bardzo łatwo jest zobaczyć jakie języki są najpopularniejsze wśród członków naszej grupy – są to C++PHPJSSQLC#JavaPython C. Trzeba jednak nadmienić że C++ ma nad nimi znaczącą przewagę, jak zresztą widać na wykresie. Można powiedzieć że języki od Perla w dół są językami nieznanymi na NP.

Osobiście mi trochę smutno że języki nowatorskie czy niestandardowe (Haskell, Go, Clojure, Scala, Groovy) lub specjalistyczne (Prolog, R) są pomijane przez członków NP – wiadomo, rzadko przyjdzie pisać większy projekt z ich udziałem ale ich znajomość może wiele rzeczy wyjaśnić, pokazać inne podejście do programowania. Ale cóż, co ja mogę ¯\_(ツ)_/¯

Co ciekawe, mamy raczej skromnych programistów, mało osób zaznaczało w ankiecie ekspercki poziom znania języka. Nawet w przypadku C++ było to tylko 3 % ankietowanych. Kochani, więcej pewności siebie ^^

Następny wykres (Wyk. 8) może być ciekawszy ze względu na to, że pokazuje on średnią znajomość danego języka wyrażoną w procentach w danej grupie wiekowej – oczywiste jest że wartości nie mogą się tu sumować do 100 %.

Wyk. 8: Średnia znajomość danego języka wśród danej grupy wiekowej (%)

Na tym wykresie bardzo ciekawie widać jedną rzecz – to, że z wiekiem umiemy coraz więcej. Niby taki banał, a tak ładnie zwizualizowany 🙂

Ciekawym ewenementem są członkowie w wieku 20 i >20 lat – zacznijmy może od dwudziestek.

Z danych jednoznacznie wynika… że są głupsi. Tak naprawdę to jedyny rocznik który nie podąża za trendem wzrostu wiedzy wraz z wiekiem. Czym może być to spowodowane? Właściwie to nie mam bladego pojęcia. W następnym wykresie ten spadek będzie widoczny jeszcze bardziej.

Chociaż właściwie to jest jedna rzecz w której trzymają się trendu – w językach, które zwykle są ignorowane przez programistów ;-; Ciekawe, prawda? Popularność języków wśród danych grup wiekowych także będzie przedmiotem jednego z następnych wykresów, więc będzie można ładnie zobaczyć tę zależność.

Osoby posiadające ponad 20 lat na karku są za to z niektórymi językami aż za bardzo do przodu (Pascal, Swift). Pierwszy z nich łatwo wytumaczyć – starsze roczniki często w szkołach uczyły się Pascala czy Delphi więc konsekwencją tej nauki musi być wyższy poziom poznania języka. Swift za to nie jest już taki banalny do wytłumaczenia – co tu się stało?

Na wynik wpłynęło to, że >20 to większa zasięgowo grupa niż na przykład takie 14. Wśród osób zaznaczających tą odpowiedź mogły znajdować się zarówno dwudziestojedno jak i dwudziestopięciolatkowie. A jeżeli zakładamy że z wiekiem wiedza rośnie, to w wynikach grupy >20 nie ma nic dziwnego.

Czternastolatków przywołałem tu nie bez przyczyny – z jakiegoś dziwnego powodu są za bardzo zaawansowani w C# jak na swój wiek… Ma ktoś jakiś pomysł jak to wyjaśnić? Komentarze są wasze.

Co ciekawego jeszcze widzimy? Dziewiętnastolatkowie wychodzą poza szereg jeżeli chodzi o języki inne niż C++. To z kolei może oznaczać dwie rzeczy:

  • Nastolatkowie po skończeniu liceum nabywają dużo wiedzy programistycznej, albo…
  • …po prostu nie wyłapałem wszystkich trolli.

Pamiętacie co pisałem na początku? Z 388 odpowiedzi wziąłem pod uwagę tylko 372. Dlaczego? Właśnie z tego powodu – dane od trolli bardzo zakrzywiały różne korelacje/wyniki.

Myślę że można już przejść do kolejnego, obiecanego wykresu:

Wyk. 9: Średnie zaawansowanie w programowaniu w zależności od wieku

Cyferki mało tutaj znaczą – ten procent to średnia z kolumn z poprzedniego (Wyk. 8) wykresu. Ważne są zależności i trendy, które tutaj widać bardzo wyraźnie.

Pierwsze co się rzuca w oczy – wyraźny ubytek przy słupku opisanym 20. Wcześniej już o tym pisałem – na tym wykresie można to zauważyć dokładniej. Jakieś pomysły? Znaczy, to zawsze może być błąd statystyczny, bo przy grupie badanych równej 13 osobom… No ale o małej wielkości próbki już pisałem… 😛

Skok u dziewiętnastolatków również widać tutaj doskonale, przyczyny również opisałem wcześniej. Ten wykres służy właściwie podsumowaniu danych z tamtej mapy ciepła, nic szczególnego za sobą nie niesie.

W tym momencie podczas pisania tego artykułu się zadumałem. Czy ktokolwiek dojdzie do tego momentu? – myślałem. Licznik słów przekręcił się na magiczną liczbę 1720. Była we mnie nutka zwątpienia, ale także i ciekawości. Jeb^CChędożyć to! – powiedziałem w myślach. I zacząłem pisać dalej, zostawiając pytania o sens mojej egzystencji gdzieś na później.

Wyk. 10: Rozkład znajomości języków w danych grupach wiekowych.

Kolejny wykres również jest mapą ciepła. Znowu wartości w rzędach nie sumują się do 100%. Czemu więc? Wykres przedstawia procentową znajomość danego języka w danych grupach wiekowych.

W tym wykresie ważne jest, żeby przedstawić założenia na których opierałem się żeby zaliczyć dany język do „znanego” przez respondenta czy też nie. Problem w tego typu wykresach jest taki, że nie da się jednoznacznie, obiektywnie określić czy dany język jest przez kogoś znany. Bo jak określić znajomość?

Teoretycznie mogę nie programować w danym języku, ale mimo to znać go, chociażby tylko z nazwy. Chyba nie będzie sporów, gdy powiem że znam taki język? Niestety w tej ankiecie nie miałem szansy wdrożyć takiego podejścia przez sposób zadania pytania o języki – ewidentnie kładło ono nacisk na poziom poznania języka, a nie na jego znajomość.

Musiałem więc posłużyć się uproszczoną metryką znajomości i założyć, że każdy kto zaznaczył przy danym języku poziom zaawansowania przynajmniej 1 (Nowicjusz) zna ten język, a reszta która zaznaczyła 0 tego języka nie zna.

Przechodząc do analizy… Jest taki język który zna każdy. Niezależnie od grupy wiekowej. Małe odchyłki w liczbach właściwie nic nie znaczą, mapa ciepła mówi sama za siebie – pasek przypisany C++ jest w całości gorący.

Nasz poprzedni fenomen, dziewiętnastolatkowie, nadal wyróżniają się w tabeli, głównie za sprawą języków stricte webowych – JS’aPHP. Co ciekawe – kosztem Javy.

Starsi, grupa >20 jak można było przewidzieć cechuje się najszerszą znajomością języków. Można też zobaczyć że moja hipoteza o Pascalu potwierdza się – na mapie widać, że starsze roczniki umieją go w znacznie większym procencie osób niż inne.

Dwudziestolatkowie mają z kolei problemy z… C#’em. W sumie oni mają ze wszystkim problemy (jak mogliśmy zobaczyć na wcześniejszych wykresach)… Ale to i tak dziwne jak na ogół. Za to znają AssembleraHaskella na najlepszym poziomie ze wszystkich badanych grup wiekowych – zawsze coś ( ͡° ͜ʖ ͡°)

Wyk. 11: Rozkład znajomości języków w zależności od głównej technologii.

Ostatni już wykres (Wyk. 11) pokazuje rozkład procentowy znajomości danego języka w zależności od wybranej technologii głównej.

Skróty na dole pochodzą od nazw technologii:

  • W – Web,
  • D – Desktop,
  • M – Mobile,
  • A – AVR/ARM.

Widać tu pewne silne trendy – przykładowo, 79% wybierających AVR/ARM zna C. Nie powinno być tu zaskoczenia, tak samo jak przy fakcie posiadania największej procentowej znajomości C++ wśród wszystkich grup technologicznych. Znają też dobrze PythonaPHP JS’a. Co do tego PHP i JS’a – podejrzewam że wynika to z błędu statystycznego, mała grupa badanych. Pythona dałoby się wytłumaczyć tym, że to popularny język skryptowy, jednak nadal myślę że nie usprawiedliwia to jego popularności w tym zestawieniu.

Co ciekawe, Webowcy znają Pascala niż inne grupy technologiczne – kto spodziewał się takiego wyniku? Mimo to, uzasadnienie istnieje – w szkołach obok Pascala jako języka stricte desktopowego nauczany jest też HTML razem z elementami CSSa i (czasem bo czasem, ale jednak) JSa. Wiadomo, że jakaś część uczniów wybierze Web jako swoją główną technologię, druga część wybierze Desktop. A jak mogliśmy zobaczyć na wykresach 3, 4.1 i 4.2 istnieje tendencja do wyrównywania się ilości osób mających za swoje główne technologie Web i Desktop wraz z końcem procesu kształcenia szkolnego. Więc zagadka rozwikłana 🙂

Wysoka znajomość Javy wśród Mobilnych chyba nie dziwi, tak jak najmniejsza ze wszystkich grup znajomość C++’a. Ciekawi najniższa wśród wszystkich grup znajomość Objective-C. Tak, wiem że teraz wszyscy w Swift’cie piszą, ale jednak – w ankiecie było pytanie o znajomość, a nie o używanie danego języka. W porównaniu do innych grup wygląda to słabiutko… No, ale za to wspomniany już wyżej Swift znają najlepiej ze wszystkich.

Trochę dziwi taka monotematyczność wśród Desktopowców – można to jednak tłumaczyć tym, że wśród desktopowców dużą przewagę mają młodsi, dopiero uczący się adepci programowania. Java czy C# nie są tu znane tak bardzo jak porównywalne języki w innych grupach, za to C++ trzyma się na stałym, wysokim poziomie znajomości wśród reprezentantów grupy Desktopowej.

 

I na tym niestety muszę zakończyć.

Post zrobił się nieco długi, powstawał też masę czasu – niestety, ale muszę go podzielić na dwie części. W następnej – dalsza część ankiety, czyli satysfakcja badanych kontra różne czynniki oraz praca i jej szczegóły takie jak typ umowy czy średnia płaca za godzinę. Będzie ciekawie! A do czasu pojawienia się następnej części zapraszam serdecznie do komentowania i zadawania pytań – na każde postaram się odpowiedzieć 🙂

A – no i w następnej części udostępnię kod generujący wykresy (jest konfigurowalny) oraz dane na których pracuję – stay tuned!

adamj57

Programista, właściciel i główny redaktor bloga programistycznePieklo. Elektronik-amator, facynuje się szeroko pojętą matematyką (lecz głównie statystyką, probabilistyką oraz numerologią), sieciami neuronowymi oraz IoT. Uwielbia Pythona, ma doświadczenie w Javie. Mikrokontrolery programuje w C/C++.

Zobacz wszystkie posty tego autora →

Komentarze

  • Nezo

    Brak dotychczas komentarzy to na zachętę: pierwszy! 😀

  • piretek

    Podziwiam za bezcenne chęci pisania tego artykułu 😛

  • Piotr MiXer Mikstacki

    Ciekawe, ale za mało danych. Chociaż i tak aktywnych użytkowników na grupce jest jakieś… 30

    • Aktywnych jest zdecydowanie więcej :p

      • Eryk Rakowski

        Dobra, 60 😀

    • Tak jak pisałem w poście, też wydaje mi się że próbka jest o wiele za mała na to by wysuwać głębsze wnioski, ale pracuję na tym co mam 😉

  • Ta normalna momentami nie za dobrze pasuje do wykresu, ale w sumie można przyjąć, że to przez przymałą grupę badawczą. Anyway, dobry wpis.

    • Chodzi ci o ten przykład czy o wykres wieku? Przykład to po prostu rozkład losowy normalny z dość małą ilością próbek, dlatego słupki nie pasują do czerwonej krzywej. A wykres wieku pasuje wręcz idealnie, jedyne co widać to przesunięcie w stronę młodszych, co ma sens – grupa zbiera jednak NASTOLETNICH Programistów 😉

  • FoxCode

    Jak te badania mają się do efektu Krugera-Dunninga?

  • heroesluk

    Tak dobrej ankiety jeszcze nie widziałem xD