Perché il C ++ è spesso la prima lingua insegnata al college? [chiuso]


12

La mia scuola inizia il curriculum di informatica con corsi di programmazione C ++, il che significa che questa è la prima lingua che molti studenti imparano.

Ho visto che molte persone non amano il C ++ e ho letto una serie di motivi per cui. Sembra quasi essere opinione popolare che il C ++ non sia un linguaggio molto valido. Ho l'impressione che non mi piaccia molto sulla base di alcune domande su StackExchange e di post come:
http://damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ node / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
ecc.

(Nota: non credo che il C ++ sia un linguaggio volgare. In realtà, è la lingua principale che uso. Tuttavia, Internet e alcuni professori mi hanno dato l'impressione che non sia una lingua molto apprezzata. In effetti , uno dei miei professori si ciba costantemente di C ++, ma è ancora la lingua di partenza del mio college!)

Con questo in mente, perché questa è la prima lingua insegnata in molte scuole? Quali sono i motivi per iniziare un curriculum di programmazione con C ++?

Nota: questa domanda è simile a "Il C ++ è adatto come prima lingua", ma è leggermente diverso dal momento che non mi interessa sapere se è adatto, ma perché è stato scelto.


6
Quali scuole e dove? Tutti quelli vicino a me (3 in città e pochi altri in un paio d'ore di macchina) insegnano Java come prima lingua. C ++ arriva nell'ultimo anno o due (a seconda di quali corsi uno studente prende). È stato così per almeno gli ultimi 10 anni.
FrustratedWithFormsDesigner il

7
I professori sono come gli altri programmatori ad avere solo simpatie e antipatie moderatamente razionali. Allo stesso tempo, sono come gli studenti ad essere privati ​​dell'esperienza.
Mike Dunlavey,

@Casey Probabilmente incontrerai un po 'di attrito con altri utenti qui, dal momento che hai fornito solo un'affermazione che al C ++ non è piaciuto, ma non alcuna giustificazione per questo. Se il tuo obiettivo è solo scoprire perché il C ++ è scelto nelle università, ti consiglio vivamente di modificare tutti i riferimenti che gli piacciono o che non gli piacciono poiché sono in gran parte irrilevanti per la tua vera domanda.
Adam Lear

4
Nel primo anno, si tratta di separare il grano dalla paglia.
Steven Evers,

2
E sarebbe interessante avere alcune statistiche su quanti college / università utilizzano quali lingue per i loro corsi introduttivi.
Jerry Coffin,

Risposte:


25

Ogni singola lingua ha un seguito cult di amanti e odiatori simili; questo vale per C ++, Java, C #, Haskell, Objective-C, qualunque cosa.

Esistono molti motivi validi per apprezzare o non apprezzare una lingua.

Alla fine, ci sono alcuni motivi per cui il C ++ viene prevalentemente insegnato nelle università:

  • Si basa su C; pertanto, il passaggio da C a C ++ non è troppo doloroso. Molte università insegnano il C prima del C ++ (il che ha molto senso IMO).

  • È una delle lingue più popolari del settore (che sta iniziando a cambiare con Java, sviluppo mobile, sviluppo web, ecc. Ma è ancora lassù)

  • È una lingua che è stata scritta da un accademico, a scopo accademico (cioè di ricerca) ; quindi molti professori lo usano quotidianamente e ne hanno molta familiarità, il che lo rende una scelta ovvia per il contenuto del loro corso.

Non essere troppo frettoloso nel respingerlo come un linguaggio "cattivo"; Vi consiglio di immergervi, di impararlo davvero, di costruirvi alcuni progetti di dimensioni medio-grandi. Quindi fai lo stesso con altre lingue; a quel punto avrai abbastanza esperienza e intuizioni per dire "Penso che C ++ sia cattivo perché X, Y, Z" o "Penso che C ++ sia buono perché A, B, C che Java non ha".

Hai ancora molto da imparare, giovane cavalletta.


2
Potrebbe non essere un linguaggio "cattivo" se si sale alla filosofia "cattivo è soggettivo", ma praticamente per ogni combinazione di problemi tecnici, esiste un linguaggio più produttivo e più sicuro. Secondo me, la ragione per cui viene insegnato il C ++ è perché è ciò che la gente usa, ed è ciò che la gente usa perché è ciò che la gente conosce, ed è ciò che la gente sa perché è ciò che insegnano le università. A parte la popolarità, C ++ non ha alcun merito sostanziale che posso vedere, e programmo con esso professionalmente.
weberc2,

13

In poche parole, è un ottimo linguaggio di insegnamento perché non ti tiene la mano. Le persone che imparano a guidare su una trasmissione manuale non hanno quasi problemi per la prima volta in automatico, ma non è vero il contrario. Ci vuole più tempo per imparare, ma al college hai 4 anni di programmi giocattolo su cui esercitarti prima di dover fare qualcosa di utile.


9
Sono preoccupato dal fatto che questa falsa analogia abbia raccolto così tanti voti positivi. Non è così che funziona l'apprendimento. Una delle molte idee sbagliate della didattica.
Konrad Rudolph,

12
C++ isn't that bad. 

Ciò che viene insegnato a scuola di solito è guidato da ciò che i professori sanno e da ciò che veniva usato nel settore e popolare all'epoca.

Pensa alle scuole come una capsula del tempo al passato. :)

Vorrei davvero che fosse il contrario.


un punto molto sensibile! Non mi è stato dato alcun esercizio su puntatori intelligenti o RTTI o RAII al college. WTF!
Chani,

12

L'inglese è stato anche descritto come un linguaggio davvero pessimo, compromesso insieme, incoerente, ma poiché molte persone qui lo sanno, i miei genitori e insegnanti hanno deciso che era una buona idea insegnarmelo.

Penso che sia lo stesso con C ++. È una lingua che molte persone conoscono, quindi vale la pena acquisire una conoscenza di base.

Ha anche il vantaggio di essere abbastanza basso da darti davvero un'idea di ciò che accade a livello hardware.

Infine, non presenta i problemi "commerciali" di altre lingue (come Java-Oracle o .NET-MS). So che molte università non vorrebbero essere accusate di insegnare i prodotti di un'azienda specifica rispetto a un'altra.


1
+1 per c ++ non essendo un linguaggio commerciale. È bene imparare una lingua senza preoccuparsi della politica e delle tattiche commerciali. <installazione Java7 su Linux per esempio>
Chani

5

Se il C ++ è così male, come spieghi che la maggior parte dei prodotti software che usi nella tua vita quotidiana sono scritti in C ++?

Ci possono essere diversi motivi per imparare il C ++ al college dal primo anno:

  • È ampiamente utilizzato. La base di codice esistente è semplicemente enorme, e anche ora che ci sono linguaggi come Ruby, Python o C #, C ++ è ancora molto usato anche quando si creano applicazioni da zero, anche per i siti Web. In questo caso, l'apprendimento del C ++ è una buona scelta. Almeno meglio di passare due anni ad imparare Ada, cioè qualcosa che non userete mai nella vostra vita, a meno che non sviluppiate applicazioni per veicoli spaziali.

  • Non è troppo astratto. Ad esempio, come puoi spiegare agli studenti quali sono i puntatori se hanno imparato solo C # o Java?

  • È abbastanza difficile rispetto, diciamo, a PHP. Significa che gli studenti che non sono fatti per la programmazione partiranno presto, il che non è poi così male ed evita che uno studente sprechi due o tre anni prima di capire che lo sviluppo del software non fa per lui.

Questo rende C ++ più adatto di Ada, Java o PHP.


1
Sembra che C sarebbe meglio per i tuoi secondi due punti. Ci sono scuole che insegnano ad Ada? Lo prenderei sicuramente su C ++, ma di nuovo sono strano!
Jetti,

Il C ++ è selezionato per prodotti commerciali perché è ciò che più persone conoscono, non per le sue preoccupazioni tecniche. Il C ++ è un linguaggio pericoloso, difficile da usare rispetto a molti linguaggi moderni. Le lingue non sono selezionate in base ai loro meriti ma perché sono popolari.
weberc2,

Inoltre, non riesco a pensare a molte cose che Ada fa peggio di C ++ e preferirei usarlo piuttosto che C ++ (il mio codice sarebbe più semplice e sicuro, comunque), e programma in C ++ professionalmente! E per insegnare agli studenti i suggerimenti, c'è sempre Ada, Go o una qualsiasi delle varie lingue sane. E per quanto riguarda il tuo ultimo punto, C ++ è inutilmente difficile. Molti dei problemi che i programmatori C ++ devono affrontare non hanno nulla a che fare con la programmazione, ma con il superamento del C ++. La programmazione a qualsiasi livello è abbastanza semplice in un linguaggio sano.
weberc2,

5

In generale, se puoi imparare e padroneggiare il C ++, puoi imparare e padroneggiare praticamente qualsiasi altra lingua là fuori. Il motivo per cui non gli piace è perché, per essere abili in esso e avere un tempo di rilascio rapido, è necessario conoscere molto bene la lingua e la sua libreria standard.

Tuttavia, in un linguaggio come Java, è possibile avere un tempo di implementazione rapido con solo una conoscenza avanzata dei dettagli della libreria language / standard. Diavolo, conosco solo cinque cose della libreria standard Java a memoria (a parte le cose di base come le raccolte ovviamente).

Detto questo, il C ++ è ancora un linguaggio ampiamente utilizzato a causa della sua grande combinazione di velocità e metodologie orientate agli oggetti. Mentre molte persone credono che non sia OOP completo, credo che ti dia la maggior parte della flessibilità di OOP senza costringerti ad essere un fanatico totale. La maggior parte dei compilatori ti consente persino di scrivere C. puro

Se potessi scegliere, prenderei C ++ su Java ogni giorno, ma sono solo io che sono un fan. In generale, Java è utile perché funzionerà praticamente su qualsiasi architettura che abbia un interprete Java costruito per questo. Quindi, per le applicazioni client che devono essere supportate su più piattaforme, è considerato lo strumento migliore per il lavoro e la maggior parte delle nuove applicazioni scritte sono comunque basate sul web.


Potrebbe non essere vero per il codice oggetto, ma la promessa dei linguaggi C incluso C ++ nel passato era che c'erano compilatori per quasi tutte le piattaforme, quindi lo stesso codice sorgente poteva essere usato per compilare applicazioni per un'ampia varietà di piattaforme.
JohnFx,

Questo è in effetti vero. La maggior parte delle piattaforme * NIX hanno compilatori integrati e questo tende ad avere un effetto psicologico sulla maggior parte delle persone sotto forma di "Certo, potrei scaricare QUESTO compilatore, ma questo è arrivato con il mio sistema operativo così sicuramente deve essere il migliore".

Dovresti provare altre lingue oltre a Java: ci sono alternative che costituiscono il meglio di entrambi i mondi. Go offre ad esempio velocità, portabilità e semplicità e rende la concorrenza un gioco da ragazzi.
weberc2,

4

Come mi hanno detto alcuni dei miei professori, è più facile iniziare dal basso, o da un livello basso, e poi risalire. Un linguaggio come il C ++ ti offre una grande introduzione a ciò che significa essere un informatico. Potrebbe non essere un linguaggio così affascinante come Java, Python, Ruby, ecc ... ma ti consente di acquisire una conoscenza di base di importanti funzioni del programma come puntatori e gestione della memoria. Anche se non è una lingua che pianifichi o desideri utilizzare per il resto della tua vita, apprezzerai negli anni a venire quando inizierai a trovare il percorso di programmazione desiderato.


Sembra un argomento per Ada, non per C ++ ...
weberc2,

3

Il C ++ può essere una delle lingue più semplici per i programmi di console per principianti. Sicuramente la lingua è complessa, ma puoi concentrarti su un sottoinsieme procedurale. Puoi ignorare l'esistenza dei puntatori per un bel po '. Puoi iniziare da semplice, quindi creare.

C'è meno sintassi "fluff" per avviare e avviare quel programma iniziale "ciao mondo" rispetto a java o C #. Un principiante dovrebbe vedere la parola "statico" per un'app Hello World? In java / C # lo fanno.


3

Quando ho studiato informatica, Java è stato pensato prima, ma la mia università adesso insegna due lingue per noi linguisti computazionali: prima Prolog e poi C ++.

Il C ++ viene insegnato per (almeno) i seguenti motivi:

  • È un linguaggio generico, puoi scrivere software per qualsiasi sistema operativo con esso (perché esistono molti compilatori). È progettato per essere un buon linguaggio di produzione, semplifica il riutilizzo delle parti del programma, l'interoperabilità con hardware e software reali, ecc.

  • È veramente veloce. Non è possibile utilizzare Python o Scheme o Prolog per l'elaborazione di enormi set di dati, che sono comuni in questi tempi. Pensa agli algoritmi grafici con milioni di nodi. (Questo è anche il motivo per cui i giochi per computer sono solitamente scritti in C ++.)

  • Gli studenti possono imparare cosa fa il compilatore. In realtà, finché ho imparato solo Java (a partire dal liceo), il lavoro del compilatore mi è sempre sembrato magico. Semplicemente non impari a conoscere lo stack e l'heap, l'intera cosa di collegamento statico vs dinamico, ecc. Come un principiante Java. C ++ demistifica l'intero computer.

  • Per quello che può fare, va bene nei tempi di apprendimento (anche se è probabilmente una delle lingue più complicate se ci si immerge davvero). Offre una libreria piacevole che aiuta con una curva di apprendimento regolare. (Ci sono approcci diversi a questo, però. Nella mia università, ci è stato insegnato come scrivere le nostre classi di stringhe e puntatori intelligenti prima che ci fosse permesso di usare la biblioteca; Bjarne Stroustrup, l'inventore del C ++, incoraggia l'ordine opposto.)


Questo non spiega perché Ada, ad esempio, non sia insegnata come prima lingua.
weberc2,

2

C / C ++ è in realtà un linguaggio migliore rispetto alla maggior parte degli altri, in primo luogo perché non aggiunge un falso senso di sicurezza. In secondo luogo perché devi sapere cosa stai facendo.

In realtà adoro la lingua e la considero superiore alla maggior parte delle alternative.

È anche produttivo come la maggior parte delle altre lingue, e non così "schiantato" se sai cosa stai facendo, e pensa prima di copiare codez a pasta casuale.

Anche una buona lettura - http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Tuttavia, alcune cose in C ++ sono in realtà cattive, ad esempio eccezioni e spese generali non intuitive in alcuni casi. Questo è il motivo, immagino, perché Linus sia così negativo al riguardo nel post che hai citato.

Una buona lettura per toccare uno degli argomenti correlati - http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx


3
Questa risposta è completamente sbagliata. Innanzitutto perché non esiste un linguaggio chiamato "C / C ++".
Konrad Rudolph,

1
  1. Ai professori non piace preparare un nuovo corso e ci sono limiti a quanto puoi offrire.
  2. Le lingue vanno e vengono, quindi hanno rinunciato a cercare di rimanere all'avanguardia (Vedi # 1)
  3. È un'università e non una scuola tecnica. Maggiore attenzione nel fornire una base rispetto alla formazione professionale.
  4. Copre una gamma abbastanza ampia di programmazione: server, desktop, incorporato, UNIX, Windows.
  5. Lo usano come un corso di eliminazione. Ogni principale area di studio ne ha almeno una.

1

Prima c'era Pascal, prima Pascal c'era qualcosa di simile a Basic. La parte interessante è: e adesso? Forse niente. Ho un pensiero sul "perché c ++". Perché è difficile ma non è altrettanto lisp. No, capisco davvero che C ++ è un buon linguaggio per la programmazione del sistema, so che ci sono molti progetti codificati su C ++ e ci sono tonnellate di librerie in modo che gli studenti possano creare tutto con esso. Ma stiamo parlando di studenti e della loro possibilità di creare logiche e comprendere il sistema. Non puoi essere un buon programmatore C ++ se non riesci a creare logiche semplici e capire come funziona il sistema e questo è un motivo principale secondo me. E sì, un'altra semplice ragione è l'inizio stabile della carriera.

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.