Dlaczego C ++ jest często pierwszym językiem wykładanym na studiach? [Zamknięte]

12

Moja szkoła rozpoczyna program informatyki od kursów programowania w C ++, co oznacza, że ​​jest to pierwszy język, którego uczy się wielu uczniów.

Widziałem, że wiele osób nie lubi C ++ i przeczytałem wiele powodów. Niemal wydaje się, że popularna jest opinia, że ​​C ++ nie jest zbyt dobrym językiem. Mam wrażenie, że nie jest bardzo lubiany na podstawie niektórych pytań na StackExchange, a także postów, takich jak:
http://damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ node / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
itd.

(Uwaga: nie uważam, że C ++ jest złym językiem. W rzeczywistości jest to główny język, którego używam. Jednak Internet, a także niektórzy profesorowie sprawili wrażenie, że nie jest to bardzo lubiany język. W rzeczywistości , jeden z moich profesorów ciągle szarpie się na C ++, ale wciąż jest to język początkowy na mojej uczelni!)

Mając to na uwadze, dlaczego jest to pierwszy język nauczany w wielu szkołach? Jakie są powody rozpoczęcia programu nauczania w C ++?

Uwaga: To pytanie jest podobne do „Czy C ++ nadaje się jako pierwszy język”, ale jest nieco inne, ponieważ nie jestem zainteresowany, czy jest odpowiedni, ale dlaczego został wybrany.

Casey Patton
źródło
6
Które szkoły i gdzie? Wszyscy w pobliżu (3 w mieście i kilka innych w ciągu kilku godzin jazdy) uczą Java jako pierwszego języka. C ++ pojawia się w ciągu ostatniego roku lub dwóch (w zależności od tego, jakie kursy student bierze). Tak było przynajmniej przez ostatnie 10 lat.
FrustratedWithFormsDesigner
7
Profesorowie podobnie jak inni programiści mają tylko umiarkowanie racjonalne upodobania. Jednocześnie są jak studenci pozbawieni doświadczenia.
Mike Dunlavey,
@Casey Prawdopodobnie spotkasz się z pewnymi konfliktami z innymi użytkownikami, ponieważ podałeś tylko twierdzenie, że C ++ nie jest lubiany, ale nie ma uzasadnienia. Jeśli skupiasz się na tym, aby dowiedzieć się, dlaczego C ++ jest wybierany na uniwersytetach, zdecydowanie sugeruję, abyś zredagował wszelkie odniesienia, które mu się podobają lub nie, ponieważ jest to w dużej mierze nieistotne dla twojego pytania.
Adam Lear
4
W pierwszym roku chodzi o oddzielenie pszenicy od plew.
Steven Evers,
2
Interesujące byłoby posiadanie statystyk dotyczących tego, ile szkół wyższych używa różnych języków na swoich kursach wprowadzających.
Jerry Coffin

Odpowiedzi:

25

Każdy język ma kultowych zwolenników zarówno kochanków, jak i hejterów; dotyczy to C ++, Java, C #, Haskell, Objective-C, cokolwiek.

Istnieje wiele ważnych powodów, aby lubić lub nie lubić języka.

Ostatecznie istnieje kilka powodów, dla których C ++ jest głównie nauczany na uniwersytetach:

Nie przejmuj się zbytnio odrzucaniem go jako „złego” języka; Polecam zanurzyć się w to, naprawdę się uczyć, budować z niego projekty o średnim lub dużym rozmiarze. Następnie zrób to samo z innymi językami; w tym momencie będziesz miał wystarczające doświadczenie i wgląd, aby powiedzieć „Myślę, że C ++ jest zły, ponieważ X, Y, Z” lub „Myślę, że C ++ jest dobry, ponieważ A, B, C, którego Java nie ma”.

Wciąż musisz się wiele nauczyć, młody konik polny.

Bitgarden
źródło
2
Może nie być to „zły” język, jeśli przejdziesz do filozofii „zły jest subiektywny”, ale w przypadku praktycznie każdej kombinacji problemów technicznych istnieje bardziej produktywny, bezpieczniejszy język. Moim zdaniem powodem, dla którego uczy się C ++, jest to, że ludzie używają tego, i ludzie tego używają, ponieważ to, co ludzie wiedzą, i to, co ludzie wiedzą, ponieważ tego uczą uniwersytety. Oprócz popularności C ++ nie ma żadnych znaczących zalet, które widzę i programuję z nim profesjonalnie.
weberc2
13

