Na czym się skupić i jak dalej się rozwijać - C++

0

Witam, od jakiegoś czasu uczę się języka programowania jakim jest C++, chciałbym w tym języku poszukać pracy.
Jestem po kursie link, mam napisaną swoją stronę internetową z swoim CV i jednym projektem stacji meteorologicznej (więc Html i c++ w stopniu podstawowym umiem, troszkę liznąłem javaScriptu) .

Na jakich rzeczach skupić się i które mogą mi sie przydać na rozmowach czy tez w pierwszej pracy?
czy to rozwiązywanie różnych zadań z c++ ( trochę jak z uczeniem się matematyki - trzeba klepać i jeszcze raz klepać zadania, żeby wyrobić w sobie metody rozwiązywania problemów) , czy też skupić sie na bibliotece STL (w kursie omawiane są tylko vektory), czy może poszerzać swoją wiedzę o bazy danych (SQL)? Czy może wgl patrzę nie w te stronę i skupiam się na tym co nie jest w tej chwili potrzebne .
Bardzo prosiłbym o nakierowanie na dobre tory mojego dalszego rozwoju.

Z góry dziękuję :)

4

STL to podstawa. Jak C++ cię interesuje to SQL nie koniecznie - obaszry operowaniach tych dwóch języków nie koniecznie są zbieżne.

0

Czyli rozumiem, że same wektory i operacje na nich to za mało? Czy posiadasz, może jakieś kursy które mógłbys polecić właśnie z tej biblioteki, czy raczej wszystkie wnoszą to samo ?

2
Filmixyy napisał(a):

Czyli rozumiem, że same wektory i operacje na nich to za mało? Czy posiadasz, może jakieś kursy które mógłbys polecić właśnie z tej biblioteki, czy raczej wszystkie wnoszą to samo ?

Zdecydowanie. W moich czasach uczyłem się z książek to nie polecę kursu. Np taka: https://helion.pl/ksiazki/c-biblioteka-standardowa-podrecznik-programisty-nicolai-m-josuttis,cpbspp.htm#format/d

0

Dziękuję za szybkie i konkretne odpowiedzi.

To jeszcze zapytam o jedną sprawę, czasami przewijają się głosy jakoby C++ jest wymarłym językiem i raczej się odchodzi od używania go. Czy to jest prawda? bo szczerze mówiąc te głosy są troche demotywujące dla osoby początkującej jak ja.

1

Nie dam profesjonalnego poradnika, ale coś co mi na szybko przychodzi do głowy z własnego doświadczenia.

czy to rozwiązywanie różnych zadań z c++ ( trochę jak z uczeniem się matematyki - trzeba klepać i jeszcze raz klepać zadania, żeby wyrobić w sobie metody rozwiązywania problemów) , czy też >skupić sie na bibliotece STL (w kursie omawiane są tylko vektory),

Te oba, z naciskiem na to drugie. Z bazami danych statystycznie nie ma się styczności jako programista c++. Ja robilem tak na starcie, ze jak rozwiazywalem sobie zadanka to staralem sie rozwiazywac to za pomoca STL-a, zeby sie nauczyc. Na początku musisz liznąć klasycznego c++(nie jakoś sporo, ale trochę zadanek z rób), typu raw pointery, raw array, co to jest referencja i to wszystko co jest dziwne i nie wiadomo po co to. Jakbyś nie miał pomysłu to na studiach robi się tak, że pisze się np własną liste i programuje operacje, typu dodanie do listy, ściągnięcie, posortowanie itd. Po to w zasadzie, żeby poćwiczyć te wskaźniki. Jest to potrzebne, ponieważ możesz dzięki temu zrozumieć koncepcje i nie rzadko będziesz korzystał z biblioteki, która ma C-style API, np OpenCV. Warto być przygotowanym. Natomiast poza tym treningiem używaj vectorów, listy, mapy, auto, lambd i smart pointery wszędzie gdzie będziesz potrzebował. Każdą funkcję rób najpierw jako const i przesyłaj przez argument jako const&. Jak się nie da to odcinasz tego czego nie możesz.
Jak już ogarniesz to programowanie proceduralne to ucz sie obiektowosci(polimorfizm itp), bo to jest baaardzo wazne. Następnie poczytaj o RAII, composition over inheritance (to w c++ jest najważniejsze, bo często jest praktykowany antywzorzec robienia głębokich hierarchii klas z wielodziedziczeniem, to zła praktyka a będziesz się z tym spotykał niestety w starych projektach, wiedz, że to złe), SOLID-zie, rule 0/3/5 i jakichś podstawowych wzorcach projektowych(strategie też ogarnij, przydatna, bo w c++ często pisze się algorytmy), to na start będzie wporządku. Dobra znajomość tego to podstawa a w c++ obiektówka jest pokręcona i ma niestety mnóstwo smaczków, które trzeba znać. Szczególnie przy przeładowaniu operatorów i mnóstwie przeróżnych rodzajów inicjalizacji (wszędzie korzystaj defaultowo z inicjalizacji "{}" i nie rób niepotrzebnych konstruktorów).
Potem liźnij wielowątkowości, dosłownie podstawowe koncepcje Ci wystarczą, jakie problemy się spotyka, napisz parę programów, spróbuj sobie zrównoleglać pętle. Porób benchmarki itd.
Jak będziesz umiał wykorzystywać wiele rzeczy w praktyce to już jest fajna podstawa. (jak coś ominąłem to inni użytkownicy mnie poprawią)

