Czy C ++ jest odpowiedni jako pierwszy język? [Zamknięte]


26

Lokalna uczelnia uczy języka C ++ studentom pierwszego roku (16 lat) bez wcześniejszego doświadczenia w programowaniu.

Czy jako pierwszy język programowania nadaje się C ++?


56
Każdy język może być pierwszym językiem. To naprawdę nie ma znaczenia.
Adam Lear


19
@Anna Lear: Oczywiście, każdy język może być pierwszym językiem, ale to nie kwalifikuje C ++ jako dobrego pierwszego języka. Jeśli twoja odpowiedź była prawdziwą odpowiedzią, głosowałbym ją jako nieprzydatną.
Ed James

6
@Doug: Programuję C ++ na życie ... o co ci chodzi?
Matthieu M.,

9
@Dough - 70% projektów komputerowych obejmuje obecnie pisanie oprogramowania dla systemów wbudowanych i mikrourządzeń. Zgadnij, jakie języki są używane w tych projektach? Zgadnij, kto jest najlepiej wyposażony na stanowiska podstawowe? Z pewnością nie jedno kucyki Java lub .NET. Brzmi surowo, ale szkoły zrobiły wielką szkodę całemu pokoleniu absolwentów CS, szkoląc ich tylko dla 30% rynku pracy programistycznej. Mamy nadmiar programistów w sektorze aplikacji (30%) i mamy niedobór w sektorze systemów (70%). Te liczby nigdzie nie idą. Przyszłe możliwości kariery? Tak, jasne.
luis.espinal

Odpowiedzi:


61

Zdecydowanie nie .

Dla każdego celu, który masz na myśli dla studentów, inny język lub sekwencja języków byłaby szybsza i lepsza. Przykłady

„Uczniowie muszą zrozumieć koncepcje niskiego poziomu”.

Kodowanie „niskiego poziomu” nie polega na pobieraniu obiektów new, podawaniu ich z powrotem deletei od czasu do czasu wskazywaniu wskaźnika w miejscu, w którym nie powinno. Funkcje, klasy i szablony nie są niskiego poziomu. RAII, 12 sposobów używać const, std::ostream::operator<<, protectedi newnie są pojęciami niskopoziomowe. Te rzeczy mają implikacje na niskim poziomie, a ty pomijasz je przez miesiące lub do przyszłej klasy i zamiast tego uczysz semantyki języka C ++.

Sugeruję asembler z dobrym środowiskiem i materiałami dydaktycznymi, takimi jak MIPS lub MMIX. Jeśli się spieszysz, naucz C z objazdami, aby przynajmniej spojrzeć na wyjście asemblera. To da ci wszystko, co C ++ rozumie na niskim poziomie, a potem trochę szybciej.

„Uczniowie muszą zrozumieć orientację obiektową”.

Orientacja obiektowa wbudowana w C ++ jest zbyt skomplikowana w uczeniu koncepcji OO lub prawie każdej innej koncepcji wysokiego poziomu. Zapoznaj się z często zadawanymi pytaniami dotyczącymi C ++, aby uzyskać długą, długą listę potencjalnych powodów. Musisz albo trafić wszystkie te rzeczy, co zajmie bardzo, bardzo długo nowym programistom; w przeciwnym razie musisz pominąć wiele z nich, pozostawiając nowych programistów w ciemności - skutecznie, nie do końca znając C ++!

Sugeruję najpierw naukę prostszego języka wysokiego poziomu z obiektami (Python, Ruby, Squeak, Common Lisp, Racket), jeśli w ogóle musisz uczyć C ++. Poza tym ucz się polimorfizmu jako koncepcji odrębnej od OO, odwiedzając funkcjonalny język.

„Uczniowie muszą zrozumieć szablony i metaprogramowanie szablonów”.

Nikt tak naprawdę o to nie pyta, ale chciałbym, żeby tak było. C ++ ma fajne szablony, a STL jest fajny, ale po prostu nie powinny być wystarczająco wysokim priorytetem, aby uczyć najpierw C ++. Nauczenie systemu typu OCaml lub Haskell, a następnie modernizacja tych koncepcji może i tak być szybsze.

„Uczniowie muszą nauczyć się rozwiązywania problemów”.

Tak, dostajesz to w dowolnym języku i dostajesz więcej, jeśli w prawie innym języku niż C ++, ponieważ jest znacznie mniej bagażu. Ponownie zobacz C ++ FAQ, aby uzyskać listę wszystkich rzeczy, których uczniowie będą się uczyć zamiast umiejętności rozwiązywania problemów.

„Wszystkie powyższe i musimy używać tylko jednego języka”. lub „Pracodawcy tego chcą”. lub „Potrzebujemy języka w stylu C.” lub...

Naucz więcej niż jednego języka.

Pomysł, że oszczędzasz czas lub energię, ucząc lub ucząc się tylko jednego języka, jest całkowicie absurdalny. Opiera się na założeniu, że nauka dowolnego języka zajmuje dokładnie X osobo miesięcy ( WSKAZÓWKA! WSKAZÓWKA! ), Gdzie X jest pojedynczą liczbą lub jedną liczbą na język. Jest to prawie identyczne z pomysłem, że możesz zaoszczędzić czas i pieniądze, pomijając wszystkie te „wymagania” i „testując” śmieci.

