Trendy w backendzie - świetlana przyszłość programistów Scali i Node.js?

8

Przeglądałem sobie Indeed Trends pod kątem języków backendowych (brałem pod uwagę tylko te popularne, jako że wykresy dla języków niszowych są niemiarodajne - za mała próba statystyczna) - wygląda to ciekawie, więc postanowiłem się podzielić moimi przemyśleniami.

Link: http://www.indeed.com/jobtrends/q-Java-q-Scala-q-Python-q-Ruby-q-PHP-q-Node.js-q-C%23.html

  1. Oferty pracy - ogólny procent ofert:

user image

Najwięksi gracze tracą z każdym rokiem, choć ilość ofert w Javie wciąż jest imponująca. Wśród języków dynamicznych Python zyskuje, PHP traci, Ruby stabilnie. Ciekawie prezentują się relatywnie nowe technologie - Scala i Node.js, co świetnie widać na kolejnym wykresie.

EDIT: Jak @LukeJL słusznie zauważył, nie ma co sugerować się nachyleniem krzywych, z racji tego, że mogą, ale nie muszą pokazywać rzeczywistości (jest to procent wszystkich ofert na Indeed, więc równie dobrze mógł się po prostu zwiększyć udział ofert w innych branżach - wymaga to lepszego przestudiowania). Natomiast relacje między krzywymi nadal są przydatne, pozostałe wnioski pozostają bez zmian.

  1. Oferty pracy - relatywnie:

user image

Scala i Node.js nieustannie zwiększają swój udział w rynku IT, od 2012 relatywna ilość ofert pracy w Scali zwiększyła się o 350%, w Node.js aż o 830%, najwięcej traci PHP (-49%).

  1. Poszukujący pracy:

user image

Tu nie będę się rozpisywał - największe fluktuacje są w przypadku Javy, ogólnie zainteresowanie popularnymi technologiami jest raczej stabilne, najbardziej interesujący dla programistów powinien być następny wykres.

  1. Stosunek ofert pracy do szukających zatrudnienia:

user image

Wg mnie najbardziej wartościowy wykres - pokazuje nasycenie rynku programistami danego języka, bardzo przydatny dla zaczynających przygodę z programowaniem / zastanawiających się nad zmianą technologi / chcących nauczyć się kolejnego języka.
Najbardziej "przeludniona" jest Java i PHP, najbardziej zrównoważony jest Python.
Scala szybko wchłania nowych programistów (pewnie często przechodzących z Javy), ostatnio osiągnęła równowagę zbliżoną do Pythona.
Największy deficyt programistów jest w Node JS - jest to jedyna relatywnie popularna technologia, dla której ofert jest dwukrotnie więcej niż chętnych.

Wnioski:

  1. O ile dobrzy programiści będą nadal rozchwytywani w każdej z wymienionych technologii, to osoby bez doświadczenia mogą mieć problem z ciekawymi ofertami w obecnie dominujących technologiach.

  2. Zarobki w Scali i Node.js powinny być wyższe niż w pozostałych technologiach przy podobnym poziomie umiejętności - szczególnie na juniorskich stanowiskach (nie śledzę Scali, ale w Node.js rzeczywiście wygląda to nieźle).

  3. Ogólna ilość ofert w IT patrząc na przytoczone wykresy wydaje się spadać, choć wydaję mi się, że chodzi raczej o co innego - wielcy gracze (o ile można tak powiedzieć o językach) tracą kosztem nowych technologii - wcześniej bardziej ujednolicony rynek coraz bardziej się różnicuje, innym powodem może być szybszy rozwój innych branż (lub przynajmniej ilości ofert zamieszczanych na Indeed).

  4. Najmniej pracy utrzymaniowej a najwięcej tworzenia nowych rozwiązań jest w Scali i Node.js

