Droga rozwoju dla programisty C++ w 2020, czy istnieje coś takiego?

1

Ostatnio przeglądając github'a natrafiłem na stronkę o nazwie webdeveloper roadmap. Zastanawiam się czy dałoby się coś takiego zrobić dla programisty C++.
Tutaj ktoś zaczął, ale nie skończył: https://github.com/utilForever/cpp-developer-roadmap.

Pierwsze co mi przychodzi do głowy to znajomość nowoczesnego C++11 wzwyż.
Oczywiście nauka samego C również jest ważna.
Ale co byście jeszcze dodali? Biblioteki takie jak STL czy Boost?

Abstrahując oczywiście od specjalizacji typu gamedev lub embedded. Co taka osoba powinna sobie przyswoić?
Tutaj w załączniku zrobiłem zrzut ekranu ogłoszenia o pracę w Nokii gdzie jest wymienione m.in. STL czy wzorce projektowe. Co byście jeszcze dodali?

7

Specyfiką zastosowań C++ jest to, że oprócz standardowego języka i wymienionych bibliotek (boosta traktuję jak prawie-standard), realna praca wymaga bdb znajomości "czegoś", a to znajomości uP, a to frameworka GUI, a to WinAPI, a to hardwaru, który robi firma.
Mało wierzę w pracę w "konsolowym" C++, pełnym eleganckiego kodu itd - opinia nie poparta jakimikolwiek badaniami.

2

Abstrahując oczywiście od specjalizacji typu gamedev lub embedded.

Niestety tak się nie da z C++. Tak jak przeglądam oferty to albo chcą seniora ze stażem minimum dziesięć lat, albo speca w jakiejś domenie. A najlepiej to właśnie seniora, który jest specem w domenie, w której firma działa. Także juniorzy mają przewalone jeśli na start nie znają się dobrze na czymś oprócz języka.

10

Powiedzmy, że coś takiego

Co dalej, to w zależności od domeny i dziedziny. Co mogę tu podsunąć:

  • Do programowania systemowego pod Linuksem najlepszym wejściem jest Love. biblią zaś będzie The Linux Programming Interface Kerriska. Windowsem się nie zajmuję, więc książki do WinAPI nie mogę polecić.
  • Do programowania okienkowego zwykle używa się Qt - są książki, ale tu chyba wystarczy sama dokumentacja online, jest solidna (a przynajmniej była te ~5 lat temu, gdy się tym bawiłem, nie wiem jak jest teraz)
  • Do grafiki i gier podstawą będzie świetna stronka Learn OpenGL, poza tym całkiem niedawno wyszedł 3-częściowy kurs Kiciaka, który też się wydaje solidny. Można też od razu iść w Unreal engine - tu też nie pomogę, bo nigdy tego nie używałem.

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Oprócz tego standardowo kilka pozycji:

Aby być na bieżącą warto śledzić https://isocpp.org/ lub reddit/r/cpp

Sieci zacząć od Tanenbauma, wprowadzeniem do Linuksa będzie Shotts jr, potem pewnie jakiś handbook (pierwszy albo drugi).

0
Spearhead napisał(a):

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Co do zastosowań embedded to nie do końca rozumiem przewagę C++ nad zwykłym C. Nie wiem czy w urządzeniach potrzebna jest jakakolwiek obiektowość.

1
Mirai napisał(a):
Spearhead napisał(a):

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Co do zastosowań embedded to nie do końca rozumiem przewagę C++ nad zwykłym C. Nie wiem czy w urządzeniach potrzebna jest jakakolwiek obiektowość.

Pytanie co rozumiesz przez Embedded:

  • Atmegi i inne 8bitowce?
  • Małe ARMy bez Linuksa (bo są za małe żeby Linuks się tam zmieścił)
  • Duże ARMy jak te w Raspberry Pi (gdzie można uruchamiać programy normalnej wielkości jak na PC)
2
Mirai napisał(a):
Spearhead napisał(a):

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Co do zastosowań embedded to nie do końca rozumiem przewagę C++ nad zwykłym C. Nie wiem czy w urządzeniach potrzebna jest jakakolwiek obiektowość.

A ja rozumiem i używam (rzadko, bo rzadko uprawiam embedded, ale zawsze).
Konstruktor (bardzo użyteczne), destruktor, prywatyzacją pól i metod (programiści wszelkich Xxxxx Control Blocków zawsze o tym marzyli), i wiele innych. Bezpieczniejszy kod nigdy nie jest zły.

Panują mity, że C++ jest bardziej zasobożerne. Oczywiście kontenery swoje RAM potrzebują, ale w C tez nie są za darmo, na Atmedze 8 (kto jest embedowcem, wie co to jest) bym nie używał.
Przemigrowałem swój projekt na Atmega 8 z C do C++, i kod okazał się MNIEJSZY, analizowałem to w dumpie ASM. Dzięki dokładnej deklaracji zmiennych i metod prywatnych kompilator z opcją O2 uzyskał pewność, ze nie są używane, i je zoptymalizował.
Większa wiedza o kodzie -> większa wydajność.

0
KamilAdam napisał(a):
Mirai napisał(a):
Spearhead napisał(a):

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Co do zastosowań embedded to nie do końca rozumiem przewagę C++ nad zwykłym C. Nie wiem czy w urządzeniach potrzebna jest jakakolwiek obiektowość.

Pytanie co rozumiesz przez Embedded:

  • Atmegi i inne 8bitowce?
  • Małe ARMy bez Linuksa
  • Duże ARMy jak te w Raspberry Pi

Wszystko, co ma zieloną płytkę drukowaną jest embedded ;)
Panuje w tym straszne zamieszanie.

