it-swarm-eu.dev

Je C ++ vhodný jako první jazyk?

Místní vysoká škola vyučuje C++ studentům prvního ročníku (16 let) bez předchozí zkušenosti s programováním.

Je C++ vhodný jako první programovací jazyk?

26
Ed James

Empaticky Ne .

Pro jakýkoli cíl, který máte na mysli pro studenty, by byl jiný jazyk nebo sled jazyků rychlejší a lepší. Příklady.

"Studenti musí rozumět konceptům nízké úrovně."

"Nízkoúrovňové" kódování nespočívá v získávání objektů z new, jejich krmení zpět na delete a občas s ukazatelem směřujícím někam, kde by to nemělo. Funkce, třídy a šablony nejsou nízké úrovně. RAII, 12 způsobů použití const, std::ostream::operator<<, protected a new nejsou koncepty nízké úrovně. Tyto věci mají nízkoúrovňové důsledky a ty je přeskakujete měsíce nebo až do budoucí třídy a místo toho učíte hory sémantiky C++.

Navrhuji assembler s dobrým prostředím a výukovým materiálem jako MIPS nebo MMIX. Pokud jste ve spěchu, naučte C s objížďkami, abyste se alespoň podívali na výstup assembleru. To vám poskytne veškeré porozumění na nízké úrovni, které C++ dělá, a pak některé, rychleji.

"Studenti musí rozumět objektové orientaci."

Objektová orientace zabudovaná do C++ je příliš komplikovaná pro výuku OO koncepty nebo téměř jakýkoli jiný koncept na vysoké úrovni. Viz FAQ C++ pro pěkný dlouhý seznam z potenciálních důvodů proč. Musíte buď zasáhnout všechny ty věci, které budou trvat velmi, velmi dlouho s novými programátory, nebo jinak musíte přeskočit spoustu, nechat nové programátory ve tmě - efektivně, ne opravdu znát C++!

Navrhuji nejprve se naučit jednodušší jazyk na vysoké úrovni s objekty (Python, Ruby, Squeak, Common LISP, Racket), pokud musíte učit C++ vůbec. Kromě toho se naučte polymorfismus jako koncept, který je oddělen od OO) návštěvou funkčního jazyka.

"Studenti musí rozumět šablonám a metaprogramování šablon."

Nikdo se na to neptá, ale přeji si, aby to udělali. C++ má pěkné šablony a STL je v pohodě, ale neměly by být dostatečně vysokou prioritou, aby se C++ naučily jako první. Výuka systému typu OCaml nebo Haskell a následné doplnění těchto konceptů může být stejně rychlejší.

"Studenti se musí naučit řešit problémy."

Jo, dostanete to v jakémkoli jazyce a dostanete víc, pokud je to v téměř jakémkoli jiném jazyce než C++, protože je zde méně zavazadel. Znovu, viz The C++ FAQ pro seznam všech věcí, které se studenti budou učit místo dovedností pro řešení problémů.

"Všechny výše uvedené a musíme použít pouze jeden jazyk." nebo "Zaměstnavatelé to chtějí." nebo „Potřebujeme jazyk ve stylu C.“ nebo ...

Vyučujte více než jeden jazyk.

Myšlenka, že šetříte čas nebo energii výukou nebo učením pouze jednoho jazyka, je naprosto směšná. Je založeno na myšlence, že učení jakéhokoli daného jazyka trvá přesně X člověk měsíců ( HINT! HINT! ), kde X je jedno číslo nebo jedno číslo na jazyk. To je téměř totožné s myšlenkou, že můžete ušetřit čas a peníze přeskočením všech těch „požadavků“ a „testování“ odpadků.

Pokud jde o více syntaxí, nebezpečně zmrzačíte studenty, pokud je učíte, aby očekávali syntaxi C v každém jazyce tím, že je divoce zaujmou vůči jiným jazykům.

