- Messaggi
- 2,351
- Reazioni
- 1,938
- Punteggio
- 134
Ho letto proprio poco fa qualche post in una discussione, che potete trovare qui, ed ho pensato di aprire io stesso un topic in quanto avrei risposto, aggiungendo altro OT... e quasi sicuramente non avrei permesso l'inizio di una discussione che spero potrà dirsi pacata e costruttiva, oltre che interessante ai più :D con considerazioni anche tecniche e non solo di cosa è "più conveniente trattare tra C e C++".
Cito quindi alcuni dei partecipanti, magari interessati al proseguo: @rodhellas , @Marcus Aseth e @Andretti60
Scrivo di seguito quanto avrei scritto in quel topic.
Quello a cui hai fatto accenno è forse un altro dei problemi delle scuole. Far passare l'insegnamento di uno pseudo C++ solo perchè si stanno utilizzando cin e cou.
A scuola sarebbe forse meglio guidare i ragazzi alla logica, condurli nei ragionamenti soffermandosi sul problem solving... non spiegare 1/10 del linguaggio (spesso anche male quando c'è di mezzo C++, proprio perchè si importa iostream al posto di stdio, e si dice che "questo è C++"). Per le università il discorso è differente, ma alla fine i linguaggi li apprendi fuori dalla scuola; non dico sul campo, non necessariamente, ma da autodidatta.
Personalmente il misto C/C++ un pò "come viene" o "in base ai gusti" ("sale e pepe q.b." :D) lo trovo controproducente: o uno o l'altro. E considerando che l'altro (C++) è OOP, potrebbe non essere la scelta più indicata per gli studenti di un terzo anno di superiori, se prima non vengono fornite altre nozioni (argomenti di per sè complessi da trattare, considerando il numero di ore a disposizione anche).
Mi permetto di riprendere anche un tuo precedente intervento Marcus, poco più sopra, in risposta a rod, poichè vorrei aggiungere alcune cose:
Come diceva rod, in C hanno altri nomi.
Le funzioni sono malloc/calloc per allocare memoria, e free per liberarla (deallocarla). Se si evitano puntatori in C++ sicuramente si sta facendo cosa buona e giusta.
Ad ogni modo in C non ho mai avuto particolari problemi; di solito si risolvono aprendo un debugger (strumento che purtroppo non tutti sanno più utilizzare).
Quando fai riferimento al delete in realtà non capisco se fai anche implicitamente riferimento alla "non deallocazione" della memoria. Se così fosse, sarebbero pratiche da evitare (intendo il non deallocare), così come il perdersi un free() in C. Tuttavia se non si sta utilizzando nulla di critico, non si hanno particolari problemi.
Ma che senso avrebbe allora studiare/spiegare C++, se alla fine si tratta il C (portando oltretutto confusione agli studenti che pensano di conoscere poi C++)? :) Potrebbe aver un senso paragonare davvero qualcosa di C con qualcosa di C++; ma avrebbe forse senso nelle università per trattare concetti terzi. Alle superiori è già tanto se viene trattata la scrittura su file o poco più... :D
Al momento il mio intervento termina qui. Spero di non aver aperto inutilmente un topic trovandomi a "parlare" da solo. xD
Cito quindi alcuni dei partecipanti, magari interessati al proseguo: @rodhellas , @Marcus Aseth e @Andretti60
Scrivo di seguito quanto avrei scritto in quel topic.
Molto interessante, grazie per aver condiviso :)
Se fosse il mio professore avrei altre domende da fargli al riguardo, ad esempio, tutto il codice scritto da te sopra di fatto è C++, la differenza più ovvia magari (con la premessa di non usare vector o altre "data structure" che ci sono solo in C++ e non in C) sarebbe che se scritto in C++, probabilmente il "scanf" sarebbe rimpiazzato da "cin" e "printf" sarebbe rimpiazzato da "cout", ed essendo "cin" ed "cout" più "user friendly" o "eleganti" (imho) rispetto a "scanf" e "printf" (non devi memorizzarti una lista di %d %s ecc...), allora qual'è il vero vantaggio di farlo in C?!
Insomma finirei per tormentarlo ad ogni lezione con le mie domande sul perchè :D
Quello a cui hai fatto accenno è forse un altro dei problemi delle scuole. Far passare l'insegnamento di uno pseudo C++ solo perchè si stanno utilizzando cin e cou.
A scuola sarebbe forse meglio guidare i ragazzi alla logica, condurli nei ragionamenti soffermandosi sul problem solving... non spiegare 1/10 del linguaggio (spesso anche male quando c'è di mezzo C++, proprio perchè si importa iostream al posto di stdio, e si dice che "questo è C++"). Per le università il discorso è differente, ma alla fine i linguaggi li apprendi fuori dalla scuola; non dico sul campo, non necessariamente, ma da autodidatta.
Io sono per tenere tutte quelle basi di C che permettono di capire bene come programmare ma allo stesso tempo prendere certe parti di C++ (come il cout) che rimuovono complessità inutile e permettono di concentrarsi meglio sul problema che si sta cercando di risolvere :P
Personalmente il misto C/C++ un pò "come viene" o "in base ai gusti" ("sale e pepe q.b." :D) lo trovo controproducente: o uno o l'altro. E considerando che l'altro (C++) è OOP, potrebbe non essere la scelta più indicata per gli studenti di un terzo anno di superiori, se prima non vengono fornite altre nozioni (argomenti di per sè complessi da trattare, considerando il numero di ore a disposizione anche).
Mi permetto di riprendere anche un tuo precedente intervento Marcus, poco più sopra, in risposta a rod, poichè vorrei aggiungere alcune cose:
Marcus Aseth ha detto:Ah, pensavo ci fossere anche in C con quei nomi. Ma quello che penso è, se C++ offre degli strumenti che rendono il tutto più sicuro evitando di dover andare in seguito a caccia di bug difficili da trovare...perchè ostinarsi con C?
Come diceva rod, in C hanno altri nomi.
Le funzioni sono malloc/calloc per allocare memoria, e free per liberarla (deallocarla). Se si evitano puntatori in C++ sicuramente si sta facendo cosa buona e giusta.
Ad ogni modo in C non ho mai avuto particolari problemi; di solito si risolvono aprendo un debugger (strumento che purtroppo non tutti sanno più utilizzare).
Quando fai riferimento al delete in realtà non capisco se fai anche implicitamente riferimento alla "non deallocazione" della memoria. Se così fosse, sarebbero pratiche da evitare (intendo il non deallocare), così come il perdersi un free() in C. Tuttavia se non si sta utilizzando nulla di critico, non si hanno particolari problemi.
Sopratutto considerando che un insegnante può vietare ai suoi studenti l'uso di praticamente tutto quello in più che C++ offre e fargli svolgere gli stessi esercizi come se li stessero facendo in C, o sbaglio? Per poi poter dire alla fine "questo che abbiamo visto è il modo in cui si fà in C, ed ora vediamo l'equivalente in C++" e poter fare il paragone, mostrando entrambi i metodi ed aggiungendo gradualmente
Ma che senso avrebbe allora studiare/spiegare C++, se alla fine si tratta il C (portando oltretutto confusione agli studenti che pensano di conoscere poi C++)? :) Potrebbe aver un senso paragonare davvero qualcosa di C con qualcosa di C++; ma avrebbe forse senso nelle università per trattare concetti terzi. Alle superiori è già tanto se viene trattata la scrittura su file o poco più... :D
Al momento il mio intervento termina qui. Spero di non aver aperto inutilmente un topic trovandomi a "parlare" da solo. xD