Felietony, Programowanie

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.

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!

😉

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

  1. 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.

      1. Klient potrzebuje od programisty szybkości i produktywności, często produktu MVP a nie ultrazoptymalizowanego kodu, który jest pisany 10 razy dłużej niż coś co powstać może ekspresowo w popularnym frameworku, który połowę rzeczy robi za nas i działa.

  2. 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 🙂

    1. 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.

  3. 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ć 🙂

Dodaj komentarz