Jeśli chodzi o wiele składni, niebezpiecznie kalekujesz uczniów, jeśli nauczysz ich, jak oczekiwać składni C w każdym języku, powodując, że będą oni bardzo stronniczy w stosunku do innych języków.

Prawie każda ścieżka jest szybsza i lepsza niż rozpoczynanie w C ++. Nauka prostego języka wysokiego poziomu, a następnie C ++ byłaby szybsza. Nauka asemblera, a następnie C ++ byłaby szybsza. Wszystko inne niż C ++ sprawi, że studenci będą tam szybciej i będą wiedzieli znacznie więcej na temat uruchamiania. Tylko nie ucz najpierw C ++.


4
Świetna odpowiedź! Rzeczywiście wiele funkcji C ++ wcale nie jest związanych z programowaniem niskiego poziomu.
Marco Mustapic,

7
+1, doskonała odpowiedź. Prawdą jest, że czasami kaprysy C ++ są błędnie utożsamiane z „niskim poziomem”. Powiązałeś ( -aś) z C ++ FAQ, ale polecam również ludziom zajrzeć do C ++ FQA (lub „Często zadawane pytania”: P)
Andres F.,

2
Łał. Przypomina mi to Java IAQ ...
Jesse Millikan

Zgadzać się w zupełności. Nawet Malbolge byłby lepszy niż C ++ dla początkujących.
prawej

2
Moja jedyna rezerwacja - możesz dużo nauczyć, nie wchodząc w szczegóły, które dotyczą głównie osób rozwijających biblioteki. Tak długo, jak wyjaśnisz, że robisz tylko podstawowy C ++ ... ale z drugiej strony, czego i tak nauczyłeś kogoś?
Steve314,

54

Nie, C ++ jest trudnym językiem nawet dla doświadczonych programistów C ++. Nawet w przypadku najprostszych algorytmów musisz wyjaśnić wiele subtelności językowych. Rozważ przykład Hello World:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

Co to za #includepolecenie? Co znajduje std::cout. Dlaczego ::? Co to jest <<? Och, to przeciążony operator! Co to jest przeciążony operator? Tak, bo intstrochę się zmienia, ale cokolwiek std::coutto jest, wysyła rzeczy do konsoli. Ohhh, std::coutjest strumieniem, a ich strumienie <<i >>operator są przeciążone.

Zobaczmy tę samą próbkę w Pythonie:

print("Hello World!")

To wszystko, chodźmy kodować niektóre algorytmy.


15
Python będzie odpowiedni dla siódmej równiarki. Student może zrozumieć znacznie więcej.
Gulshan

13
Jasne, ale mówimy o pierwszym języku. C ++ jest znany z tego, że jest trudny do opanowania i opanowania w porównaniu do innych języków. Po co używać go do nauki programowania? Student może nauczyć się języka C ++ później, gdy zna podstawy programowania.
Marco Mustapic,

8
Nie wspominałeś nawet o zależnym od argumentów wyszukiwaniu << :)
MetricSystem

6
Nie musisz wiedzieć absolutnie wszystkiego, aby zacząć korzystać z języka. cout << cokolwiek; „po prostu działa”, nie musisz zagłębiać się w drobiazgowe szczegóły, dopóki nie pokryjesz przeciążenia operatora itp.
Colen

6
Wziąłbym Python nad C ++ każdego dnia tygodnia jako język wprowadzający.
jprete

21

Prawdopodobnie nie jest to dobry pierwszy język: złożona składnia, wiele reguł, stary język, podatne na błędy zarządzanie pamięcią. Lepiej naucz swoich uczniów czegoś więcej OO, takiego jak Smalltalk, lub czegoś ładniejszego do programowania z użyciem Pythona lub czegoś funkcjonalnego jak Haskell.

Mogą nauczyć się języka C ++ w późniejszym okresie życia (jeśli nie mogą na to poradzić), po nauce lepszych języków.


5
Haskell jako pierwszy język byłby ciekawym eksperymentem.
Larry Coleman,

@Larry, kurs CS University na Cambridge uczy SML jako pierwszego języka.
Peter Taylor,

1
Programowanie funkcjonalne przekręca mózg - wiem, że MIT zaczyna się od Schematu dość wcześnie, ale cieszę się, że nie zacząłem programowania funkcjonalnego dopiero po dwóch latach hybrydowego postępowania / stylu OO w szkole.
justkt

11
@justkt: Wszystkie języki przekręcają mózg. To tylko kwestia tego, jak chcesz to przekręcić.
David Thornley,

+1, ale kategorycznie nie oznaczę języków innych niż C ++ jako niekoniecznie „lepszych”.
greyfade

18

Krótka odpowiedź: tak!

