Czego się uczyć c++ czy c#

Znowu ta sama historia… JCoder czy ty kiedykolwiek czytasz co jest napisane w poście zanim zaczniesz na niego odpowiadać?

Co do przepisywana a poprawiania wszystko by się zgadzało z tym co napisałeś pod pewnymi warunkami.

  1. Ma się dostęp do źródeł które można poprawiać (dostałem opis działania i skargi na poprzedni program)

  2. Program jest wystarczająco duży (jak szczegółowy opis działania mieści się na jednej kartce to szybszej i taniej - przepisać)

Autor pierwotnego programu podał cenę i czas realizacji poprawki, ja podałem cenę i czas realizacji napisania od nowa, klient porównał i podjął jedyną słuszną w tym przypadku decyzje.

I właśnie o tym przez cały czas dyskutuje z tobą somekind’em. Jak algorytm jest przemyślany od samego początku to już później nie ma co optymalizować - nigdy.

No to już wszytko wiem, gadamy o różnych rzeczach. Nawet przeciętny programista (wg mojego pojmowania tej definicji) nigdy nie popełnia tych błędów od których chronią języki zarządzane.

Bo boją się że pojawi się segment fault i będą tego szukać tygodniami? To kiepscy programiści.

Raczej przez tych co muszą pisać w językach zarządzanych aby popełniać 70% mniej błędów.

Super wniosek, a na jakiej podstawie?

O czym majaczysz? Chcesz tu komuś wmówić że większość oprogramowania użytkowego jest pod linuksa i pod mikrokontrolery?

Częściowo racja, jeżeli ktoś umie programować to wszystko jedno w czym. Tylko że diabeł tkwi w szczegółach. Jak już wyjaśniliśmy na tym forum prymitywny komponent na który w Delphi straciłem godzinę jest nie do zrobienia w C# (przynajmniej nie do zrobienia przez somekind który uważa się za eksperta od C#).

Kompletna bzdura! Albo taka sama jakość - wtedy czas jest różny, albo ten sam czas - wtedy jakość różna. Co do wygody - wygodniej zawsze w tym w czym jesteś przyzwyczajony.

W takim razie tutaj się zgadzam. :wink:

Jak to po co? Jak to bez sensu? Żeby zaoszczędzić miejsce na formatce!

Zapomniałeś o Delphi, to też znakomity język do pisania systemów operacyjnych.

Aaaa… Faktycznie. Teraz widzę sens! :wink:

Zaraz, zaraz, jak się nazywał ten słynny OS napisany w Delphi? Wyder OS?

Wygrałeś :smiley:

Jakby ktoś nie wiedział o co chodzi…

Wracając jeszcze do tego:

Ja w sumie niedawno też zrobiłem coś takiego. Był sobie napisany w C++ program, który miał za zadanie przetwarzać obrazy. Prawie gotowy, trzeba było jedynie dorobić do niego GUI. Program nie był tworzony w C#, z uwagi na powolność tego języka - jak to ujęli dotychczasowi autorzy…

Ja przy okazji tworzenia interfejsu w C# przepisałem też logikę. Okazało się, że np. skonwertować bitmapę do skali szarości można w 120 ms a nie 20 sekund, jak to się odbywało do tej pory w superszybkim kodzie napisanym w superszybkim języku. O tym, że użyłem dwóch wskaźników w każdej funkcji zamiast 20 w każdej linijce nie muszę wspominać :wink:

Że tak się wtrącę do dyskusji. Mimo mojego znikomego w sumie doświadczenia.

Odnoszę wrażenie, że miejscami powstaje (/powstała już; * niepotrzebne skreślić) tutaj debata mająca wykazać wyższość takiego czy innego języka, takich czy innych technik itd. Otóż wydaje mi się, że nie istnieje jedyne słuszne rozwiązanie. Każdy z języków ma swoje właściwości sprawdzające się w danej sytuacji. Powołam się na książkę Andrew Hunta i Davida Thomasa “Pragmatyczny programista” (świetna pozycja swoją drogą) gdzie pada stwierdzenie “Programuj w języku bliskim dziedziny problemu.” (mogłem coś przekręcić). Chodzi mi o to, że tam gdzie dobrym wyborem będzie C++, niekoniecznie uzasadnione jest użycie Javy etc. Zdarza się, że wybór języka narzuca nam niejako sposób podejścia do problemu. Dlatego też narzędzia i techniki należy dobrać w zależności od tego co i jak chcemy osiągnąć.

