Programowanie niskopoziomowe czy web dev?

0

Witajcie

Mam problem ze zdecydowaniem się między web developerką od strony backendu a niskopoziomowym programowaniem systemowym (C, kernele i te sprawy). Nie jestem człowiekiem, który goniłby za dużymi zarobkami. W kwestii web devu trochę odrzuca mnie fakt że programiści gardzą web developerami. Jeśli chodzi o programowanie systemowe to nie chce mi się tykać Rusta, na którego jest ostatnio moda. Wolę C i C++ od Rusta ale wszędzie gdzie się da mówi się o „przechodzeniu na Rusta”. Nie to, że nie lubię Rusta tylko po prostu mnie on najwyczajniej nie interesuje.

Chcę mieć poczucie że robię coś ambitnego a w przypadku web devu trochę czuję że będę zwykłym klepaczem stronek jak to mówią ci uprzedzeni do web developerów i podczas robienia hobbystycznych rzeczy w PHP mam poczucie że PHP fajne ale nie aż tak wymagające myślenia jak C. W C trzeba myśleć o zarządzaniu pamięcią i te sprawy a ja to lubię.

Będę wdzięczny za pomocne odpowiedzi

0
whiteman808 napisał(a):

nie chce mi się tykać Rusta, na którego jest ostatnio moda

Ta moda na Rusta na razie nie ma odzwierciedlenia w rynku pracy. Nierozsądne byłoby opierać obecnie swoją karierę o niego bez opcji zapasowej.

wszędzie gdzie się da mówi się o „przechodzeniu na Rusta”.

Trzeba generować hype. Jak ktoś pisze w Rust albo jego firma ma projekt w Rust, to opłaca mu się, żeby się tym się chwalić i głośno o tym mówić. Rust jest na tym etapie, że szczególnie potrzebuje hype'u, żeby przyciągnąć więcej programistów, którzy będą następnie robić biblioteki open source, tworzyć ekosystem, co w rezultacie sprawi też, że firmy będą chętniej przechodzić na Rusta itd.

0

Rozważam przejście z web dev na programowanie niskopoziomowe także z powodu że sam ze sobą się lepiej czułem zajmując się sprzętem i miałem poczucie zajmowania się czymś bardziej ambitnym w przypadku C itp np C wymaga więcej myślenia o zarządzaniu pamięcią a ja to lubię

1
whiteman808 napisał(a):

W kwestii web devu trochę odrzuca mnie fakt że programiści gardzą web developerami.

Ale web developer to programista przecież czemu miałby sam na siebie szambo wylewać?

Chcę mieć poczucie że robię coś ambitnego a w przypadku web devu trochę czuję że będę zwykłym klepaczem stronek jak to mówią ci uprzedzeni do web developerów i podczas robienia hobbystycznych rzeczy w PHP mam poczucie że PHP fajne ale nie aż tak wymagające myślenia jak C. W C trzeba myśleć o zarządzaniu pamięcią i te sprawy a ja to lubię.

low level + web na samą myśl generują mi się w głowie ciekawe projekty fuzji tych działek.

Robisz projekt strony internetowej np. edytor czy upload do przeglądarki firmware, a potem wykorzystując usb->uart podłączonym do komputera płytce arduino, resetujesz i wysyłasz komendy do bootloadera, komenda zapisu i bajty z tego firmware zuploadowanego i na końcu resetujesz płytkę i własnie nagrałeś nowy program.
Programowanie arduino przy pomocy jego bootloadera.

Możesz zrobić kernel driver, który wystawi socket z obsługą http i frontend, który będzie komunikował się z serwerem, a tam np. umożliwisz odczyt pamięci innych procesów czy iterowanie po aktywnych, czy inne rzeczy wewnątrz kernela. Sniffing jakichś funkcji kernelowych. Do których miałbyś opcję ze strony.

Ambitne projekty to takie, które ciebie interesują, jeśli coś jest magiczne i super ciekawe to znaczy że tego nie rozumiesz, bo potem się robi zwykłe i naturalne nawet wydaje się że wszyscy to wiedzą.
Też C jest rozwlekłe ten sam projekt zadania algorytmiczego napisany w jednym języku python w ~30 linijkach normalnego formatowania to w C zajęło w kernelu 120, w assemblerze czystym 500 linijek, w ten sam sposób za każdym razem rozwiązane, miałem jeszcze na fpga sprawdzić ile pracy trzeba włożyć w ten sam projekt(dobrze, że mi się przypomniało, że tego nie skończyłem), ale w każdym dowolnym środowisku.

