C++ czy C#

Od jakiegoś czasu uczę się C++. Do “obiektówki” mi jeszcze daleko i szczerze mówiąc ten początkowy etap “okienkówek” jest strasznie nudny. Ostatnio słyszałem, że C++ wychodzi z mody. Podobno teraz bardzie popularny jest CSharp. Czy warto przerzucić się na niego?

Na początek myślę, że warto skończyć to, co się już zaczęło. Programy konsolowe masz w C++, jak i również w C#. Polecam link, jeśli nie widziałeś tego :

Potrafię coś sklecić w C# i… sądzę, że lepiej siedzieć w C++ - chcę się do niego przekonać/nauczyć - ale zawsze brakuje samozaparcia.

C# w środowisku .NET jest bardzo dobry jeżeli musisz stworzyć w miarę prostą aplikację pod system Windows. C++ jak się nauczysz to nie dość, że będzie to łatwo Ci przychodzić to jest bardziej uniwersalne - do C++ znajdziesz zawsze jakieś dodatkowe biblioteki, z C# bywa gorzej - ta sama sprawa jeśli chodzi o tutoriale/przykłady/porady.

C++ odchodzi do lamusa - pierwszą taką informację usłyszałem po raz pierwszy około 2000 roku gdy pojawił się C# - jak widać, cały czas jednak się ma bardzo dobrze :slight_smile:

Wg. mnie C++ to podstawa, programista który nie potrafi C++ na poziomie średnim to ćwok nie programista. Nawet jeśli nie pisze się w nim aplikacji, to po prostu wypada ten język znać w razie “w”.

Ja osobiście polecam Javę, oferuje bardzo dużo możliwości bez zewnętrznych bibliotek, a skompilowane programy uruchomią się na wszystkich platformach, nie jest uzależniony od jednego systemu operacyjnego (obecnie Java jest na wszystkich platformach desktopowych i mobilnych chyba*).

*nie wiem jak wygląda sprawa WP7, MeGoo, BadaOS; na iOS jest portowana platforma Androida. Wyjątkiem jest jedynie zbiór bibliotek, j2me jest bardzo ubogi (ale to na stare telefony), a na Androida jest nieco inna biblioteka niż ta co na desktopową Javę SE.

Literką C w nazwie C# się nie sugeruj (nawet w C++/CLI nie sugeruj się tym “C++”, bo ten język też ma niewiele wspólnego z C++). MS posłużył się chyba tylko popularnością języka C.

Okienek nie zaczynaj za szybko, lepiej przestudiować algorytmy, samą obiektówkę, a potem dopiero się za okienka brać.

Jeśli programowanie Cię nudzi, to nie warto się na nic przerzucać.

Jeśli chcesz umieć biegać, to musisz nauczyć się chodzić. W przypadku programowania oznacza to naukę składni języka, konstrukcji programistycznych, a także programowania obiektowego. Bez dobrej znajomości tego wszystkiego nie ma co się brać za okienka, bo się ich po prostu nie zrozumie.

Ponieważ?

A do skomplikowanych się nie nadaje? Jeśli tak, to dlaczego? A co z aplikacjami www?

Tu się nie zgodzę. Nie ma pytania czy problemu, na które nie znajdzie się odpowiedzi na MSDN, StackOverflow czy CodeProject.

Ma się dobrze w niektórych zastosowaniach, ale w niektórych został wyparty przez nowocześniejsze języki.

Dobrze wiedzieć.

Język programowania to narzędzie. Jakoś nie zauważyłem, żeby np. jeden robotnik budowlany używał wiertarki Boscha i wyzywał drugiego od ćwoków dlatego, że używa wiertarki Black&Decker, takie buractwo występuje tylko wśród programistów. No i chyba kiboli, którzy o swoje drużyny się ponoć nawet biją.