No i do tego momentu jeszcze masz możliwość zmiany języka :D . Jeżeli uznasz nadal, że chcesz zostać w c++ to zabierz się za szablony, etapy kompilacji itd, metaprogramowania nie tykaj, bo szkoda czasu na to, ale jakieś podstawowe koncepcje, tak żebyś mniej więcej umiał np napisać własny std::unique_ptr std::vector itd.

Do tego wiedza okolo informatyczna, typu co to procesor, jak działa, wątki, procesy, cache, podstawy systemów operacyjnych, sieci itd.

Z czego się uczyć?
Na pewno nie z tych kursów internetowych, bo większość to dziadostwo od hindusów, albo nie powiem kogo pokazujących złe praktyki. Na pewno nie bierz symfonii w dłoń.Znaleźć dobre źródła do nauki c++ w 2022 to wbrew pozorom dość trudna kwestia. Jeśli chodzi o książki to ja używałem Stroustrup Kompedium WIedzy 4 edycja. Jest calkiem niezla polska wersja (łatwiej dostepna btw). Podoba mi się w nim to, że ma ładnie poukładane etapy nauki. Możesz isć po kolei i jesteś wprowadzany stopniowo w ten język. Jakbyś się zabrał i robił po kolei to polecam skipnać rozdziały 24-28, bo to dla koneserów. Na pewno szkoda czasu dla juniora. Minusem jest styl pisania, bo jest to prawie jak encyklopedia, w takim stylu została też pisana. Natomiast tam jest max c++11 co jest za mało niestety. 14 to rozwinięcie 11, więc przy okazji się nauczysz, ale 17 jest już ważna. Ja się tak uczyłem, że oglądałem cppcony i próbowałem to aplikować do projektów. Pierwsze lepsze z głowy to: variant, visit, optional, filesystem, auto w różnych nowych miejscach - to się często używa.
c++20/23 możesz liznąć tylko po to, żeby się pochwalić na rekrutacji, bo i tak prawdopodobnie nie będziesz tego używał w pierwszej pracy. Jak będziesz miał możliwość to korzystaj. Oglądaj cppcony i często czytaj o dobrych praktykach, jest taka strona jak https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines gdzie są opisane dobre praktyki. Ja na starcie robiłem ten błąd, że mało z tego korzystałem z czego potem żałowałem, bo trzeba było zmieniać przyzwyczajenia.

Została najtrudniejsza część, czyli własne projekty.
To jest najcięższe w c++ bo w sumie nie wiadomo co zrobić, żeby pasowało do tego języka w momencie kiedy się uczysz i tak na prawdę nie wiesz w jaką specjalizację chcesz iść, bo szuka się stażu gdziekolwiek. W webówce jest to łatwiej znaleźć, ale tutaj nie robisz projektów, które możesz zrobić Javą, C# albo webowymi językami. Mi pomogły tutaj studia i dedykowane problemy, które rozwiązywaliśmy. Często jakieś algorytmiczne, np MES, albo automaty komórkowe. Robiło się na uczelni, dopieszczało w domu i fajne projekty wychodziły na githuba. Musi być obowiązkowo obiektowy z wielowątkowością. Najlepiej związany z czymś czym się interesujesz.

Przyszłościowo co do rekrutacji to jest jedna uwaga. Niektórzy programiści c++ lubią na rekrutacji wypytywać o różne smaczki, bardzo rzadkie przypadki jakichś funkcjonalności itd. Nie da się wszystkiego wiedzieć, bo nie ma programisty na świecie, który by znał ten język. Nawet sam twórca ocenia swoje umiejętności jako "dobry". Tak więc nie przejmuj się jakby Cię przez to przekreślili. Najważniejsza jest umiejętność programowania obiektowego, dobre praktyki i wykorzystanie wzorców projektowych. Jak to umiesz to nadajesz się na staż imo. Pamiętaj, że nie musisz być nie wiadomo kim.

Rozpisałem się, ale dziś mam czas na to xd. Mam nadzieję, że Ci to pomoże.

1

