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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top