Sens wchodzenia w C++ w 2020 roku

1

Mam rozterkę i potrzebuję głosów rozsądku (tl;dr na dole posta).

W planach mam spróbować kiedyś wskoczyć do projektów z okolic finansowych. Robiłem już lekkie rozeznanie, bo próba wskoczenia do tych projektów wymaga sporo czasu poświęconego na naukę we własnym zakresie. Tutaj pojawia się pierwszy problem. Sporo z nich wykorzystuje między innymi C++ i jest to w 9/10 ofert jeden z wymogów koniecznych.

C++ ostatni raz używałem na studiach w standardzie C++98. Fakt, że był to jeden z lepiej opanowanych języków ale było to tak dawno, że nic z tego nie pamiętam. Później były inne wytwory około programistyczne jak Java czy C# (bez urazy dla pracujących w tym).
Jakiś czas temu poznałem nieco Rust dla samego siebie. Nie poznałem jeszcze wielu zagadnień tego języka i czytając różne kody są rzeczy, które nic mi nie mówią.

Dlaczego wspominam o Rust? Wiele wskazuje na to, że jest to solidny kandydat może nie tyle do wyparcia C++ ale do zastąpienia w wielu różnych zastosowaniach gdzie potrzeba wydajności i względnego bezpieczeństwa. Ma to zresztą już miejsce w różnych projektach i tych aktualnych i tych przyszłych. Wspominam też dlatego, że jeżeli ostatecznie jednak nie pójdę w to C++ to skręcę w kierunku Rust.

Istnieje szansa, że nie uda mi się wskoczyć do działki o której myślę i wtedy nauka C++ może zabrać tylko czas. Chyba, że jestem w błędzie i przegapiłem proces ewolucji tego języka i jego wykorzystania? Ktoś z szanownych czytających wie coś więcej na temat wykorzystania C++ poza desktopem? Osobiście znam kilka przypadków gdzie jakieś usługi dużych aplikacji są oparte o C++ ewentualnie jeszcze AI/ML ale na tym kończy się moja wiedza.
Kolejna sprawa jest taka, że zapoznanie się ze standardem 17/20 (raczej nowszy) nie gwarantuje jego zawodowego wykorzystania, bo projekty do których chcę się dostać mogą być odrobinę wstecz.

tl;dr
Zastanawiam się czy w 2020 roku nadal jest sens wchodzenia w C++ podczas gdy mamy Rust. Standard 20 jest nowy, 17 powinien już funkcjonować w projektach. Jednak nie jestem pewny jaki % zajmują te nowsze standardy w aktualnych projektach? Jakie znacie domeny w których jeszcze wykorzystuje się C++ (poza embedded/desktop) we w miarę świeżym standardzie?

3

W planach mam spróbować kiedyś wskoczyć do projektów z okolic finansowych
(wzglednie) czesto takie projekty pisze sie tez funkcyjnie. Mozesz sprobowac np OCamla jesli nie lubisz C++. Tylko wskoczyc do np. Jane Street tez chyba jakos szczegolnie latwo nie jest.

4

Jednak nie jestem pewny jaki % zajmują te nowsze standardy w aktualnych projektach?

O panie, tego to Ci nikt nie powie, sam jak ostatnio chodziłem na rozmowy to wszędzie był najnowszy standard, a potem jak się człowiek dostał to okazuje się, że najnowszy to 11 i to też tylko w makefile.

Jakie znacie domeny w których jeszcze wykorzystuje się C++ (poza embedded/desktop) we w miarę świeżym standardzie?

Cloud? Sam robię trochę mikroserwisów w C++ w pracy

Zastanawiam się czy w 2020 roku nadal jest sens wchodzenia w C++ podczas gdy mamy Rust. Standard 20 jest nowy, 17 powinien już funkcjonować w projektach.

Praca jest, płaca jest, wejść raczej nie jest trudno, korpo chłonie ludzi, z rekrutacji mam wrażenie, że bardziej ceniona jest wiedza domenowa niż znajomość jakiś szczegółów języka. Znajomi mi mówią, że jest sporo więcej utrzymania apek niż ich rozwoju, sam fanem nie jestem, czytanie logów i wstawianie ifów aby się u klienta nie posypało. Ale za to są też ciekawsze projekty za granicą, chociażby ESA czy CERN. Standard standardem, nie musi być 20 czy 17 aby jakość była, a może być i 20, i będziesz babrać się w C z klasami.