Mówiąc wprost, jest to bardzo dobry język nauczania, ponieważ nie trzyma ręki. Ludzie, którzy uczą się jeździć na manualnej skrzyni biegów, prawie nie mają problemów po raz pierwszy w automatyce, ale odwrotność nie jest prawdą. Nauka trwa dłużej, ale na studiach musisz ćwiczyć 4-letnie programy zabawkowe, zanim będziesz musiał coś uczynić przydatnym.

Karl Bielefeldt
źródło
9
Martwi mnie fakt, że ta fałszywa analogia wywołała tak wiele pozytywnych opinii. To nie tak działa nauka. Jedno z wielu nieporozumień dydaktycznych.
Konrad Rudolph
12
C++ isn't that bad. 

Na to, czego naucza się w szkole, zwykle kierują się tym, co wiedzą profesorowie, a także to, co było wtedy używane w branży i popularne.

Pomyśl o szkołach jako o kapsule czasu w przeszłości. :)

Naprawdę chciałbym, żeby było na odwrót.

zakurzony programista
źródło
bardzo rozsądny punkt! Na studiach nie dostałem żadnych ćwiczeń na temat inteligentnych wskaźników, RTTI lub RAII. WTF!
Chani
12

Angielski został również opisany jako naprawdę zły, zhakowany razem, niespójny język, ale ponieważ tylu ludzi tutaj wie, moi rodzice i nauczyciele zdecydowali, że dobrym pomysłem jest nauczenie mnie tego.

Myślę, że tak samo jest z C ++. Jest to język, który zna wiele osób, więc warto opanować podstawową znajomość języka.

Ma również tę zaletę, że jest na tyle niski, że pozwala poczuć, co dzieje się na poziomie sprzętowym.

Wreszcie, nie ma problemów „komercyjnych”, które mają niektóre inne języki (np. Java-Oracle lub .NET-MS). Wiem, że wiele uniwersytetów nie chciałoby być oskarżanych o nauczanie produktu jednej firmy nad innym.

Scott Whitlock
źródło
1
+1 dla c ++ nie będącego językiem komercyjnym. Dobrze jest uczyć się języka, nie martwiąc się o politykę i taktykę biznesową. <na przykład instalowanie Java7 w systemie Linux>
Chani,
5

Jeśli C ++ jest taki zły, to jak wytłumaczysz, że większość programów, z których korzystasz w życiu codziennym, jest napisanych w C ++?

Istnieje kilka powodów, aby uczyć się C ++ na studiach od pierwszego roku:

  • Jest w dużej mierze używany. Istniejąca baza kodów jest po prostu ogromna i nawet teraz, gdy istnieją języki takie jak Ruby, Python lub C #, C ++ jest nadal często używany, nawet podczas tworzenia aplikacji od podstaw, w tym na stronach internetowych. W takim przypadku nauka języka C ++ jest dobrym wyborem. Przynajmniej lepszy niż dwa lata nauki Ada, czyli czegoś, czego nigdy nie wykorzystasz w życiu, chyba że opracujesz aplikacje dla statku kosmicznego.

  • To nie jest zbyt abstrakcyjne. Na przykład, jak możesz wyjaśnić uczniom, jakie są wskaźniki, jeśli nauczyli się tylko języka C # lub Java?

  • Jest to dość trudne w porównaniu, powiedzmy, z PHP. Oznacza to, że studenci, którzy nie są przygotowani do programowania, wkrótce odejdą, co nie jest takie złe i pozwala uczniowi zmarnować dwa lub trzy lata, zanim zrozumie, że tworzenie oprogramowania nie jest dla niego.

To sprawia, że ​​C ++ jest bardziej odpowiedni niż Ada, Java lub PHP.

Arseni Mourzenko
źródło
1
Wygląda na to, że C byłby lepszy dla twoich drugich dwóch punktów. Czy są szkoły, które uczą Adę? Zdecydowanie przejmę to C ++, ale znowu jestem dziwny!
Jetti
C ++ jest wybierany do produktów komercyjnych, ponieważ jest to, co wie więcej ludzi, a nie z powodu jego problemów technicznych. C ++ jest niebezpiecznym, trudnym w użyciu językiem w porównaniu do wielu współczesnych języków. Języki nie są wybierane ze względu na ich zalety, ale dlatego, że są popularne.
weberc2
Co więcej, nie mogę wymyślić wielu rzeczy, które Ada robi gorzej niż C ++, i wolałbym raczej używać go niż C ++ (i tak mój kod byłby prostszy i bezpieczniejszy), i programuję w C ++ profesjonalnie! A do nauczania uczniów o wskaźnikach zawsze jest Ada, Go lub jeden z wielu rozsądnych języków. A jeśli chodzi o twój ostatni punkt, C ++ jest niepotrzebnie trudny. Wiele problemów, z którymi spotykają się programiści C ++, nie ma nic wspólnego z programowaniem, ale z pokonywaniem C ++. Programowanie na dowolnym poziomie jest dość proste w rozsądnym języku.
weberc2
5