Téměř každá cesta je rychlejší a lepší než začíná s C++. Učení jednoduchého jazyka na vysoké úrovni a poté C++ by bylo rychlejší. Učení assembleru a pak C++ by bylo rychlejší. Cokoli jiného, ​​než C++, se tam dostanou studenti rychleji a budou znát mnohem více pro zavedení. Nejprve neučte C++ nejprve

61
Jesse Millikan

Ne, C++ je obtížný jazyk i pro zkušené vývojáře C++. I pro nejjednodušší algoritmy musíte vysvětlit mnoho jazykových jemností. Zvažte příklad Hello World:

#include <iostream>

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

Co je to #include příkaz? Co je std::cout. Proč ::? Co je <<? Ohhh, je to přetížený operátor! Co je přetížený operátor? Sooo, pro ints to dělá trochu posun, ale pro cokoli std::cout je, že vydává věci do konzoly. Ohhh, std::cout je proud a proudy mají svůj << a >> operátor přetížen.

Podívejme se na stejný vzorek v Pythonu:

print("Hello World!")

To je vše, pojďme kódovat některé algoritmy.

54
Marco Mustapic

Pravděpodobně to není dobrý první jazyk: složitá syntaxe, spousta pravidel, starý jazyk, správa paměti náchylná k chybám. Lepší je naučit studenty něco více OO jako Smalltalk, nebo něco hezčího programovat jako Python nebo něco funkčního jako Haskell).

Mohou se naučit C++ později v životě (pokud tomu nedokážou), poté, co se naučili lepší jazyky.

21
Andres F.

Krátká odpověď: Ano!

Řekl bych, že libovolný jazyk je vhodný začátek, ale zejména C++ (nebo ekvivalentní). V těchto dnech C # a Java jsou hlavní jazyky, které se používají a programují, rychle se naučíte opírat se o API a IDE, ale s C++ máte šanci naučit se programovat od základů, včetně výkonu) optimalizace atd.

Nikdy není špatný nápad naučit se základy programování, opakování a třídění dříve, než se slepě spoléháte na jazyky vestavěné .Sort ();

18
Mantisen

Vlastně věřím, že je to asi dobrá volba jako první jazyk z velmi praktického důvodu: Po naučení se C++ se jakýkoli jiný jazyk, se kterým se setkáte, bude jevit jako vánek.

14
ennuikiller

Když jsem měl 15-16 let, učil jsem se C++.

Je lepší nechat kouzlo ostatním a naučit se vnitřní fungování věcí sami.


Upřímně řečeno, pokud nedokážete přijít na syntax a sémantiku C++ na úrovni základní, nejste v počítačích tak dobrý. Není to tak těžké. Neexistuje žádný dobrý důvod vyhnout se „C s třídami“.

Pokud očekáváte, že studenti začnou pracovat na metaprogramování šablon, dedukci polymorfních volání a rozmotávání více hierarchií dědičnosti - je to pro třídu vstupní úrovně směšné pro jakýkoli jazyk, který používáte.

