Przyszłość języka C++ – renesans, czy rychły upadek?

Na łamach wielu blogów programistycznych, dziesiątek serwisów technologicznych, czy niezliczonych for informatycznych poruszany jest temat przyszłości programowania i poszczególnych technologii programistycznych. Często młodzi adepci sztuki programowania pytają o przyszłość języka C++. Pytają, czy w ogóle jest sens nauki tego języka. Pytają w kontekście zatrudnienia i zarobków. Najczęstszą odpowiedzią na ich pytania jest „Olej C++, to gniot bez przyszłości”. W tym wpisie postaram się obiektywnie podejść do tego stwierdzenia, rozważając przy tym większość czynników takie jak zarobki, trendy w programowaniu, czy przeznaczenie języka.

kurs matura z informatyki
Już niebawem rusza kurs przygotowujący do matury z informatyki.
Nie daj się zaskoczyć na maturze – zapisz się do listy mailingowej już teraz!

Przeznaczenie języka C++ oraz jego słabe i mocne strony.

Technologii nie powinno się porównywać biorąc pod uwagę wszystko co można w nich stworzyć, tylko konkretne projekty. Nie powiemy przecież, że stolarz Wojtek jest lepszy od Maćka-szpachlarza skoro obaj pracują w różnych zawodach. Jeden jest dobry w tym, drugi w tym.

Obrazując to na przykładzie C++ weźmy pod lupę takie tworzenie stron internetowych. Fakt, faktem, witrynę w C++ da się zrobić, ale po co. Do tego celu użyjemy raczej jakiegoś PHP, JavaScriptu, a do większych aplikacji może jakiegoś ASP.NET. A co jeśli chodzi o tworzenie aplikacji mobilnych? Tu względnie lepszym wyborem będzie Java. Programy okienkowe? Podobnie jak w przypadku aplikacji mobilnych, lepiej wybrać Javę, ewentualnie C#. Obie technologie pozwolą nam napisać dany program okienkowy szybciej, łatwiej i przyjemniej, bowiem C++ do najłatwiejszych języków programowania nie należy.

Do czego w takim razie może przydać się C++?

Czy rzeczywiście jest to nieprzydatny gniot? Otóż nie. Stworzony przez duńskiego informatyka Bjarne’a Stroustrup’a język, swoje zastosowanie znajdzie wszędzie tam, gdzie znaczenie ma wydajność i szybkość działania programu oraz optymalizacja dużej ilości danych. Dlatego właśnie C++ najlepiej wykorzystywać tam, gdzie będzie mógł zaprezentować swoje zalety, rozwinąć skrzydła.

Z uwagi na duże możliwości kontroli nad sprzętem i zarządzania pamięcią, kod napisany w C++ będzie miał zastosowanie na przykład przy serwerach, czy przy urządzeniach przenośnych, bowiem pozwala na efektywne oszczędzanie energii, a jak wiemy jest to niezmiernie ważna kwestia jeśli chodzi o urządzenia mobilne.

Utalantowany programista C++ może znaleźć zatrudnienie przy tworzeniu naprawdę dużych aplikacji, które operują na dużej ilości informacji. Taki na przykład Amazon. Z uwagi na to, że kupują (i nie tylko kupują) tam ludzie z całego świata potrzebowali czegoś wydajnego, a najbardziej wydajnym językiem jest właśnie C++. Do przeprowadzania symulacji, czy prowadzenia statystyk również najlepiej sprawdzi się ten język. Programy operacyjne (wszystkie Windowsy, po części również iOS oraz OS X), wysoko budżetowe gry AAA (choćby nasz Wiedźmin III) również pisane są z wykorzystaniem C++. Java i .NET też wiele zawdzięczają właśnie obiektowemu podejściu z C++.

przyszłość języka c++ - wykres 1 - beka
Żeby nie było za poważnie.

Słabe strony

