Przyszłość programowania

Cześć! To jest fragment książki JavaScript od podstaw, która ma pomóc w nauce programowania od zera.

Długo zastanawiałem się nad przyszłością programowania. Można by powiedzieć, że przez większość życia. Pamiętam liczne burzliwe dyskusje, które prowadziliśmy jeszcze za czasów studenckich, a potem powtarzały się one przy kawie w różnych firmach oraz na korytarzach podczas konferencji programistycznych. Tam różnorodność doświadczeń wśród mówców dostarczała wielu ciekawych perspektyw, co znacząco utrudniało osiągnięcie konsensusu. Na swojej ścieżce poszukiwania prawdy, odkryłem jednak w końcu spojrzenie, które niemalże samo się broni, a co więcej ma solidne odzwierciedlenie w danych. To właśnie tę perspektywę chciałbym tutaj zaprezentować i uargumentować. Zacznijmy więc od liczb.

Liczba programistów jest duża

Kiedy zaczynałem się uczyć programowania jako dziecko, zawodowych programistów było dużo mniej. Do dziś często można spotkać się ze stereotypem, że programista to jakiś gość z piwnicy, który żywi się pizzą i jeśli nie musi to z nikim nie rozmawia. Tymczasem prawda wygląda zupełnie inaczej. Wielopiętrowe wieżowce wypełnione są programistami.

Ilu jest programistów na świecie? Tego tak naprawdę nikt do końca nie wie, ale istnieją pewne estymaty. Evans Data Corporation w raporcie Worldwide Developer Population and Demographic Study 2020 Volume 2 szacuje, że w 2020 roku na świecie było 26.9 milionów programistów [1]. To raptem około 0.35% światowej populacji [2], ale jak się zapewne spodziewasz, w krajach rozwiniętych proporcja ta ulega powiększeniu. To samo badanie pokazuje, że w Stanach Zjednoczonych pracuje około 4.3 mln programistów na 331 mln osób, a to już 1.3% populacji. Do tego pamiętajmy, że są to wyłącznie zatrudnieni programiści — raport ten nie uwzględnia młodzieży czy studentów. Także nie wlicza się w niego liczba osób, które programują po godzinach albo przeniosły się z programowania do managementu. Jeśli chodzi o Polskę, to raport ten szacuje liczbę programistów na około 300 tysięcy.

Dokładniejsze wyniki przedstawił nam raport ABSL Software development in Ukraine, Poland, Belarus and Romania [3]. Tam liczba profesjonalnych programistów i ekspertów IT w Polsce na rok 2019 oszacowana została na 295 300, czyli około 0.78% populacji Polski. Taką liczbą osób można by zapełnić małe europejskie kraje takie jak Monako czy San Marino. Ponadto większość specjalistów z tej branży zamieszkuje przeważnie duże miasta. W samej Warszawie raport szacuje liczbę pracujących programistów na 65.6 tys.1 Zgodnie z wyliczeniami Urzędu Statystycznego w Warszawie, zatrudnienie (w sektorze przedsiębiorstw) w Warszawie uzyskało 1081.8 tys. osób [4]. Można więc oszacować, że programiści stanowią około 5% osób pracujących2. 5%!

Tutaj warto dodać, że na Warszawie świat się nie kończy. W Polsce wyróżniamy 7 głównych dynamicznie rozwijających się ośrodków branży, po wspomnianych Warszawie i Krakowie są to: Wrocław (24,3 tys. Specjalistów w 2017 roku), Katowice (24,2 tys.), Poznań (22,4 tys.), Trójmiasto (16 tys.) i Łódź (10,7 tys.) [5][7].

Liczba programistów w dużych miastach Polski według estymaty InfoShare z 2017 roku.

W znanej ankiecie Stack Overflow [6] spośród zapytanych ponad 66 tys. programistów, aż 70.5% z nich jest w wieku 20-34 lat, a w Polsce to zaledwie 19.4% populacji (wg danych GUS[8]). Łącząc te liczby i zakładając, że dane odnoszą się adekwatnie do polskiej populacji, możemy oszacować, że 2.79% 3 osób w Polsce w wieku 20-34 lat to programiści.

Struktura wieku polskiej populacji w 2019, dane GUS.