Je velmi špatná tendence chtít skrývat složitosti programování pro studenty. To neskončí dobře (srov. Spolsky's Java Esej o školách). Tito lidé skončí na DailyWTF, pokud nedostanou hlavu přímo. Abstrakce unikají a kdy (ne pokud) abstrakce netěsnosti, to je horší než s tím vypořádat. Jsem pracoval jako TA pro studenty na vstupní úrovni C++. Buď musí být věci úplně skryty, nebo se musí dostat na světlo Kouzlo je nepřítelem žáka.

Kdybych měl doporučit počáteční jazyk, který byl kompilován do strojového kódu, pravděpodobně by byla nejlepší varianta Pascalova varianta. Má pravidelnější a strukturovanější přístup než rodina C z toho, co si vzpomínám.

10
Paul Nathan

Ne.

Jako výukový jazyk je C++ jen o něco lepší než C, což je jeden z nejhorších výukových jazyků v okolí. Představuje spoustu složitosti, některé části jazyka jsou hluboce neintuitivní a většinu času se učíte více o C++ než o programování obecně.

To neznamená, že C++ (nebo C) jsou špatné jazyky nebo nestojí za to se učit; jen že jsou k dispozici lepší výukové jazyky, například Python.

8
John Bode

Řekl bych 'ne' - měl jsem dychtivost a touhu učit se programování a šel jsem přímo do mého úvodního roku na vysokou školu s C++ hned za netopýrem. Ve spojení s učitelem, který vyučoval C++, jako by to byl jiný jazyk (koncepty, které jim dávaly smysl, nemusí to nutně představy o jazyce nebo aplikaci ve skutečném světě), a projekty, které se na nás hned každý týden házejí, jsem havaroval a vypálil spolu s polovina třídy. Než jsem mohl dokonce strávit, experimentovat a aplikovat to, co jsem se učil, bojoval jsem s domácími úkoly projektu, které se zdvojnásobily jako testy. Řekl bych, že to bylo více než 200 úrovní kurzu.

Opravdu jsem se snažil co nejlépe. Nežádal jsem o soucit, věděl jsem, že to bude výzva, ale učitelka mi ani nepomůže. Jen mi řekl, abych si přečetl učebnici, jak jsem to dělal.

Chtěl bych tvrdit (a někteří by nesouhlasili), že Ruby nebo Python je mnohem lepší jazyk), aby někdo pronikl do světa programování. Čistý, výstižný, čitelný , jasnější syntaxe.

8
Kevin

Existují dva základní typy postsekundárního vzdělávání: univerzita a obchodní škola. Rozdíl je v tom, co chcete být připraveni udělat po ukončení studia. V automobilovém průmyslu to bude, zda budete mechanik nebo strojní inženýr.

Jak už bylo řečeno, C++ je skvělý první jazyk, pokud chcete být technikem, a mizerný, pokud chcete být programovým ekvivalentem mechanika.

Třída intro na C++ stráví spoustu času mluvením o typech dat, definicích, deklaracích, ukazatelích, přidělení paměti atd. To je skvělý základ, pokud máte v úmyslu utratit několik semestrů budováním tak, aby dokázali udělat něco užitečného, ​​ale chcete vědět, že jakmile se tam dostanete, budete mít nadaci zvládnout jakýkoli stupeň složitosti.

Na druhou stranu, pokud chcete být schopni udělat něco užitečnějšího rychleji, ale nevadí, pokud je doména a složitost omezená, pak strávit celou tu dobu koncepty nižší úrovně dopředu bude plýtvání. Existuje spousta programátorů, kteří umí napsat skvělý html validátor, ale nemají tušení, jak přistupovat k navrhování ovladače zařízení.

7
Karl Bielefeldt

Tak určitě. Mým prvním jazykem byl C, ale to bylo jen proto, abychom naši třídu usnadnili v C++. Bylo to Java mnohem jednodušší zvládnout, jakmile jsem se dostal na univerzitu. C++ může mít poněkud strmější křivku učení, ale pokud je to správně naučeno, mělo by to být v pořádku.

Ne, C++ není vhodný jako první jazyk. Jak je ukázáno zde, mnoho profesionálních programátorů sdílí tento názor, ale je to také názor, který mají profesionální učitelé.

Zde je to, co zpráva od děkana Carnegie Mellon University musí říci o použití C++ pro úvodní kurz programování pro nováčky:

Standardní jazyky jako C nebo C++ nejsou pro tento kurz vhodné, protože jejich složitost a nedostatky brání jak neformálním, tak mechanizovaným technikám uvažování.

CMU nabízí dva úvodní kurzy, imperativní a funkční. Pro funkční programování byla vybrána SML. Nevím, co bylo vybráno pro imperativní kurz, ale zpráva zmiňuje použití podmnožiny C.

4
Joh

Ne. Rozhodně ne.

Kdybych měl svou cestu, zakázal bych to jeho použití v akademickém prostředí téměř úplně. Ne z důvodů, které jsou v rozporu s těmi, které již byly vytvořeny, ale protože příliš mnoho lidí si myslí, že C++ (nebo její variace) je odpověď na téměř každý problém, protože jej můžete použít téměř v jakékoli situaci. Je to šroubovák programování.