Oceniając język bierzcie więc proszę pod uwagę jego mocne i słabe strony. O mocnych stronach C++ już wspomniałem, ale żeby nie było za kolorowo ma on też swoje ciemne oblicze. Przez wielu uważany jest za dość trudny i nieintuicyjny. Do pisania niektórych rzeczy w C++ może lepiej się nie zabierać. Wybierając inny język może pójść nam łatwiej i szybciej. Jest w tym wiele prawdy – niemniej jednak – tych problemów można zawsze uniknąć, lub je ograniczyć. C++ nie ma rozbudowanego systemu wyjątków, dlatego pisząc w nim należy zachowywać pewną dyscyplinę oraz należy zwracać uwagę na detale, przewidywać. Pozwala to w dużym stopniu uniknąć błędów.

 

Przyszłość języka C++

W naszych rozważaniach posługiwać się będę różnymi wykresami różnych badań statystyczych. Poniżej lista najpopularniejszych języków programowania stworzona przez stronę stackoverlow.com, która zrzesza setki tysięcy programistów z całego świata.

przyszłość języka c++ - wykres 2

Jak widać C++ (mimo corocznych spadków w zestawieniu) cieszy się dość wysoką popularnością wśród wykorzystywanych technologii. Dodam, że jeśli chodzi o te typowe zastosowania C++, czyli właśnie gry AAA, potężne aplikacje, czy programy serwerowe to na tej liście nie ma specjalnie konkurenta dla C++. Na horyzoncie też nie widać żadnego języka, który mógłby C++ zdetronizować tam, gdzie jest prawdziwym potentatem.

przyszłość języka c++ - wykres 1

Czy programiści C++ wymrą jak dinozaury?

Na tym wykresie mamy ukazaną procentową popularność wybranych technologii w tym właśnie tej będącej tematem tego wpisu. Jak widzimy programiści C++ są z roku na roku coraz mniej liczni. Coraz mniej projektów powstaje w tym języku. Nie napawa to optymizmem. Niemniej jednak kluczem jest zauważenie jednej bardzo ważnej rzeczy. Rozwój, cyfryzacja, informatyzacja sprawia, że rynek potrzebuje coraz więcej ludzi do pracy w IT. Największe zapotrzebowanie jest oczywiście na te mniej wymagające projekty. Stąd masa nowych ludzi idzie właśnie w kierunku web developingu, czy aplikacji mobilnych, okienkowych, a zapotrzebowanie na specjalistów (podkreślam specjalistów) C++ nie maleje.

Procentowo wygląda to słabo, lecz biorąc pod uwagę liczby, a nie procenty, programista C++ może być spokojny o znalezienie pracy. O zarobki tym bardziej.  Programowanie w języku C++ być może jest nieintuicyjne i trudne, ale eksperci od tego języka też musieli przez to przebrnąć. Nie każdy się do tego nada, ale na szczęście jest wybór. Jak nie ten to inny język.

 

Czy warto się uczyć C++?

Celem tego artykułu nie jest przekonanie nikogo do nauki C++. Chciałem jedynie sprostować niektóre fałszywe informację, które są rozpowiadane na temat tego języka. Nieprawdą jest, bowiem, że nie ma on przyszłości. Przez szereg następnych lat z pewnością nie umrze. Ma przed sobą jeszcze kilkanaście dobrych lat, a ja po cichu liczę na to, że z powrotem zyska na popularności. Nieprawdą jest również, że do niczego się nie nadaje. Ma swoje zastosowania, w których sprawdza się znakomicie. Tak samo nieprawdziwe jest stwierdzenie, że jest to przestarzały język. Co prawda powstał dość dawno, ale jest na bieżąco rozwijany. Każda kolejna wersja (obecna to świeżutka C++ 17) stara się rozwiązywać błędy poprzedniczek, wprowadzać udoskonalenia, modernizować. C++ idzie z duchem czasu, nie stoi w miejscu.