Powiedz to jeszcze alexowi, tak żeby zrozumiał, bo z tego co widzę, to JCoderowi np. się nie udaje. Stawiam skrzynkę wódki w przypadku sukcesu.

Wracając do zapytania, według mnie to i tak już dobrze że postanowiłeś się uczyć któregoś z języków.

Według mnie jeśli masz wysoką ambicję to wybierz C++, a jeśli chcesz trochę mniej czasu poświęcać na naukę to wybierz c#

Takie jest moje prywatne zdanie

Wg mnie jak masz naprawdę wysoką ambicję, to idź na całość i ucz się Haskella albo Scheme. Zupełnie inna jazda. :smiley:

A według mnie powinno się zacząć od c++ :slight_smile:

Jak opanujecie c++ to c#,java i tym podobne opanujecie w 1-2 dni(tak z grubsza).

Działą to też (tak z grubsza!) w drugą stronę. Język to język, załapać należy pewne koncepcje związane z programowaniem imperatywnym i w gruncie rzeczy język ma znaczenie drugorzędne.

@Ryan: racja, ale jednak na poznanie danego języka w stopniu wystarczającym, aby być produktywnym, trzeba poświęcić dużo czasu.

@oski225: w ten sam sposób mogę powiedzieć: ucz się Haskella (dla niewtajemniczonych: statycznie typowany język funkcyjny zaprojektowany głównie przez profesorów, nie posiada czegoś takiego jak “iteracja”, do powtarzania używa się rekurencji, a wszystkie zmienne są zawsze stałe na danym poziomie rekurencji i, o zgrozo, nie ma operatora przypisania) - jak masz mózg wystarczająco wygimnastykowany, by sobie poradzić z Haskellem, to dasz sobie radę ze wszystkim. W C++ nie ma wielu podstawowych mechanizmów, które są w nowocześniejszych językach (closures/delegaty, moduły, GC, AOP, refleksja, introspekcja, dynamiczne ładowanie klas, interfejsy i klasy abstrakcyjne, adnotacje/metaprogramowanie, bogata biblioteka standardowa), więc przeskok z C++ do C# (lub C++ do Java) i w drugą stronę wcale nie jest taki hop-siup. Jak się ograniczysz w C# do tylko tego podzbioru, który jest w C++, to możesz mieć wrażenie, że C# jest okropnie ograniczony (buee, gdzie jest wielodziedziczenie klas!?), ale w drugą stronę jest jeszcze gorzej (k**a, co to jest “segmentation fault”?). Cały myk polega na tym, żeby umieć wykorzystać efektywnie wszystko co daje dany język.

I wtedy można zaimplementować jakiś algorytm, ale użytecznego programu się nie wykona.

Na tej zasadzie można “znać” setki języków programowania.

Ja od dłuższego czasu programuję w C#. Nie dlatego, że nie chcę mi się uczyć C++, ale dlatego że z C# pracuję mi się jakoś łatwiej, szybciej i przyjemniej.

Fakt, że nie jest multiplatformowy, może i odpycha… ale i tak jest to przyjemny język.

Taka jest moja opinia :slight_smile:

Zapomniałeś dodać: na szczęście. ;>

w c++ są klasy abstrakcyjne, interfejsy też można na virtual zrobić ;p

Polecam rozpoczęcie od C++. Ostatnio szukając kursu WinApi przypadkowo natrafiłem na fajną stronkę : www.2lite.pl

Ja odpowiem odmiennie od wszystkich. Jeśli znasz podstawy prog. objektowego programuj w C#, jeśli nie to naucz się w Delphi. C++ jest przestarzałe i niema przyszłości (wiem, zabijecie mnie), ale żeby napisać coś w c# wystarczy 10 linijek kodu, c++ wymaga ponad stu.