Někteří lidé jej používají k utažení šroubů, což je naprosto rozumný nástroj pro tuto práci. Jiní ho používají jako prybar, i když často účinný, ne ve skutečnosti ideální, protože šroubovák, bez ohledu na to, co vám může říct váš otec, není prybar a může katastroficky selhat kvůli zneužití, protože složení dříku není záměrně postaveno pro ty síly, s nimiž by se prybar setkal. Ještě jiní by se mohli pokusit použít jako úder nebo dláto, a téměř vždy se setkají s problémy, protože rukojeť šroubováku nebyla vyrobena pro takové nápadné zneužití, které úder nebo dláto je vydrženo.

Dle mého názoru je úkolem programátora obecně převádět skutečné problémy do automatizace, která poskytuje určitý stupeň zlepšené účinnosti (snížení přidělení prostředků na úkol), rychlosti (zkrácení času na provedení úkolu), předvídatelnosti (zvýšení opakovatelnosti) úkolu) nebo organizace (zvýšení povědomí o vztahu mezi úkoly).

I když je pochopitelné, že každý, kdo má programy, by měl mít nějaké společné znalosti o nízkoúrovňovém provozu počítačů a konkrétně o zařízení IO a přidělení paměti), je určitě neobvyklé, že tyto znalosti musí skutečně využívat kdokoli ve značné míře, natož jej využít pro velkou většinu úkolů. Pokus o to bez pochopení širšího kontextu problému přináší zbytečné riziko do úsilí.

Je absurdní, že prvním programovacím jazykem by měla být C/C++ nebo blízké varianty, protože třída problémů, které C a její deriváty řeší, rozhodně nepatří k nějakému libovolně velkému procentu současných a budoucích problémů (s výjimkou případů, kdy je třeba zachránit) dříve programovaný šroubovákem) a ve skutečnosti jde spíše o nepatrnou sadu přicházejících problémů. Většina programátorů se nikdy nepřiblíží vývoji základních funkcí OS nebo přímých rozhraní zařízení, a to navzdory zvyšující se předvídavosti malých mobilních propojených zařízení. Většina z nich bude pracovat a žít jako my. Oprava a postupné vyřazování kódu, který je starší než dvě generace, implementace na technologii, která již ukazuje stáří, nebo pracuje na okraji technologie v aplikaci zabijáka (x + 1).

Pro první jazyk bych se podíval na Lego NXT, lehkou, ale velmi bohatou variantu LabView. Zatímco Lego NXT není v komerčních podnikech široce používán, bude představovat základní povahu toho, co je programování způsobem "bohatým na senzory". Mohl bych to spárovat s poněkud platformově neutrálním skriptovacím jazykem, jako je Javascript nebo TCL/TK. Oboje by mělo relativně malý dopad, pokud jde o to, co musíte objevit, abyste mohli provádět velmi základní, ale efektivní úkoly, s vysokou návratností ve smyslu zpětnovazební smyčky a flexibilitou při zavádění a řešení různých stupňů složitosti problému. Navíc poskytuje studentům dobrou příležitost, když zkoumají možnosti, jak překonat to, co je poskytováno v konzervovaném prostředí: možnost vyzkoušet práci na tmavých, vlhkých a nízkoúrovňových místech zařízení IO a vlastní ovladače s malým množstvím režijních nákladů.

Poté, co se naučí řídit automatický čtyřválcový válec, pak je zapojte do velkého manuálního hotrodu v8, pokud mají skutečný zájem a motivaci. Pokud Joel nenajde programátory rockových hvězd pod žádným kamenem pod nohama, možná bude muset hledat někde jinde, nebo přehodnotit, proč může ve své sadě nástrojů potřebovat víc než hromadu šroubováků.

2
JustinC

Tak určitě. Existují i ​​jiné jazyky, které by studenti prvního ročníku mohli lépe pochopit. Existují však způsoby, jak může učitel pomalu představit koncepty v C++.

