Jakub L. Programista
Temat: Kurs programowania C++
Szymon Kubisiak:
ugh. Pracując 6 lat na różnych wersjach MSVC nie widziałem takiego efektu jak mówisz nigdy. Pracując od 3 miesięcy na Carbide (będącym wersją Eclipsa) widywałem ten efekt nieustannie...
(dopóki nie zamieniłem na #ifndef)
A ja codziennie :(
Artur Kęska:
Aha, i nie zgodzę się z Szymonem - jak chcesz uczyć się C++ i programowania obiektowego, to nie zaczynaj od C - okropne nawyki ludziom po tym zostają.
Nawyki by nie używać templatów, 10piętrowego dziedziczenia, STLa, boosta dopóki nie są potrzebne?
Nie STLowi? To się nazywa nawyk niestrzelania z armaty do wróbla oraz (jeszcze lepszy) nie będziemy tego rozwijać i ostateczny a jak będziemy, to przepiszemy.
Z których to nawyków wychodzi nieodmiennie żałość jak okazuje się, że program jednak się rozwija na teraz zaraz naraz.
I zawsze jest czas na poprawki albo dodawanie nowych ficzerów, a nie ma go nigdy na przepisanie już istniejącego i przetestowanego kodu.
Oczywiście że jest prostsze. Dla kogoś kto przygodę z programowaniem zaczął od stdout << "hello" << "> world"; (hmm, skąd się wziął operator string << > string ? ) albo od rozwiązania zagadki dlaczego
Wiązanie operatorów przecież jest wszędzie, czy się tego uczy na przykładzie C++ czy C to nie ma różnicy.
class CFoo foo = 5;
a
class CFoo foo;
foo = 5;
generują kompletnie inny kod - dla zaprawionego w takich bojach wszystko już jest proste.
Ale to ogólnie jest proste. Przyznaję że musiałem sprawdzić, bo to pierwsze wyglądało mi na to samo co drugie, ale g++ od razu to zoptymalizował do postaci CFoo foo(5) zamiast wołania konstruktora bezparametrowego a potem kopiującego obiekt tymczasowy.
Po prostu w C wszystko jest tym na co wygląda, dlatego polecam go do nauki. No, ale ja uważam że naukę pływania lepiej zacząć od styropianowej deski niż stalowej kuli. Nie trzeba się z tym zgadzać :)
Ale potem nie pisze się class CFoo foo tylko CFoo foo, bo struct przed nazwą typu to pozostałość z C.
Jak to ponoć Stroustrup powiedział - w C++ trudniej jest odstrzelić sobie stopę niż w C, ale jak już się uda, odstrzelona jest pod samym kolanem.
Stawiasz sprawę na głowie. Właściwie postawiony problem brzmi : po co zaprzęgać skomplikowane technologie, skoro prostsze dają radę?
KISS, ważniejsze od każdej książki i kursu :)
I jeszcze ponoć YAGNI. Ale nieszczególnie się zgadzam z Atwoodem w niektórych kwestiach (to jest jedna z).
Skoro mam już dane koła w bibliotece standardowej to nie będę wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.
Odpowiednio długo stosowana konwergencja spowoduje wynalezienie w końcu jakiegośrodzaju kontenerów. TYlko po co, skoro już są a drzwi są otwarte.
O, takie podejście nazywa się syndromem NIH.
A tak to bierze się odpowiedni header, dołącza i się ma. Jak się nauczyło a nie przyzwyczaiło się do partyzantki w C.