Powiedziałbym, że każdy język jest odpowiednim początkiem, ale szczególnie C ++ (lub równoważny). Obecnie C # i Java są głównymi językami używanymi i programującymi, dzięki którym szybko uczysz się opierać na API i IDE, ale dzięki C ++ masz szansę nauczyć się programowania od podstaw, w tym optymalizacji wydajności itp.

Nauka podstaw programowania, zapętlania i sortowania nigdy nie jest złym pomysłem, zanim zaczniesz ślepo polegać na językach wbudowanych w .Sort ();


11
Pętle i sortowanie, tak. Możesz to zrobić w dowolnym języku. Ale po co zacząć pracę ze wskaźnikami i dziwną składnią, skoro można tego uniknąć? Możesz nauczyć się tych wszystkich rzeczy później, gdy masz więcej doświadczenia w programowaniu.
Marco Mustapic,

4
@Marco: Podręcznik wprowadzający Stroustrupa „Programowanie: zasady i praktyka przy użyciu C ++” wprowadza wskazówki w połowie książki. Możesz robić wiele rzeczy w C ++ bez wprowadzania wskaźnika.
David Thornley,

4
„Nauka podstaw nigdy nie jest złym pomysłem… zanim…” Czy przeprowadzasz jakieś badania potwierdzające to twierdzenie? Wiem, że wielu inteligentnych ludzi uważa za powszechną wiedzę, że „oddolne” jest jedynym prawdziwym sposobem nauczania, ale jest to bardzo kontrowersyjny punkt i jedyne (co prawda bardzo ograniczone) badania dydaktyczne, które znam, prowadzą do przeciwnego wniosku.
Konrad Rudolph

1
@David: Problem polega na tym, że robienie „wielu rzeczy w C ++” bez wskaźników jest jeszcze gorsze. Bez wskaźników wszystkie twoje obiekty są deklarowane na stosie, co jest jednym z najgorszych pomysłów programistycznych. Typy wartości i dziedziczenie / polimorfizm po prostu się nie mieszają, a próba ich zmieszania prowadzi do całych kategorii błędów, które nie występują w lepiej zaprojektowanych językach.
Mason Wheeler

9
O Boże nie! Po co palić ograniczoną podaż cykli mózgowych na niepotrzebne osobliwości C ++? Po co skupiać się na nieistotnych rzeczach niskiego poziomu, takich jak zarządzanie pamięcią, kiedy celem jest poznanie podstawowych pojęć w programowaniu? Po co skakać w głęboki koniec ?!
Maglob

14

Właściwie uważam, że jest to prawdopodobnie dobry wybór jako pierwszy język z bardzo praktycznego powodu: Po nauczeniu się C ++ każdy inny język, który napotkasz, będzie wydawał się dziecinnie prosty.


10
Z całym należnym uznaniem dla Dijkstry, nauczanie dobrego programowania dla studentów, którzy wcześniej mieli kontakt z C ++, jest praktycznie niemożliwe; jako potencjalni programiści są okaleczeni psychicznie ponad wszelką nadzieję na regenerację. ;)
Mason Wheeler,

3
Musieliby oduczyć się wielu złych nawyków z C ++. Na przykład, czy znajomość asemblera czyni cię lepszym programistą Java? Powiedziałbym, że NIE.
Andres F.,

16
@ Andrés F .: Muszę się z tym nie zgodzić. Znajomość asemblera czyni cię lepszym programistą bez względu na to, co piszesz, ponieważ wtedy możesz zrozumieć, co się naprawdę dzieje.
Mason Wheeler,

2
@Andres: Widziałem zbyt wielu programistów Java / C # przychodzących do innych języków i wbijających wszystko w obiekty ... brakuje im doświadczenia.
Matthieu M.,

3
@Andres F. - W ciągu 12 lat pracy z Javą spotkałem się z moją grupą programistów Java, którzy naprawdę są do kitu, ponieważ nie są narażeni na takie sprawy, jak alokacja zasobów, RAII, nie wiedzą, jak programować aplikacje przyjazne dla GC, itp. Znajomość asemblera i znajomość skompilowanych języków bez automatycznego wsparcia na śmiecie i ze wsparciem dla paradygmatów innych niż OO (C, C ++, Ada lub prawie każdego skompilowanego języka z rodziny Algol) uczy, jak pisać wydajne i duże systemy w Javie, C #, Python, nazwij to. Ponadto model obiektowy w C ++ wcale nie jest podobny do Java.
luis.espinal

10

Nauczyłem się C ++, kiedy miałem 15-16 lat.

Lepiej pozostawić magię innym i samemu nauczyć się wewnętrznego działania rzeczy.


Mówiąc wprost, jeśli nie możesz zrozumieć podstawowej składni i semantyki C ++, nie jesteś zbyt dobry w komputerach. To nie takie trudne. Nie ma dobrego powodu, aby unikać „C z klasami”.

Jeśli oczekujesz, że uczniowie zaczną pracować nad metaprogramowaniem szablonów, dedukcją wywołań polimorficznych i rozplątywaniem wielu hierarchii dziedziczenia - jest to absurdalne w przypadku klasy podstawowej dla dowolnego używanego języka.