2
jzd

Rozhodně C++ může být úplně první jazyk. Ale jde o to, jak dobře se to učí.

Každý říká, že první jazyk by měl být velmi snadno pochopitelný. Ale mám na mysli, že většina lidí začíná programovat na vysokoškolské úrovni. Takže můžete učit něco, co jsou schopni pochopit. A s C++ můžete přejít z nižší úrovně na vyšší úroveň programování.

2
Gulshan

Když jsem byl na vysoké škole, byl C++ základním jazykem, který se vyučoval během prvního ročníku vysoké školy. Teorie byla taková, že obsahovala některé složité koncepty programování, takže pokud byste to zvládli, mohli byste si vybrat i jiné jazyky. Sloužilo mi dobře jako dobrý základ.

Přesto jsem během svého seniorského roku působil ve výboru, abych určil, zda přepnout základní jazyk na Javu. Po rozhovoru s několika významnými zaměstnavateli a některými absolventy katedry bylo rozhodnuto, že přechod na Java byl nejlepší zájem studentů.) Zaměstnavatelé, se kterými jsme hovořili, chtěli, aby lidé měli zkušenosti s jazyk, který používali, aby si je najali. Věřím, že nyní, o 10 let později, stále používají jako svůj základní jazyk Java).

V podobné poznámce jsme se rozhodli najmout několik nedávných absolventů vysokých škol se skutečně dobrými znalostmi C++. Nebyli jsme schopni najít žádné.

1
SchwartzE

Řekl bych ano. Jakýkoli jazyk však může být opravdu prvním jazykem. Myslím, že C++ je dobrý, protože i když je to složité a někdy obtížné, ukazuje vám, co můžete opravdu udělat (menší omezení). Také má nějaký objektově orientovaný design, který vám může pomoci připravit se na další jazyky.

C++ byl můj první jazyk a jsem rád, že to byl. Přivedlo mě to k přemýšlení v mysli OOP) brzy a jsem za to vděčný. Nakonec to ale opravdu přijde na to, co chceš dělat. moc proto, že pokud se dokážete dobře naučit s jedním jazykem, je pravděpodobné, že nebudete mít problémy s vyzvedáváním jiného. Co chcete dělat? Vydělejte hry? Program pro mobilní telefony? Každý z nich bude mít nástroje a jazyky lépe vyhovující pro to.

1
user16281

C++ je odborný jazyk, nikoli začátečník ... řekl bych nejprve C, ne Java nebo C # nebo Python ... proč? Protože C vás učí, abyste se starali o svou paměť a některé choulostivé koncepty, jako jsou ukazatele, které jsou „skryté“ všemi jazyky, které jsou stále přítomny všude. Viděl jsem tolik mladých vývojářů, kteří ani nechápou, proč by měla být paměť uvolněna někdy, a věří, že sběratel odpadu není malý trpaslík, který čistí všechny kódovací kostky: instinktizují, instinktují a rozmachují, exploduje, i když mají XXXXGb RAM ... Ale nechápou, proč sběrač odpadků jednoduše magicky čistí všechno! A viděl jsem tento druh vývojářů, kteří kódují C++ (a dokonce bláznivější, v Corba) a byla to vražda !!!!!!!!!! Takže bych se ráda naučila kódovat v C a pak jít do Pythonu/Java/C # pro koncepty objektů a veškerý cukr kolem Když to všechno pochopíte, jdete do C++ a cítíte sílu C++, ale objevíte také všechna jeho nebezpečí a proč neměl by být použit nikým;)

1
mandubian

Některé body, kde začátečníci snadno dělají chyby v C++, jsou:

dělat úkoly, kde jste chtěli testovat = vs ==

Chybí;

Čitelnost složených závorek vs. například Pascal začátek

A pak jsou zde všechny soubory, makra, správa paměti atd., Které lze zaměnit.

Řekl bych tedy, že C++ není nejlepším jazykem pro začátek - nicméně není pochyb o tom, že to může být velmi užitečné, když jste se to naučili.