A wprowadzanie ekosystemu Arduino cofnęło poziom kwalifikacji o epokę. Np TFURCY bibliotek arduino nie znają koncepcji namespace, gdy biblioteka dotycz jakiegoś chipu, zwykle ma jego nazwę, i nazwy się kłócą. Oczywiście makra zamiast kodu C++ itd...

ps. raspeberry to serwer Java EE :)

0

Tak trochę off-topic, to ogłoszenie z Nokii to jest totalny misz-masz - znaj wszystko z 10 obszarów z których każdy to są lata pracy żeby w tym się jako-tako czuć a potem w zależności od zainteresowań będziesz pracował z toolchainem albo nad sterownikami albo z eCPRI/CPRI :D Ogłoszenia Nokii z linkedina już są dużo mniej bombastyczne niż ten plakat.

4
Mirai napisał(a):
Spearhead napisał(a):

Są jeszcze takie zagadnienia jak finanse czy embedded, ponownie poza moimi zainteresowaniami, więc nie będę polecał.

Co do zastosowań embedded to nie do końca rozumiem przewagę C++ nad zwykłym C. Nie wiem czy w urządzeniach potrzebna jest jakakolwiek obiektowość.

Sama wiązanie C++ z "obiektowością" wskazuje że faktycznie niezbyt rozumiesz. Obiektowe podejście znajdziesz nawet w standardowym C (np. obsługa FILE*), a C++ jest wieloparadygmatowy. Już samo silniejsze typowanie, szablony i referencje sprawiają, że warto go użyć.


0

Przykładowy obierak za 5 ECTS dla uzupełnienia "Zaawansowany C++" - wykład prowadzony przez dr inż. z Nokii.

// O ile wiem, można było ciągnąć ścieżkę dalej, ze stażem w Nokia, pracą, promotorem i tematem pracy dyplomowej w Nokia.

*Może dać pogląd co "po C" w Nokia (OP załączył ofertę Nokia)
*
Cel kursu: Zaznajomienie studentów z technologią FPGA oraz z językami opisu sprzętu używanymi do
implementacji logiki. Wykorzystanie układów FPGA do przetwarzania danych w zagadnieniach
sieciowych oraz telekomunikacyjnych. Zaznajomienie studentów ze środowiskiem do implementacji
oraz generowania konfiguracji (takimi jak ISE, Vivado). Zaznajomienie studentów z metodami oraz
oprogramowaniem do weryfikacji rezultatów takimi jak symulacje (ModelSim, ActiveHDL) oraz
weryfikacji in-chip (Chipscope, Vivado). Zaznajomienie studentów z podstawowymi zagadnieniami
poruszanymi w sektorze telekomunikacji (takimi jak sprzętowe implementacje algorytmów
interpolacji danych, decymacji danych, filtrów, czy modułów realizujących operacje matematyczne).
Format kursu: Kurs trwający 50 godzin (wykład + ćwiczenia) będzie realizowany w grupach 10
osobowych.
Treść kursu:
 Wprowadzenie do języka Verilog
 Tworzenie bazowych projektów w środowiskach ISE oraz Vivado
 Implementowanie maszyn stanów
 Weryfikowanie implementacji przy pomocy symulacji, tworzenie testbenchów
 Generowanie modułów przy pomocy IP Core generator
 Implementowanie oraz komunikacja z komponentami typu Microblaze
 Implementowanie operacji matematycznych, wykorzystanie bloków DSP
 Zagadnienia synchronizacji oraz przekraczania domen czasowych
 Implementacja komunikacji z układami peryferyjnymi (np. ADC, pamięci DDR, łącza sieciowe)
 Metody weryfikacji generowanych konfiguracji (raporty, wykorzystanie środowiska
programistycznego, in-chip)

0

Do wszystkiego co UP napisali dodałbym jeszcze ważną chociaż podstawową znajomość CMake i ucz się pisać portable kod. Mnie na staż pytali się tylko czy o tym słyszałem. Teraz myślę że na juniorskie stanowiska będą wymagać gdzieniegdzie co to jest. No i nie przywiązuj dużej uwagi do c++14/17/20. Szczególnie do 17/20. Prawda jest taka że jako junior/stażysta nie będziesz miał z tym styczności bo wrzuca Cię do utrzymaniówki a sam rynek pracy wygląda tak że dużo się nieraz siedzi w starym legacy kodzie. Wątpię abyś miał farta trafić do projektu c++17 na początku kariery, jeżeli tak to zazdro. Niemniej jednak możesz się uczyć bo fajne są.
Ważniejszy od nowszych standardów jest STL. Naucz się korzystać z niego w opozycji do operacji na klasycznych tablicach. Tak żeby przy jakimś zadaniu algorytmicznym (a na 100% takie dostaniesz) umiał go wykorzystać.
Tak szczerze to też nawet nie musisz się przywiązywać na razie do znajomości wzorców projektowych. Mnie na rozmowach spytano chyba tylko w Nokii o jakieś pojedyncze ale prawda jest taka że sam język jest wymagający i wzorców w razie potrzeby to nauczysz się w trakcie.

No i ogólnie sprawa wygląda też tak że wbić się ciężko. Jeżeli studiujesz to jest znacznie łatwiej bo jest masa staży oraz z c++ ma się styczność na uczelni co zawsze jakoś pomaga utrwalić sprawę. Jeżeli jesteś samoukiem to musisz sobie przygotować jakieś porządne portfolio bo będzie ciężko.
Jakbyś miał jakieś pytania do juniora c++ to wal śmiało bo sam rok temu miałem podobną zagwozdke i się rekrutowałem.

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