Struktura wieku wśród programistów, na podstawie 66,329 odpowiedzi zebranych przez Stack Overflow.

Co jednak znacznie ważniejsze, struktura wieku wskazuje pośrednio na to, jak będzie się zmieniała liczba programistów z czasem. Studia programistyczne należą do chętnie wybieranych, a młodym ludziom często nie brakuje ambicji, by zdobyć lukratywną pracę w branży. Ma to niebagatelny wpływ na wzrost liczby programistów.

Liczba programistów szybko rośnie

Liczba programistów od lat szybko rośnie. Wydaje mi się to oczywiste, jako że nie ma tygodnia, by ktoś nie zapytał mnie jak nauczyć się programowania. Regularnie słyszę też o rozterkach znajomych, którzy chcą zmienić sektor zatrudnienia.

Część ekspertów szacuje, że historycznie liczba programistów podwajała się średnio co około 5 lat[9]. Współcześnie ten wzrost nieco spowolnił, ale wciąż jest imponujący. W 2013 roku liczba programistów doszła do 18.2 milionów, a w 2019 do 26.4 milionów[1]. Ciężko o dokładne liczby, ale analitycy mówią, że tempo wzrostu wciąż jest i będzie zbliżone do wykładniczego.

Jeśli chodzi o przyszłość, to wspomniany wcześniej raport Evans Data Corporation [1] szacuje 75% wzrost liczby programistów na świecie na przestrzeni następnych 10 lat. W Polsce wzrost ten ma być jednak szybszy, ze względu na dobre uwarunkowania oraz rosnący outsourcing usług programistycznych do Polski. Wspomniany wcześniej raport N-iX [3] zapowiada ok. 10% wzrost liczby programistów w Polsce rok do roku. Jeśli taki wzrost by się utrzymał, to za 10 lat powinno być 2.6 razy więcej programistów, niż jest w tym momencie. Raport zakłada spadek tempa (najwidoczniej nie uwzględnia wydania tej książki), ale wciąż niemal podwojenie liczby osób w branży.

Fragment raportu The global developer population 2019 wydanego przez Slashdata.

Tutaj warto dodać, że statystyki mówiły o sytuacji przed wybuchem pandemii. Nie ma jeszcze dokładnych danych, jak pandemia wpłynęła na sytuację rynku pracy programistów. Nieszczęśliwie, wiele osób straciło pracę albo nie było w stanie jej wykonywać, a sama branża programistyczna w tym czasie w większości raczej zbytnio nie ucierpiała. Programowanie można przecież wykonywać zdalnie4, a zapotrzebowanie na takie usługi stanowczo wzrosło. W końcu wiele firm musiało przenieść sprzedaż albo kontakt z klientami do internetu. Ponadto edukacja, kultura, nawet służba zdrowia wymagały odpowiedniego oprogramowania, aby funkcjonować w sieci. Eksperci przewidują, że większość instytucji i firm pozostanie przy modelu pracy zdalnej (przynajmniej kilka razy w tygodniu), a wykład prowadzony online czy e-wizyta u lekarza, staną się powszechne.

Wzrost wykładniczy, czyli wyrażony w procentach, ma tendencje do szybkiego przyspieszania. Zakładając nawet wolniejszy wzrost dla Polski, na poziomie 7%5, oznacza to dwukrotne zwiększenie liczby programistów na przestrzeni 10 lat, czterokrotne na przestrzeni 20, ośmiokrotne na przestrzeni 30, szesnastokrotnie na przestrzeni 40... Idąc tym tropem, za 71 lat wszyscy powinni być programistami. Brzmi to dość absurdalnie. W końcu nie wszyscy mogą pracować jako programiści. Stanie się to jednak bliższe prawdy, gdy przestaniemy myśleć o programowaniu w kontekście zawodu, a zaczniemy postrzegać go jako umiejętność. Analogicznie jak z czytaniem czy prowadzeniem samochodu.

W starożytnym Rzymie mnożenie czy dzielenie liczb było ponoć zarezerwowane dla elity intelektualnej. Bardziej przystępny system liczbowy oraz powszechna edukacja sprawiły, że dziś są ogólnodostępne. Analfabetyzm był wszechobecnym zjawiskiem jeszcze kilkaset lat temu, a dzisiaj znakomita większość z nas potrafi świetnie czytać i pisać. Tak samo może stać się z programowaniem, lecz aby urealnić ową perspektywę potrzeba, by stało się ono przystępniejsze, by edukacja uległa poprawie oraz byśmy przede wszystkim zmienili myślenie o nim i nie dali się zwieść stereotypom.