Gdy jesteś początkujący nie tykaj WinApi bo się zrazisz, jak kiedyś ja.

“Core Java” Cay S. Horstmann, Gary Cornell :

“… Java to bardzo przyjazny język programowania. Wiekszość programistów przedkłada go nad C, C++ czy C#. Jednak przyjaznych języków programowania jest bardzo dużo, a nigdy nie zyskały one dużej popularności, podczas gdy języki zawierające powszechnie znane wady, jak C++ i Visual Basic, cieszą się ogromnym powodzeniem.”

“… Język C# przejął wiele dobrych pomysłów od javy, jak czystość języka programowania, maszyna wirtualna czy automatyczne usuwanie nieużytków. Jednak z niewiadomych przyczyn wielu dobrych rzeczy w tym języku brakuje, zwłaszcza zabezpieczeń i niezależności od platformy. Dla tych, którzy są związani z systemem Windows, język C# wydaje się dobrym wyborem. Sądząc jednak po ogłoszeniach dotyczących oferowanej pracy, Java nadal stanowi wybór większości deweloperów”

“…Na początku Java była interpretowana. Obecnie poza platformami skali mikro maszyna wirtualna Javy wykorzystuje kompilator czasu rzeczywistego. Najczęściej używane części kodu działają tak szybko, jakby były napisane w C++, a w niektórych przypadkach nawet szybciej… Najnowsze kompilatory są tak dobre, że mogą konkurować z tradycyjnymi kompilatorami, a nawet je prześcignąć, ponieważ mają dostęp do większej ilości informacji. Np. Kompilator może sprawdzać, która część kodu jest najczęściej wykonywana, i zoptymalizować ją pod kątem szybkości. Kompilator wie, które klasy zostały załadowane. Może zastosować wstawianie kodu funkcji w miejsce ich wywołań…”

“…W przeciwieństwie do C i C++ Java nie jest w żaden sposób uzależniona od implementacji. Rozmiary podstawowych typów danych są określone.”

“…Składnia Javy jest oczyszczoną wersją składni języka C++. Nie ma potrzeby dołączania plików nagłówkowych, posługiwania się arytmetyką wskaźnikową (a nawet składnią wskaźnikową), strukturami, uniami, przeciążaniem operatorów, wirtualnymi klasami bazowymi itp…”

“…Java została stworzona do pisania programów, które muszą być niezawodne w rozmaitych sytuacjach. Wskaźniki nie są potrzebne do najczęściej używanych struktur. Możliwości stwarzane przez wskaźniki są jednak cały czas w zasięgu ręki. Ponadto cały czas jesteśmy bezpieczni, ponieważ nie ma możliwości uzyskania dostępu do niewłaściwego wskaźnika, popełnienia błędu przydzielenia pamięci ani konieczności wystrzegania się przed wyciekami pamięci…”

"… Od samego początku przy projektowaniu Javy starano się uniemożliwić przeprowadzenie ataków jak:

  • przepełnienie stosu

  • niszczenie pamięci poza swoją własną przestrzenią procesową,

  • odczyt lub zapis plików bez zezwolenia.

Od wersji 1.1 istnieje pojęcie klasy podpisanej cyfrowo.

W konkurencyjnej technologi firmy Microsoft, jako zabezpieczenie stosuje się tylko podpisy cyfrowe. To oczywiście za mało. Model zabezpieczeń Javy jest o niebo lepszy niż ten oparty na ActiveX, ponieważ kontroluje działającą aplikację i zapobiega spustoszeniom, które może ona wyrządzić."

Niebywałe, autor książki o Javie pisze w niej, że Java jest znakomitym językiem, lepszym od seksu. Jakież to zaskoczenie, że nie miesza on z błotem Javy w książce o Javie!

Serio ludzie, czy moglibyśmy już darować sobie w tym temacie dwa typy wypowiedzi?

  • czysty PR

  • wypełnione absolutami (ale nie argumentami) wybory