Rust wg mnie jest dosyć fajnym językiem, samo zarządzanie zależnościami i budowanie bije na głowę szukanie ręczne bibliotek i budowanie za pomocą make/cmake czy też utrzymanie jednego stylu za pomocą rustfmt(nie ma takiego spaghetti jak sam mam w pracy) itp, tyle że rynek pracy na ten moment jest jaki jest. Sam przeglądam oferty z Rusta i na dzień dzisiejszy marnie to wygląda, bym powiedział że nawet mniej popularne niż Go. Myślę, że w dłuższej perspektywie łatwiej będzie znaleźć pracę w Rust z doświadczeniem w C/C++ ze względu na podobne koncepty niż w Rust 'z ulicy'.

1

Ten wątek powinien być napisany odwrotnie, spróbuj jeszcze raz.

To znaczy piszesz do nas typowy arogancki tekst programisty cpp, że tylko tego używa prawdziwy programista, że dostęp do maszyny, do systemowego api, że daje kontrole, władze nad tym co robisz i że wszystko inne to wymysły i zabawki dla c,iot.. My Ci wtedy piszemy byś przyhamował, byś wyluzował i dał szanse w życiu innym opcjom.

Jeśli tak na to nie patrzysz, to zwyczajnie nie poradzisz sobie, psychicznie wysiądziesz nim cokolwiek sensownego zaczniesz skrobać w tym C++.

5

Później były inne wytwory około programistyczne jak Java czy C# (bez urazy dla pracujących w tym).

Z mojego doświadczenia
Trzeba bardzo kochać cpp żeby po zapoznaniu się z tzw wytworem dalej w cpp pracować.

Cpp to mega utrzymanie
Łata na łacie
Jak trafisz coś nowego w cpp to śmiało graj w totka

0

Co masz na myśli około finansowe projekty? Skoro c++ i trudno się dostać to myślę raczej takie z obliczeniami niż takie gdzie kopiujesz dane z punktu A do punktu B. Z mojego skromnego doświadczenia wynika że w takich projektach jest mnóstwo c++, nie licz na nowe wersje. Przepisanie tego na rusta nigdy nie nastąpi, zbyt ryzykowne wchodzenie w niszowa technologie, do tego decydują o tym osoby które siedzą tam X lat i mają swoje preferencje i interes, to czy technicznie jakiś język czy technologia jest lepsza od drugiej to jest drugorzędna sprawa.
Dlaczego miałbyś się nie dostać?
Skoro chcesz robić w takich projektach to po prostu ucz się c++ i wiedzy domenowej. W najgorszym przypadku to i tak wiedza z c++ zaprocentuje w wytworach typu Java czy c#

4

Jak jesteś na studiach to łatwo znaleźć pracę np w takim Krakowie, bo stażów jest trochę i jak ktoś up pisał - korpo chłonie. Niemniej jednak jest to siedzienie w dużych wielomilionowych kobyłach przy urzymaniówce jak np w Nokii. Stąd siłą rzecz skoro projekty są stare nie będzie nowoczesnych standardów i tak faktycznie jest. Wymaga się nowszych, bo jak jest coś nowego to używa się nowych możliwości na tyle na ile kompilator daje taką możliwość bez wysypania się starego bryka. (np max c++ 11)
Nowych projektów nikt nie zaczyna w c++, bo jest wiele języków prostszych, którymi można c++ zastąpić. Są takie branże gdzie dalej ta technologia dominuje, niemniej jednak wiele rzeczy już zostało napisane.