Uwagi:

  • oczywiście mam świadomość, że w niektórych domenach w takiej Javie można zarobić kosmiczne pieniądze (np. HFT), ale tekst nie jest o tym.
  • nie wiem na ile miarodajny jest Indeed, ale wydaje mi się o wiele lepszym źródłem niż takie Tiobe - badające tylko popularność języków.
  • Nie ująłem tutaj C i C++ bo nie są często stosowane w backendzie www, choć polecam je sprawdzić, ogólnie: C cierpi na podobny deficyt programistów co Node.js przy rosnącej popularności wśród pracodawców (embedded!), w C++ też jest deficyt, spada też jego popularność wśród pracodawców (wszyscy uciekają - programiści szybciej niż biznes - pewnie ze względu na utrzymaniówkę).

Co o tym sądzicie - coś pominąłem, źle zinterpretowałem, przekłamałem?

0

Trochę inne zestawienie, pokazujące co się dzieje na samym rynku JVM i JavaScript:

http://www.indeed.com/jobtrends/q-Scala-q-Node.js-q-RESTful-q-AngularJs-q-J2EE-q-Groovy-q-Java-Spring.html

Wyjaśnienie: ponoć na rynku odchodzi się od rozwiązań Java-only na rzecz mieszanych RESTful service z AngularJs.
Co zastępuje Java Spring i J2EE po stronie backendu w takim scenariuszu - nie wiem. Ale wątpię żeby to był node.js

0

Tylko jakiego kraju te wykresy dotyczą? Bo np. w Polsce rynek się nieco różni od np. USA. Np. w USA Python jest całkiem popularny, u nas to egzotyka.

0

Nie powiedziałbym, że Python egzotyka. Owszem, kilka lat temu może. Ale to się zmienia.
Tyle, że (:hejt on) Python czy inne Ruby są strasznie powolne :)

0

@LibertyPrime Wykresy dotyczą rynku globalnego - chętnie zobaczyłbym takie dane dla rynku polskiego, ale chyba duże polskie portale ich nie zbierają (a przynajmniej nie prezentują).

Co do Pythona - ja tam często widuję takie oferty, nawet byłem na kilku rozmowach, gdzie backend robiono właśnie w Pythonie.

0

Też miałem styczność zarówno z Pythonem jak i Rubym przy okazji pracy we frontendzie.

Natomiast kilka lat temu szukałem pracy jako Pythonowiec w sensie stricte, i okazałem się za słaby. I nie wiem jak teraz, ale wtedy ogólnie miałem wrażenie, że do Pythona raczej niby szukali ludzi, ale raczej wymiataczy/seniorów a nie kogoś bez doświadczenia (chociaż teraz możliwe, że sytuacja się zmieniła). Więc tym to sposobem zostałem JavaScriptowcem. Bo byłem za słaby na Pythona ;)

(na serio, gdyby inaczej sie wtedy potoczyła sytuacja to może bym w Pythonie teraz robił, bo zawsze uważałem go za lepszy język od JS).

4

Moje odczucia są inne z punktu widzenia Wrocławia:

  1. Programistów Java, owszem, jest najwięcej, ale rynek jednocześnie jest bardzo nienasycony ze względu na ciągły napływ zagranicznych firm. Dodatkowo ich też ubywa wbrew popularnej opinii, że tylko przybywa z każdym ukończonym rocznikiem studiów.
  2. Juniorzy z rocznym doświadczeniem w Java/#Net mogą liczyć na 4-6k brutto na UoP lub 7-9k netto na f-rę w zagranicznych firmach. Oczywiście są też firmy, co nie dadzą połowy z tego.
  3. Czysta JavaEE nie jest popularna, ale Spring ma się dobrze. Spring MVC, Batch, Security, Integration, Boot, są popularne i używałem w kilku projektach. Co do wykresu dot. JVM - W ogóle nie rozumiem, co miałyby mieć RESTful do popularności Springa. Przecież to nie jest alternatywa tylko standard, a RESTa jak najbardziej w Springu można zrobić. A też można w gołej Javie.
  4. Node faktycznie robi się popularny, ale on nie musi być alternatywą, bo można go zgrać z Javą. Java obsługuje backend, a rozwiązania typu Grunt, Bower, Karma są na froncie spięte na przykład Mavenem. Wtedy mvn clean install buduje i testuje backend oraz odpala taski frontendowe: testy, zarządzanie zależnościami JS, merge wszystkich JS do jednego pliku, minifikacja, itp.