Mówiąc ogólnie, jeśli potrafisz nauczyć się i opanować C ++, możesz nauczyć się i opanować praktycznie każdy inny język. Powodem, dla którego się nie lubi, jest to, że aby być w tym biegłym i mieć szybki czas wydania, musisz bardzo dobrze znać język i jego standardową bibliotekę.

Jednak w języku, takim jak Java, można uzyskać szybki czas wdrożenia z niewielką zaawansowaną wiedzą na temat tajników biblioteki językowej / standardowej. Do diabła, znam na pamięć tylko pięć rzeczy ze standardowej biblioteki Java (poza podstawowymi rzeczami, takimi jak kolekcje).

Biorąc to pod uwagę, C ++ jest nadal powszechnie używanym językiem ze względu na świetne połączenie szybkości i metodologii zorientowanej obiektowo. Podczas gdy wiele osób uważa, że ​​nie jest to pełne OOP, uważam, że daje to większą elastyczność OOP, nie zmuszając cię do całkowitego fanatyzmu. Większość kompilatorów pozwala nawet pisać czyste C.

Gdybym miał wybór, wziąłbym C ++ nad Javą każdego dnia, ale to tylko ja jestem fanboyem. Ogólnie rzecz biorąc, Java jest przydatna, ponieważ będzie działać na prawie każdej architekturze, dla której jest zbudowany interpreter Java. Dlatego w przypadku aplikacji klienckich, które muszą być obsługiwane na wielu platformach, jest uważane za najlepsze narzędzie do tego zadania, a większość nowych napisanych aplikacji i tak jest oparta na sieci.

użytkownik32288
źródło
Może nie być to prawdą w przypadku kodu obiektowego, ale obietnicą języków C, w tym C ++, było to, że istniały kompilatory dla prawie każdej platformy, więc ten sam kod źródłowy można wykorzystać do kompilacji aplikacji dla wielu różnych platform.
JohnFx,
To jest w rzeczywistości prawda. Większość platform * NIX ma wbudowane kompilatory, które mają psychologiczny wpływ na większość ludzi w postaci „Jasne, mógłbym pobrać kompilator THAT, ale ten przyszedł z moim systemem operacyjnym, więc na pewno musi być najlepszy”.
Powinieneś wypróbować inne języki oprócz Javy - istnieją alternatywy, które składają się na najlepsze z obu światów. Idź na przykład oferty prędkości, przenośność oraz prostota i to sprawia, współbieżność wietrze.
weberc2
4

Jak powiedzieli mi niektórzy moi profesorowie, łatwiej jest zacząć od dołu lub od niskiego poziomu, a następnie przejść na wyższy poziom. Język taki jak C ++ daje świetne wprowadzenie do tego, na czym tak naprawdę polega bycie informatykiem. Język ten może nie być tak efektowny jak Java, Python, Ruby itp., Ale pozwala lepiej zrozumieć ważne funkcje programu, takie jak wskaźniki i zarządzanie pamięcią. Nawet jeśli nie jest to język, który planujesz lub chcesz używać przez resztę życia, z pewnością docenisz go w nadchodzących latach, kiedy zaczniesz znajdować pożądaną ścieżkę programowania.

mikrofon
źródło
To brzmi jak argument dla Ady, a nie dla C ++ ...
weberc2
3

C ++ może być jednym z najprostszych języków dla programów konsolowych dla początkujących. Oczywiście język jest złożony, ale możesz skupić się na podzbiorze proceduralnym. Możesz zignorować istnienie wskaźników przez dłuższy czas. Możesz zacząć od prostego, a następnie budować.

Składnia początkowa programu „hello world” jest mniejsza w porównaniu z Javą lub C #. Czy początkujący powinien widzieć słowo „statyczny” dla aplikacji hello world? W języku Java / C # robią.

jojo
źródło
3

Kiedy studiowałem informatykę, najpierw uczyłem się Javy, ale teraz mój uniwersytet uczy dwóch lingwistów obliczeniowych: najpierw Prologa, a potem C ++.