0

Dla mnie parę lat spędzonych z Adobe Experience Managerem który obsuguje platformy webowe firm z listy top500 było fajną przygodą.

Problemy jakie kopią web development to:

  • podatność na wszelkie mody,
  • praca z marketingowcami którzy zmieniają zdanie co pół dnia.
3

To idź w embedded, ostatnio płace wzrosły i nie ma takiej januszerki, ale pamiętaj, że wymaga to sporo trudnej wiedzy. Na plus, że sporo wannabe nie idzie w embedded, bo za długo trzeba się uczyć, żeby zarabiać.
Edit: na drugi plus, że projekty potrafią być imo najciekawsze.

Co do webdev to kiedyś faktycznie była to kraina mlekiem i miodem płynąca patrząc przez stosunek włożonej pracy do zarobków, ale ostatnio mocno się popsuła przez napływ sporej ilości ludzi do tych języków. Teraz musisz znać z 10 frameworkow i każda chmurę dostępna na rynku xd. Jak chcesz siedzieć w ciągłym wyścigu szczurów i nie wiedzy co dalej to polecam.

3

Heh, między niskopoziomowym C a klepaniem stronek w językach dynamicznych jest jeszcze ocean opcji pośrednich gdzie czasem klepie się proste stronki w językach trudniejszych niż PHP a czasem walczy się o wydajność. głównie o wydajność danych i wydajność dużej ilości danych

Jak pisze @Czitels embedded. Chyba ostatnie miejsce gdzie w PL używa się C bo przecież dużo systemów operacyjnych się nie pisze. A jakieś sterowniki i firmware - tak. Sam pracowałem w firmie gdzie był dział embedded i klepali tam coś w C/C++. Czasem na małe urzadzenia bez systemu operacyjnego. Czasem na większe urządzenia z prostym linuxem

Jak przeglądałem oferty na Rusta to głownie wyskakują oferty na Web3.0 i SmartContracty. Mam wrażennie iż programiści Rusta już trochę tym rzygają

0
whiteman808 napisał(a):

Będę wdzięczny za pomocne odpowiedzi

To ja ci odpowiem tak:

Lepiej być Jobsem czy Wozniakiem? Jeden skończył na raka a drugi tańcząc z gwiazdami. O jednym wciąż się mówi z podziwem a drugi został maskotką.

Wybieraj mądrze.

0
loza_prowizoryczna napisał(a):
whiteman808 napisał(a):

Będę wdzięczny za pomocne odpowiedzi

To ja ci odpowiem tak:

Lepiej być Jobsem czy Wozniakiem? Jeden skończył na raka a drugi tańcząc z gwiazdami. O jednym wciąż się mówi z podziwem a drugi został maskotką.

Wybieraj mądrze.

Jakby dietą Jobsa nie były same owoce i narkotyki to żył by dłużej. Nawet problemem nie były te narkotyki tylko owoce co mu rozwaliły trzustkę :(

UPDATE teraz sobie przypomniałem iż zanim Wozniak odszedł to roztrzaskał się awionetką i zaczał mieć problemy z pamięcią. Nie wiem na ile to wpłyneło na jego decyzję

6
whiteman808 napisał(a):

W kwestii web devu trochę odrzuca mnie fakt że programiści gardzą web developerami.

image
Poważnie gdzieś się spotkałeś z pogardą dla webdevu, nie licząc nastolatków na Discordzie?

1
whiteman808 napisał(a):

C wymaga więcej myślenia o zarządzaniu pamięcią a ja to lubię

Czyt. lubisz wprowadzac do oprogramowania bugi i wycieki pamieci, vectory ataku dla hakerow? Myslenie nie nad tym jak dostarczyc realna wartosc dla uzytkownika, a kiedy zwolnic pamiec? Masochista ;)

Takie myslenie jest wrecz szkodliwe.

https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/press-release-technical-report/