Czy warto się go uczyć? Uważam, że tak, ponieważ w pewnym sensie ukazuje całe piękno sztuki programowania. Nikomu znajomość C++ na pewno nie zaszkodzi. Warto od niego zacząć swoją przygodę z programowanie, gdyż uczy on klasycznego podejścia obiektowego, abstrakcji. Jest swego rodzaju esencją programowania. Niejeden fanatyk C++ powiedziałby o nim:

C++ TO JEST KRÓL JĘZYKÓW JAK LEW JEST KRÓL DŻUNGLI!

😉

Solidna pozycja dotycząca nauki C++

You Might Also Like
13 komentarzy
  • Avatar photo
    Marcin
    says:

    Problem w tym że pracy w C++ nie ma, przynajmniej w Poznaniu. W ciągu roku było zaledwie kilka ogłoszeń dotyczących embedded linux, mikrokontrolerów ARM, QT oraz OpenGL. Trudno być we wszystkich tych technologiach specjalistą, jeśli ktoś dobrze zna QT to miał 1 ogłoszenie na rok, a po QT trudno klepać kod na mikrokontrolery albo OpenGL. Nie znam nikogo kto te wszystkie technologie zna na poziomie developerskim, a poszukują seniorów zatem ciężko się wbić. Może Wy wiecie do jakich firm uderzyć osobiście, chowają się gdzieś przed programistami? Bo nie chciałbym się przekwalifikowywać po wielu latach pracy na inny język, a jeśli tak to polecacie coś konkretnego aby potem też roboty nie szukać latami.

    • Avatar photo
      Łukasz Kosiński
      says:

      To prawda, że pracy w C++ jest znacznie mniej niż w takim chociażby JS’ie, ale niekoniecznie trzeba zaraz wymasterować wszystkie technologie, które wymieniłeś. Problemem może być faktycznie poszukiwanie pracy na etacie w biurze. Ja pracuję zdalnie dla zagranicznej firmy, ogłoszenie znalazłem na forum Qt i aplikując znałem jedynie Qt i podstawy OpenGL (którego de facto nie używam). Jak już załapałem się do tej pracy to pisze, że tak powiem w czym popadnie zależnie od projektu. Może spróbuj uderzyć do zagranicznych firm lub się przeprowadzić, ale to oczywiście kwestia preferencji i możliwości. Nie każdy może sobie na to pozwolić.

  • Avatar photo
    rrowniak
    says:

    Jak wszędzie tak i tu należy korzystać ze zdrowego rozsądku. I faktycznie są obszary gdzie C++ kompletnie się nie sprawdza lub po prostu istnieją technologie lepsze o rzędy wielkości. Ale nie wynika to ze słabości języka C++ tylko z jego przeznaczenia. Jest to język systemowy i do takich zastosowań się nadaje.
    Istnieje szereg zagadnień gdzie język C++ jest idealnym narzędziem i nic nie wskazuje na to aby miało się to zmienić. Dla przykładu są to już wspomniane wysoko budżetowe gry, systemy wbudowane (chociaż tu akurat króluje C), systemy do procesowania dużej ilości danych w czasie rzeczywistym (lub near-realtime), systemy life-critical, mission-critical, maszyny wirtualne innych języków jak np. JVM. Można również zauważyć pewien trend a mianowicie mariaż C++ i Python gdzie krytyczny kod napisany jest w C++ a pozostała część w Python.
    Generalnie wszystkie wojny pomiędzy zwolennikami różnych języków programowania zawierają podstawowy i zarazem fundamentalny problem – jest to próba porównywania rzeczy nieporównywalnych. To tak jakby próbować wykazać wyższość samochodu ciężarowego nad samochodem osobowym.
    Prawda jest taka, że profesjonalny programista powinien umieć kilka języków programowania i korzystać z nich w miarę potrzeb. Okopywanie się na jednej pozycji to droga donikąd. Dlatego zamiast skupiać się na krytyce danego języka zachęcam do zmiany punktu widzenia na traktowanie języków i technologii jak narzędzi, z których możemy skorzystać 🙂

  • Avatar photo
    Grzegorz Marek Adamiec
    says:

    Ja uważam natomiast, że C++ i jego biblioteka standardowa to nie wszystko. Prawdziwa moc C++ drzemie w innych dostępnych bibliotekach, których jest cala masa przecież. Piszesz, że w javie czy C# da się niektóre rzeczy napisać szybciej, jasne jak myślimy wyłącznie o bibliotece standardowej STL. Dodatkowe biblioteki jak chociażby takie Qt powodują, że aplikacje można pisać porównywalnie szybko i przyjemnie jak w c# czy javie. Używając odpowiedniej biblioteki pod wymagania aplikacji i projektu.

    Co do trudności i zawiłości C++, to wszystko zależy od tego w jakim stopniu znasz c++ i używane z nim biblioteki. Osobiście nie uważam, że jest jakiś szczególnie trudny, czy w jakiś sposób nieintuicyjny, a wręcz przeciwnie.

    Problematyczne zarządzanie pamięcią? cóż, w STL od wersji c++11 są odpowiednie smart pointery do tego przecież. Inne biblioteki jak Boost, czy Qt także mają swoje rozwiązania w tym temacie, które sprawiają, że zarządzanie pamięcią staje się dużo prostsze i bezproblemowe.

    Pomijając aplikacje webowe, to ciężko mi też jest znaleźć coś, co z użyciem odpowiedniej biblioteki w c++ nie dało by się napisać, czy napisanie tego było by w jakiś szczególny sposób trudniejsze, zagmatwane i bardziej długotrwałe niż w C#, czy javie. Zaznaczam, używając odpowiedniej biblioteki dla potrzeb pisanej aplikacji i wymagań projektu.

    Atuty C++ to przenośność i kompilacja do plików binarnych, a nie kodu natywnego, co znowu sprawia, że prawidłowo napisany kod po kompilacji jest szybki i wydajny niż taka java. Także mnogość dostępnych bibliotek, spośród których zawsze można wybrać odpowiednią.

    Tak na zakończenie dodam, że osobiście uważam, iż c++ nie zniknie w najbliższym czasie i w dalszym ciągu będzie rozwijany i wciąż będą pisane w nim nowe aplikacje jak i rozwijane te starsze. Jeśli już miałbym w czymś upatrywać zagrożenia dla niego, to nie w tym, że jakiś inny język go całkowicie wyprze ale, że wraz z rozwojem sztucznej inteligencji, to maszyny przejmą zadania programistów, nie szybko to jednak jak myślę nastąpi 🙂

    • Avatar photo
      Łukasz Kosiński
      says:

      Dzięki za wyczerpujący komentarz 🙂 Starałem się podejść do tematu możliwie najbardziej obiektywnie, przybliżając również argumenty „przeciwników” C++. Sam jestem jego wiernym poplecznikiem, co podkreśliłem na końcu. Nie napisałem też o problemach z zarządzaniem pamięcią. To prawdziwa potęga tego języka. P.S. Fajnie, że masz styczność z QT. Świetna biblioteka.

  • Avatar photo
    Bartosz Pajewski
    says:

    Powiedzmy sobie szczerze – Java ma po prostu niższy próg trudności wejścia. W C (i najlepiej widać to na stosach) funkcjonuje zasada „każdy sprząta po sobie”. Wskaźniki, którymi operuje programista wymagają precyzji i dokładności w posługiwaniu się nimi, ponieważ błędy mogą wyjść nie dziś, nie jutro, a za miesiąc.
    Dziś, kiedy dział sprzedaży sprzedaje coś „na wczoraj”, to nie ma wyjścia – java sprawdzi się lepiej, bo nie musimy już tak się pilnować, a zamiast wskaźników mamy referencje.
    To, według mnie, jest powodem dla którego C/C++ nie jest tak popularny i leci w dół. Po prostu wymaga się więcej od programisty.

Dodaj komentarz

icon