Dobra, skoro już mnie wywołano to jedziemy z tym koksem.
Cześć! Jestem jeszcze młody, dopiero w klasie maturalnej - od około dwóch lat siedzę w webdevie - Java, JS, React, Spring, Hibernate i tego typu sprawy.
Czyli coś tam ogarniasz i nie robisz tego, bo masz hipotekę na spłatę. Czyli jakieś zadatki na programistę masz, a nie lecisz bo na wykopie piszo, że będzie 15k na start.
Zastanawiam się obecnie nad "przebranżowieniem" się na programistę niskopoziomowego - C, C++ - programowanie systemowe, linux kernel development, gamedev, embedded i te sprawy.
Osobiście nie mieszałbym gamedev do embedded, chyba, że to gamedev dla urządzeń wbudowanych. ;)
Zastanawiam się nad tym, ponieważ wydaje mi się to trochę bardziej interesujące od webdevu, a poza tym widzę, że nie ma takiego "natłoku" ludzi w niskopoziomowym programowaniu.
Jest interesujące głównie ze względu na złożoność systemów i ilość wiedzy, którą trzeba ogarnąć. I nie ukrywam, że wiedza akademicka, a przynajmniej zdolność rozumienia na tym poziomie algorytmiki, a niekiedy i matematyki:
przykłady
MATEMATYKA - gdy np. generatory pseudolosowe trzeba ogarniać np. przy portowaniu na nową architekturę, która czegoś nie wspiera i trzeba to walnąć z palca/wiki/innegoprojektu/jakiegośtekstunaukowego, albo wspiera i trzeba wiedzieć, którą część połączyć ze sprzętem by to było wydajne i bezpieczne i nie doprowadzić przy tym do sytuacji kiedy generator zwraca wysoce przewidywalne wyniki
ALGORYTMIKA - komunikacja między procesami, stos sieciowy, algorytmy routingu, bebechy typu schelduler i masa innych.
Co o tym myślicie? Dodatkowo jak wygląda rynek pracy dla takich osób np. w Warszawie?
Dla jaj często sobie przeglądam oferty pracy i widuję nawet dość prowincjonalne lokacje. Nie licząc Warszawy, to jest na pewno Kraków, Wrocław i inne wojewódzkie - nawet "z tego prowincjonalnego" Białegostoku widziałem niedawno. Z tym, że embedded to rozległa działka pod którą podpadają tak sterowniki klimatyzacji w magazynie u Janusza handlującego ekskluzywnymi drewnianymi wibratorami, które trzeba przechowywać w odpowiedniej wilgotności, systemy sterowania dla pieców centralnego ogrzewania, systemy alarmowe, systemy rozpoznawania obrazów, sprzęt sieciowy (routery, switche, punkty dostępowe), centrale dla operatorów telekomunikacyjnych, bilbordy do wyświetlania reklam, czy automotive, czyli grzebanie przy komputerze w samochodzie a potem tłumaczenie, że to nie ty odpowiadasz za c**** działanie systemu, przez które doszło do wypadku. Jakieś łaziki marsjańskie czy satelity, rakiety i samoloty też tu podpadają.
Ogólnie chodzi mi o znalezienie jakiejś swojej niszy, ale może źle to nazywam :(
Nisza to spoko droga przy obecnym zalewie małp do kodowania, bo kiedyś jakiś kraj może się okazać tańszy przy zbliżonej jakości niż Polska i janusze Crudów zostaną odcięci od kurka z bilonem, bo po X latach ich wiedza nie będzie wykraczać poza pisanie getterów, setterów i kilku wzorców na skrzyż aplikowanych w każdym projekcie, czy ma to sens czy nie. Nie wykraczali poza tą strefę komfortu, bo woleli poświęcić cały wolny czas na jazdę Ferrari na kredyt i kurtyzany (autentyczne przypadki). Nisza po prostu niejako wymusza ogarnianie tematu głębiej. Programistyczny "mainstream" niekoniecznie.
Teraz kwestia płacy. Khmm... delikatnie rzecz ujmując w webdev napocisz się dużo mniej (zmora embedded to niekiedy wróżenie dlaczego ta kupa złomu zwana szumnie platformą docelową nie działa tak jak powinna, bo ktoś kto to projektował po pijaku nie tak poprowadził ścieżkę na płycie i hokus pokus mamy hardware bug, lub brak istotnych dla projektu informacji w dokumentacji technicznej) za te same pieniądze, mniejsza będzie twoja odpowiedzialność i możliwe szkody fizyczne (w embeded enjoy niespokojny sen bo wypchnęliście g**no klientowi, na skutek czego cały pion kotłów ogrzewania poszedł uprawiać miłość fizyczną itp.). No i aby w ogóle wejść do tego świata trzeba niebotycznie większej wiedzy niż przy klepaniu serwisów www.
A teraz tzw. "piękno kodu". Widziałem kod tak embedded w praktyce (klienci kalibru Silicon Valley) jak i webdev od strony admina (czyli często widziałem więcej różnorodnego kodu niż ludzie którzy pisali rzeczone serwisy www). I delikatnie rzecz mówiąc kod webowy jaki piszą przynajmniej Polscy "regularzy" w porywach do "seniorów" jest często tak pełny niedorzeczności i kombinowania jak koń pod górkę, że głowa mała. Dodać do tego znane kijowości wielu popularnych "platform blogowych i e-commerce" które wychodzą bardzo łatwo przy większym ruchu ale nie jest nawet od ponad dekady modyfikowana ani ruszana przez developerów. Chociaż wystarczyłoby jak w przypadku Wordpressa zmienić domyślną konfigurację, czy randomizować pewne rzeczy. Kompletnie po tych doświadczeniach nie szanuję tej branży.
W embedded też nie jest pięknie, ale generalnie widać, że poziom IQ jest w tej dziedzinie wyższy. Tam łączenie na ślinę dwóch modułów wymaga jednak więcej wysiłku intelektualnego gdy jest to niskopoziomowy kod działający blisko sprzętu i mający obsługiwać spory ruch sieciowy, czy znaczny strumień danych czasu rzeczywistego z interfejsów czujników monitorujących jakiś spory złożony system przy kilkuset odczytach na sekundę.
Plusem embedded jest to, że jak ogarniesz wymaganą wiedzę i przetrwasz chociaż rok w branży, to programistycznego ćwieka ci po tym zagiąć może co najwyżej programowanie funkcyjne. :P
Podsumowując - webdev dobry na start w bardzo wczesnym etapie kariery i jest się w tym całym programowaniu od niedawna. Embedded może być spoko na jakimś późniejszym etapie kariery (przykładowo przy końcówce studiów, bez których może być średnio łatwo w ogóle wejść w temat).
Późniejszym zyskiem może być połączeniem tych dwóch ścieżek ny być np. administratorem systemów UNIX, albo developerem C w "zwykłym"/"serwerowym" środowisku UNIX (oprogramowanie typu Apache samo się nie pisze i bynajmniej nie powstaje za darmo), czy programistą Go aka. golang. W Go pokrewieństwo z C oraz stosowanie wielu praktyk "filozofii UNIX" - tak projektowych jak i programistycznych - w tym języku sprawia, że ich znajomość wysoko procentuje, do tego posiada wsparcie dla pisania aplikacji WWW będących od razu własnymi serwerami. Jeśli nienawidzisz programowania obiektowego, to te dwa języki sprawią, że poczujesz się jak w domu. Hejterów obiektówki w obu nie brakuje i jest wśród nich w raczej dobrym tonie.
Ogólnie nawet jakby ci się odechciało kroczyć jedną czy drugą ścieżką, to znajomość C uważam, za must have dla prezentującego coś sobą programisty, który ma aspiracje na bycie czymś więcej niż małpą kodującą w jednym języku za kilka ton bananów miesięcznie. Otwiera oczy na wiele zagadnień i wyjaśnia wiele "magicznych" kwestii dotyczących programowania i błędów w nim.
Jak masz jakieś pytania jeszcze to wal śmiało.
EDIT:
P.S.
Co do pracy zdalnej to w embeded są i tacy co pracują 100% zdalnie ale to raczej "zaufani wyjadacze" korporacji elektronicznych dla których pracują, względnie zatrudnieni przez fundacje rozwijające jakieś komponenty softwarowe typu Free Libre Open Source istotne w branży - jak kernel Linux, FreeBSD, FreeRTOS itp.