Zacznijmy od początku.

-*-*-

W programowaniu nie ma uniwersalnych odpowiedzi, które są prawdą zawsze i dla każdego

Każde pytanie z dziedziny programowania, sformułowane jako “jak najlepiej…”, “co jest najlepsze…”, “najszybszy…”, “najbardziej bezpieczny…” jest głupie. Jest głupie, bo wzbudza bezproduktywną dyskusję. Jest głupie, bo prawie zawsze nie ma na to pytanie odpowiedzi. Pamiętacie reklamę ACE, “jak coś jest do wszystkiego, to jest do niczego”? To hasło jest niesamowicie adekwatne w przypadku programowania. Języki programowania mają swoje mocne i słabe strony i wybór języka programowania, książki, środowiska, kierunku studiów - niemalże wszystkiego! - jest całkowicie uzależniony od tego co chcecie uzyskać i jaką drogą chcecie tam dotrzeć.

Dlatego jeśli chcesz wiedzieć od czego zacząć, zacznij od przedstawienia tego dokąd chcesz dotrzeć. Przepisywanie ochów i achów z książek o językach programowania nie prowadzi do niczego dobrego.

Nikogo nie interesuje co uważasz za lepsze, co Ci się bardziej podoba ani tym bardziej co Ci się wydaje

Serio, nikogo też nie interesuje co podoba się mnie. Odpowiedź na pytanie - jakiekolwiek - powinna być poparta choć odrobiną doświadczenia i faktami a nie przeczuciem czy też ciepłym mrowieniem w brzuchu. Odpowiedź “X jest najlepsze” jest nie tylko głupia, ale i szkodliwa. Głupia, bo nie niesie ze sobą żadnej wartości merytorycznej. Nie informuje o niuansach związanych z wyborem. Jest pustosłowiem. Jest szkodliwa, bo ktoś może się taką pustą wypowiedzią zasugerować i w wyniku niewłaściwego wyboru - zniechęcić do programowania. Jest szczególnie szkodliwa, kiedy na poparcie własnego widzimisie pisze się jakiś techniczny pseudobełkot.

Jeśli chcesz odpowiedzieć na pytanie “co lepsze”, zastanów się czy jesteś pewien że wiesz co mówisz. Jeśli odpowiedź brzmi “chyba tak”, to znaczy, że nie wiesz. Jeśli odpowiedź brzmi “no przecież poświęciłem na ten język kilka tygodni”, to znaczy, że nie wiesz. Nie szkodź ludziom.

-*-*-

Nikt nie wie wszystkiego, to chyba jasne. Ale to, czego często ludzie nie wiedzą, to jak mało wiedzą. Programowania nie można nauczyć się w weekend, języka nie można opanować w tydzień. Szczególnie, jeśli to Twój “pierwszy raz” z programowaniem. Jeśli po roku spawania kodu w C++ - Twoim pierwszym języku programowania - wydaje Ci się, że znasz ten język na wylot - mylisz się. Jeśli porównujesz dwa języki i w jednym z nich pisałeś znacznie mniej niż w drugim - wartość Twojego porównania jest prawdopodobnie znikoma.

Pokora jeszcze nikogo nie zabiła. Ja wiem, że nie mam bladego pojęcia o Javie (choć programowałem kiedyś w J2ME). Ja wiem, że LUA, Pythona czy Ruby mogę przeczytać i pewnie zrozumieć, ale nie mam kwalifikacji by się na temat tych języków wypowiadać. Ja wiem, że mam alergię na niektóre ficzery C++ i że jestem uprzedzony wobec pewnych konstrukcji. Zajęło mi lata zrozumienie czego nie wiem i wyrobienie sobie nawyku (który wciąż jeszcze czasem łamię), że odpowiadanie zdaniami pełnymi absolutów (każdy, zawsze, wszyscy, nikt, nigdy) jest wyłącznie zwodniczą taktyką na przekonanie kogoś do swoich preferencji. A nie na przekazanie komuś odrobiny wiedzy.