Wymarłym? Nie, ale coraz bardziej pojawiają się języki, które są w stanie go zastąpić w pewnych obszarach. Dzisiaj szybkość działania programów w większości przypadków ma drugorzędne znaczenie, dlatego wybiera się "prostsze"(choć tutaj jest obiektywna opinia) ale za to bezpieczniejsze i wolniejsze języki.

Np:

  • Golang - do rozwiazan cloudowych, blockchainowych, mozna napisać działający program i wypchnąc go na produkcje po 2 dniach nauki golanga... I jakoś to będzie działało
  • Rust - Znaczna część osób przerzuca się na niego, z racji, że oferuje porównywalną efektywność programów, i jest dużo bardziej bezpieczny. Kompilator nie pozwala niebezpiecznego kodu skompilować, chyba, że bardzo chcesz... Ale za to ekosystem jest biedniejszy - choć i to się zmienia
1
Filmixyy napisał(a):

Dziękuję za szybkie i konkretne odpowiedzi.

To jeszcze zapytam o jedną sprawę, czasami przewijają się głosy jakoby C++ jest wymarłym językiem i raczej się odchodzi od używania go. Czy to jest prawda? bo szczerze mówiąc te głosy są troche demotywujące dla osoby początkującej jak ja.

Osobiście bym teraz nie szedł w C++, szukał bym coś z większą oferta stanowisk pracy. Ale może akurat to, co chcesz robić akurat robi się w C++ no to warto.

2

Stanowisk pracy nie brakuje, kasa też jest bardzo dobra. Najciężej jest zacząć, bo próg wejścia związany z liczbą możliwych zagadnień na rozmowie jest wysoki.

Sam od C++ odchodzę dlatego, że przez ogrom dziwnych nowych featurow i konieczność wstecznej kompatybilności robi się z niego świnka morska. Dodatkowo masa upierdliwych rzeczy jak kopanie się z CMake, niekończącą się wojna exceptions vs error codes, nieprzyjemny dla oka syntax (zagnieżdżone traitsy itd) wisienką na torcie jest to, że jak pracujesz ze średnio ogarniętymi ludźmi to nigdzie indziej się nie da tak zjebac kodu. Niepotrzebne przeciążenia operatorów i inne "hacki" od których oczy krwawią.

Nie mniej jednak jest to bardzo kształcący język po ogarnięciu którego świadomość informatyczna (nie tylko związana z programowaniem) ogromnie rośnie.

0
S4t napisał(a):

Zdecydowanie. W moich czasach uczyłem się z książek to nie polecę kursu. Np taka: https://helion.pl/ksiazki/c-biblioteka-standardowa-podrecznik-programisty-nicolai-m-josuttis,cpbspp.htm#format/d

Czitels napisał(a):

Z czego się uczyć?
Na pewno nie z tych kursów internetowych, bo większość to dziadostwo od hindusów, albo nie powiem kogo pokazujących złe praktyki. Na pewno nie bierz symfonii w dłoń.Znaleźć dobre źródła do nauki c++ w 2022 to wbrew pozorom dość trudna kwestia. Jeśli chodzi o książki to ja używałem Stroustrup Kompedium WIedzy 4 edycja. Jest calkiem niezla polska wersja (łatwiej dostepna btw).

Niewątpliwie, zerknięcie na te książki o długości ponad 1000 stron, troche mnie przeraziło, jak na początek programowania.

Z moich doświadczeń i rozmów kwalifikacyjnych zauważyłem, że głównie zadania są problemowe z wykorzystaniem wektorów, programowania obiektowego etc... nie wiem czy jest sens zagłębiać się w tym momencie tak daleko. Aczkolwiek książka "kompendium wiedzy 4 edycja" wydaje się mieć czytelniejszy i wygodniejszy opis Biblioteki STL - na której bym się skupił.

Nie zrozumcie mnie źle, dziękuję za te wszystkie rady, boje się jednak, że chwytając się wszystkiego po 'trochu' z wszystkiego będę kiepski (a może to o czym ja myślę, że jest duża wiedzą tak naprawdę jest tylko podstawą?)

