Programowanie w C++ dla początkujących

Wstęp

Jako, że ostatnio postanowiłem poznać język programowania jakim jest C++, to i ten dział powstał niejako na fali dzięki temu. Jako początkujący w tym temacie zauważyłem, że czasem ciężko jest znaleźć odpowiedzi na niektóre swoje pytania, które się nasuwają podczas nauki, a i też nie jest łatwo o przykładowe zadania, które moglibyśmy realizować na poszczególnych etapach nauki, pomijając te książkowe oczywiście, czy zawarte w kursach z jakich korzystamy. Bardzo szybko też możemy zauważyć, że nasza własna inwencja twórcza się kończy jako, że brak nam doświadczenia, a realizacja tych samych programów w inny sposób, dość szybko może nam się znudzić.

W dziale tym, będę zamieszczał własne programy jakie realizowałem podczas swojej nauki C++, w postaci zadań, a także publikował wnioski jakie wyciągnąłem podczas pisania tych programów. Jest to bardzo ważne uważam, jako że niestety nie wystarczy przepisać te kilka linijek kodu z książki, czy kursu internetowego ale, aby dobrze poznać składnię, czy też zasady programowania należy zacząć pisać własne programy, rozwiązywać problemy jak chociażby to, jak przełożyć dany wzór na język zrozumiały dla kompilatora C++ wyciągając z tego odpowiednie wnioski ucząc się na własnych i cudzych błędach.

Ja przyjąłem taką zasadę, że uczę się najpierw pewnej większej ilości materiału przepisując programy zawarte w książkach i kursach, potem próbuję dane zadanie realizować po swojemu, a następnie realizuje jakiś własny, “większy” projekt, w którym wykorzystuję zdobytą wiedzę. Przyjmując taki sposób postępowania zauważyłem, że nauka idzie szybciej, popełniam coraz mniej błędów, a także coraz rzadziej zapominam o takich trywialnych rzeczach jak nie dodanie średnika na końcu składni, nie przypisanie typu do zmiennej, czy też nie umieszczenie nawiasów klamrowych np. w switch case. Jednym słowem taki sposób nauki przynosi w moim (podejrzewam, że nie tylko moim) przypadku najszybsze rezultaty.

Dlaczego C++

Główną przyczyną tego, dlaczego ja wybrałem c++ jest to, że język ten jest chyba najbardziej dojrzały z istniejących (powstał w 1983r. na bazie języka C, czyli ma już grubo ponad 30 lat), w dalszym ciągu jest rozwijany i stosowany przez rzesze programistów na całym świecie. Jest też chyba najbardziej wszechstronny – pisane są w nim zarówno proste programy konsolowe, jak i bardziej skomplikowane okienkowe programy użytkowe, gry, programy do obliczeń naukowych, tworzone jest też w nim oprogramowanie do systemów wbudowanych, czy też systemy operacyjne. Kod wynikowy po kompilacji jest też bardzo wydajny, jet przenośny (język tek stosowany jest na systemach windows, linux, unix, mac os, można w nim oprogramować procesory ATM Atmel, ARM systemy oparte na procesorach RISC i wiele, wiele więcej), istnieje do niego też wiele specjalistycznych bibliotek, które sprawiają, że da się w nim stworzyć chyba każde oprogramowanie jakie sobie tylko wymyślimy. Znajomość tego języka jest też niezłą bazą do nauki kolejnych języków programowania,  jako że chyba wszystkie te najbardziej znane języki programowania są oparte o C/C++ (Język C++ to, rozwinięcie języka C m .inn. o programowanie obiektowe), posiadają więc podobną składnię, operatory nazewnictwo. Wiele innych, nowszych od niego języków programowania zostało też napisanych w C++.