Na pewno Scala i Node zyskują na popularności, ale nie sądzę, że kosztem mainstreamowych technologii.

0

A połączenie web api w .NET + electron jako apka frontendowa? Wydaje mi się, że takie rozwiązania też będą coraz popularniejsze.

0

Uważam, że nie ma się czym podniecać. Wątpię, ze będą to technologie konkurujące w 100%.

  1. Scala sprawdzi się tam gdzie się sprawdza, czyli Spark i gdzie Akka będzie miała sens. Póki co mi brakuje czegos w rodzaju Springa w świecie Scali. Większość ofert w Scali jest związana ze Sparkiem niż backendem dla weba.
  2. Node.JS małe/średnie projekty ok. Ale nie kobyły bankowe, telekomunikacyjne, ubezpieczeniowe.
  3. Java EE/Spring jest ok i na rynku już trochę siedzi ale ludzie lubią je demonizować.

Jakoś tutaj nikt nie wymienił 'super alternatyw'
Alternatywa do Java EE/Spring

0

Node.js może też skończyć jak Java na froncie, JSP, JSF, GWT itp. :>

0

@Karister

Zdaję sobie sprawę, że w Polsce sytuacja wygląda trochę inaczej - dzięki za wartościowy wpis.

Masz też rację, że Node.js często jest stosowany jako uzupełnienie, nie zastąpienie danej technologii, często jako narzędzie deweloperskie - ciężko natomiast wydzielić to zastosowanie z wykresu (musiałbym badać wykresy dla backendowych frameworków / bibliotek i jakoś je sumować), podobny problem jest też z Pythonem, który często służy jako język do prototypowania / skryptowania przy takiej np. Javie.
Trochę może to zaciemniać wyniki JS i Pythona - nie rozróżnisz dokładnie ile jest ofert dla typowych JS i Python deweloperów.

0

Na 5 projektów w których brałem udział (czyli 5-ciu firmach), w 2-óch Python (+ bash) był wykorzystywany do oskryptowania.

Jak są te oferty liczone? Jeśli w opisie jest wymienionych klika języków, np Java, JavaScript i Python to wszystkim trzem skoczy statystyka?

0

@Wibowit

Żeby lepiej zbadać sprawę postanowiłem porównać frazy: {język x} vs {język x} developer - dosyć ciężkie to w interpretacji, szczególnie wykresy zainteresowanie / oferty są mylące (to, że ktoś wystawi ofertę jako "cośtam developer" nie znaczy, że w ten sposób będzie wyszukiwana), no ale coś tam zobaczyć można (patrzyłbym raczej na pierwszy wykres w wersji relative):

  1. Dla "kalibracji" wrzuciłem Javę i C#, które jeśli pojawiają się w ofercie to raczej zawsze są głównymi językami:

http://www.indeed.com/jobtrends/q-Java-q-Java-Developer.html?relative=1
http://www.indeed.com/jobtrends/q-C%23-q-C%23-developer.html?relative=1

user image
user image

To by się zgadzało - bez niespodzianek, niemal idealnie się pokrywa.

  1. Node.js:

http://www.indeed.com/jobtrends/q-Node.js-q-Node.js-Developer.html?relative=1

user image

Relatywna liczba ofert dla frazy z "dev" wzrasta szybciej niż dla frazy bez tego. Wniosek: samodzielne stanowiska Node.js zwiększają swój udział w całym ekosystemie Node.js?

  1. Scala:

http://www.indeed.com/jobtrends/q-Scala-q-Scala-Developer.html?relative=1