Podsumowując:

  • jeżeli nie wbijesz się na rynek podczas studiów, albo zaraz po jako świeży absolwent to mówię od razu, że ** nie masz szans** wejść jako samouk, ponieważ tutaj rekrutuje się głównie do korpo a na dodatek ciężko zrobić projekt jako niedoświadczony który byłby użyty tylko do c++, więc odpuść sobie.
  • jeżeli nie masz wybranej konkretnej branży którą bardzo lubisz i chcesz w niej zostać to szczerze mówiąc są obecnie lepsze technologie do zarabiania pieniędzy.
  • ilość ofert pracy nie będzie rosnąć i trzeba się z tym pogodzić. Na pewno dla juniorów nie będzie rosnąć. Dla starych utrzymaczy kodu tak.
  • bardzo ciężko w Polsce znaleźć fajną pracę w c++ poza utrzymaniówką i myślę, że śmiało można stwierdzić, że prawie jej nie ma. Dlatego musisz się dostosować do takiego klimatu. Outsourcing, analiza/konfiguracja przez 80% sprintu a następnie dodanie jednego ifa, żeby dzialało. Nie nauczysz się programować, bo z roku programowania wyjdzie Ci w praktyce może dwa miesiące ze względu na ogromną ilość domenowej zabawy i analizowania kodu.
1
Czitels napisał(a):
  • bardzo ciężko w Polsce znaleźć fajną pracę w c++ poza utrzymaniówką i myślę, że śmiało można stwierdzić, że prawie jej nie ma. Dlatego musisz się dostosować do takiego klimatu. Outsourcing, analiza/konfiguracja przez 80% sprintu a następnie dodanie jednego ifa, żeby dzialało. Nie nauczysz się programować, bo z roku programowania wyjdzie Ci w praktyce może dwa miesiące ze względu na ogromną ilość domenowej zabawy i analizowania kodu.

W samej Łodzi, która generalnie jest informatycznym zadupiem, są przynajmniej 2 firmy które robią fajne rzeczy w C++, więc podejrzewam że gdzie indziej będzie lepiej tylko trzeba poszukać.

Zdradzę wam sekret. Fajne projekty w C++ to nie są te, które idą na sprzedaż. To są projekty wewnętrzne, które pisze się na potrzeby produktu, który idzie na sprzedaż. A ponieważ firmy piszą je dla siebie, a nie dla klienta, to i podejście jest inne - bardziej luźne, mniej tego o czym pisze Czitels, a więcej radosnej twórczości, jaką lubi każdy programista.

0

No i co do ciekawych projektów to są myślę w branży naukowej. Np właśnie w ESA, CERN, centrach obliczeniowych, na pojedynczych uczelniach itd. No ale tutaj już głównie za granicą.

0
Czitels napisał(a):
  • ilość ofert pracy nie będzie rosnąć i trzeba się z tym pogodzić. Na pewno dla juniorów nie będzie rosnąć. Dla starych utrzymaczy kodu tak.
  • bardzo ciężko w Polsce znaleźć fajną pracę w c++ poza utrzymaniówką i myślę, że śmiało można stwierdzić, że prawie jej nie ma. Dlatego musisz się dostosować do takiego klimatu. Outsourcing, analiza/konfiguracja przez 80% sprintu a następnie dodanie jednego ifa, żeby dzialało. Nie nauczysz się programować, bo z roku programowania wyjdzie Ci w praktyce może dwa miesiące ze względu na ogromną ilość domenowej zabawy i analizowania kodu.

Hmm, właściwie wszystkie firmy automotive w Polsce mają jakieś nowe projekty pisane w cpp. I tych projektów jest dosyć sporo, bo ADAS i infotainment zaczynają dominować. W praktyce to najlepszy okres, bo technologie są jeszcze spoko - ale Niemcy wymyślają już swoje rozwiązania, więc "fajność" niedługo się skończy.
80% sprintu na dodanie nowego if-a może się zdarzyć, bo automotive kocha procesy, ale w infotainmentcie, a nawet ADAS-ie jest spora szansa na normalny (niemiecki) managment.
Oczywiście to nadal praca dla zagranicznego klienta. Co do wiedzy domenowej, to oczywiście jest dosyć ważna (jak chyba w każdym innym języku).

8

Standard 20 jest nowy, 17 powinien już funkcjonować w projektach. Jednak nie jestem pewny jaki % zajmują te nowsze standardy w aktualnych projektach?

