Impara C # per passare a C / C ++?
-
03-07-2019 - |
Domanda
Va ??bene, quindi ho appena preso una lezione introduttiva in Informatica e la scelta della lingua della scuola è stata Java (ho una conoscenza di base di concetti come polimorfismo, incapsulamento, ecc.). Voglio imparare C ++ poi C (ho sentito che prima si dovrebbe imparare C ++ e poi andare a C), e mi chiedevo se C # fosse un bel linguaggio di transizione a causa delle somiglianze linguistiche tra Java e C #. Quindi l'apprendimento del C # mi aiuterà prima a capire meglio il C ++ in seguito?
Apprezzo qualsiasi aiuto. Grazie.
Soluzione
In dubbio. C # non è significativamente più C ++, come Java. Supporta i puntatori nel codice non sicuro
, ma oltre a ciò non riesco a pensare a nessun motivo che creerebbe un ponte particolarmente buono da Java a C ++. Inoltre, questa è una caratteristica che sospetto abbia maggiori probabilità di essere utilizzata dagli sviluppatori provenienti dall'altra direzione. Se hai altri motivi per imparare il C #, dico di provarlo, ma ai fini della transizione più facilmente al C ++, direi di saltarlo.
Altri suggerimenti
Ritengo che la transizione più semplice da Java a C e C ++ sia innanzitutto iniziare con C.
Prova i puntatori e non la memoria gestita.
Quindi, una volta che avrete un'idea delle cose difficili in C e C ++, puntate sugli oggetti e sulla STL con C ++.
È così che ho imparato ed è stata una transizione molto facile per me.
Se sei principalmente interessato all'apprendimento del C ++ non impari il C # perché in superficie sembrano molto simili, in pratica sono abbastanza, abbastanza diverse.
Consiglio vivamente di imparare un linguaggio di programmazione che non utilizza un sistema di memoria gestito. Il motivo è che quando hai a che fare con un linguaggio del genere sei costretto a imparare da solo le complessità della gestione della memoria. Non puoi fare affidamento su un garbage collector per qualsiasi cosa, perché dipende da te quando gli oggetti / le strutture vivono o muoiono.
C è un linguaggio molto piccolo e probabilmente più veloce da imparare rispetto al C ++, ma puoi prendere cattive abitudini da C se alla fine vuoi usare e imparare un moderno linguaggio orientato agli oggetti. L'apprendimento del primo C non è un requisito.
La mia ultima raccomandazione è di andare direttamente al C ++ e farti un'idea.
Se conosci già Java, C # non ti insegnerà molto di più su C ++ di quanto tu già sappia.
Impara innanzitutto C per avere la sensazione di gestire la memoria non gestita. Quindi applica ciò che hai appreso sul concetto orientato agli oggetti a quel mondo non gestito con C ++. Presentati alle differenze di C ++ come i metodi virtuali, l'ereditarietà multipla e così via.
Leggi libri sulle migliori pratiche. L'apprendimento del C ++ da solo non ti rende immediatamente uno sviluppatore C ++. È una federazione di lingue, è meglio che tu sappia come usare quella lingua.
Basta imparare C. Non preoccuparti di " transizioni " ;; se il tuo obiettivo è imparare il C, passa direttamente ad esso. Java condivide abbastanza sintassi con C per essere abbastanza vicino da non doverti preoccupare di C ++; verrai semplicemente distratto dalle cose in C ++. C è abbastanza importante da imparare da solo, senza cercare di "ammorbidire il colpo".
Java è orientato agli oggetti, C ++ può essere orientato agli oggetti e C # è principalmente OOP, ma questa è la principale somiglianza.
C # è cambiato molto da Java, quindi a meno che non guardi C # per .NET 1.1 imparerai una lingua molto diversa da Java e se il tuo obiettivo è C, ti allontanerai da quello.
C è un linguaggio strutturato, quindi la mentalità è diversa rispetto alle altre tre, poiché non hai più oggetti e devi preoccuparti della raccolta di memoria tu stesso, nessuna raccolta di rifiuti.
I puntatori sono stati la parte più difficile di C per me da imparare, una volta capito che C era facile.
Una volta che conosci C, e se conosci già Java, C ++ avrà meno da imparare.
Non credo che ci sia alcun linguaggio che dia una transizione regolare al C ++, tranne forse D.
Concetti quasi unici per C ++ e D:
- RAII - > gestione delle risorse deterministica che è difficile da usare sbagliata e banale da usare nel modo giusto. Non impari che in C # o C imparerai lì solo la gestione manuale delle risorse.
- Metaprogrammazione dei modelli - > Completezza di Turing al momento della compilazione. Sebbene la maggior parte dei programmatori non ne abbia bisogno e questo è meno comune; di solito lo troverai sotto forma di librerie (esempio più importante: modelli di espressioni)
- Tempo di compilazione, programmazione generica tipizzata con anatra - > Il C ++ viene fornito con molti algoritmi e contenitori indipendenti dal tipo. I generici C # sono tipizzati in modo rigoroso e pongono maggiori restrizioni ai clienti.
- Diversi paradigmi: procedurale, orientato agli oggetti, generico e un po 'di programmazione funzionale. C #, Java e C insegnano solo un sottoinsieme di essi. In C ++, hai l'opportunità di sapere quando è più appropriato.
- const correttezza e una libreria che è corretta.
Non mi piace il fatto che molti programmatori riducano il confronto tra C ++ o C e C # a " puoi avere anche dei puntatori in C # " , perché in realtà ciò non apprezza le differenze reali.
Impara sempre nell'ordine in cui le cose sono state inventate, non diversamente.
EDIT: Il consiglio di imparare prima C ++ poi C è piuttosto folle ... Voglio dire C ++ è un superset di C, una volta che hai imparato C ++ non c'è nulla da imparare in C tranne ciò che manca rispetto al C ++. È più facile capire perché le cose sono state aggiunte mentre il linguaggio si è evoluto piuttosto che indovinare perché non sono state implementate le funzionalità C ++ in C.