Un college locale insegna C ++ agli studenti del primo anno (16 anni) senza alcuna esperienza di programmazione.
Come primo linguaggio di programmazione, è C ++ adatto?
Un college locale insegna C ++ agli studenti del primo anno (16 anni) senza alcuna esperienza di programmazione.
Come primo linguaggio di programmazione, è C ++ adatto?
Risposte:
Enfaticamente No .
Per qualsiasi obiettivo che hai in mente per gli studenti, un'altra lingua o sequenza di lingue sarebbe più veloce e migliore. Esempi.
"Gli studenti devono comprendere concetti di basso livello."
La codifica "di basso livello" non consiste nel recuperare oggetti new
, restituirli delete
e, occasionalmente, avere un puntatore che punta da qualche parte. Funzioni, classi e modelli non sono di basso livello. Raii, 12 modi per usare const
, std::ostream::operator<<
, protected
e new
non sono concetti di basso livello. Queste cose hanno implicazioni di basso livello e le stai saltando per mesi o fino a una lezione futura e insegnando invece montagne di semantica C ++.
Suggerisco assemblatore con un buon ambiente e materiale didattico come MIPS o MMIX. Se hai fretta, insegna a C con le deviazioni a guardare almeno l'output dell'assemblatore. Questo ti darà tutta la comprensione di basso livello che fa C ++, e poi alcuni, più veloce.
"Gli studenti devono comprendere l'orientamento agli oggetti."
L'orientamento agli oggetti incorporato in C ++ è troppo complicato per insegnare concetti OO, o quasi qualsiasi altro concetto di alto livello. Consulta le Domande frequenti su C ++ per un lungo e piacevole elenco di potenziali motivi. O devi colpire tutta quella roba, che richiederà molto, molto tempo con i nuovi programmatori; altrimenti devi saltarne un sacco, lasciando i nuovi programmatori al buio - effettivamente, non conoscendo davvero il C ++!
Suggerisco di imparare prima un linguaggio semplice e di alto livello con oggetti (Python, Ruby, Squeak, Common Lisp, Racket), se è necessario insegnare C ++. Oltre a ciò, impara il polimorfismo come concetto separato da OO visitando un linguaggio funzionale.
"Gli studenti devono comprendere i modelli e la metaprogrammazione dei modelli."
Nessuno lo chiede davvero, ma vorrei che lo facessero. C ++ ha dei bei modelli e STL è bello, ma non dovrebbero essere una priorità abbastanza alta da insegnare prima al C ++. Insegnare il sistema di tipo OCaml o Haskell e poi adeguare quei concetti potrebbe essere comunque più veloce.
"Gli studenti devono imparare a risolvere i problemi."
Sì, lo ottieni in qualsiasi lingua e ne ottieni di più se in quasi tutte le lingue oltre al C ++ perché c'è molto meno bagaglio. Ancora una volta, consulta le Domande frequenti sul C ++ per un elenco di tutte le cose che gli studenti impareranno invece delle capacità di risoluzione dei problemi.
"Tutto quanto sopra, e dobbiamo usare solo una lingua." o "I datori di lavoro lo vogliono". o "Abbiamo bisogno di un linguaggio in stile C." o...
Insegna più di una lingua.
L'idea di risparmiare tempo o energia insegnando o imparando una sola lingua è decisamente ridicola. Si basa sull'idea che l'apprendimento di una determinata lingua richiede esattamente X mesi di uomo ( SUGGERIMENTO! SUGGERIMENTO! ) In cui X è un singolo numero o un numero per lingua. Questo è quasi identico all'idea che è possibile risparmiare tempo e denaro saltando tutti quei "requisiti" e "test" della spazzatura.
Per quanto riguarda le sintassi multiple, paralizzi pericolosamente gli studenti se insegni loro ad aspettarsi la sintassi C in ogni lingua rendendoli selvaggiamente distorti rispetto ad altre lingue.
Quasi ogni percorso è più veloce e migliore che iniziare con C ++. Imparare un linguaggio di alto livello semplice e quindi C ++ sarebbe più veloce. L'apprendimento dell'assemblatore e quindi del C ++ sarebbe più veloce. Qualsiasi cosa diversa dal C ++ porterà gli studenti lì più velocemente e sapranno molto di più per l'avvio. Basta non insegnare prima C ++.
No, il C ++ è un linguaggio difficile anche per gli sviluppatori C ++ esperti. Anche per gli algoritmi più semplici devi spiegare molte delle sottigliezze del linguaggio. Prendi in considerazione un esempio di Hello World:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
Cos'è quel #include
comando? Cosa std::cout
. Perché il ::
? Che cosa è <<
? Ohhh, è un operatore sovraccarico! Cos'è un operatore sovraccarico? Quindi, per ints
, fa un po 'di spostamento, ma per qualsiasi cosa std::cout
, trasmette roba alla console. Ohhh, std::cout
è un flusso e i flussi hanno il loro <<
e l' >>
operatore sovraccarico.
Vediamo lo stesso esempio in Python:
print("Hello World!")
Ecco fatto, andiamo a programmare alcuni algoritmi.
Probabilmente non è un buon primo linguaggio: sintassi complessa, molte regole, vecchio linguaggio, gestione della memoria soggetta a errori. Meglio insegnare ai tuoi studenti qualcosa di più OO come Smalltalk, o qualcosa di più bello da programmare come Python o qualcosa di funzionale come Haskell.
Possono imparare il C ++ più avanti nella vita (se non possono farne a meno), dopo aver imparato lingue migliori.
Risposta breve: Sì!
Direi che qualsiasi lingua è un inizio adatto ma soprattutto C ++ (o equivalente). Oggigiorno C # e Java sono i principali linguaggi in uso e in programmazione con questi si impara rapidamente ad appoggiarsi alle API e agli IDE ma con C ++ si ha la possibilità di imparare la programmazione da zero, compresa l'ottimizzazione delle prestazioni, ecc.
Non è mai una cattiva idea imparare le basi della programmazione, del looping e dell'ordinamento prima di fare affidamento cieco su un linguaggio incorporato in .Sort ();
In realtà credo che probabilmente sia una buona scelta come prima lingua per un motivo molto pratico: dopo aver appreso il C ++ qualsiasi altra lingua che incontri sembrerà un gioco da ragazzi imparare.
Mi sono insegnato C ++ quando avevo 15-16 anni.
È meglio lasciare la magia agli altri e imparare da soli il funzionamento interiore delle cose.
In parole povere, se non riesci a capire la sintassi e la semantica C ++ entry-level, non sei così bravo con i computer. Non è così difficile. Non ci sono buoni motivi per evitare "C with Classes".
Se ti aspetti che gli studenti inizino a lavorare sulla metaprogrammazione dei modelli, deducendo le chiamate polimorfiche e districando le gerarchie multiple di ereditarietà, è ridicolo per una classe entry level per qualunque tipo di linguaggio tu usi.
C'è una pessima tendenza a voler nascondere la complessità della programmazione per gli studenti. Ciò non finisce bene (si veda il saggio sulle scuole Java di Spolsky). Quelle persone finiscono sul DailyWTF se non riescono a raddrizzare la testa. Le astrazioni perdono e quando (non se) l'astrazione perde, è peggio che doverlo affrontare. Ho lavorato come TA per studenti C ++ di livello base. O le cose devono essere nascoste fino in fondo, oppure devono essere portate alla luce per essere esaminate. La magia è nemica dello studente.
Se dovessi raccomandare un linguaggio iniziale compilato in codice macchina, una variante Pascal sarebbe probabilmente l'approccio migliore. Ha un approccio più regolare e strutturato rispetto alla famiglia C da quello che ricordo.
Direi "no": avevo l'entusiasmo e il desiderio di imparare la programmazione e sono andato subito al mio anno di introduzione al college con il C ++ subito. Insieme a un insegnante che insegnava C ++ come se fosse un'altra lingua (concetti che avevano senso per loro, non necessariamente concetti della lingua o dell'applicazione del mondo reale) e progetti lanciati a noi immediatamente ogni settimana, mi sono schiantato e bruciato insieme metà della classe. Quando riuscii persino a digerire, sperimentare e applicare ciò che mi veniva insegnato, feci fatica a fare i compiti del progetto, che raddoppiò come test. Direi che era più un corso di livello 200 che 100.
Ho davvero fatto del mio meglio. Non ho chiesto simpatia, sapevo che sarebbe stata una sfida, ma l'insegnante non mi avrebbe nemmeno aiutato. Mi ha appena detto di andare a leggere il libro di testo, come avevo fatto io.
Direi (e alcuni non sarebbero d'accordo) sul fatto che Ruby o Python sia un linguaggio molto migliore per irrompere nel mondo della programmazione. Sintassi chiara, concisa, leggibile, più chiara.
No.
Come linguaggio di insegnamento, C ++ è solo leggermente migliore di C, che è una delle peggiori lingue di insegnamento in circolazione. Presenta molta complessità in anticipo, alcune parti del linguaggio sono profondamente non intuitive e la maggior parte delle volte impari di più sul C ++ che sulla programmazione in generale.
Questo non vuol dire che C ++ (o C) siano lingue volgari o che non valga la pena imparare; solo che ci sono migliori lingue di insegnamento disponibili, come Python.
string
tipo di dati onesto a Dio che sovraccarica gli operatori come +
, =
e ==
di fare cose che gli studenti si aspettano più o meno, rispetto a come l'elaborazione delle stringhe deve essere eseguita in C. Quindi "marginalmente" . Non consiglierei neanche come lingua di insegnamento.
Esistono due tipi essenziali di istruzione post-secondaria: l'università e la scuola professionale. La differenza sta in quello che vuoi essere pronto a fare dopo la laurea. Nel settore automobilistico, è che tu sia un meccanico o un ingegnere meccanico.
Detto questo, il C ++ è un ottimo primo linguaggio se vuoi essere un ingegnere, e uno schifoso se vuoi essere l'equivalente di programmazione di un meccanico.
Una classe introduttiva su C ++ impiegherà molto tempo a parlare di tipi di dati, definizioni, dichiarazioni, puntatori, allocazione della memoria e così via. Queste sono un'ottima base se intendi trascorrere diversi semestri costruendo per poter fare qualcosa di utile, ma vuoi sapere che una volta arrivato lì hai le basi per gestire qualsiasi grado di complessità.
D'altra parte, se vuoi essere in grado di fare qualcosa di utile più rapidamente, ma non preoccuparti se il dominio e la complessità sono limitati, passare tutto quel tempo su quei concetti di livello inferiore sarà uno spreco. Ci sono molti programmatori che sanno scrivere un validatore di form html, ma non hanno idea di come affrontare la progettazione di un driver di dispositivo.
Sicuro. Il mio primo linguaggio era il C, ma era davvero solo per facilitare la nostra classe in C ++. Ha reso Java molto più facile da gestire una volta arrivato all'università. Il C ++ potrebbe avere una curva di apprendimento leggermente più ripida, ma se viene insegnato correttamente dovrebbe andare bene.
No, il C ++ non è adatto come prima lingua. Come mostrato qui, molti programmatori professionisti condividono questa opinione, ma questa è anche un'opinione che hanno gli insegnanti professionisti.
Ecco cosa dice un rapporto del decano della Carnegie Mellon University sull'uso del C ++ per un corso introduttivo alla programmazione per matricole:
Linguaggi standard come C o C ++ non sono adatti a questo corso perché la loro complessità e carenze impediscono tecniche di ragionamento sia informali che meccanizzate.
CMU offre due corsi introduttivi, uno imperativo e uno funzionale. SML è stato scelto per la programmazione funzionale. Non so cosa sia stato scelto per il corso imperativo, ma il rapporto menziona l'uso di un sottoinsieme di C.
Sicuramente C ++ può essere la prima lingua. Ma riguarda quanto bene viene insegnato.
Tutti dicono, la prima lingua dovrebbe essere molto facile da capire. Ma il mio punto è che la maggior parte delle persone inizia a programmare a livello universitario. Quindi, puoi insegnare qualcosa che sono in grado di cogliere. E con C ++, puoi passare da un livello inferiore a un livello più alto di programmazione.
No. Assolutamente no.
Se potessi fare a modo mio, non consentirei quasi completamente l'utilizzo in ambito accademico. Non per ragioni contrarie a quelle già fatte, ma perché troppi pensano che C ++ (o variazioni) sia la risposta a quasi tutti i problemi perché è possibile utilizzarlo in quasi tutte le situazioni. È il cacciavite della programmazione.
Alcune persone lo usano per stringere le viti, uno strumento perfettamente ragionevole per il lavoro. Altri lo usano come un prybar, mentre spesso sono efficaci, non proprio ideali perché un cacciavite, non importa cosa tuo padre potrebbe dirti, non è un prybar e potrebbe fallire catastroficamente a causa di un uso improprio perché la composizione del gambo non è intenzionalmente costruita per il tipo di forze che un prybar incontrerebbe. Altri ancora potrebbero provare ad usarlo come un pugno o uno scalpello, e quasi sempre incontreranno problemi perché l'impugnatura del cacciavite non è stata costruita per il tipo di abuso che il punch o uno scalpello è progettato per resistere.
A mio avviso, il compito di un programmatore è di tradurre in genere problemi reali in automazione che fornisce un certo grado di miglioramento dell'efficienza (riduzione dell'impegno delle risorse in un'attività), velocità (riduzione del tempo necessario per eseguire un'attività), prevedibilità (aumento della ripetibilità di un'attività) o organizzazione (aumentare la consapevolezza della relazione tra attività).
Sebbene sia comprensibile che tutti i programmatori debbano avere una conoscenza comune delle operazioni a basso livello dei computer, e in particolare l'IO del dispositivo e l'allocazione della memoria, è sicuramente raro dover realmente utilizzare tale conoscenza in misura significativa, e tanto meno sfruttarla per vasta maggioranza di compiti. Il tentativo di farlo senza comprendere il contesto più ampio del problema inserisce un rischio incessante in uno sforzo.
È assurdo che un primo linguaggio di programmazione dovrebbe essere C / C ++ o varianti simili, poiché la classe di problemi che C e i suoi derivati risolvono non sono certamente adeguati per una percentuale arbitrariamente grande dei problemi attuali e futuri (tranne dove si deve salvare un programma precedentemente avvitato), e in effetti è più che altro un insieme minuscolo di problemi futuri. La maggior parte dei programmatori non si avvicinerà mai allo sviluppo delle funzionalità del sistema operativo principale o delle interfacce dirette dei dispositivi, nonostante la crescente prevalenza di piccoli dispositivi mobili e interconnessi. La maggior parte funzionerà e vivrà come abbiamo fatto noi. Correzione e eliminazione graduale del codice di più di due generazioni, implementazione sulla tecnologia che sta già mostrando età o funzionamento ai margini della tecnologia sull'app killer (x + 1).
Per una prima lingua, guarderei Lego NXT, una variante leggera ma ricca di funzionalità di LabView. Sebbene Lego NXT non sia ampiamente utilizzato nelle iniziative commerciali, presenterà la natura fondamentale di ciò che deve essere programmato in modo "ricco di sensori". Potrei abbinarlo a un linguaggio di scripting piuttosto neutro come piattaforma come Javascript o TCL / TK. Entrambi avrebbero un impatto relativamente basso in termini di ciò che devi scoprire per svolgere compiti molto semplici ma efficaci, con un elevato ritorno in termini di ciclo di feedback e flessibilità per introdurre e risolvere vari gradi di complessità del problema. Inoltre, offre agli studenti una buona opportunità mentre avanzano per esplorare il potenziale per superare ciò che viene fornito nell'ambiente in scatola: un'opportunità per provare a lavorare nel buio, nell'umidità,
Dopo aver imparato a guidare il quattro cilindri automatico, quindi aumentali nel grande hotrod manuale v8, se sono davvero interessati e motivati. Se Joel non riesce a trovare i programmatori delle rock star sotto una pietra sotto i suoi piedi, potrebbe semplicemente continuare a cercare altrove o ripensare al motivo per cui potrebbe aver bisogno di più di un gruppo di cacciaviti nella sua cassetta degli attrezzi.
Alcuni dei punti in cui i principianti possono facilmente commettere errori in C ++ sono:
fare incarichi dove volevi testare = vs ==
Mancante;
Leggibilità delle parentesi graffe rispetto ad esempio all'inizio-fine pascal
E poi ci sono tutti i file include, le macro, la gestione della memoria ecc. Da confondere.
Quindi direi che C ++ non è la lingua migliore per iniziare, tuttavia non c'è dubbio che possa essere molto utile quando l'hai imparato.
Vorrei - come anche altri hanno suggerito - utilizzare C #, Java o forse anche VB - e un buon IDE con evidenziazione della sintassi, debugger ecc. Per facilitare il recupero da errori.
Quando ero al college, il C ++ era il linguaggio di base che veniva insegnato durante il primo anno di college. La teoria era che conteneva alcuni concetti di programmazione complessi, quindi se si potesse padroneggiarlo, si potevano imparare altri linguaggi. Mi è servito bene come una buona base.
Detto questo, durante il mio ultimo anno, ho fatto parte di un comitato per determinare se passare o meno il linguaggio principale a Java. Dopo aver parlato con alcuni importanti datori di lavoro e alcuni ex-alunni del dipartimento, è stato stabilito che il passaggio a Java era il miglior interesse degli studenti. I datori di lavoro con cui abbiamo parlato volevano che le persone avessero esperienza in una lingua che usavano per assumerli. Credo che adesso, 10 anni dopo, stiano ancora usando Java come linguaggio principale.
Allo stesso modo, abbiamo cercato di assumere un paio di neolaureati con ottime competenze in C ++. Non siamo riusciti a trovarne.
Direi di si. Ma qualsiasi lingua può davvero essere una prima lingua. Penso che il C ++ sia buono perché mentre è complesso e talvolta difficile, ti mostra cosa puoi veramente fare (meno limiti). Inoltre, ha un design orientato agli oggetti che può aiutarti a prepararti ad affrontare altre lingue.
Il C ++ è stato il mio primo linguaggio e sono contento che lo sia stato. Mi ha fatto pensare presto nella mentalità OOP e ne sono grato. Ma alla fine, si riduce davvero a quello che vuoi fare. La lingua non ha molta importanza, perché se riesci a diventare bravo con una lingua, è probabile che non avrai problemi a prenderne un'altra. Che cosa vuoi fare? Fare giochi? Programma per telefoni cellulari? Ognuno avrà strumenti e lingue più adatti per questo.
C ++ è un linguaggio esperto, non un principiante ... direi prima C, non Java o C # o Python ... perché? perché C ti insegna a prenderti cura della tua memoria e di alcuni concetti difficili come puntatori che sono "nascosti" da tutte le lingue ma che sono presenti ovunque. Ho visto così tanti giovani sviluppatori che non capiscono nemmeno perché la memoria dovrebbe essere rilasciata a volte e credono che il garbage collector non sia un po 'nano che ripulisce tutti i craps di codice: istanziano, istanziano e boom esplode anche se hanno XXXXGb RAM ... Ma non capiscono perché il garbage collector non stia semplicemente pulendo magicamente tutto! E ho visto questo tipo di sviluppatori codificare in C ++ (e anche più folle, in Corba) ed è stato un massacro !!!!!!!!!! Quindi consiglierei di imparare la programmazione in C e poi andare su Python / Java / C # per i concetti di oggetto e tutto lo zucchero intorno. Quindi quando capisci tutto ciò, vai al C ++ e senti la potenza del C ++ ma scopri anche tutti i suoi pericoli e perché non dovrebbe essere usato da nessuno;)
NO. Ci sono così tante cose che ha C ++, che rende difficile per un principiante capire. Non entrare nel fallacie "tutti i linguaggi di programmazione sono uguali".
Inizia con Basic o Pascal, (ignora le cose "sono deprecate") e, successivamente, con C / C ++ / Java / C # / Perl. O se ne hai la possibilità, prima con Logo & Karel e poi Basic o Pascal.
PD Alcune università e college hanno una classe di utilizzo e confronto del linguaggio di programmazione, e succede che avevo tenuto quella lezione ;-)
Puoi scegliere qualsiasi lingua per apprendere le basi della programmazione. Ho imparato cose in C / C ++. ma 7 anni dopo, gli strumenti / le lingue sono cambiati nella mia scuola e preferiscono java / C #. le lingue sono semplici strumenti. Ciò di cui hai bisogno per migliorare sono i fondamenti. ad es. nel MIT le persone apprendono i fondamenti dell'algoritmo usando Python. es. Java può essere buono per la programmazione web. ma C / C ++ sono utili per servizi e applicazioni ad alte prestazioni. Quindi dipende dalle tue situazioni.
Se "adatto" sta per "possibile", sì. Se per "buono", sicuramente no.
È possibile amare, anche amare il C ++, ma per questo è meglio imparare diverse lingue e lavorare per qualche decennio con basi di codice marce e verde acqua, fare esperienza sulla "creazione di software non banale che funziona effettivamente" - quindi il C ++ avrà un fascino.
Non all'inizio quando sei vergine, giocherellare con piccoli, semplici (ma presumibilmente interessanti e divertenti) problemi.
Vorrei iniziare con Python, seguito da SICP (schema) o qualcosa di simile. Forse invertito o intercalato. Con quelli puoi semplicemente andare e affrontare il problema. Invece di combattere il sistema, camminare nel fango profondo e imparare tutti i tipi di stranezze illogiche e le loro ragioni storiche.
Più tardi, quando puoi già programmare l'uscita da un sacchetto di carta, passa al metallo nudo: impara i modi di assemblaggio e diverse architetture, oltre a forse Knuth's Mix. Non intendo memorizzare codici operativi o fare molte cose reali, solo per capire memoria, registri, ALU, cache, interruzioni e passare al livello di lettura.
Quindi con quella base puoi essere esposto ad altre lingue, incluso C ++. Forse una buona idea per aggiungere un po 'di "storia ed evoluzione delle lingue" nel mezzo.
Ho iniziato con il C ++ nella scuola media. Ho preso una copia di questo libro: C ++ Come programmare da Deitel e Deitel . Questo libro è abbastanza buono.
Francamente non c'è una risposta giusta o sbagliata qui, ho scoperto personalmente che il C ++ era comprensibile. L'ho imparato fino a OOP (mi sono inciampato in "questo" che ora non capisco come non potrei ottenere ma qualunque cosa). Provalo, non scoraggiarti. Se rimani bloccato, controlla altre lingue e continua ad apprenderne di nuove. L'idea è che vedendo lo stesso concetto in 2-3 forme diverse, capirai meglio. Come ho detto, il concetto del puntatore "questo" mi ha confuso, ma quando ho visto la stessa cosa in Python (invece si chiamava sé), aveva subito senso per me perché l'avevo capito in C ++. Impara Java se puoi insegnarlo a quante più università. Impara il pitone o il rubino in quanto è la lingua del giorno e se puoi esplorare altre cose di nicchia / nuove come Clojure (e tutte le altre lisps), Haskell, Scala ...
No. Comincerei con Java o C #. Se vuoi imparare il C ++, è probabilmente più facile dopo aver appreso le nozioni di base, come cos'è una classe, come fare loop e forchette (se, quindi istruzioni), ecc. È molto più importante imparare a guardare un problema o un'equazione matematica e programmalo di quanto non sia per capire se hai liberato tutta la tua memoria o altro.
Sembra che il presupposto alla base di questa domanda sia: "Il C ++ sembra così complesso, un 16enne sarà in grado di prenderlo come primo linguaggio (programmazione per computer)?"
Quando siamo 4 o 5, prendiamo la maggior parte dei costrutti nella madrelingua, solo con quella grande esposizione ad esso ascoltando gli altri che lo parlano. Formare grandi frasi richiede una vita, non c'è dubbio.
Il C ++ è sicuramente molto meno complesso / complicato rispetto, per esempio, alla maggior parte dei linguaggi umani. I sedicenni dovrebbero essere in grado di raccoglierlo. Scriveranno un ottimo codice con esso? Devo aspettare e guardare.
I principianti devono prima apprezzare la "programmazione". Nella mia esperienza nella formazione di una classe di principianti, hanno innanzitutto apprezzato ciò che capiscono di più. Come Python vs. C # apprezzano Python perché è di altissimo livello e non usa simboli come C #, il che significa molto vicino al linguaggio umano, il suo stesso inglese. Quindi consiglierei di imparare la programmazione da alto livello a basso livello.