Nikt nie przepisuje aplikacji tylko dlatego że w internety wyszła nowa konferencja z nowinkami C++3x. To jest raczej na zasadzie - ok, przesiadamy się (wreszcie) na wersję kompilatora x.y, w której teraz można to i to. I od tego momentu potencjalnie w kodzie mogą pojawiać się fragmenty "nowszego standardu".
Sukcesem jest globalny refactoring projektu w postaci wywalenia customowego smartpointera na rzecz unique_ptr.
Nie chodzi o jakąś nieufność wobec nowych standardów, tylko po prostu nic na siłę. I nie udziwniać kodu zanadto bo tylko mastah oglądający konferencje go potem rozumie.
A juniorzy też są potrzebni. Juniorzy znają C with classes ;)

Jeśli projekt jest wieloplatformowy to dochodzi kwestia używania różnych kompilatorów jednocześnie, każdy w swojej wersji. I nie zawsze da się używać najnowszych wersji bo a to któraś libka zewnętrzna jeszcze nie działa, a to gdzieś w kodzie jest undefined behavior i na nowym kompilatorze się sypie… Welcome to C++ :)

0

@purrll Dodam że co prawda w standardach C++11 i nowszych doszło bardzo dużo nowego, to (prawie) wszystko z C++98 nadal działa. Wsteczna kompatybilność standardów C++ jest bardzo wysoka.

3

C++ ostatni raz używałem na studiach w standardzie C++98

Jeśli nie jesteś biegły w templatach / kontenerach / STL, to czeka cię tyle nauki, że odpuść sobie. Jeśli poznałeś, to reszta to żadne kopernikańskie przewroty nie są. No może Lambdy, ale to jest do ogarnięcia w miarę szybko.

Kolejna sprawa jest taka, że zapoznanie się ze standardem 17/20 (raczej nowszy) nie gwarantuje jego zawodowego wykorzystania

Ja to widzę tak, że C++ jest "stare obiektowe" i "nowe STL". Za wersję przełomową uważa się C++11, bo tym mniej-więcej zakończono tworzenie "nowego C++". Kolejne wersje to takie updejty, do zapoznania się, ale to nie jest tak, by to było jakieś ważne. Na rozmowach o pracę sprawdza się, czy kandydat na pewno zna "nowe C++" - np. shared pointery - a nie tylko mysli, że zna C++ bo ewolucje przeoczył. Ale chyba nikt normalny nie będzie pytał o to, co w której wersji weszło.
A adopcja nowych wersji oczywiście jest powolna.

wytwory około programistyczne jak Java czy C# (bez urazy dla pracujących w tym).

95% rynku w Polsce to te wytwory. Ci ludzie uważają się za programistów a nie skrypterów i to oni teraz są społecznością, więc uważaj z takimi tekstami, bo cię zjedzą. Wygląda na to, że Java i C# to teraz normalne języki programowania a C/C++ to hardcorowy język programowania.

Chyba, że jestem w błędzie i przegapiłem proces ewolucji tego języka i jego wykorzystania?

Jeśli Bjarnowi sie uda, to C++ zostanie jedynym językiem. Powiedział, że jego agenda to "put Garbage Collector out of bussiness", a to oznacza śmierć języków skryptowych. Ale na razie się nie udało, obecnie znaczenie C++ jest niszowe, rewolucja jeszcze nie nastąpiła.

Ktoś z szanownych czytających wie coś więcej na temat wykorzystania C++ poza desktopem?

Nie jest mi wiele wiadomo o wykorzystaniu "nowego" C++ na desktopach!? W nowym C++ pisane są core bussiness firm softwarowych. Firmy telekomunikacyjne piszą tym 5G, cloudowe rozwijają swoje kontenery, fintechy robią High Speed Trading, Automotive backend infotainment.
Rynek szeroko rozumianych frontendów został opanowany przez języki skryptowe, na Windowsie dominuje chyba C# .Net.
C++ na desktopach to chyba już nisze takie jak FOSS czy aplikacje potrzebujące Qt.

tl;dr Zastanawiam się czy w 2020 roku nadal jest sens wchodzenia w C++