user image

Relatywna liczba ofert dla frazy z "dev" wzrasta wolniej niż dla frazy bez tego. Wniosek: coraz częściej spotykane są stanowiska łączone (np. Java / Scala dev)?

  1. Python:

http://www.indeed.com/jobtrends/q-Python-Developer-q-Python.html?relative=1

user image

Tutaj mamy wieksze fluktuacje, obecnie jest podobnie jak w Scali. Wniosek: standalone Python traci w stosunku do Pythona jako narzędzia uzupełniającego stack?

Powyższe to taka luźna interpretacja - zresztą widać po znakach zapytania ;)

0

node vs spring
http://www.indeed.com/jobtrends/q-spring-q-node.js.html
Z tego wykresu według mnie nie wynika jak to Java traci.

Według mnie wysuwasz błędne wnioski co do Scali... trudno mówic, że to technologia do backendu do Weba.

0

@Złoty Młot

Co do Scali - ok, jasne - Scala to nie tylko backend webu, ale podobnie z resztą języków, nie jest to jakieś szczególne kryterium porównania.

Co do wykresu - jakiś komentarz?

0

No dla mnie ta sezonowosc nie jest oczywista. Dosc stabilnie dla springa.

Na ogolnym wykresie niemal wszystkie technologie spadaja ;)

0

Niektórzy wieszczą jasną przyszłość Swifta. Już w zasadzie jest perfect framework do backendu ;)

0

Heh, to moze troche inne pytanie, ale wciaz dotyczy nodejs. Skad pobierac nauki, w sieci tego duzo, tylko co warte uwagi? Ogolnie zamierzam uczyc sie nodejs ale piszac w typescript, bo js-a w miare ogarniam, ale zeby ogarnac ten balagan to typescript bedzie idealny do tego.

1

Wydaje mi się, że z punktu widzenia kogoś, kto uczy się JS najlepiej jest porządnie poznać ES6 zamiast inwestować w TypeScript czy CoffeeScript, które z czasem będą coraz mniej potrzebne.

0

Z typescript jest problem bo jest od microsoftu ;)
Statyczne typowanie na pewno jest na plus dla javowcow. Ale ponoc nie warto pisac js jak w javie ;)

Statyczne typowanie jest spoko na backendzie.. A przy czyms o duzej skali konieczne.

0

Moim zdaniem node.js ma taki duzy wzrost, poniewaz jest to naturalny wybor ludzi co znaja js i pisza front,, a teraz moga pisac backend.

Ale nuz mozna napotkac sporo blogpostow, ze czesto podchodzono do tego w sposob zly. Czyli node do wszystkiego, czesto z checi nauczenia sie czegos nowego. Takie podejscie nigdy nie dziala.

No i na koniec ludzie chwalacy X czasu temu, ze switchuja do node. To teraz albo wracaja do poprzednich technologii np. Python -> node -> python. Albo np. szukaja jeszcze dalej iprobuja go lang.

Na razie jest boom na node.js ale pewnie wkrotce znajdzie swoje miejsce w tym wszystkim i stanie sie odpowiednim narzedziem do odpowiednich zadan.

0

W jaki sposob dziala ten caly node.js? JS jest single thread. Event loop tez. Ale pozniej kazde zadanie moze dzialac w innym watku? Jak? Webworker to jakis wirtualny wątek? V8 pozwala na wiecej?

Jaka jest roznica miedzy np. Node.js a vert.x?

1

@Biały Mleczarz
Jest jeden wątek główny, w którym działa event loop.

