Cześć, w najbliższym czasie wpadnie mi kilka projektów w c++, na codzień programuję w c#. Miałem kilka razy w życiu do czynienia z c++ ale chciałbym przeczytać jakąś książkę, żeby usystematyzować wiedzę, oraz poczytać o dobrych praktykach itp., najlepiej napisaną dla programistów, żeby nie było pierdolenia co to są pętle i jak otworzyć plik.

Jest coś godnego polecenia w tej dziedzinie?

#programowanie #programista15k
25

Komentarze (25)

@izopropanol tak, dokumentacja techniczna

@moll to jak czytać słownik, żeby uczyć się o poezji

Kiedyś dobra była Symfonia Grębosza.

@jiim ona była tragedią jeszcze przed C++11

@izopropanol jak bedziesz zamiast c# pisał w c++ to ja bym zaczął od czegoś takiego. Na samą myśl o zabawie ze wskaźnikami, konstruktorami, destruktorami i całą masą tych innych dziwnych rzeczy będą mi się śniły koszmary po nocy.

f1fabcb1-1785-4c59-ba02-edaab2efa225

@damw biorę pod uwagę, że możesz mieć rację, z drugiej strony takie stresy przy stresach ogólnopracowych to wydaje się przyjemność

to wydaje się przyjemność 

@izopropanol yhy, to weź zawołaj za 2-3 miesiące jak już będziesz w tym c++ robił xD

@damw jakiś czas temu dorabiałem output do silnika graficznego używanego przez naszą firmę napisanego w c++ i bardzo miło to wspominam, mimo że zupełnie nie znam tego języka i poruszłem się po omacku, ale operacja się powiodła.

@damw osobiście odradzam używać wskaźników jeśli tylko się da i korzystać z referencji. Zwykle da się uniknąć durnych wskaźników, chyba że jakaś biblioteka jest już napisana tak, że trzeba ich używać.

Pointery = HIV

@damw "weź zawołaj za 2-3 miesiące jak już będziesz w tym c++ robił" a no i zaczynam we wtorek xd, na szczęście to embeded, nie może być trudne

@damw ech, amatorzy:


  • wskaźniki - jeśli mówisz o wskaźnikach C-like, to we współczesnym C++ nie ma na nie miejsca

  • konstruktory - każdy język obiektowy ma podobny albo identyczny koncept, masz kłopot z OOP, czy jakimś konkretnym aspektem konstruktorów w C++?

  • destruktory - no tu się wkurzyłem, to jest coś tak zajeb**go, że każdy język oparty o GC staje się bezużyteczny : /. RAII (które powinno się nazywać Destruction Is Object Removal, Bjarne kompletnie nie zrozumiał co stworzył w tym wypadku) jest kapitalnym konceptem, który pozwala Ci rozumować i upraszczać kod na milion sposobów.

  • cała masa dziwnych rzeczy - a tu pełna zgoda xD

@baklazan moją poprzednią wiadomość pisałem z perspektywy laika, który z tym językiem ostatni raz miał styczność na studiach (i bardzo mnie to cieszy ze to bylo prawie 20 lat temu). Z tej styczności zapamiętałem właśnie te rzeczy + mallocki/allocki i inne chujstwa do zarzadzania pamiecia, wskazniki i reszte tego chujstwa o ktorym musiales pamietac i implementowac, zamiast skupic sie na samej logice aplikacji. Moja znajomosc wspolczesnego c/c++ jest (nie boje sie tego okreslenia uzyc) zerowa, i moze duzo tych problemow zostalo juz zmienionych/rozwiazanych.

@damw Dzięki, to wiele wyjaśnia, bo 20 lat temu większość uniwersyteckich akademików traktowała C++ jako C z klasami (czego "Symfonia C++" była świetlanym przykładem). Od czasu C++11 ten język zmienił się diametralnie (choć ze względu na kompatybilność wsteczną prawie cały "stary" kod będzie działał do dziś, czyt. możesz pisać tak jak się uczyłeś na studiach, ale to jest feature nie bug).


malloc i alloc to funkcje w C i da się tym alokować pamięć, ale się nie powinno! Generalnie w C++ nie będziesz musiał ręcznie alokować pamięci albo w ogóle, albo w minimalnym stopniu (najczęściej z powodu użwania gdzieś API w czystym C).