Specjalizacja postępuje, czyli bycie programistą jak kiedyś inżynierem

Lubię posłuchać opowieści moich dziadków o tym, jak wyglądał świat, zanim się urodziłem. Tak właśnie dowiedziałem się, że tuż po wojnie bycie inżynierem było w zasadzie traktowane jak zawód sam w sobie, bez względu na specjalizację. Ogólnotechniczna wiedza sprawiała, że inżynierowie często zajmowali się wszystkim — od naprawy silnika po planowanie elektroniki w budynku. W dzisiejszych czasach nie wyobrażam sobie takiego podejścia. Co prawda mam tytuł inżyniera zarówno z telekomunikacji, jak i programowania, ale niewiele wiem o silniku, elektronice w budynku, aerodynamice samolotów, czy wielu innych tego typu dziedzinach. Stały się one zwyczajnie zbyt skomplikowane. Nawet uczelnie wyższe nie widzą sensu w uczeniu choćby ich podstaw. Jeśli masz zostać inżynierem elektronikiem, wówczas kształcą Cię pod ten konkretny fach. W programie studiów jest i tak zbyt mało godzin, by dostatecznie zgłębić tylko tę dziedzinę.

Podobnie z lekarzami. Dawniej lekarz zajmował się w zasadzie wszystkim, dzisiaj wykształcił się wyraźny podział na specjalizacje.

Spodziewam się, że podobny los spotka również programistów, zresztą już teraz widać go jak na dłoni. Kiedyś określało się kogoś po prostu mianem programisty. Dzisiaj możemy zauważyć silną klasyfikację obejmującą: programistów aplikacji mobilnych, stron internetowych, aplikacji serwerowych itp.6

Pojawiło się też sporo innych zawodów, które na co dzień zajmują się programowaniem. Na przykład specjalistów od przetwarzania danych, sztucznej inteligencji czy analityków. Całymi dniami piszą kod w Python czy SQL, a programistami nie są. Wielu doświadczonych testerów pisze boty, które chodzą po stronach (lub aplikacjach) i badają scenariusze testowe. Także żadne poważane laboratorium biologiczne nie obejdzie się bez bioinformatyka, który dokona analizy bioinformatycznej.

W Dolinie Krzemowej spotyka się coraz więcej programistów, którzy wkraczają w coraz to nowe specjalistyczne dziedziny. Programiści konstruujący rakiety w SpaceX, projektujący autonomiczne samochody w Tesla, roboty w Boston Dynamics.

Sam widzisz, że pod słowem programista może kryć się naprawdę wiele. Rozróżniamy wiele typów specjalistów posługujących się programowaniem w pracy codziennej, a przy tym nie mających ze sobą za dużo wspólnego. Z ogólnego zawodu "Programista" wyłoniły się inne, takie jak: "Programista Front-end" czy "Programista Android" oraz niezależne dziedziny jak "Data Scientist", czy "Bioinformatyk".

Programowanie ułatwia wiele zawodów, może ułatwiać niemal każdy

Dane, których poprzednio wspomniane statystyki nie uwzględniają, to ilość osób realnie programujących albo wykorzystujących wiedzę techniczną z tego zakresu. Programiści także raz na jakiś czas zmieniają zawód. Najczęściej stają się wtedy managerami albo biznesmenami, ale znam też takich, którzy zostali administratorami, freelancerami, naukowcami, grafikami, UX designerami czy bankowcami. Nie wliczają się do statystyk, pomimo nabytych umiejętności programowania i ich zastosowania w nowych zawodach. Nie boją się tworzyć botów czy skryptów, postawić własnej strony albo chociaż pisać makr do programów, w których pracują.

Znam niemało managerów ułatwiających sobie życie przez pisanie botów, które chodzą za nich po stronach i zbierają dane, albo bankowców, którzy zautomatyzowali trading, dzięki czemu osiągają wyższe zyski i nie muszą przesiadywać całymi dniami przy słupkach.

