Zanim cokolwiek, pozwól mi najpierw wyjaśnić, że poniższe myśli są wyłącznie moje osobiste opinie i ze względu na moją ograniczoną wiedzę. Nie mam zamiaru w ogóle mówić, że C++ nie jest cool.C++ z widoku Java: musiałem opuścić kilka rzeczy.
Programowałem C++ przez około rok i myślę, że naprawdę ma kilka fajnych funkcji. Niemniej jednak czuję się trochę pusty i rozczarowany, ponieważ nie nauczyłem się żadnych "zmieniających umysł" rzeczy z C++, z punktu widzenia osoby, która wcześniej nauczyła się Javy (jako pierwszego języka).
Według wielu postów, które przeczytałem, ludzie wolą C++, ponieważ jest to szybsze. Do programisty takiego jak ja, który nie zaprogramował wcześniej aplikacji krytycznych czasowo, jeszcze nie miałem okazji to docenić.
Do tej pory wszystko, czego się dowiedziałem, dotyczyło składni. Tak tworzymy klasę w Javie, a oto jak ją napisać w C++. Oto jak zrobić dziedziczenie w Javie i jak to zrobić w C++ i tak dalej. (Wiem, że wiele dziedziczenia jest fajne, ale dla mnie nie jest rzeczą zmieniającą umysł.) Myślę, że to, co jest fajne, to być w stanie odpowiedzieć, dlaczego Java nie wspierała dziedziczenia wielokrotnego, co ma być bardziej ogólne niż pojedyncze dziedziczenie).
Jak dla mnie, wszystkie są po prostu składnią, a mój umysł nie rozwijał się jak dotąd po napisaniu C++. Myślę, że mój problem polega na pisaniu programów w C++ z "umysłem Java". To, czego naprawdę chcę, to, jak sugeruje wiele osób, zmiana sposobu myślenia po nauczeniu się nowego języka. Do tego jeszcze nie doszło w moim C++.
Potrafię również napisać kilka małych programów w języku Python. Jednak obawiam się dowiedzieć więcej o tym mnie, znowu, to byłby po prostu nauka nowej składni, nowy sposób robienia rzeczy, które są po prostu różne, bez znajomości przyczyn.
Planuję nauczyć się C, aby naprawdę poznać rzeczy. Myślę, że byłby to język "wciągający".
Daj mi znać, co myślisz i daj mi radę.
PS: Btw, jest jedno konkretne pytanie w C++ Chcę potwierdzić. W C++, pisząc w ten sposób, nie jest skuteczny, jeśli się nie mylę:
private A computeAndReturnA(){...}
Zamiast pisać jako:
private void computeAndReturnA(A& a){...}
jak w pierwszej sposób zwracane wartości są kopiowane (kiedy przypisujemy b = compute ...) i wprowadzimy pewne nieefektywności? (W Javie, myślę, że pierwsza droga jest jasna w znaczeniu i dobra w wydajności, gdy przechodzi rzeczy przez odniesienie)
C++ i Java są językami zorientowanymi na obiekt, z dużym naciskiem na OOP. W tym sensie są zbyt podobne, aby naprawdę "zmieniały umysł", aby uczyć się jednego po drugim. Zarówno C++, jak i Java mają swoje mocne i słabe strony. Aby mieć naprawdę "zmieniające umysł" doświadczenie, naucz się zupełnie innego rodzaju języka. Python (a także Ruby) jest również dobry, ale możesz wypróbować język funkcyjny podobny do schematu lub haskell lub nawet wypróbować język taki jak prolog, aby uzyskać naprawdę odmienny pogląd na programowanie. Ale na razie pójdę z Pythonem. – MAK
@MAK: Wyraźnie nie zrobiliście wystarczająco dużo C++. C++ jest językiem o wielu paradygmatach. To prawda, że wiele standardowych bibliotek C++ jest oferowanych w formacie OO, ale jest ich wiele. – Puppy
@MAK: Będę musiał zgodzić się z DeadMG tutaj. Przesunięcie paradygmatu z Java na C++ jest ogromne. Jedynym podobieństwem między językami jest składnia (i to było celowe). Sposób, w jaki rzeczy są zrobione poprawnie, jest tak odmienny, że trudno jest programistom Javy (ponieważ mają tendencję do pisania kodu Java w C++). –