Podsumowując, to jak uczono na uczelniach C++ wołało wtedy o pomstę do nieba: pokazywano najgorsze możliwe praktyki, a C++11 i późniejsze zupełnie zmieniły sposób pisania w C++.


Sam generalnie preferuję styl mocno przypominający Java Streams. Lambdy wszędzie, wszędzie!


Co nie zmienia faktu, że C++ jest językiem w którym często schodzisz prawie do ziemi z abstrakcją, to nie JS, to ma być szybkie i wydajne.

@damw co do destruktorów jeszcze: to i szablony (nie mylić z generykami) są bodaj najważniejszymi i najmocniejszymi cechami C++. Inne języki albo tego nie mają, albo nie mają podejścia z własnymi implementacjami tych rzeczy, C++ posunął je bardzo daleko.

@baklazan no dokladnie tak to wygladalo jak opisales. Symfonie c++ oczywiscie tez pamietam (znaczy, ze byla taka ksiazka).

Zalety c++ sa nie do "podwazenia" -> poza asemblerem najszybszy jezyk pozwalajacy wycisnac prawie wszystko ze sprzetu co sie tylko da, ale wymagajacy duzo wiekszej wiedzy i znajomosci sprzetu, aby napisac optymalnie/wydajnie kod.


Ja akurat w Javie pisze, wiec i nawet kompilator w duzej czesci byl/jest oparty o c/c++ (przynajmniej jakis czas temu).

Dodatkowo kumam chyba o czym mowisz piszac o Java streams (programowanie funkcyjne, streamy to tylko implementacja tego konceptu w Javie) + lambdach

@izopropanol

To polecę klasyki, chociaż wcale nie są złe:


  1. A tour of C++ Bjarne Stoustroupa (btw ojciec tego języka). Bardzo, ale to bardzo przystępna książka dla osób które wcześniej programowały a chcą zacząć C++

  2. Skuteczny Nowoczesny C++ Scotta Meyersa - super język, ale warto jednak dopiero PO A tour of C++.


Moim zdaniem to wystarczy, jeżeli jesteś programistą.

Jest jeszcze jedna książka Stroustroupa, taka bardziej "deep" dla "ciekawskich", ale nie czytałem więc nie wiem. Podobno dobra.


Odpuściłbym sobie Symfonię C++ Grębosza - na pewno o tym słyszałeś, strasznie rozwlekła i mało wciągająca.

@Syster wziąłem tą drugą, jak nie będę kumał, to kupię pierwszą, dziękuję za poradę.


Kawałek recenzji na pic

b4445f13-e1cd-46c2-9952-b3af749076bb

@izopropanol OK, tylko nie zrażaj się - weź pod uwagę, że Skuteczny Nowoczesny C++ jest raczej dla osób które coś tam minimalnie kumają z C++, więc jak dla ciebie to coś zupełnie nowego to ci nie podejdzie.

Za to Tour jest zajebisty - napisana tak jakby ci starszy kolega przy piwku próbował nauczyć C++ I jest dosyć krótka, chyba z 120 stron, do przecztania w jeden wieczór.

@izopropanol nie może zabraknąć

239c852c-7a5b-4649-9659-7fe4380c8f7d

A tak bardzo poważnie: to jest cholernie trudny język, żeby pisać w nim DOBRY kod, szczerze mówiąc to mam wrażenie że po nastu latach zawodowej pracy z nim dopiero teraz jestem na właściwym poziomie, więc ten komiks powyżej jest tak śmieszny jak bliski prawdy.


Więc jak coś to pytaj, może mnie zmotywujesz żebym jakiś temat ciekawie opisał : D

@baklazan ok, diękuję, będę wołał jakby co

@izopropanol to jeszcze żeby nie zostawiać Cię z memem, część z tych rzeczy jest dyskusyjne, więc jak będziesz miał wątpliwości to pytaj, ale da Ci to wgląd w ilość zagwózdek w tym języku i w miarę poprawny model mentalny

https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

@izopropanol Pamiętam że swego czasu miałem trudność w ogarnięciu szablonów. Ale ten artykuł: https://www.codeproject.com/Articles/257589/An-Idiots-Guide-to-Cplusplus-Templates-Part-1 mi mocno pomógł.


Ponadto szczerze mówiąc, dokumentacja mimo że nie doskonała i trochę wysoki próg wejścia ma mnóstwo odpowiedzi na nurtujące pytania ;)


https://en.cppreference.com/w/

Zaloguj się aby komentować