Znajomość programowania znacznie usprawnia większość wykonywanych obecnie zawodów. Zgodnie z badaniami World Economic Forum z 2019 roku [10], już teraz przynajmniej 30% ludności powinno nauczyć się kodowania, aby uzyskać lepsze stanowisko w pracy. Przykładowo, wszystkie zawody przetwarzające dane mogą skorzystać z umiejętności pisania kodu do ich analizy. Osoby pracujące ze złożonymi systemami mogą tworzyć do nich skrypty. A to dopiero początek. Im więcej osób potrafi programować, tym więcej jest miejsc, gdzie umiejętności programistyczne można wykorzystywać. Potencjalnie większość zawodów może stać się w pewnym stopniu zautomatyzowana.

Gdzie się nie obejrzymy, napotykamy na nowinki technologiczne, które pozwalają wkroczyć programowaniu do naszego codziennego życia. Pojawienie się smartfonów umożliwiło kelnerowi zbieranie zamówień na tablecie i natychmiastowe przekazanie ich do kuchni. Pracownik sklepu obuwniczego może wskazać kamerą w telefonie na szafę pełną pudeł i aplikacja natychmiast znajdzie to, zawierające poszukiwaną parę butów. Analogicznie, pojawienie się dronów pozwoliło, by dostarczały one paczki albo rozpoznawały osoby zarażone wirusem COVID-19. Już teraz ramiona robotów są powszechnie używane w fabrykach czy sortowniach. Możemy się więc spodziewać, że w pewnym momencie dostrzeżemy je także w naszym ulubionym sklepie, podczas porannego wyjścia po bułki.

Potencjał do automatyzacji i optymalizacji nie zna granic. Urzędnik, który dziś rutynowo przegląda i klasyfikuje dokumenty, mógłby pisać skrypty i programy, które wykonywałyby tę pracę za niego. Jego wiedza i zdolności programistyczne mogą przełożyć się na efektywniejsze działania. Pracownik sklepu może pisać i poprawiać skrypty, które nim zarządzają i rozmieszczają towary na półkach. Mamy już większość możliwości, a na horyzoncie widzimy napływ kolejnych. Największym mankamentem są niewystarczające zdolności w programowaniu lub, co gorsza, ich brak, wynikający z powszechnie powracającej obiekcji: "przecież programowanie jest trudne i nie każdy jest w stanie się go nauczyć". To jednak nieprawda. Już nie.

Programowanie staje się coraz łatwiejsze

Gdy zaczynałem swoją przygodę z programowaniem, było bardzo wiele tematów technicznych, o których trzeba było wiedzieć, myśleć i pamiętać. Zarządzanie pamięcią, różnice między systemami operacyjnymi, formaty kodowania liczb... to są tematy, które niegdyś spędzały programistom sen z powiek, a we współczesnych językach programowania praktycznie nie są problemem.

Od lat miliony umysłów zastanawiają się, jak uczynić programowanie prostszym. Regularnie powstają języki i narzędzia ułatwiające nam życie. Lepiej lub gorzej ukrywają one stare problemy, sprawiając, że nie musimy się nimi przejmować.

Dzięki wprowadzonym mechanizmom, w większości współczesnych języków programowania nie musimy myśleć o zarządzaniu pamięcią ani o systemie operacyjnych. Tymi i innymi zagadnieniami zajmują się wbudowane narzędzia czy biblioteki. Podobnie dziś staramy się ukryć różnice między programowaniem na Android i iOS. Powstają więc biblioteki, w których pisze się jedną aplikację dla obu platform (na przykład React Native).

Coraz lepsze narzędzia pomagają w programowaniu i zabezpieczają przed błędami. Przykładowo IntelliJ koloruje składnie, podpowiada nazwy funkcji, zaznacza błędy oraz informuje o potencjalnych problemach. Niesamowicie ułatwia to pracę zarówno doświadczonym, jak i początkującym programistom. Pisanie kodu w notatniku jest nieporównywalnie trudniejsze. Programy analizujące nasz kod takie jak PrettyJS ostrzegają przed potencjalnymi problemami i pomagają nam utrzymać czytelne formatowanie kodu.