Istnieje bardzo zła tendencja do ukrywania zawiłości programowania dla studentów. To nie kończy się dobrze (por. Esej Spolsky's Java Schools). Ci ludzie trafią na DailyWTF, jeśli nie wyprostują głowy. Wyciekają abstrakcje, a kiedy (nie jeśli) przeciekają, jest to gorsze niż radzenie sobie z tym. Ja pracowałem jako TA dla studentów poziomu wejścia C ++. Albo rzeczy muszą być ukryte do końca, albo muszą być doprowadzone do światła, aby je zbadać. Magia jest wrogiem ucznia.

Gdybym musiał polecić język początkowy, który skompilowałby się do kodu maszynowego, wariant Pascal byłby prawdopodobnie najlepszym rozwiązaniem. Z tego, co pamiętam, ma bardziej regularne i ustrukturyzowane podejście niż rodzina C.


1
@Ed: Nie bardzo. Opanowałem If i Goto w QBASIC i to było wszystko. Wskaźniki, tablice, funkcje, klasy itp. Były w mojej przyszłości w C ++. Rekursja również była niezrozumiała.
Paul Nathan

5
Poczekaj, nikt nie spodziewa się, że ktoś będzie pracował nad projektem przy użyciu C ++ bez uprzedniego zrozumienia C ++! To rzeczywiście prowadziłoby do kodu godnego TheDailyWTF. Ale w przeciwieństwie do twojego twierdzenia, nauka języka C ++ nie jest trywialna (i nie jest to również „C z klasami”). C ++ ma ogromną, zawiłą, a czasem nie sensowną składnię i gramatykę oraz nieskończoną liczbę słów kluczowych i reguł. Na początek to okropny język. Jako język nauczania jest okropny, ponieważ zmusza studentów do myślenia, że ​​braki C ++ są naturalne i nieuniknione w świecie programowania.
Andres F.,

1
Andr: Domagasz się fałszywej dychotomii: „~ C ++ lub All C ++”. To jest błędne.
Paul Nathan

1
@Paul: wystarczy. Ale rozważ to: nawet składnia i gramatyka uproszczonego C ++ jest skomplikowana, ponieważ musi obsługiwać wszystkie funkcje pełnego języka. Więc już skompromitowałeś się używaniem brzydkiego języka, nawet jeśli uczysz go w prostszych formach. Zakładam, że nie kodujesz tylko w C za pomocą cukru syntaktycznego (aka „C z klasami”), ponieważ w takim przypadku lepiej jest używać zwykłego C!
Andres F.,

2
@Andr: Niezupełnie. C ++ oferuje znaczne uproszczenie składniowe w stosunku do C89. Co więcej, dla celów podstawowych sprawy są bardzo proste we wszystkich przypadkach, o których mogę myśleć ...
Paul Nathan

8

Powiedziałbym „nie” - miałem ochotę uczyć się programowania i od razu zacząłem studia w college'u z C ++ od samego początku. W połączeniu z nauczycielem, który uczy C ++ tak, jakby to był inny język (koncepcje, które miały dla nich sens, niekoniecznie koncepcje języka lub aplikacji w świecie rzeczywistym) oraz projekty rzucane nam od razu co tydzień, rozbijałem się i paliłem razem z połowa klasy. Kiedy mogłem nawet trawić, eksperymentować i stosować to, czego się uczyłem, zmagałem się z pracą domową projektu, która dublowała się jako testy. Twierdziłbym, że był to kurs na poziomie 200 niż 100.

Naprawdę starałem się jak mogłem. Nie prosiłem o współczucie, wiedziałem, że będzie to wyzwanie, ale nauczyciel nawet mi nie pomoże. Właśnie powiedziałem, żebym przeczytał ten podręcznik, tak jak to robiłem.

Kłóciłbym się (a niektórzy by się nie zgodzili), że Ruby lub Python to znacznie lepszy język do włamania się do świata programowania. Czysta, zwięzła, czytelna, jaśniejsza składnia.


8
Każdy język jest złym pierwszym językiem, jeśli źle się go uczy.
David Thornley,

3
@David Thornley: jednak nawet przy prawidłowym nauczaniu niektóre języki są kiepskim wyborem jako pierwsze języki. Na przykład Cobol.
Andres F.,

Zgadzam się, wydaje mi się, że z lepszym nauczycielem, którym zależy na angażowaniu innych, a nie tylko szybkim przechodzeniu przez materiał kursu, wynik może być inny. Po prostu potoczyło się dla mnie zbyt szybko.
Kevin,

@ Andrés F .: Nie zgadzam się z tym. Jednak relacja Kevina dotyczyła złego nauczyciela, a zły nauczyciel może zepsuć Python lub Scheme jako pierwszy język (moi dwaj nominowani do dobrego pierwszego języka).
David Thornley,

2
@Chris: Programowałem w Cobolu i współczuję wam :)
Andres F.,

8

Nie.