W Polsce trudno o prace w "core", firmy trzymają to u siebie. Najwiekszy rynek to szeroko rozumiane frontendy, bo to łatwo jest "odczepić" od reszty i zlecić zdalnie komus w Polsce, Litwie itp.
W efekcie grupowy kretyn, co nauczył się jakiegoś frontendowania czy konfigurowywania jakiejś technologii ma dostęp do rynku światowego i trzepie majątek na B2B. A najlepszy student siedzi w korpo w C++ na takim sobie etacie i jest niszczony przez kolegów z zachodu, bo się boją by firma przypadkiem nie przeniosła działu do Polski.

tl;dr
Nie warto, chyba że kochasz zajmowanie się komputerami i ogólnie informatykę. Kasa jest gdzie indziej, oferty pracy są gdzie indziej.

3

Na naszym rynku brakuje trochę projektów IoT które są opierane o C/C++. Za to dużo automotive czy roboty w firmach typu nokia. Dużo u nas starego kodu który utrzymujemy czy sztukujemy. Tak sobie z pracą bywa, ale nie ma jakiejś tragedi.

2
Azarien napisał(a):

Jeśli projekt jest wieloplatformowy to dochodzi kwestia używania różnych kompilatorów jednocześnie, każdy w swojej wersji. I nie zawsze da się używać najnowszych wersji bo a to któraś libka zewnętrzna jeszcze nie działa, a to gdzieś w kodzie jest undefined behavior i na nowym kompilatorze się sypie… Welcome to C++ :)

Potwierdzam.
Przykładowo mój obecny projekt używa C++17 (Windows/MacOS/Linux), ale nie wolno mi używać std::optional std::variant std::filesystem, bo produkt wspiera taką wersję MacOS, na której nie ma jeszcze dostępnej standardowej biblioteki C++17.
A w przypadku std::filesystem to nie za bardzo dobrze działa, nawet na Windows z najnowszymi bibliotekami.
Ale mam dostępne wszystkie funkcjonalności języka C++17, co jest bardzo poręczne. Pewnie też szybko będę korzystał z concepts z C++20, bo one one nie mają zależności do binarek standardowej biblioteki.

0

Mimo wszystko języki dające nadzieję na klepanie kodu który nie jest mniej lub bardziej zaawansowanym crudem to raczej C, C++, Rust czy Go. (Dalej co kto lubi, zależy czy produkt jest interesujący)

Z drugiej strony robota w C++ czy jakimś Embedded jawi mi sie jako coś trudniejszego za mniejszą kasę.

4

Rust to raczej nisza, jedna oferta na miasto. Jak coś nie wypali to słabo. C++ w zasadzie też, raczej coraz mniej sensownych ofert. Zaczynałem od tego języka i wytrzymałem 4 lata w różnych firmach. Kiepskie stawki, a praca często wyniszczająca psychicznie. Najczęściej utrzymanie starego kodu z fragmentami napisanymi w standardzie C++17. Kompilacja projektu trwa kilka godzin, programiści którzy to pisali nie żyją już od kilkunastu lat, a Ty if'ami ratujesz świat. W embedded również nic dobrego mnie nie spotkało. Ważniejsze części systemu często niedostępne dla programistów z Polski, dostajesz tylko 'core' libki. Często piszesz w okrojonym C++ nawet bez STL'a, bez wyjątków... Na plus, że biznes okołoprojektowy i tematyka potrafi być ciekawa.

Jak dla mnie C++ raczej dla pasjonatów. Zarobić swoje zarobisz, jak jesteś wybitny to pewnie zarobisz dużo. Jak chcesz spokojną pracę i zarobić godnie to na ten moment łatwiej w Javie/C#. Ostatnio w Warszawie coś tam się rusza, trochę pojawia się w C++ w cloudzie, ByteDance rekrutuje do C++ i ML. Ogłoszenia fajne, pytanie jak to w praktyce wygląda :)

1

Właśnie jakiś czas temu przeglądalem oferty juniorskie w c++ i nawet jak ktoś ma już ten rok doświadczenia to praktyczne ich nie ma.

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