Il C ++ è adatto come prima lingua? [chiuso]


26

Un college locale insegna C ++ agli studenti del primo anno (16 anni) senza alcuna esperienza di programmazione.

Come primo linguaggio di programmazione, è C ++ adatto?


56
Qualsiasi lingua può essere una prima lingua. Non importa davvero.
Adam Lear


19
@Anna Lear: Certo, qualsiasi lingua può essere una prima lingua, ma ciò non qualifica C ++ come una buona prima lingua. Se la tua risposta fosse una vera risposta, la voterei come inutile.
Ed James,

6
@Doug: sto programmando C ++ per vivere ... che senso hai?
Matthieu M.

9
@Dough - Il 70% dei progetti informatici oggi prevede la scrittura di software per sistemi embedded e micro-dispositivi. Indovina quali lingue vengono utilizzate per quei progetti? Indovina chi è meglio attrezzato per le posizioni entry level? Certamente non pony one-trick Java o .NET. Sembra duro, ma le scuole hanno fatto un grande disservizio a un'intera generazione di laureati CS formandoli solo per il 30% del mercato del lavoro di programmazione. Abbiamo una sovrabbondanza di programmatori per il settore delle app (30%) e abbiamo una carenza nel settore dei sistemi (70%). Quei numeri non stanno andando da nessuna parte. Opportunità di carriera futura? Si, come no.
luis.espinal,

Risposte:


61

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 deletee, 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<<, protectede newnon 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 ++.


4
Bella risposta! In effetti, molte funzionalità C ++ non sono affatto correlate alla programmazione di basso livello.
Marco Mustapic,

7
+1, risposta eccellente. È vero che a volte i capricci di C ++ sono erroneamente equiparati a "basso livello". Ti sei collegato alle domande frequenti su C ++, ma consiglierei anche alle persone di dare un'occhiata al CQ FQA (o "Risposte alle domande frequenti": P)
Andres F.

2
Wow. Questo mi ricorda Java IAQ ...
Jesse Millikan

Sono completamente d'accordo. Anche Malbolge sarebbe meglio di C ++ per un principiante.
destra

2
La mia unica riserva: puoi insegnare molto senza entrare nei dettagli che sono per lo più rilevanti solo per le persone che sviluppano librerie. Fintanto che chiarisci che stai facendo solo C ++ di base ... ma, di nuovo, cosa hai insegnato a qualcuno comunque?
Steve314,

54

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 #includecomando? 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.


15
Python sarà adatto per un settimo selezionatore. Uno studente universitario può capire molto di più.
Gulshan,

13
Certo, ma stiamo parlando di una prima lingua. Il C ++ è noto per essere difficile da imparare e padroneggiare, rispetto ad altre lingue. Perché usarlo per insegnare la programmazione? Uno studente può imparare il C ++ in seguito, quando conosce alcune nozioni di base sulla programmazione.
Marco Mustapic,

8
Non hai nemmeno menzionato la ricerca dipendente dall'argomento di << :)
MetricSystem

6
Non è necessario conoscere assolutamente tutto per iniziare con una lingua. cout << qualunque cosa; "funziona semplicemente", non è necessario entrare nei dettagli critici fino a quando non si copre il sovraccarico dell'operatore ecc. in seguito.
Colen,

6
Prenderei Python su C ++ in qualsiasi giorno della settimana come linguaggio introduttivo.
giovedì

21

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.


5
Haskell come prima lingua sarebbe un esperimento interessante.
Larry Coleman,

@Larry, il corso CS dell'Università di Cambridge insegna SML come prima lingua.
Peter Taylor,

1
La programmazione funzionale ti stravolge il cervello - So che il MIT inizia con Scheme abbastanza presto, ma sono contento di non aver iniziato la programmazione funzionale fino a dopo due anni di uno stile procedurale / OO ibrido a scuola.
solo il

11
@justkt: tutte le lingue ti tormentano il cervello. È solo una questione di come vuoi che sia contorto.
David Thornley,

+1, ma non classificherei categoricamente linguaggi diversi dal C ++ come necessariamente "migliori".
Greyfade,