Nie zrozumiałeś mnie… Ćwokiem nie jest ten, co używa Black&Deckera, ale ten co nie potrafi go obsługiwać, posługując się na co dzień Boshem (niezbyt trafne porównanie, no ale). Nie ma to jak zdanie wyrwane z kontekstu, prawda?

Moim zdaniem warto umieć posługiwać się zarówno wiertarką udarową jak i młotkiem i luźnym przecinakiem. Jak zabraknie prądu to będzie musiał się przenieść z wiertarki udarowej (C#, Java) na młotek i przecinak (C++), a nie “panie kierowniku, ja nie potrafię”.

Tak czy siak, nie spotkałem się z tym, żeby jeden robotnik wyzywał drugiego, bo nie umie skorzystać z jakiegoś narzędzia i woli inne. Takie rzeczy tylko wśród “programistów”.

Ale podobno podniecanie się znajomością jednego czy drugiego języka (czyli narzędzia) przechodzi z wiekiem.

W takim razie ty powinieneś się uczyć assemblera bo jak braknie C++ to co zrobisz? Przecież to jest non-sens. To, że C# jest językiem wysokiego poziomu nie znaczy, że trzeba znać coś ze średniego. To tak jak byś się do C++ musiał nauczyć również coś z tego najniższego :slight_smile:

Nie wiem czy mam racje ale twórca tego tematu chyba myli program obiektowy z okienkowym, niestety niektórzy myslą ze programowanie obiektowe to programowanie z graficznym interfejsem, a obiekty to okienka, fieldy itp (oczywiscie najczesciej tak jest), swoja droga tez tak kiedys myslalem… mam nadzieje ze wyrazilem sie jasno, poprostu chodzi mi o to że program z gui mozna zrobic strukturalnie (w sensie programowania strukturalnego) i z drugiej strony, program obiektowy na konsole

C++ to dla mnie absolutna podstawa, ten język jest na tyle nowoczesny na ile może być (no prawie), zachowując przy tym pełną kompilowalność do kodu maszynowego i przenośność pod wszystkie znane mi systemy. Poza tym wiele języków (w tym C# i Java) mają składnię bardzo podobną do C++ więc w razie potrzeby łatwo się jest przerzucić, nie polecam ci uczenia się C# albo Javy jako pierwszego języka, nabierzesz przyzwyczajeń, których potem ciężko ci się będzie wyzbyć przy C++ a mogą ci znacznie utrudnić życie - np. C#-owskie inteligentne referencje na obiekty, ciała metod pisanie jak leci, od razu wewnątrz klas czy interface-y albo delegaty, których brak w C++.

Dzięki. Rzeczywiście, machnąłem się tym programowaniem obiektowym/okienkowym, itp., ale to już ewidentnie wynika z mojego braku doświadczenia i z tego, że od kiedy jestem w LO to nie mam czasu na luźne czytanie sobie tego, co mi się podoba. Po prostu nie mam na to czasu, a jak mam, to brak mi ochoty.

Lista popularnych języków programowania: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.

Na dzień dzisiejszy można założyć że C++ odpali w każdych warunkach, a jeśli już nie C++ to C.

I nic nie pisałem o wyzywaniu się, tylko że znajomość języków najwyższego poziomu w pełni zorientowanych obiektowo może w pewnym momencie nie wystarczyć. Nie mówię że trzeba znać C++ na perfekt, ale wypadało by znać ten uniwersalny język na poziomie średnim.

Ale języków w pełni zorientowanych obiektowo jak C#, Java nie polecam na początek. IMO Python na start byłby najlepszy: nieobowiązkowe funkcje, wymuszone wcięcia, tylko składnia trochę za bardzo się różni od C-podobnych, no i dynamiczne typowanie, które uczy trochę złych nawyków.

Razi, na litość boską, ile tysięcy linijek kodu w C lub C++ napisałeś w życiu? Bardzo, bardzo łatwo mówi się o tym, że “każdy” powinien znać C++ na poziomie przynajmniej średnim, jeśli samemu się na tym poziomie go nie zna.

Zgadzam się z w/w opiniami, że C++ to podstawa i warto od niego rozpocząć przygodę. Odnośnie popularności C# to różnie bywa - co prawda posiada on bardzo dużo bibliotek co czyni go naprawdę bardzo łatwym w użyciu, ale trzeba znać jakieś podstawy.

Poziom podstawowy to cin i cout, średni to pętle, a zaawansowany to tablice. :stuck_out_tongue_winking_eye:

Całe szczęście, że pracodawcy nie mają takich dziwnych poglądów, że “każdy powinien znać C++”.

No fakt, tylko o jakiej znajomości poszczególnych rzeczy my tu mówimy. Wiadomo, że np. zaawansowane zastosowanie pętli będzie znacznie trudniejsze niż podstawy tablic. Moim zdaniem powinno się poznać najpierw podstawy wszystkiego i na czym to polega, a potem zgłębiać się po trochy w każdy temat. Ale ja tu jestem w tym temacie zielony. :smiley:

Sokekind albo ja nie zrozumiałem ironii/twojego postu albo coś cię ***(bez urazy). Jak dla mnie poziom podstawowy to znajomość składni (włącznie ze wskaźnikami, szablonami, tablicami itd.) i rozumienie jak co działa a zaawansowany to umiejętność korzystania z STL-a (oczywiście nie bez pomocy doc ale coś tam wypadało by umieć…), znajomość przynajmniej 3 wzorców projektowych (mam na myśli umiejętne ich użycie), wiedza jak działają stos i sterta oraz nie popełnianie głupich błędów w konstrukcji kodu(jak np. przypisanie do int wartości wskaźnika na int2 zamiast int2) czy pisanie kodu na około + można tu dopisać coś o czym mogłem zapomnieć.

Ps.

Dla jasności napisałem swoje poglądy, nie mam zielonego pojęcia jakie wymagania mają polscy pracodawcy bo jeszcze nie pracuję (jestem w LO).

Ziomek Zemsty raczej nie zrozumiał ironii, ty raczej również :stuck_out_tongue:

Wg mnie wszystko z tutków to podstawy, całej składni, znajomości działanie wszystkiego+brak jakichkolwiek błędów, średnio-zaawansowane jest pisanie własnych programów użytkowych wszelakiego rodzaju z wykorzystaniem dodatkowych bibliotek, z tutami, google etc. A zaawansowany to pisanie wszystkiego z pamięci :slight_smile:

WOJEK64 , tak, nie zrozumiałeś języka na końcu mojej wypowiedzi.

Korzystanie z STL i znajomość większości wzorców projektowych bandy czworga, to podstawy.

Średni jesteś, gdy potrafisz napisać obiektową aplikację bez popełniania rażących błędów projektowych (cała logika w klasach GUI, nadużywanie static, brak interfejsów, brak kluczy w bazie), wydajnościowych (brak indeksów w bazie) i bezpieczeństwa (hasła przechowywane i przesyłane czystym tekstem). Do tego prawidłowo modelujesz strukturę obiektową programu oraz strukturę bazy danych, umiesz dzielić aplikacje na warstwy (np. przez MVC lub MVP). A jak widzisz komunikat błędu, to od razu wiesz, co gdzie zepsułeś i nie musisz szukać. :wink:

Zaawansowany jesteś np. wtedy, gdy potrafisz zaprojektować od góry do dołu system księgowy dla firmy ubezpieczeniowej, nie zadający przy tym dziwnych pytań typu “dlaczego w bazie jest oddzielna tabela na numery PESEL?”.

Oczywiście to tylko przykłady ukazujące ogólną ideę. Wymagania różnią się od tego, jakiego języka i technologii jest się programistą, i czy pracuje się przy aplikacjach dla biznesu (głównie obsługa bazy danych), czy jakichś obliczeniowych (gdy trzeba znać algorytmy i całą otoczkę matematyczną), czy telekomunikacyjnych (działanie protokołów sieciowych, itd.).