Pomyślmy o przykładowym problemie: lista zadań jako strona internetowa, ze wsparciem dla wyszukiwania, tagów, kategorii, priorytetów itp. Jakby mnie ktoś poprosił o rozwiązanie tego problemu, używając technologii z 2005 roku, to złapałbym się za głowę i wyceniłbym to na całe tygodnie pracy. Mając jednak do dyspozycji współczesne narzędzia, frameworki i biblioteki, mógłbym ją zaimplementować w przeciągu doby.

Wiedza zaawansowana przydaje się, ale dopiero na późniejszym etapie, jak już ktoś jest zaawansowanym programistą. Coraz więcej programistów nigdy nie studiowało informatyki, a nie przeszkadza im to w obejmowaniu stanowisk seniorskich.

Nauka programowania staje się coraz łatwiejsza

Nauka programowania również staje się coraz łatwiejsza. Kiedyś wymagała wczytywania się godzinami w grube instrukcje lub książki. Dziś są one bardziej przystępne, a co ważniejsze internet wypełnił się wysokiej jakości materiałami i kursami.

Pojawiły się liczne strony, na których to Ty programujesz, a wirtualny nauczyciel wyjaśnia Ci wszystko i stawia przed Tobą kolejne wyzwania. Powstały też różnorodne gry programistyczne, gdzie do przejścia każdego poziomu niezbędne jest napisanie działającego kodu. Nie brakuje wyzwań, barwnych wizualizacji, czy też interaktywnych przykładów.

Mamy dostęp do projektów otwartych (open-source). Wystarczy wejść na GitHub i można tam znaleźć tysiące pięknie zrobionych projektów z publicznie udostępnionym kodem. Dużą popularnością cieszą się blogi i filmy pokazujące, jak wykonać jakiś projekt krok po kroku.

Wreszcie wielu programistów oznacza dużo osób, z którymi można się skonsultować albo mogą oni udzielić nam porady. Rosnące zapotrzebowanie stworzyło natomiast mnogość szkół programowania. Naprawdę, nauka programowania nigdy nie była tak łatwa i wciąż staje coraz łatwiejsza.

Coraz łatwiej rozwiązuje się problemy w programowaniu

Ostatnim istotnym aspektem jest łatwość w rozwiązywaniu problemów w programowaniu. Kiedyś programiści byli zdani wyłącznie na siebie i często musieli poświęcić całe tygodnie, zanim zdołali rozwiązać jakiś wyjątkowo irytujący problem. Dziś mamy ogrom stron takich jak Stack Overflow, na których można zadawać pytania i zwykle szybko otrzymujemy na nie odpowiedź. Wielu świetnych programistów, wręcz ściga się by jako pierwsi przedstawić optymalne rozwiązanie problemu. Co ważniejsze, te pytania i odpowiedzi łatwo wyszukać przez Google, więc dla znakomitej większości problemów wystarczy wpisać pytanie w wyszukiwarkę i na jednej z pierwszych pozycji możemy się spodziewać poszukiwanej odpowiedzi.

Przyszłość programowania

Nasze społeczeństwo pchane jest ku programowaniu ze wszystkich stron. Mamy chęć nauki, nie maleje popyt na programistów, wzrasta potrzeba ogólna, programowanie staje się coraz łatwiejsze, a jego nauka coraz skuteczniejsza. Nic więc dziwnego, że zwiększa się liczba osób umiejących programować. I osobiście nie widzę żadnego powodu, by miało się to wkrótce zmienić.

Moim zdaniem z programowaniem będzie podobnie jak z językiem angielskim. W latach 90. sama jego znajomość była niemal gwarantem dobrej pracy. Trzydzieści lat później uważana jest często za umiejętność powszechną. Jedni znają angielski dobrze, inni gorzej, a jeszcze inni wcale, ale jakbym złapał losową osobę na ulicach Warszawy i zapytał o drogę po angielsku, z dużym prawdopodobieństwem uzyskałbym odpowiedź. Jedni posługują się nim na co dzień, inni od czasu do czasu, a reszta używa go tylko na wakacjach lub podczas grania w internecie. Myślę, że podobnie będzie z programowaniem: spopularyzuje i upowszechni się, podobnie jak spopularyzowała się matematyka, logika, prowadzenie samochodu, korzystanie z komputera, internetu i wiele, wiele innych. Mam nadzieję, że w niedalekiej przyszłości z tego, jakże przydatnego, narzędzia będzie mogło skorzystać jak najwięcej osób.