18

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 ();


11
Loop e ordinamento, sì. Puoi farlo con qualsiasi lingua. Ma perché iniziare a lavorare con i puntatori e la strana sintassi quando puoi evitarlo? Puoi imparare tutte queste cose in seguito, quando hai più esperienza di programmazione.
Marco Mustapic,

4
@Marco: il libro di testo introduttivo di Stroustrup "Programmazione: principi e pratica usando il C ++" introduce degli indicatori a metà del libro. Puoi fare molte cose in C ++ senza introdurre il puntatore.
David Thornley,

4
"Non è mai una cattiva idea apprendere le basi ... prima di ..." hai qualche ricerca a sostegno di questa affermazione? So che molte persone intelligenti affermano come conoscenza comune che "dal basso" è l'unico vero modo di insegnare, ma questo è un punto molto controverso e l'unica ricerca didattica (certamente molto limitata) che conosco indica una conclusione opposta.
Konrad Rudolph,

1
@ David: Il problema è che fare "molte cose in C ++" senza puntatori è anche peggio. Senza puntatori, tutti i tuoi oggetti vengono dichiarati nello stack, che è una delle peggiori idee di programmazione MAI. I tipi di valore e l'ereditarietà / il polimorfismo non si mescolano, e provare a mescolarli porta a intere categorie di errori che non esistono in linguaggi meglio progettati.
Mason Wheeler,

9
Oh dio, no! Perché bruciare un'offerta limitata di cicli cerebrali su idiosincrasie inutili di C ++? Perché concentrarsi su cose di basso livello irrilevanti, come la gestione della memoria, quando l'obiettivo è imparare concetti di base nella programmazione? Perché saltare nel profondo ?!
Maglob,

14

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.


10
Con tutto il merito di Dijkstra, è praticamente impossibile insegnare una buona programmazione agli studenti che hanno avuto una precedente esposizione al C ++; come potenziali programmatori sono mentalmente mutilati oltre la speranza di rigenerazione. ;)
Mason Wheeler

3
Dovrebbero disimparare molte cattive abitudini dal C ++. Per usare un altro esempio, conoscere assembler ti rende un programmatore Java migliore? Direi di no.
Andres F.

16
@ Andrés F .: Non sono d'accordo. Conoscere l'assemblatore ti rende un programmatore migliore indipendentemente da cosa stai scrivendo, perché in questo modo puoi capire cosa sta realmente accadendo.
Mason Wheeler,

2
@Andres: ho visto troppi programmatori Java / C # arrivare in altre lingue e stipare tutto in oggetti ... mancano di esperienza.
Matthieu M.

3
@Andres F. - Durante i miei 12 anni in Java, ho incontrato la mia parte di programmatori Java che fanno davvero schifo per non avere alcun tipo di esposizione a questioni come l'allocazione delle risorse, RAII, non sapendo come programmare applicazioni compatibili con gc, ecc. Conoscere l'assemblaggio e conoscere i linguaggi compilati senza il supporto automatico della spazzatura e con il supporto di paradigmi diversi da OO (C, C ++, Ada o qualsiasi altro linguaggio compilato sulla famiglia Algol) ti insegna come scrivere sistemi efficienti e di grandi dimensioni in Java, C #, Python, lo chiami. Inoltre, il modello a oggetti in C ++ non è affatto simile a Java.
luis.espinal,

10

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.


1
@Ed: non proprio. Avevo imparato If e Goto in QBASIC, e questo era tutto. Puntatori, matrici, funzioni, classi, ecc. Erano tutti nel mio futuro C ++. Anche la ricorsione era incomprensibile.
Paul Nathan,

5
Aspetta, nessuno si aspetta che qualcuno lavori su un progetto usando C ++ senza prima capire C ++! Ciò porterebbe davvero a un codice degno di TheDailyWTF. Ma contrariamente alla tua affermazione, non è banale imparare il C ++ (e non è nemmeno "C con classi"). Il C ++ ha una sintassi e una grammatica enormi, contorte e talvolta non sensate e un'infinità di parole chiave e regole. È una lingua orribile per cominciare. Come linguaggio di insegnamento è terribile perché condiziona gli studenti a pensare che le carenze del C ++ siano naturali e inevitabili nel mondo della programmazione.
Andres F.