Jest jeszcze jeden ważny aspekt, dzięki któremu C++ będzie lepszy od innych języków programowania w niektórych zastosowaniach i dlaczego warto go poznać , otóż w c/c++ można używać tzw. wstawek asemblerowych  (mimo usilnych prób, nie znalazłem sposobu jak dołączyć kod asemblera np. do Javy, C#, Phytona, itp.). Spyta ktoś, a po co używać niskopoziomowego języka jakim jest ASM w swoich programach, kiedy komputery obecnie posiadają wręcz porażającą moc obliczeniową? Otóż weźmy taki przykład, że jest firma ‘a’ oraz firma ‘b’, które konkurują ze sobą i sprzedają swoje oprogramowanie do obróbki np. filmów, a programowanie to, ma dokładnie takie same możliwości, użyteczność, funkcjonalność. Oprogramowanie firmy ‘a’ zostało w całości napisane w C#, natomiast firmy ‘b’ w C++ z użyciem wstawek asemblerowych w algorytmach do obróbki tych filmów. Wiadomo, że  program, czy dany kawałek programu napisanego w asemblerze jest szybszy niż ten napisany w jakimkolwiek innym języku programowania wysokiego poziomu oraz, że kod wynikowy jest mniejszy. Jak myślisz, jakie oprogramowanie wybierze klient (firma), to w którym będzie musiał czekać 30min. na efekt zastosowania jakiegoś filtru, czy 10min? takich przykładów można by przedstawić wiele, kolejnym niech będzie chociażby czas potrzebny na wyrenderowanie obiektów w 3D na potrzeby studiów reklamowych. Patrząc na powyższy przykład, to uważam, że ASM jest kolejnym językiem programowania jaki powinniśmy poznać, jeśli chcemy osiągnąć coś więcej niż bycie przeciętnym, a także stać się bardziej konkurencyjnym na rynku pracy.

Jakie kursy i książki do języka C++ mogę polecić?

Zaczynając swoją naukę C++ przestudiowałem kilka kursów dla początkujących z internetu i kilka polecanych książek na różnych forach, jednak tylko dwa kursy przypadły mi do gustu. Pierwszy z nich jest to kurs video znajdujący się pod adresem http://miroslawzelent.pl/kurs-c++/, drugi natomiast jest kursem pisanym i znajduje się pod adresem http://shebang.pl/kursy/programowanie-cpp/. Z książek mogę polecić Symfonię C++ pana Jerzego Grębosza, z której także czasem korzystam w celu uzupełnienia swojej wiedzy. Z obydwu kursów korzystam jednocześnie, oglądając najpierw kurs video, a następnie raz jeszcze tą samą wiedzę przyswajam w postaci treści czytanej z drugiego kursu. Taki też sposób polecam i tobie, jako że czym więcej swoich zmysłów wykorzystasz podczas nauki, tym szybciej będziesz przyswajał wiedzę. Efekt? W zaledwie dwa tygodnie nauczyłem się więcej z tych kursów jeśli chodzi o język c++, niż przez kilka lat studiów matematyczno informatycznych. Ze studiów tych także praktycznie nic już nie pamiętałem jeśli chodzi o C++, z innych języków programowania, które miałem na studiach także zresztą.

Jakie środowisko programistyczne do C++

Ja korzystam z Code::Blocks, jako że najbardziej przypadł mi on do gustu. Nie bez znaczenia jest także i to, że jest darmowy. To środowisko również polecają autorzy powyższych kursów, więc jeśli z nich skorzystasz, to i ty powinieneś zainteresować się Code::Blocks, a unikniesz wielu dziwnych sytuacji, że coś ci nie działa. Sam C++ jest przenośny i dość mocno znormalizowany, więc możesz korzystać z niego zarówno pod Windows, Linux, jak i MacOS, możesz także używać innych środowisk programistycznych jak np. Borland C+++ itp., jednak producenci kompilatorów stosują czasem różne dziwne “ułatwienia” dla programistów, nie do końca zgodne z daną normą i to co kompiluje się np. jednym kompilatorem, w innym może wyrzucać błędy.

Dla kogo powstał ten dział?

Dział ten powstał przede wszystkim dla mnie, jako archiwum moich wypocin i zdobytych doświadczeń podczas nauki, a także dla wszystkich tych, którzy jak ja zaczynają dopiero naukę C++ i którzy szukają dodatkowych pomysłów na swoje programy, czy też odpowiedzi na pytania jakie mogą im się nasuwać podczas nauki, a jakie mogą znaleźć na niniejszym blogu.

Czego nie znajdziesz w niniejszym dziale

Nie znajdziesz tu żadnych kursów z C++ i porad jak rozwiązać dany problem lepiej, jak stworzyć bardziej wydajny i bardziej czytelny kod, gdyż jak już wspominałem sam dopiero rozpoczynam swoją przygodę z C++, więc i nie za wiele mogę ci w tym pomóc. Znajdziesz tu jednak z czasem sporo przykładów i wskazówek jak w ogóle dany problem można rozwiązać w przedstawionym zadaniu.

Na zakończenie jeszcze taka mała prośba. Jeśli jesteś bardziej zaawansowanym programistą C++ i trafiłeś już na tego bloga, to zamiast coś bezsensownie krytykować (co często się zdarza w komentarzach na różnych blogach i forach), podaj lepszy sposób na rozwiązanie danego problemu, jak tworzyć lepszy kod, czy też jak w bardziej czytelny sposób organizować poszczególne  bloki programu. Oczywiście mając na uwadze zasób wiedzy początkującego, jakie to zadanie od niego wymaga. To bardziej będzie pomocne dla nas jako początkujących, aby z czasem stać się lepszym programistą. Po za tym zapraszam do zadawania pytań, zamieszczania własnych rozwiązań, sugestii itp.

4 myśli na temat „Programowanie w C++ dla początkujących

  1. Uważam, że dział ma sens jednak trochę nie rozumiem kilku kwestii. Pisze Pan, że jest początkujący i dopiero się uczy programowania w C++ , a poniżej że miał Pan ten język na studiach, także porady tutaj zawarte świadczą, że wcale jednak nie jest Pan takim początkującym w temacie. Chociażby to, ilu początkujących wie chociażby o czymś takim jak assembler, nie mówiąc już o tym, że jest możliwość jego bezpośredniego wykorzystania w kodzie c++?

    • Witaj. Po kolei.

      Komputery interesują mnie od dziecka, odkąd dostałem 8 bitowy komputer Commodore 64 na urodziny. Na komputerze tym pisałem jakieś proste programy w Basicu oraz liznąłem nieco assemblera na tamten procesor. Przynajmniej na tyle, żeby móc modyfikować ilość żyć w grach :). W sumie do tego mi on wtedy był potrzebny.

      Na studiach oczywiście miałem C++ jak napisałem w tym artykule, a także jakieś podstawy assemblera. Niezbyt się jednak wtedy przykładałem do nauki tych języków. Po prostu wkułem podstawową składnię bez zrozumienia co i jak działa, tylko po to aby zaliczyć dany przedmiot. Po studiach nie bylem w stanie już jednak napisać nawet programu wyświetlającego zwykłe “Hello world!”. Najzwyczajniej niczego już nie pamiętałem. Bardziej skupiałem się wtedy na tematyce sieci i działania serwerów internetowych niż programowaniu. To najzwyczajniej mnie wtedy interesowało, w tym kierunku także idzie do tej pory moja kariera zawodowa.

      W przeciwieństwie do składni jednak, sporo zostało mi w głowie odnośnie wykorzystania samego języka C++, jak i Asemblera. Na przestrzeni lat najzwyczajniej czytałem różne gazetki i artykuły i spora część tych wiadomości została mi w głowie. Także część tych wiadomości wyniosłem ze studiów. Uwierz mi jednak, że z samego programowania jestem początkujący, nawet bardzo początkujący. Najzwyczajniej poznaje znowu składnię i nazewnictwo i uczę się jak to wszystko wykorzystać we własnych programach. Prostych co prawda ale za to własnych, co uczy mnie także nie tylko samej składni ale też jak napisać dany program, jak przełożyć wzory do C++ tak aby spełnił on zamierzone zadanie. W przeciwieństwie do studiów, obecnie staram się zrozumieć dokładnie co i jak działa w języku c++.

  2. ja natomiast nie bardzo rozumiem jaki jest sens pisania takich artykułów. W sieci jest mnóstwo przykładów różnych programów, także w c++. Dobrze , aby taki program był poprawny, tzn. nie tylko spełniał swoje zadanie ale także był czytelny, zawierał dobre praktyki programowania itp. Popełniając błędy innego początkującego programisty, chyba nie jest najszczęśliwszym pomysłem?

    • Napisałem, że pisane są one głównie dla mnie samego. Nie będę tu wchodził w szczegóły. Co do samych programów, to napisałem że nie mam zamiaru nikogo uczyć, nie to jest moim celem. Celem są jedynie pomysły na program, na poszczególnych etapach nauki oraz ewentualne porównanie kodu z zamieszczonym przeze mnie lub inne osoby będące na etapie nauki c++ w celu wyciągnięcia własnych wniosków co zrobiliśmy lepiej, a co było w ogóle bez sensu np. Tutaj także fajnie było, by aby ktoś bardziej doświadczony zamieszczał czasem jakieś wskazówki. Wskazówki, a nie gotowe rozwiązania.

      Co do innych zadań z sieci, z kursów, jakichś olimpiad informatycznych itp. Faktycznie jest ich wiele, jest jednak z nimi pewien problem, nie każdy musi umieć od razu liczyć całkę, znać różnego typu sortowania, znać się na elektronice itp. Żeby jednak nauka była skuteczna, trzeba cały czas coś pisać. Ja staram się jednak zamieszczać zadania (sam się na nich uczę) proste, z nastawieniem na utrwalenie składni języka c++, a nie to jak najefektywniej rozwiązać dany problem, którego ono dotyczy. Jeśli zamieszczam coś z matematyki, ta są to takie podstawy podstaw, które każdy powinien znać, a jeśli nie to nie musi pół dnia spędzić nad tym jak dany wzór wykorzystać, potrzebny w danym zadaniu. To samo jeśli się tyczy elektroniki, fizyki i innych działów. Od nauki zasad dobrego programowania są kursy i książki, a przynajmniej od tego też powinny być.

      Rozumiem, że w książkach i kursach są przykładowe zadania ale, aby naprawdę dobrze utrwalić sobie składnię, to jak mniemam potrzeba takich krótkich programów napisać dziesiątki, setki, tysiące, a nie kilka, czy kilkanaście. Zauważyłem też na własnym przykładzie taką jedną rzecz, że jak masz czarno na białym rozwiązanie, to szukasz od razu tego rozwiązania, o d razu szukasz jak ktoś to wykonał zamiast samemu zgłębić problem. Przepisując bezmyślnie programy innych osób, niczego konkretnego się nie nauczysz jak myślę. Można to zrobić raz, dwa razy, trzy razy, aby zobaczyć w praktyce jak coś działa ale nie ciągle jeśli faktycznie chce się ten język poznać.

Dodaj komentarz

four × four =