https://thenewstack.io/white-house-warns-against-using-memory-unsafe-languages/

3

Ja bym szedł w niskopoziomowe tematy. Jest to nisza, mało okupowana + trudniejsza niż web dev. Web dev jest obecnie main targetem wszelkiej maści barachła co się pcha do IT. W razie czego, przeskoczenie z niskiego poziomu do takiego js'a będzie prostsze niż w drugą stronę.

0
KamilAdam napisał(a):

Jakby dietą Jobsa nie były same owoce i narkotyki to żył by dłużej. Nawet problemem nie były te narkotyki tylko owoce co mu rozwaliły trzustkę :(

No widzisz, z której strony by nie spojrzeć to front ma lepiej byleby tylko mieć życie poza owocowymi czwartkami. Niski poziom to za duże ryzyko uszkodzenia głowy.

4

Poniższy post jest pisany z myślą o czymś ambitniejszym niż embeded które polega na zrobieniu he he czujnika temperatury na Arduino [bo to w embedded level podobny do bycia wielkim wbdeveloperem stawiającym wszystkim strony na Wordpress].

Masz już solidną usystematyzowaną wiedzę o podstawowych konceptach budowy CPU, DMA, RAM? Wiesz jak są one realizowane w hardware? Wiesz czy kilka różnych CPU może zapisać jednocześnie coś w tej samej kości RAM?

Jeśli nie to są o tym imponującej grubości podręczniki. I raczej trzeba się z nimi zapoznać jeśli uczysz się sam i nie chcesz rozwlekać w czasie procesu nauki. Tak, serio. Bez solidnego zbioru opisującego kupę konceptów jakie się spotyka w low level będziesz wielokrotnie nadeptywał na grabie radośnie czekające by przywalić ci w czoło.

Przeczytałeś ze zrozumieniem przynajmniej ze dwa, kilka razy?

Kochasz czytać dokumentację CPU zajmującą 1000+ stron w optymistycznym przypadku [w mniej optymistycznych jest kilka razy tyle a w najgorszych tyle co kot napłakał i mało wyjaśnia]? Kochasz wyszukiwać kilka tygodni nie znając słów kluczowych informacji o tym jak wygląda wewnętrzna budowa jakiegoś elementu czy rozszerzenia CPU bez gwarancji że trafisz losowo na właściwy trop, bo nawet dokumentacja producenta potrafi się nie zagłębiać w takie detale [nawet produkty "wiodących producentów" mają takie momenty], ale musisz to wiedzieć by zaimplementować pewną funkcjonalność bo bez tej wiedzy nie układa ci się w głowie co w ogóle musisz naklepać w kodzie? Jeśli nie wystraszyłeś się na tym etapie to albo nie wiesz co to oznacza w praktyce albo może będziez z ciebie co najmniej low level code monkey.

Teraz pomedytujmy nad tym co trzeba robić by być czymś więcej niż code monkey.

Kochasz czytać research papers, które początkujący muszą czytać z jakimś solidnym podręcznikiem w ręku, by zdobyć wiedzę której inaczej nie zdobędziesz nie mając doświadczonego mentora (o którego trudno, a jak już się znajdzie takiego który jest jako tako komunikatywny to ma zazwyczaj kupę innych rzeczy na głowie równolegle z opieką nad twoimi postępami)? Myśl o synchronizacji dostępu kilku podzespołów do wspólnych zasobów brzmi jak coś o czym chciałbyś myśleć przed snem czy w czasie kąpieli? Traktujesz poznawanie architektur procesorów, które są martwe od kilku dekad jako hobby? Masz w ogóle jakąś wiedzę czego brakuje w branży czy ogólnie na rynku i co można by zaimplementować lub zaimplementować coś co już istnieje wydajniej? Jeśli tak, to możesz ewentualnie dojść do wyższego levelu niż owe code monkey. Acz gwarancji nie ma, a spocić się można ostro już na etapie bycia zielonym jak trawa na wiosnę.

A i czy wspominałem, że praca z codebase na wiele milionów linii jak Linux (który jest kernelem, a nie systemem operacyjnym bo sobie Torvalds zredefiniował pojęcie systemu operacyjnego) potrafi być tym bardziej uciążliwa im dalej w popularności odsuwamy się od Linuksa, bo dokumentacji mało i po kilku latach się deaktualizuje, a pewne części nie były nigdy dokumentowane bo pracowała nad nimi jedna osoba od lat? Nawt wieloletni commiterzy potrafią się zgubić albo nie rozumieć co palili jak coś pisali dekadę wcześniej a teraz muszą to przerabiać i nie do końca widzą na pierwszy rzut oka z czym będą interferencje jak coś zmienią. Tak, piszę na podstawie tego co widziałem w praktyce tak obserwując z boku jak i w rozmowach z nimi.

0
szatkus1 napisał(a):
whiteman808 napisał(a):

W kwestii web devu trochę odrzuca mnie fakt że programiści gardzą web developerami.

Poważnie gdzieś się spotkałeś z pogardą dla webdevu, nie licząc nastolatków na Discordzie?

Raczej się nie spotkałem z pogardą dla web devów tym bardziej że większość projektów teraz to webdev, praktycznie wszystkie desktopowe apki są w końcu przepisywane na web.
Spotkałem się z pogardą dla frontend developerów - wynika to z irytacji tym że nie potrafią zrozumieć CSSa

1
obscurity napisał(a):
szatkus1 napisał(a):
whiteman808 napisał(a):

W kwestii web devu trochę odrzuca mnie fakt że programiści gardzą web developerami.

Poważnie gdzieś się spotkałeś z pogardą dla webdevu, nie licząc nastolatków na Discordzie?

Raczej się nie spotkałem z pogardą dla web devów tym bardziej że większość projektów teraz to webdev, praktycznie wszystkie desktopowe apki są w końcu przepisywane na web.
Spotkałem się z pogardą dla frontend developerów - wynika to z irytacji tym że nie potrafią zrozumieć CSSa

Webdevem gardzą wszyscy embeddedowcy, systemowcy, c++owcy, cobolowcy itd czyli jakieś 10-20% branży. Czemu? A no trzeba mieć coś za to męczeństwo w tych językach.

7
whiteman808 napisał(a):

Chcę mieć poczucie że robię coś ambitnego a w przypadku web devu trochę czuję że będę zwykłym klepaczem stronek jak to mówią ci uprzedzeni do web developerów i podczas robienia hobbystycznych rzeczy w PHP mam poczucie że PHP fajne ale nie aż tak wymagające myślenia jak C. W C trzeba myśleć o zarządzaniu pamięcią i te sprawy a ja to lubię.

To musisz się zdecydować czy ambitnego czy C. Ręczne zarządzanie pamięcią jest tak ambitne jak wyłączenie sobie pnia mózgu i zarządzanie swoim oddychaniem. Niewątpliwe ciekawe, ale
jak średnio 13 razy na minutę musisz przerwać to nad czym myślisz i pomyśleć wdech - wydech to może Ci się w końcu ten ambitny projekt znudzić.

3

Poza tym warto brać pod uwagę otoczenie rynkowe specjalizacji w której chcesz się obracać. Pomiędzy Odra, a Bugiem za wiele nie dzieje się w obszarze wytwarzania sprzętu.

  • Trochę firm które coś robią dla automotive (Delphi Technologies)
  • Parę firm które siedzą w tematach klejowych (Solwit)
  • Pojedyncze firmy które robią sprzęt dla górnictwa.
  • Pojedyncze oddziały zagranicznych korpo które wytwarzają soft do hardware (Intel, Motorola, Ericsson)
  • Pojedyncze firmy które robią dla sektora obronnego (PitRadwar, WB Electroncs)
  • Producent sprzętu agd.
  • Trochę januszeksów które robią zlecenia.

Popytaj ludzi, poczytaj opinie o firmach, zobacz jak wyglądają finanse, zastanów się czy chcesz w takich firmach pracować. Na pewno nie będzie tak, że będziesz mógł przebierać, wybierać, dobierać projekty pod siebie.

W amerykańskiej frme na M która ma oddział w Krk pracowałem i raczej nagorszemu wrogowi bym nie polecał. Chyba, że ktoś chce działać w korpo w którym atmosfera jest z lat 90.

Wątpię aby agile miał zastosowanie w obszarze embedded. Firmware dajmy do sterowania silnikiem w wagenie musi zostać wydany w koretnym czasie, a wersja musi być stabilna bo potem nie zrobisz deploya do tysięcy wagenów które poszły do klienta. Znaczy zrobisz ale koszt tego jest jaki jest.

1
jarekr000000 napisał(a):

To musisz się zdecydować czy ambitnego czy C. Ręczne zarządzanie pamięcią jest tak ambitne jak wyłączenie sobie pnia mózgu i zarządzanie swoim oddychaniem. Niewątpliwe ciekawe, ale
jak średnio 13 razy na minutę musisz przerwać to nad czym myślisz i pomyśleć wdech - wydech to może Ci się w końcu ten ambitny projekt znudzić.

Język C jest moim podstawowym językiem programowania i aż muszę to skomentować. Jeśli w jakimś zadaniu zarządzanie pamięcią jest dominującym problemem, to albo jest to wyjątkowo specyficzne zadanie, które wymaga ogromnej liczby alokacji/dealokacji, albo "ambitność" tego zadania jest na poziomie bliskim zera. Wg mojego doświadczenia, podstawowym problemem w programowaniu w C jest to samo, co w każdym innym języku i czego żaden język nie jest w stanie wyeliminować: brak sprawdzenia jakiegoś warunku, bądź sprawdzenie nieprawidłowego,... typowa sytuacja, że trudno mieć w głowie poprawną wizję całości problemu i skonwertować go na kod źródłowy. Problemy z pamięcią z bardzo dużą skutecznością wskazuje program Valgrind - i poprawka jest zazwyczaj dużo łatwiejsza do zrobienia niż poprawka problemu z nietrywialną logiką.

Nadal powstają projekty open-source w czystym C, bo to nadal dobry język, a nie każdy dał się przekonać że inne języki to taka znowu rewelacja. W świecie komercyjnym być może jest z tym trudniej, bo jeśli nie przygotowuje się oprogramowania samodzielnie, tylko ma się nad głową jakiegoś mędrca-menedżera, to ten mędrzec-menadżer może nie pozwolić na C. Ja robię komercyjne oprogramowanie samodzielnie (nie chcę się zdradzać w jakiej branży; jest dość wąska), używam głównie czystego C, podczas gdy inni w tej działce (nie wiem czy ktokolwiek w Polsce oprócz mnie robi to w pojedynkę) używają innych języków i nie zdziwiłbym się, gdyby zespoły ich fachowców wmawiały sobie nawzajem, że w C to nie sposób zrobić programu, bo tam trzeba się stale tylko zajmować zarządzaniem pamięcią.

0
Troll anty OOP napisał(a):

Nadal powstają projekty open-source w czystym C, bo to nadal dobry język, a nie każdy dał się przekonać że inne języki to taka znowu rewelacja.

Z tego co widac na statystykach jakie publikuje GitHub (link: https://madnight.github.io/githut/#/pull_requests/2024/1) to w ostatnich latach popularność języka C oscyluje w okolicach 5%, Rust to jakieś 2%, o dziwo C++ dobija do 10%.

2

C++ jest wysoko bo to wciąż język w którym piszą sporo rzeczy typu "obsługa wszelakiej większej infrastruktury" i "silników". Działka która ma być jako tako wystarczająco szybka a przy tym korpo które za tym kodem stoją wciąż nie wyzwoliły się z trwającego już czwartą dekadę kultu cargo programowania obiektowego, więc klasy to must bo inaczej "programiści się gubią".

1

Nie idź w embedded, to nisza w PL. Ostatnio wysłałem zgłoszenie do int2code i automat odpisał że mają mnóstwo kandydatów tak że widzisz. Poza tym - czy jesteś elektronikiem? Czy umiesz używać miernika, lutownicy i oscyloskopu?

0
  1. Jest sens pchać się w C++ jak moje główne środowisko pracy to Linux i wiele programów, które używam jest napisana w C, nie C++? Z niskopoziomowych rzeczy interesuje mnie jedynie kernel linux. Poza tym jednym aspektem niskopoziomowego programowania to wolę programować wysokopoziomowo. Internale windowsa kompletnie nie interesują mnie. Nie interesuje mnie też robienie gierek, silników do gier, aplikacji z GUI. Jak już to wolę ncurses.

  2. Jeżeli miałbym pchać się w web dev to jest sens ogarnąć dla samego siebie algorytmy? Znalazłem książkę z przykładami w Javie, w której jest dosyć prostym językiem wyłożone co to jest notacja wielkiego O, złożoność obliczeniowa, listy łączone, stosy, kolejki, algorytmy sortowania i tego typu sprawy. Algorytmów chcę się uczyć głównie z ciekawości i jakby przyszło mi kiedyś w C++ czy Javie wybierać między użyciem wektora / array listy, hash mapy czy jakiejś innej struktury danych, by lepiej wypaść na interview i by mieć wiedzę o podstawowych algorytmach jakby kiedyś przyszło mi pracować jako programista Javy (bo większe zarobki) lub C++.

  3. Czy przy wybieraniu języka programowania powinienem sugerować się zarobkami?

1
whiteman808 napisał(a):
  1. Jest sens pchać się w C++ jak moje główne środowisko pracy to Linux i wiele programów, które używam jest napisana w C, nie C++? Z niskopoziomowych rzeczy interesuje mnie jedynie kernel linux. Poza tym jednym aspektem niskopoziomowego programowania to wolę programować wysokopoziomowo. Internale windowsa kompletnie nie interesują mnie. Nie interesuje mnie też robienie gierek, silników do gier, aplikacji z GUI. Jak już to wolę ncurses.

C++ to taka ilość wiedzy iż można na to życie stracić i i tak nie ogarniesz wszystkiego. Trudno coś doradzać. BTW co do kernela linuxa to mieli udostępniac możliwość pisania w Ruscie, może tym językiem warto się zainteresować?

  1. Jeżeli miałbym pchać się w web dev to jest sens ogarnąć dla samego siebie algorytmy? Znalazłem książkę z przykładami w Javie, w której jest dosyć prostym językiem wyłożone co to jest notacja wielkiego O, złożoność obliczeniowa, listy łączone, stosy, kolejki, algorytmy sortowania i tego typu sprawy. Algorytmów chcę się uczyć głównie z ciekawości i jakby przyszło mi kiedyś w C++ czy Javie wybierać między użyciem wektora / array listy, hash mapy czy jakiejś innej struktury danych, by lepiej wypaść na interview i by mieć wiedzę o podstawowych algorytmach jakby kiedyś przyszło mi pracować jako programista Javy (bo większe zarobki) lub C++.

Algorytmy to szeroki temat. Dobrze wiedzieć co to notacja dużego O i czemu ArrayLista jest lepsza w Javie. I to się faktycznie przydaje. Z drugiej strony nikt nie pisze własnego sortowania bo to już jest napisane. Najbardziej algorytmiczne rzeczy jakie mi się trafiły to przechodzenie po drzewie. BTW warto pamiętać iż dwa najczęstrze problemy w programowaniu to

  1. Nazywanie rzeczy (zmiennych, funkcji, modułów)
  2. Kiedy odświeżyć cache
  3. bład pomyłki o jeden w iteracji
  1. Czy przy wybieraniu języka programowania powinienem sugerować się zarobkami?

Zarobkami, popularnością, czy podoba ci się składnia, czy kod języka jest opensource czy zamknięty. Jest pełna dowolność :P

0
KamilAdam napisał(a):
whiteman808 napisał(a):
  1. Jest sens pchać się w C++ jak moje główne środowisko pracy to Linux i wiele programów, które używam jest napisana w C, nie C++? Z niskopoziomowych rzeczy interesuje mnie jedynie kernel linux. Poza tym jednym aspektem niskopoziomowego programowania to wolę programować wysokopoziomowo. Internale windowsa kompletnie nie interesują mnie. Nie interesuje mnie też robienie gierek, silników do gier, aplikacji z GUI. Jak już to wolę ncurses.

C++ to taka ilość wiedzy iż można na to życie stracić i i tak nie ogarniesz wszystkiego. Trudno coś doradzać. BTW co do kernela linuxa to mieli udostępniac możliwość pisania w Ruscie, może tym językiem warto się zainteresować?

Weź, w Linux kernel to się liczy C + assembly. Rust dodali i nikt tego nie używa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.