Phight3r pisze:Uczę się obecnie C++ i tak się zastanawiam, czy opłaca się pisać na Linuksie programy w C++. Z tego co widzę to większość aplikacji i tak jest napisana w C. Proszę o odpowiedź, czy warto uczyć się C++.
Jeśli poznasz C++ to musisz znać C (C jest częścią C++, dla zachowania kompatybilności - tylko nagłówki biblioteki standardowej C mają inną nazwę (np. w c "stdio.h", w c++ "cstdio")).
Pisz w C/C++ (jako że C++ zawiera w sobie C to możesz mieszać zalety obu języków). Dodatkowo dobrym wyborem będzie język D, ale on póki co jest młody i dopiero zdobywa popularność (a co za tym idzie nie masz tylu bibliotek co w c/c++ - niby możesz użyć bibliotek pisanych w c, ale konwersja plików nagłówkowych nie zawsze działa (czytaj w praktyce zawsze musisz poprawiać ręcznie ;p)).
OFC nie może być tak pięknie, że c++ to wybór idealny...bo chcąc pisać w C++ (razem z kontenerami, string, map, vector, list etc) zamiast w C, będziesz miał kłopot z debuggerem gdb (będziesz musiał na linuksie używać tych od sun lub intel), bo nie wyświetli Ci tego co zawierają tylko krzaki - na szczęście to się zmieni z wydaniem gdb 7.0 (czyli włączeniem projektu archer rozwijanego przez redhat do gdb), a można powiedzieć nawet, że już się zmieniło dla niektórych (fedora (czytaj poligon doświadczalny redhata) już ma branch archer w stabilnej dystrybucji, i użytkownicy robią za beta testerów) - jeśli ktoś chce widzieć jakie są różnice pomiędzy informacjami z gdb teraz, a Pretty Printing z archer to odsyłam na
http://people.redhat.com/ebachalo/. Żeby nie skończyć na "chwilowych" problemach to powiem, że na linuksie masz tą zaletę, że jest Valgrind (jest on często powodem, dla którego firmy robią specjalnie port dla linuksa mimo że nie wydają oficjalnie - po prostu na windowsie czy macos takiego narzędzia brak) czyli narzędzie do profilowania pamięci i automatycznego szukania wycieków pamięci (ofc możesz załatwić to używając GC np.
http://www.hpl.hp.com/personal/Hans_Boehm/gc/, które jest standardowo w GCC (i jest wykorzystywane przez mono dla C#), ale będzie wolniej ;]) - jak to razem z integracją do Eclipse (oraz integracją z profilerem (oprofile) pisanym dla jądra linuksa (ale nie tylko tam przydatnego)) możesz zobaczyć pod filmikami z GDB Archer.
kabanek pisze:c++ - on też nie grzeszy szybkością, ale ma więcej możliwości (składnię), co sprawia, że programowanie w c++ jest wygodniejsze od ANSI C. W czystym C nie masz czegoś takiego jak klas a co za tym idzie dziedziczenia (co jest bardzo pomocne np w grach)
Możesz napisać w którym miejscu nie grzeszy szybkością? Fakt jest kilka takich miejsc, jak np. obsługa strumieni wejścia/wyjścia... ale jak znasz język to wiesz, że wystarczy wyłączyć synchronizację i porównywalnie do C ;]. Co do klas to fakt są one bardzo przydatne wszędzie, nie tylko w grach (chociaż sam programuję gry i muszę potwierdzić, że bez nich to byłaby katorga (ale ofc da się - patrz Quake3 pisane jest w czystym C)).
el.pescado pisze:Najlepiej chyba od jakiegoś dynamicznego, w stylu Pythona. Ze statycznie typowanych to coś w stylu Javy albo C#. Ewentualnie, jak ktoś marzy o karierze informatyka, to można zacząć od klasyka - Pascala:)
Python + pierwszy większy projekt skutkowałby harakiri lub zaprzestaniem programowania (brak typów oraz wcięcia jako bloki danych powodują, że błąd który można by w C/C++ wyłapać w 10s debuggerem będzie Ci spędzał sen z powiek ;p). Java na początek słaba bo ma bardzo specyficzne założenia i trudniej będzie przejść na inne języki z niej niż z innych do niej ;] (wszystko jest obiektem, każdy plik musi mieć nazwę taką jak klasa w nim, wymuszenie działania GC (niby prosto, bo alokować nie trzeba, ale powolne i zabiera dużo nieużywanego ramu (no chyba że przy starcie skonfigurujesz, jvm (ale będzie jeszcze wolniej ;p), poza tym sam mechanizm dziedziczenia wielokrotnego jest IMO, skopany (tzn nie ma wcale dziedziczenia wielokrotnego, a jest tylko jednokrotne i wprowadzenie Interfejsów)))). C# pod linuksem to pomysł bardzo kiepski, a pascal mimo, że łatwy, i ostatnio jego rozwój znowu przyspieszył to raczej nie ma sensu się go uczyć, bo w praktyce jest językiem martwym, ale lepiej nie szukać w nim takich rzeczy jak OpenMP 3.0, czy rzeczy z nieoficjalnego rozszerzenia c++ (biblioteki boost), nie mówiąc już o rzeczach, które wejdą/wchodzą już do języka i kompilatorów c++ razem ze standardem c++0x (mimo że okaże się on c++1x ;p).
Warto znać wiele języków w tym python, jave, przyszłościowy d i inne jednak to nie zmienia faktu, że każdy z nich jest inny, a wspólnym mianownikiem jest C/C++ i trzeba go znać najlepiej, żeby nie mieć problemów z przyswajaniem innych języków (java to rozszerzony c++, z kilkoma ułomnościami i fajnymi dodatkami których brak w standardzie C++ (co nie znaczy, że ich nie ma), python to biblioteka standardowa C minus bloki danych i typy, oraz plus kilka rzeczy, D to taki C++ + dodatki z Javy, języki shaderów (Cg, GLSL, HLSL), czy języki obliczeń na GPU (OpenCL, Cuda) to nic innego jak składnia C + kilka rzeczy do grafiki (jak typy wektorów i macierzy)).