Jako język nauczania C ++ jest tylko nieznacznie lepszy niż C, który jest jednym z najgorszych języków nauczania na świecie. Wprowadza wiele komplikacji z góry, niektóre części języka są głęboko nieintuicyjne i przez większość czasu uczysz się więcej o C ++ niż o programowaniu w ogóle.

Nie oznacza to, że C ++ (lub C) są złymi językami lub nie warto się ich uczyć; po prostu dostępne są lepsze języki nauczania, takie jak Python.


1
C jest trudnym językiem do nauki, ale z pewnością należy do najgorszych. COBOL i Java uznają ciasto za jedno z najgorszych, znacznie gorszych niż C. Zaletą C jest to, że musisz poradzić sobie z wewnętrznym metalem z przodu (bez konieczności zagłębiania się w asemblera). Ludzie z powodzeniem uczą się języka C jako podstawowego języka. Istnieją oczywiście inne, bardziej eleganckie opcje, takie jak Python lub Ruby (lub dowolny język, który jest paradygmatem i który niepotrzebnie odsuwa OO nawet w przypadku najprostszych zadań). C nie jest jednym z najgorszych sposobów nauczania wyborów, nie z dystansu.
luis.espinal

1
Marginalnie lepszy? Jak się masz? C ++ bierze wszystko, co złe w C i opiera się na nim !
Mason Wheeler,

1
@MasonWheeler: Głównie dlatego, że C ++ zapewnia stringtyp danych uczciwy w stosunku do Boga, który przeciąża operatorów, takich jak +, =i ==robi rzeczy, których studenci mniej lub bardziej oczekują, w porównaniu z tym, jak przetwarzanie łańcucha powinno być wykonywane w C. Stąd „marginalnie” . Nie polecam też jako języka nauczania.
John Bode

7

Istnieją dwa podstawowe rodzaje edukacji policealnej: uniwersytet i szkoła handlowa. Różnica polega na tym, co chcesz przygotować po ukończeniu studiów. W branży motoryzacyjnej zależy od tego, czy będziesz mechanikiem, czy inżynierem mechanikiem.

Biorąc to pod uwagę, C ++ to świetny pierwszy język, jeśli chcesz być inżynierem, i kiepski, jeśli chcesz być programistycznym odpowiednikiem mechanika.

Klasa wprowadzająca w C ++ poświęci dużo czasu na rozmowy o typach danych, definicjach, deklaracjach, wskaźnikach, alokacji pamięci i tak dalej. To świetna podstawa, jeśli zamierzasz spędzić kilka semestrów na budowaniu, aby móc zrobić coś pożytecznego, ale chcesz wiedzieć, że kiedy tam dotrzesz, masz podstawy do obsługi dowolnego stopnia złożoności.

Z drugiej strony, jeśli chcesz szybciej zrobić coś użytecznego, ale nie przejmuj się, że domena i złożoność są ograniczone, to spędzanie całego czasu na koncepcjach niższego poziomu będzie marnotrawstwem. Jest wielu programistów, którzy potrafią napisać świetny walidator formularzy HTML, ale nie mają pojęcia, jak podejść do projektowania sterownika urządzenia.


5

Pewnie. Moim pierwszym językiem było C, ale tak naprawdę było to po prostu ułatwienie naszej klasie posługiwania się C ++. Kiedy dostałem się na uniwersytet, Java była znacznie łatwiejsza w obsłudze. C ++ może mieć nieco bardziej stromą krzywą uczenia się, ale jeśli zostanie właściwie nauczony, powinno być dobrze.


4

Nie, C ++ nie nadaje się jako pierwszy język. Jak pokazano tutaj, wielu profesjonalnych programistów podziela tę opinię, ale jest to również opinia, którą mają profesjonalni nauczyciele.

Oto, co mówi raport dziekana Carnegie Mellon University o używaniu C ++ do wprowadzenia w programowanie dla studentów pierwszego roku:

Standardowe języki, takie jak C lub C ++, nie są odpowiednie dla tego kursu, ponieważ ich złożoność i braki utrudniają zarówno nieformalne, jak i zmechanizowane techniki rozumowania.

CMU oferuje dwa kursy wprowadzające, imperatywny i funkcjonalny. Do programowania funkcjonalnego wybrano SML. Nie wiem, co wybrano na tryb rozkazujący, ale w raporcie wspomniano o podzbiorze C.


2

Pewnie. Istnieją inne języki, które uczniowie pierwszego roku mogą łatwiej zrozumieć. Są jednak sposoby, aby nauczyciel mógł powoli wprowadzać pojęcia w C ++.


2

Zdecydowanie C ++ może być pierwszym językiem. Ale chodzi o to, jak dobrze się uczy.

Wszyscy mówią, że pierwszy język powinien być bardzo łatwy do zrozumienia. Ale chodzi mi o to, że większość ludzi zaczyna programować na poziomie licencjackim. Możesz więc nauczyć czegoś, co są w stanie pojąć. A dzięki C ++ możesz przejść z niższego poziomu na wyższy poziom programowania.