1
Andr: Stai insistendo su una falsa dicotomia: "~ C ++ o All C ++". È fallace.
Paul Nathan,

1
@Paul: abbastanza giusto. Ma considera questo: anche la sintassi e la grammatica di un C ++ semplificato è contorta perché deve supportare tutte le funzionalità del linguaggio completo. Quindi hai già compromesso l'uso di un linguaggio brutto, anche se lo insegni nelle sue forme più semplici. Suppongo che non stai solo codificando in C con un po 'di zucchero sintatico (noto anche come "C con classi"), perché in tal caso sei meglio servito dalla semplice C!
Andres F.

2
@Andr: Non proprio. Il C ++ offre una notevole semplificazione sintattica rispetto al C89. Inoltre, ai fini dell'entrata, le cose sono molto semplici per tutti i casi a cui riesco a pensare ...
Paul Nathan,

8

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.


8
Qualsiasi lingua è una cattiva prima lingua se insegnata male.
David Thornley,

3
@ David Thornley: tuttavia, anche se insegnato correttamente, alcune lingue sono una scelta sbagliata come prime lingue. Ad esempio, Cobol.
Andres F.

Sono d'accordo, sento che con un insegnante migliore, uno che si preoccupava di coinvolgere gli altri e non solo di passare attraverso il materiale del corso alla velocità della luce, il risultato potrebbe essere stato diverso. È appena arrivato troppo veloce per me.
Kevin,

@ Andrés F .: Non sono d'accordo. Tuttavia, l'account di Kevin parlava di un cattivo insegnante e un cattivo insegnante può rovinare Python o Scheme come prima lingua (i miei due nominati per una buona prima lingua).
David Thornley,

2
@ Chris: Ho programmato a Cobol e ti compatisco :)
Andres F.

8

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.


1
C è un linguaggio difficile per insegnare, ma è sicuramente tra i peggiori. COBOL e Java considerano la torta tra le peggiori, molto peggio di C. La cosa positiva di C è che devi affrontare il metallo interno in avanti (senza dover scavare nell'assemblatore). Alle persone è stato insegnato con successo con C come lingua principale. Ci sono altre opzioni più eleganti, ovviamente, come Python o Ruby (o qualsiasi linguaggio che sia multi-paradigma e che non spinga inutilmente in avanti OO anche per i compiti più semplici.) C non è uno dei peggiori insegnamenti scelte, non da un colpo lungo.
luis.espinal,

1
Marginalmente meglio? Come immagini? C ++ prende tutto ciò che è male su C e si basa su di esso !
Mason Wheeler,

1
@MasonWheeler: principalmente perché C ++ fornisce un stringtipo 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.
John Bode,

7

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.


5

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.


4

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.


2

Sicuro. Esistono altre lingue che potrebbero essere più facili da comprendere per gli studenti del primo anno. Tuttavia, ci sono modi in cui un insegnante potrebbe lentamente introdurre concetti in C ++.


2

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.


Ma perché non iniziare ad un livello più alto di programmazione? È il livello al quale risolviamo la maggior parte dei problemi (ad eccezione di alcuni problemi specifici del dominio, ovviamente). Quindi, se hanno bisogno di avvicinarsi al metallo, possono imparare C ++, assemblatore, ecc.
Andres F.

Sono d'accordo, si tratta di quanto bene viene insegnato!
Gary Willoughby,

2

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.


1

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.


1

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.


1

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.


1

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;)


1

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 ;-)


0

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.


0

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.


0

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 ...


-1

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.


2
Perché Java o C # quando Python è ancora più semplice?
David Thornley,

-3

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.


4
Le lingue umane possono permettersi di avere una sintassi complicata perché se si ottiene la grammatica o lo spelling in modo lungo, le persone possono ancora capirti. Non così con i linguaggi del computer.
dan04,

-3

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.