Kod piszesz martwiąc sie jedynie o ten jeden, główny wątek. Kod możesz pisać na dwa sposoby (i w 99.9% tak sie go właśnie pisze):

  1. Kod synchroniczny - operacje wykonywane jedna po drugiej, blokujące główny wątek - obliczenia we wszelakiej formie (zawarte zarówno w "głównym" kodzie jak i w callbackach) - tu ważne jest by operacje synchroniczne nie były czasochłonne (nalezy unikać dużych obliczeń).

  2. Kod asynchroniczny - wszelkie operacje I/O, zarówno po sieci jak i w systemie operacyjnym - funcje asynchroniczne oddelegowują operacje I/O dalej, rejestrowany jest callback, który zostanie wykonany gdy operacja się zakończy (oczywiście jeśli event loop jest wolny i zejdą czekające w kolejce callbacki), główny wątek wraca do pracy bez czekania na efekt, oddelegowane zadania mogą być wykonane na dwa sposoby:

a. jeśli dla danej operacji jest wystawiony asynchroniczny interfejs to node z niego korzysta (tak jest np z zapytaniami http),

b. jeśli operacja musi wykonać się synchroniznie (np odczyt pliku) to jest wykonywana przez worker thread, których node domyślnie odpala 4, kolejkując nadmiarowe zadania, ale można tą ilość zwiekszyć w razie potrzeby za pomocą zmiennej środowiskowej, te wątki są zarządzane przez node (C++), programista nie ma do tego dostępu.

Jeśli operacje w głównym wątku są czasochłonne, lub jest ich bardzo dużo to mozna to rozwiązać na dwa sposoby:

  1. Odpalić klaster, czyli wiele instancji Noda, dzięki czemu mamy kilka działających event loopów, tu są przynajmniej trzy sposoby:

a. Skorzystać z wbudowanego w bibliotekę standardowa modułu cluster - trzeba napisać troche kodu okalającego główny kod aplikacji, cluster ma wbudowany load balancer (strategia round-robin lub listen socket, na linuch domyślnie ta pierwsza),

b. Skorzystać z narzędzi typu pm2 czy StrongLoop, które są menagrami procesów, które wrapują aplikację za ciebie (korzystją wlasnie z modułu cluster), dodatkowo monitorują instancje i restartuja je w razie potrzeby, oczywiście jak masz 8 threadów procesora to nie znaczy, że opłaca sie odpalać 8 instancji (możesz uzyskać efekt odwrotny do zamierzonego, bo load balancing też swoje kosztuje), sa narzedzia które automatycznie dobieraja optymalną ilość,

c. Postawić osobny load balancer, np. na HAProxy lub Nginx - przydaje się jeśli startegia round-robin z jakiegoś powodu nie jest odpowiednia.

  1. Można też skorzystać ze wspomnianych przez Ciebie WebWorkerów, które są sposobem na jawne oddelegowanie danego zadania do innego wątku (to rozwiązanie tyczy się tylko czasochłonnych obliczeń, nie jest to sposób na skalowanie aplikacji pod obciążeniem requestami).

Co do różnic z vert.x to z tego co zdążyłem pobieżnie przeczytać to mechanizm jest bardzo podobny, z tym, że vert.x tworzy coś w stylu klastra automatycznie, główne różnice sprowadzają się więc głównie do (znowu) dwóch rzeczy:

  • JavaScript i jego pochodne vs Java (lub innne języki JVM), oraz ogólni platforma (zużycie zasobów, narzedzia itp),
  • ilość bibliotek - JavaScript jest od samych swych początków asynchroniczny, więcz praktycznie każda dobra biblioteka jest w tym stylu napisana, a ogólnie paczek na npm jest od groma: http://www.modulecounts.com/ , JVM może nie wyglądać tu tak różowo.

PS
Mogę się trochę mylić, bo ogólnie szczegóły implementacyjne Noda to nie taka trywialna kwestia, ale z grubsza raczej tak to wygląda.

PS2
To chyba straszny oftop (jak i Twoje pytanie), ale nie napisałbym tego w komentarzu.

0

@Maciej Cąderek dzieki za wyjasnienie.. Ja nie krytykuje node. Chcialem wiedziec jak to dziala. Vert.x moze miec wiecej niz 1 event loop.

1 użytkowników online, w tym zalogowanych: 0, gości: 1