Ale dlaczego nie zacząć od wyższego poziomu programowania? Jest to poziom, na którym rozwiązujemy większość problemów (oczywiście z wyjątkiem niektórych problemów specyficznych dla domeny). Następnie, jeśli muszą zbliżyć się do metalu, mogą nauczyć się C ++, asemblera itp.
Andres F.,

Zgadzam się, chodzi o to, jak dobrze się uczy!
Gary Willoughby,

2

Nie, absolutnie nie.

Gdybym miał swoją drogę, nie pozwoliłbym jej używać w środowisku akademickim prawie całkowicie. Nie z powodów, które są sprzeczne z tymi, które już zostały stworzone, ale ponieważ zbyt wielu uważa, że ​​C ++ (lub jego odmiany) jest odpowiedzią na prawie każdy problem, ponieważ można go używać w prawie każdej sytuacji. To jest śrubokręt programowania.

Niektórzy ludzie używają go do dokręcania śrub, doskonale rozsądnego narzędzia do pracy. Inni używają go jak prybar, chociaż często skuteczny, niezbyt idealny, ponieważ śrubokręt, bez względu na to, co powiedziałby ci twój ojciec, nie jest prybarem i może katastrofalnie zawieść z powodu niewłaściwego użycia, ponieważ skład trzonu nie jest celowo zbudowany dla rodzaju sił, jakie napotkałby prybar. Jeszcze inni mogą próbować użyć go jako ciosu lub dłuta i prawie zawsze napotkają problemy, ponieważ rękojeść śrubokręta nie została zbudowana do tego rodzaju uderzających nadużyć, które wytrzymują uderzenie lub dłuto.

Moim zdaniem zadaniem programisty jest generalnie przełożenie rzeczywistych problemów na automatyzację, która zapewnia pewien stopień poprawy wydajności (zmniejszenie zaangażowania zasobów do zadania), prędkości (zmniejszenie czasu wykonania zadania), przewidywalności (zwiększenie powtarzalności zadania) lub organizacji (zwiększ świadomość zależności między zadaniami).

Jest zrozumiałe, że każdy, kto programuje, powinien mieć pewną powszechną wiedzę na temat niskiego poziomu działania komputerów, a zwłaszcza IO urządzeń i alokacji pamięci, jednak zdecydowanie rzadkie jest wykorzystywanie tej wiedzy w jakimkolwiek znaczącym stopniu, nie mówiąc już o wykorzystaniu jej do zdecydowana większość zadań. Próba zrobienia tego bez zrozumienia szerszego kontekstu problemu stwarza niepotrzebne ryzyko dla wysiłku.

Absurdalnym jest, że pierwszym językiem programowania powinien być C / C ++ lub bliskie warianty, ponieważ klasa problemów, które C i jego pochodne rozwiązują, z pewnością nie jest odpowiednia dla pewnego arbitralnie dużego odsetka obecnych i przyszłych problemów (z wyjątkiem sytuacji, gdy trzeba ratować wcześniej program wkręcany), a tak naprawdę jest to niewielki zestaw nadchodzących problemów. Większość programistów nigdy nie zbliży się do opracowania podstawowych funkcji systemu operacyjnego lub bezpośrednich interfejsów urządzeń, pomimo rosnącej popularności małych mobilnych połączonych urządzeń. Większość będzie działać i żyć tak jak my. Naprawianie i wycofywanie kodu, który ma więcej niż dwa pokolenia, wdrażanie w technologii, która już pokazuje wiek, lub praca na marginesie technologii w aplikacji Killer (x + 1).

Jako pierwszy język przyjrzałbym się Lego NXT, lekkiemu, ale bogato wyposażonemu wariantowi LabView. Chociaż Lego NXT nie jest szeroko stosowany w przedsięwzięciach komercyjnych, zaprezentuje on podstawową naturę tego, co ma programować w sposób „bogaty w czujniki”. Mogę sparować go z nieco neutralnym dla platformy językiem skryptowym, takim jak Javascript lub TCL / TK. Oba będą miały stosunkowo niewielki wpływ pod względem tego, co musisz odkryć, aby wykonywać bardzo podstawowe, ale skuteczne zadania, z wysokim zwrotem pod względem pętli sprzężenia zwrotnego i elastycznością we wprowadzaniu i rozwiązywaniu różnych stopni złożoności problemu. Ponadto stanowi dobrą okazję dla uczniów, którzy chcą odkryć możliwości przekroczenia tego, co zapewnia środowisko konserwowe: szansa na próbę pracy w ciemności, wilgoci,

Po tym, jak nauczą się jeździć czterocylindrowym automatem, a następnie przejdź do dużego ręcznego hotrodu v8, jeśli są naprawdę zainteresowani i zmotywowani. Jeśli Joel nie może znaleźć programistów gwiazd rocka pod żadnym kamieniem pod jego stopami, może po prostu będzie musiał szukać gdzie indziej lub przemyśleć, dlaczego może potrzebować więcej niż kilku śrubokrętów w swoim zestawie narzędzi.


1

Niektóre punkty, w których początkujący łatwo popełniają błędy w C ++ to:

wykonywanie zadań tam, gdzie chciałeś przetestować = vs ==