Czy tak będzie? Zobaczymy. Przedstawiłem swoją wizję i prognozy dla przyszłości programowania. To one w dużym stopniu pchnęły mnie do napisania tej książki, bo chciałbym, by ważne umiejętności stały się dostępne nie tylko dla wąskiej grupy osób, by nikt nie został w tyle. Nie martw się Czytelniku, mówię tutaj o perspektywie dziesiątek lat. Zresztą, jeśli doczytałeś do tego miejsca, mam silne odczucie, że Ty nie zostaniesz w tyle.

Źródła

[1] Worldwide Developer Population and Demographic Study 2020 Volume 2, link: https://evansdata.com/reports/viewRelease.php?reportID=9

[2] Populacja globalna osiągnęła poziom 7,8 miliarda w 2020 roku, link: https://interactives.prb.org/2020-wpds/

[3] Software developement in Ukraine, Poland, Belarus and Romania, raport ABSL wg N-iX, link: https://www.n-ix.com/software-development-poland-warsaw-krakow-wroclaw/

[4] Urząd Statystyczny w Warszawie, Przegląd Statystyczny Warszawy III kwartał 2019, Rok XXVIII, nr 3, Warszawa 2019 r. stan na 30 września 2019 roku, link: bit.ly/3xltyMD (raport można znaleźć na stronie warszawa.praca.gov.pl)

[5] Central & Eastern Europe Developer Landscape 2017 - a report by Stack Overflow, raport Infoshare sporządzony w oparciu o dane zebrane przez Stack Overflow, link: infoshare.pl/news/one,66,246,1,central-eastern-europe-developer-landscape-2017-a-report-by-stack-overflow.html

[6] Stack Overflow Developer Survey Results, 2019, link: https://insights.stackoverflow.com/survey/2019

[7] Software development in Poland: major IT hubs, developers, and more, link: https://www.n-ix.com/software-development-poland-warsaw-krakow-wroclaw/

[8] Struktura ludności według wieku w 2019 r. https://stat.gov.pl/obszary-tematyczne/ludnosc/ludnosc/ludnosc-piramida/

[9] My Lawn, Robert C. Martin (autor między innymi książek Czysty Kod, Czysta Architektura, czy Zwinne wytwarzanie oprogramowania), link: https://blog.cleancoder.com/uncle-bob/2014/06/20/MyLawn.html

[10] Raport The Global Competitiveness World Economic Forum z 2019 roku, link: http://www3.weforum.org/docs/WEF_TheGlobalCompetitivenessReport2019.pdf

1:

Przyjąłem konserwatywną estymatę z [3]. Raport [5] szacował liczbę programistów w Warszawie na 74 252 już w 2017 r.

2:

Dzieląc 65.6 tys. przez 1081.8 tys. wyszłoby 6%, aczkolwiek liczba 1081.8 tys. nie obejmuje wszystkich pracowników, w tym zwłaszcza osób zatrudnionych na umowie o dzieło i o zlecenie. Estymata na poziomie 5% wydaje się uczciwa, zwłaszcza że przyjęliśmy konserwatywny szacunek liczby programistów.

3:

Wyliczenia oparłem na następującym schemacie: Szacowana liczba programistów w;o tym wieku, podzielona przez liczbę Polaków w tym wieku: (295300 * 70.5) / 7456390 = 2.79%.

4:

Według raportu Devire ("Branża IT w nowej rzeczywistości") 75% badanych specjalistów IT przyznaje, że miało możliwość pracy zdalnej częściowo lub w pełnym wymiarze jeszcze przed pandemią. 56% badanych pracowało zdalnie 1-3 dni w tygodniu, z kolei w pełnym wymiarze 20% respondentów.

5:

Badania i przewidywania ekspertów obejmują wzrost 10%, ja jednak przyjąłem niższe szacunki i przedstawiam swoje przypuszczenia dla rozwoju branży na przestrzeni lat.

6:

KZiS (Klasyfikacja zawodów i specjalności) już w 2014 roku KZiS klasyfikuje prawie 50 specjalności, które zwykle kryją się pod słowem "programista" (link: klasyfikacje.gofin.pl/kzis).