C ++ jest nauczany z co najmniej następujących powodów:

  • Jest to język ogólnego przeznaczenia, w którym można pisać oprogramowanie dla dowolnego systemu operacyjnego (ponieważ istnieje wiele kompilatorów). Został zaprojektowany jako dobry język produkcyjny, ułatwia ponowne użycie części programu, współpracę ze sprzętem i oprogramowaniem w świecie rzeczywistym itp.

  • To jest naprawdę szybkie. Nie można używać Python, Scheme lub Prolog do przetwarzania ogromnych zestawów danych, które są obecnie powszechne. Pomyśl o algorytmach graficznych z milionami węzłów. (Dlatego też gry komputerowe są zwykle pisane w C ++.)

  • Studenci mogą dowiedzieć się, co robi kompilator. Właściwie, dopóki tylko uczyłem się języka Java (począwszy od liceum), praca kompilatora zawsze wydawała mi się magią. Po prostu nie dowiadujesz się o stosie, stosie łączenia statycznego vs. dynamicznego itp. Jako początkujący Java. C ++ de-mistyfikuje cały komputer.

  • Jeśli chodzi o to, co potrafi, jest w porządku w czasie nauki (chociaż jest to prawdopodobnie jeden z najbardziej skomplikowanych języków, jeśli naprawdę się w nim zagłębisz). Oferuje ładną bibliotekę, która pomaga w płynnej krzywej uczenia się. (Istnieją jednak różne podejścia do tego. Na moim uniwersytecie uczono nas, jak pisać własne klasy strun i inteligentne wskaźniki, zanim pozwolono nam korzystać z biblioteki; Bjarne Stroustrup, wynalazca C ++, zachęca do odwrotnej kolejności.)

Felix Dombek
źródło
To nie wyjaśnia, dlaczego na przykład Ada nie jest nauczana jako pierwszy język.
weberc2
2

C / C ++ jest w rzeczywistości lepszym językiem niż większość innych, po pierwsze dlatego, że nie dodaje fałszywego poczucia bezpieczeństwa. Po drugie, ponieważ wiesz, co robisz.

Naprawdę uwielbiam ten język i uważam go za lepszy od większości alternatyw.

Jest również tak produktywny, jak większość innych języków, i nie jest aż tak „cholerny”, jeśli wiesz, co robisz i zastanów się, zanim skopiujesz losowe kody.

Również dobra lektura - http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Jednak niektóre rzeczy w C ++ są w rzeczywistości złe, na przykład wyjątki i nieintuicyjny narzut w niektórych przypadkach. To chyba powód, dla którego Linus jest tak negatywny w cytowanym przez ciebie poście.

Dobra lektura dotykająca jednego z powiązanych tematów - http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx

Koder
źródło
3
Ta odpowiedź jest całkowicie błędna. Przede wszystkim dlatego, że nie ma języka o nazwie „C / C ++”.
Konrad Rudolph
1
  1. Profesorowie nie lubią przygotowywać nowego kursu i istnieją ograniczenia co do tego, ile możesz zaoferować.
  2. Języki przychodzą i odchodzą, więc poddali się, próbując pozostać w czołówce (patrz nr 1)
  3. To uniwersytet, a nie szkoła techniczna. Większy nacisk kładzie się na zapewnianie podstaw niż szkolenie zawodowe.
  4. Obejmuje wystarczająco szeroki zakres programowania: serwer, komputer stacjonarny, wbudowany, UNIX, Windows.
  5. Używają go jako kursu eliminacji. Każdy główny obszar studiów ma co najmniej jeden.
JeffO
źródło
1

Wcześniej był Pascal, wcześniej Pascal był podobny do Basic. Interesującą częścią jest - co dalej? Może nic. Mam jednak trochę uwagi na temat „dlaczego c ++”. Ponieważ jest ciężko, ale nie jest tak samo seplenienie. Nie, naprawdę rozumiem, że C ++ jest dobrym językiem do programowania systemu, wiem, że istnieje wiele projektów zakodowanych w C ++ i jest mnóstwo bibliotek, aby uczniowie mogli z nim wszystko stworzyć. Ale mówimy o uczniach i ich możliwościach tworzenia logiki i zrozumienia systemu. Nie możesz być dobrym koderem C ++, jeśli nie możesz stworzyć prostej logiki i zrozumieć, jak działa system, co jest moim zdaniem głównym powodem. I tak, kolejnym prostym powodem jest stabilny początek kariery.

cnd
źródło