Brakuje;

Czytelność nawiasów klamrowych vs. na przykład pascal begin-end

A potem są wszystkie pliki dołączania, makra, zarządzanie pamięcią itp. Do pomylenia.

Powiedziałbym więc, że C ++ nie jest najlepszym językiem na początek - nie ma jednak wątpliwości, że może być bardzo przydatny, gdy się go nauczysz.

Chciałbym - jak sugerowali inni - używać C #, Java, a może nawet VB - i dobrego IDE z podświetlaniem składni, debuggerem itp., Aby ułatwić odzyskiwanie po błędach.


1

Kiedy byłem na studiach, C ++ był językiem podstawowym, którego uczyłem przez cały pierwszy rok studiów. Teoria polegała na tym, że zawierała kilka złożonych pojęć programistycznych, więc jeśli potrafisz je opanować, możesz wybierać inne języki. Służyło mi to jako dobry fundament.

Powiedziawszy to, w ubiegłym roku zasiadałem w komitecie, aby ustalić, czy zmienić język podstawowy na Javę. Po rozmowie z kilkoma wybitnymi pracodawcami i kilkoma absolwentami wydziału ustalono, że przejście na Javę było najlepszym interesem studentów. Pracodawcy, z którymi rozmawialiśmy, chcieli, aby ludzie mieli doświadczenie w języku, którego używali, aby ich zatrudnić. Wierzę, że teraz, 10 lat później, nadal używają Javy jako podstawowego języka.

Podobna uwaga: chcieliśmy zatrudnić kilku absolwentów college'ów z naprawdę dobrymi umiejętnościami C ++. Nie znaleźliśmy żadnych.


1

Powiedziałbym tak. Ale każdy język może być naprawdę pierwszym językiem. Myślę, że C ++ jest dobry, ponieważ chociaż jest złożony, a czasem trudny, pokazuje ci, co możesz naprawdę zrobić (mniej ograniczeń). Ponadto ma on projekt obiektowy, który może pomóc Ci przygotować się do posługiwania się innymi językami.

C ++ był moim pierwszym językiem i cieszę się, że tak było. To sprawiło, że zacząłem wcześnie myśleć w myśleniu OOP i jestem za to wdzięczny. Ale ostatecznie wszystko sprowadza się do tego, co chcesz zrobić. Język nie ma większego znaczenia, ponieważ jeśli umiesz dobrze posługiwać się jednym językiem, prawdopodobnie nie będziesz miał problemów z wybraniem innego. Co chcesz robić? Twórz gry? Program na telefony komórkowe? Każdy będzie miał lepiej dostosowane narzędzia i języki.


1

C ++ jest językiem eksperckim, a nie początkującym ... powiedziałby najpierw C, a nie Java, C # lub Python ... dlaczego? ponieważ C uczy, jak dbać o pamięć i pewne trudne pojęcia, takie jak wskaźniki, które są „ukryte” przez wszystkie języki, a jednocześnie obecne wszędzie. Widziałem tak wielu młodych programistów, którzy nawet nie rozumieją, dlaczego czasami pamięć powinna zostać zwolniona i wierzą, że śmieciarz nie jest małym karłem, który czyści wszystkie kodujące bzdury: tworzą się, tworzą i wybuchają, eksploduje, nawet jeśli mają XXXXGb RAM ... Ale nie rozumieją, dlaczego śmieciarz nie tylko magicznie czyści wszystko! I widziałem tego rodzaju programistów kodujących w C ++ (a nawet bardziej szalonych, na Corbie) i to była rzeź !!!!!!!!!! Radziłbym więc nauczyć się kodowania w C, a następnie przejść do Python / Java / C # dla pojęć obiektowych i całego cukru wokół. Potem, kiedy to wszystko zrozumiesz, przejdziesz do C ++ i poczujesz moc C ++, ale odkryjesz także wszystkie jego niebezpieczeństwa i dlaczego nikt nie powinien z niego korzystać;)


1

NIE. Jest tak wiele rzeczy, które ma C ++, co sprawia, że ​​początkujący jest trudny do zrozumienia. Nie wchodź w „wszystkie języki programowania są równe”.

Zacznij od Basic lub Pascal (zignoruj ​​elementy „są przestarzałe”), a później C / C ++ / Java / C # / Perl. Lub jeśli masz szansę, najpierw z Logo & Karel, a następnie Basic lub Pascal.

PD Niektóre uniwersytety i uczelnie mają lekcje programowania i porównania języka programowania i zdarza się, że uczyłem tej klasy ;-)


0

Możesz wybrać dowolny język, aby nauczyć się podstaw programowania. Nauczyłem się różnych rzeczy w C / C ++. ale 7 lat później narzędzia / języki zostały zmienione w mojej szkole i wolą java / C #. języki to zwykłe narzędzia. To, czego potrzebujesz, aby być lepszym, to podstawy. np. w MIT ludzie uczą się podstaw algorytmu za pomocą Pythona. np. Java może być dobra do programowania w Internecie. ale C / C ++ są dobre dla usług i aplikacji o wysokiej wydajności. To zależy od twoich sytuacji.