1
  1. C++ jest chyba takim językiem, że pomiędzy pozorem "coś wiem" a rzeczywista niewiedzą może być ogromny odstęp. Jeśli na poziomie klienckim używasz wektorów (tzn nie podchodziłeś do stworzenia własnego a'la wektora) .. bez urazy, ale możesz jeszcze nie wiedzieć, czego nie wiesz. C++ v. 11, 17, 20, std::, boost:: i multum zagadnień

  2. Ta stacja pogodowa, to pecet ? Czy mikrokontroler? Bo choć branża embedded ma mocny styk z C, C++ (tu niektórzy ortodoksi uK podpisali krwią, że nie tkną C++ nigdy) ... więc "rynek C++" a "rynek embedded" to wbrew pozorom odmienne.

  3. Programista z jednym jezykiem, to jeszcze nie programista. Znając (hipotetycznie - nie narzucam) strzelmy jakaś Javę, wiesz czego nie wiesz, albo co cię mija w C++ - nawet jesli życie doprowadzi do pracy w rzeczywiście w C++ (ale wtedy ktoś znający inny ma szersze horyzonty).

  4. Rzadko kto pracuje w pierwszym języku, którego się porządnie nauczył (tzn ignoruję tu elementy JS, SQL czy HTML)

  5. Kursy z netu - zgadzam się z kolegami, w C++ jest najgorzej, wielu autorom "wydaje się", ze umieją

  6. Twoja stacja pogodowa ... mniemam, że zetknąłeś się z jakimiś frameworkami, bo np nie da się w standardowym C++ sięgać bazy. Więc "jakiś" framework C++ mogłeś poznać, a nawet możesz nie przypuszczać, jakie jeszcze istnieją, ani tym bardziej ich nie znasz. Niestety, faceci standaryzujący C++ obrazili się na wiele, wiele zagadnień, i wiele jest nie zestandaryzowane co w innych językach jest. (bazy, XML, typy biznesowe jak decimal, i Bug wie co jeszcze). Więc to wszystko, co nie jest zestandaryzowane, te nisze wypełniają frameworki - każdy kręcąc maksymalnie.
    C++ jest jedynym językiem, w którym nie nastąpiła skuteczna standaryzacja stringa (dla mnie sytuacja patologiczna)

  7. praca z dokumentacją. Szukanie, grzebanie, docieranie do wartościowej wiedzy (tzn nie od Hindusów jak tu ktoś powiedział)

0
ZrobieDobrze napisał(a):
  1. C++ jest chyba takim językiem, że pomiędzy pozorem "coś wiem" a rzeczywista niewiedzą może być ogromny odstęp. Jeśli na poziomie klienckim używasz wektorów (tzn nie podchodziłeś do stworzenia własnego a'la wektora) .. bez urazy, ale możesz jeszcze nie wiedzieć, czego nie wiesz. C++ v. 11, 17, 20, std::, boost:: i multum zagadnień

  2. Ta stacja pogodowa, to pecet ? Czy mikrokontroler? Bo choć branża embedded ma mocny styk z C, C++ (tu niektórzy ortodoksi uK podpisali krwią, że nie tkną C++ nigdy) ... więc "rynek C++" a "rynek embedded" to wbrew pozorom odmienne.

  3. Programista z jednym jezykiem, to jeszcze nie programista. Znając (hipotetycznie - nie narzucam) strzelmy jakaś Javę, wiesz czego nie wiesz, albo co cię mija w C++ - nawet jesli życie doprowadzi do pracy w rzeczywiście w C++ (ale wtedy ktoś znający inny ma szersze horyzonty).

Definitywnie nie wiem czego nie wiem, mój główny post odnosił się do tego jak znaleźć pierwszą prace i zaczepić się w tym świecie już na jakiś dłuższy czas.

Stacja to mikrokontroller, odczyt z czujników odbywał się przy pomocy c++, a potem już dane z plików JSON przy pomocy java scriptu html i css były przetwarzane dalej.

Niewątpliwie troszkę się przestraszyłem, tego co wszyscy tutaj piszecie, a znacie się na pewno lepiej. To jak nie c++ to zadam pytanie, które zadawane jest chyba najczęściej. Jaki język programowania wybrać ? Który może nie będzie miał takiego wysokiego progu wejścia?

1

Nie polecam maksować C++, bardzo często jest potrzebny poziom max średni tego języka. Jak trzeba bedzie uzyc jakiś niuansów to się douczysz w miarę potrzeby. Polecam za to nauczyć się technologii często towarzyszących jak python, Bash czy obsługa Linuxa, często też podstawy sieci. Przeważnie C++ jest częścią większego ekosystemu, nie jest używany samotnie :)

2
Fargo94 napisał(a):

Nie polecam maksować C++, bardzo często jest potrzebny poziom max średni tego języka. Jak trzeba bedzie uzyc jakiś niuansów to się douczysz w miarę potrzeby. ... Przeważnie C++ jest częścią większego ekosystemu, nie jest używany samotnie :)

... lub realne wdrożenie C++ opiera się na dialekcie C++, frameworku, jest wysoce templejtowe/metaprogramowanie albo na odwrót, klepanie w MFC / BCB/ Qt / Innym gównie- znajomość standardu staje się mniejszościową, a rośnie znaczenie znajomości konkretnych wynalazków
Nawet znajomość "naszego najlepszego stringa" (za stringa będę zawsze jeździł na C++)

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