Chtěl bych - jak jiní také navrhli - použít C #, Java nebo možná dokonce VB - - a dobrý IDE se syntaxí) zvýrazněte, debugger atd., abyste usnadnili zotavení z chyb.

1
Rune Andersen

NE. Existuje tolik věcí, které má C++, což ztěžuje porozumění nováčku. Nenechte se dostat do fallacie „všechny programovací jazyky jsou si rovny“.

Začněte s Basic nebo Pascal (ignorujte věci „jsou zastaralé“) a později s C/C++/Java/C #/Perl. Nebo pokud máte šanci, nejprve s Logem & Karlem a poté Basic nebo Pascal.

P.D. Některé univerzity a kolegy mají třídu používání a srovnávání programovacího jazyka a stalo se, že jsem tuto třídu učil ;-)

1
umlcat

Začal jsem s C++ na střední škole. Vzal jsem si kopii této knihy: C++ Jak programovat Deitelem a Deitelem . Tato kniha je docela dobrá.

Upřímně řečeno, neexistuje zde správná nebo špatná odpověď, osobně jsem zjistil, že C++ bylo pochopitelné. Naučil jsem se to celou cestu k OOP (dostal jsem se zakopl o "toto", které teď nerozumím, jak jsem to nemohl získat, ale cokoli). Zkuste to, ne Pokud vás uvízne, podívejte se na další jazyky a učte se nové. Myšlenka je taková, že když vidíte stejný koncept ve 2-3 různých formách, budete jim lépe rozumět. Jak jsem řekl, pojem „toto "ukazatel mě zmátl, ale když jsem viděl totéž v Python (namísto toho pojmenoval self)), okamžitě mi to dalo smysl, protože jsem to pochopil v C++. Naučte se Java, pokud to dokážete tolik vysokých škol. Naučte se python nebo Ruby), protože je to jazyk du jour a pokud můžete prozkoumat další výklenek/nové věci jako Clojure (a všechny ostatní lupínky), Haskell, Scala ...

0
nkassis

Pokud „vhodný“ znamená „možný“, ano. Pokud pro "dobré", určitě ne.

Je možné mít rád, i když milujete C++, ale pro to byste se měli lépe učit několik jazyků a pracovat deset let s shnilými kodebázami se životním stylem, získejte zkušenosti s „vytvořením netriviálního softwaru, který ve skutečnosti funguje“ - pak C++ bude mít kouzlo.

Ne na začátku, když jste panna, hádejte se s malými, jednoduchými (ale údajně zajímavými a zábavnými) problémy.

Začal bych pythonem, následoval SICP (schéma) nebo něco podobného. Možná obrácený nebo prokládaný. S těmi můžete problém prostě vyřešit. Místo toho, abyste bojovali proti systému, chodili v hlubokém bahně a učili se všechny druhy nelogických vtípků a jejich historické důvody.

Později, když už si můžete naprogramovat cestu z papírového sáčku, přepněte na holý kov: naučte se způsoby montáže a několika architektur, plus možná Knuth's Mix. Nemyslím si zapamatovat si opcody ani dělat mnoho skutečných věcí, jen abych pochopil paměť, registry, ALU, cache, přerušení a dostal se na úroveň čtení.

S tímto základem můžete být vystaveni jiným jazykům, včetně C++. Možná je dobré přidat mezi nimi „historii a vývoj jazyků“.

0
Balog Pal

Můžete si vybrat jakýkoli jazyk a naučit se základy programování. Naučil jsem se v C/C++. ale o 7 let později se v mé škole změní nástroje/jazyky a dávají přednost Java/C #. jazyky jsou pouhé nástroje. Co potřebujete, abyste se zlepšili, jsou základy. např. v MIT lidé se učí základy algoritmu pomocí pythonu. Např. Java může být dobré pro webové programování), ale C/C++ jsou dobré pro služby a vysoce výkonné aplikace. Takže záleží na vašich situacích.

0
sarat