0

Jeśli „odpowiednie” oznacza „możliwe”, tak. Jeśli na „dobre”, zdecydowanie nie.

Można polubić, a nawet pokochać C ++, ale do tego lepiej naucz się kilku języków i pracuj przez dekadę z zepsutymi podstawami kodowymi z życia w turkusowym kolorze, zdobądź doświadczenie w „tworzeniu nietrywialnego oprogramowania, które faktycznie działa” - wtedy C ++ będzie miał urok.

Nie na początku, kiedy jesteś dziewicą, majstrujesz przy małych, prostych (ale podobno interesujących i zabawnych) problemach.

Zacznę od pytona, a następnie SICP (schemat) lub czegoś podobnego. Może odwrócony lub przeplatany. Dzięki nim możesz po prostu poradzić sobie z problemem. Zamiast walczyć z systemem, chodzić w głębokim błocie i uczyć się wszelkiego rodzaju nielogicznych dziwactw i ich historycznych powodów.

Później, kiedy już możesz zaprogramować wyjście z papierowej torby, przełącz się na goły metal: naucz się sposobów montażu i kilku architektur, a może także Knuth's Mix. Nie mam na myśli zapamiętywania kodów ani robienia wielu prawdziwych rzeczy, tylko po to, aby zrozumieć pamięć, rejestry, ALU, pamięci podręczne, przerwania i dostać się do poziomu odczytu.

Następnie dzięki temu fundamentowi możesz być narażony na inne języki, w tym C ++. Być może dobrym pomysłem jest dodanie „historii i ewolucji języków” pomiędzy nimi.


0

Zaczynałem od C ++ w gimnazjum. Wziąłem kopię tej książki: C ++ Jak programować autorstwa Deitel i Deitel . Ta książka jest całkiem dobra.

Szczerze mówiąc, nie ma tu żadnej dobrej lub złej odpowiedzi, osobiście odkryłem, że C ++ jest zrozumiały. Nauczyłem się tego aż do OOP (potknąłem się o „to”, czego teraz nie rozumiem, jak nie mogłem tego zdobyć, ale cokolwiek innego). Spróbuj, nie zniechęcaj się. Jeśli utkniesz, sprawdź inne języki i ucz się nowych. Chodzi o to, że gdy zobaczysz tę samą koncepcję w 2-3 różnych formach, zrozumiesz je lepiej. Tak jak powiedziałem, koncepcja wskaźnika „ten” myliła mnie, ale kiedy zobaczyłem to samo w Pythonie (zamiast tego nazwano ja), od razu miało to dla mnie sens, ponieważ zrozumiałem to w C ++. Naucz się języka Java, jeśli potrafisz go uczyć jak najwięcej szkół wyższych. Naucz się pytona lub rubinu, ponieważ jest to język du Jour, a jeśli możesz odkrywać nowe niszowe / nowe rzeczy, takie jak Clojure (i wszystkie inne seplenienie), Haskell, Scala ...


-1

Nie. Zacznę od Java lub C #. Jeśli chcesz nauczyć się C ++, prawdopodobnie łatwiej jest ci nauczyć się podstaw, takich jak klasa, jak robić pętle i widelce (jeśli, to instrukcje) itp. O wiele ważniejsze jest, aby nauczyć się patrzeć na problem lub równanie matematyczne i zaprogramuj je, aby dowiedzieć się, czy uwolniłeś całą pamięć, czy cokolwiek innego.


2
Dlaczego Java lub C #, kiedy Python jest jeszcze prostszy?
David Thornley,

-3

Wygląda na to, że założenie tego pytania brzmi: „C ++ wydaje się tak skomplikowany, czy 16-latek będzie w stanie wybrać go jako pierwszy język programowania komputerowego?”

Kiedy mamy 4 lub 5 lat, zbieramy większość konstruktów w języku ojczystym, właśnie z takim narażeniem na to poprzez słuchanie, jak inni mówią. Tworzenie świetnych zdań zajmuje całe życie, bez żadnych pytań.

C ++ jest z pewnością o wiele mniej skomplikowany / skomplikowany niż, powiedzmy, większość języków ludzkich. 16-latkowie z pewnością będą w stanie to podnieść. Czy napiszą z nim świetny kod? Muszę czekać i oglądać.


4
Języki ludzkie mogą sobie pozwolić na skomplikowaną składnię, ponieważ jeśli dostaniesz gramatykę lub pisownię, ludzie nadal cię rozumieją. Nie dotyczy to języków komputerowych.
dan04

-3

Początkujący powinni najpierw docenić „programowanie”. W moim doświadczeniu w szkoleniu klasy początkujących docenili przede wszystkim to, co rozumieją najbardziej. Podobnie jak Python vs. C # doceniają Python, ponieważ jego bardzo wysoki poziom i nie używa symboli takich jak C #, co oznacza bardzo zbliżony do ludzkiego języka, jego bardzo angielskiego. Dlatego poleciłbym nauczyć się programowania od wysokiego do niskiego poziomu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.