Qual è il modo migliore per andare a lungo termine: C, Obiettivo C o C ++? [chiuso]

StackOverflow https://stackoverflow.com/questions/109937

  •  02-07-2019
  •  | 
  •  

Domanda

Una cosa a cui volevo davvero tornare è la programmazione in C ++, ma non sono sicuro che dovrei tornare a C ++ (che ho alcune conoscenze di base sulla programmazione della console) o dovrei esaminare C o Objective C? Sto osservando il lungo termine e la facilità di codifica come buoni editor, compilatori, ecc., Nonché quale sarebbe il più veloce da impostare e far funzionare.

In aggiunta, quale software suggeriresti per lavorare con una lingua suggerita?

[EDIT]

Alcune persone hanno affermato che è difficile suggerire qualcosa quando non si sa cosa sto facendo. Al momento non ho in mente alcun programma specifico, sto solo cercando di iniziare con una di queste tre lingue per investimenti e lavoro a lungo termine o come punto di partenza per qualcos'altro.

È stato utile?

Soluzione

Posso davvero parlare solo di C e C ++. L'apprendimento non farebbe male, anche se per l'unica ragione che tanto codice legacy è in C e C ++.

Pure C è spesso l'unica opzione per sistemi operativi, sviluppo di driver o ambienti di sviluppo integrati. Altri usi includono i periodi in cui le prestazioni sono molto critiche, in cui si desidera essere come "chiudi" agli interni della macchina il più possibile. Non fa mai male conoscere C perché queste applicazioni non sembrano scomparire presto. C è anche la "lingua franca" per molte applicazioni * nix. Quindi, se vuoi contribuire a molti progetti open source (apache / svn / cvs / etc), conoscere C sarebbe un requisito.

Il C ++, nella mia esperienza, viene utilizzato quando si desidera essere "vicini alla macchina" come quando si codifica per C, ma si desidera l'opzione di includere livelli più alti di astrazione tramite alcuni OOP. Il principale punto di forza del C ++ (e il più grande punto debole) è il suo multi-paradigma. Ti dà quasi tutto ciò che puoi fare in C oltre a molte funzionalità orientate agli oggetti. Ad esempio, potresti riutilizzare un sacco di codice C super-ottimizzato quando necessario durante la creazione di classi, facendo ereditarietà / polimorfismo - tanto "orientamento all'oggetto"; come vuoi. Ci sono anche modi per aggiungere un po 'di programmazione funzionale al mix ...

Il C ++ viene spesso criticato perché cerca di essere troppe cose per troppe persone. Come tentativo di fare tutto, dicono i critici, non è molto bravo in nessuna cosa. Il C ++ era la "lingua franca" per le applicazioni desktop, ma Java e .Net hanno davvero portato via molti utenti Enterprise. Tuttavia, molte applicazioni che si preoccupano sia delle prestazioni sia dell'utilizzo dell'enorme quantità di funzionalità aggiuntive, utili, generalmente abbastanza buone per i tuoi scopi disponibili solo in C ++ sceglieranno C ++.

Altri suggerimenti

Se lavori principalmente su Windows, suggerirei C ++. Microsoft sta dedicando molto lavoro al nuovo C ++ / CLI e al compilatore C ++ nativo. Con le nuove aggiunte TR1 e C ++ 0X, vengono risolti molti problemi che sono esistiti in passato.

Direi: scegli la lingua che preferisci e seguila per un po '. Nel frattempo concentrarsi sugli algoritmi. Questi sono i mattoni dei programmi. La lingua è solo una lingua.

Se hai imparato / imparato uno è solo una questione di alcune settimane per passare a qualcosa di diverso, specialmente se rimani nella stessa famiglia di lingue (ad esempio C, C ++, Obiettivo C, Java, C # ecc.)

Se pensi che Apple un giorno governerà il mondo, Obiettivo C.

In questo momento penso che lo sviluppo di iPhone Cocoa sia arrivato. Quindi, Obj-C, personalmente.

Puoi ignorare qualsiasi risposta che non abbia prima chiesto cosa farai effettivamente. Senza tali informazioni, la risposta è sbagliata, fuorviante o semplicemente irrilevante.

Il mio punto di vista:

Delle tre scelte che hai visualizzato, la tua migliore scommessa iniziale è probabilmente C. Una volta che conosci C, hai una maniglia sulle sue stranezze e ne sei abile, l'apprendimento del C ++ o dell'Obiettivo-C sarà molto probabilmente banale. (I punti più difficili ci saranno nel lato di orientamento dell'oggetto del mondo.)

Al momento, Objective-C viene utilizzato più frequentemente sui Mac, ma alcuni dimenticano che esistono strumenti GNU per Objective-C e che è supportato anche in GNUStep. (L'attuale Mac OS X si basa fortemente sul vecchio NextSTEP, di cui GNUStep è più o meno un clone.) La cosa su Objective-C, tuttavia, è che non è ampiamente usato al di fuori di questi due ambienti - rendendolo qualcosa di un ambiente stretto. (E con Obj-C, come qualsiasi altra lingua OO moderna, trascorrerai molto più tempo a imparare le classi del framework rispetto alle attuali sintassi / regole lessicali.)

Sono principalmente uno sviluppatore C #. Questo paga le mie bollette e lo fa bene. C # non era nella tua lista e sospetto di sapere il perché: sembra che tu stia cercando di essere più vicino al metal, meno astratto. Lo capisco e penso che sia la scelta giusta per una crescita professionale a lungo termine. Ho iniziato con innumerevoli astrazioni tra il mio codice e il box (prima professionalmente con Java, poi VB6, quindi .NET) e, di conseguenza, ora sto lavorando duramente nel mio tempo libero per giocare a "recuperare" " con il resto del mondo - Attualmente sto esaminando il libro K & amp; R . Certo, non ho bisogno professionale di avvicinarmi così tanto al metallo, ma sento il bisogno personale di capire la macchina nel miglior modo possibile.

(Inoltre, per ironia della sorte, sto cercando di tornare allo sviluppo del cacao tramite Objective-C. Ci sono passato anni fa, e penso di essere meglio posizionato per "ottenere" adesso. Personalmente ritengo che la preconoscenza di C renderà il passaggio a Objective-C molto più facile, più fluido e mi renderà meno probabile l'introduzione di disastrosi bug relativi alla memoria nel mio codice!)

Alla fine, penso che avere la conoscenza preesistente di C (anche se non era, ovviamente, necessario per me!) è una cosa molto buona, e probabilmente fa passare ad altre lingue nel tempo ( cosa che farai , a meno che tu non faccia il sistema operativo, il driver o il lavoro incorporato) più facilmente e senza problemi. Non sto dicendo " non puoi cavartela senza, " Sto dicendo che in base al modo in cui la tua domanda è stata formulata ... Penso che sia la risposta giusta per quello scenario.

Guardo la tua domanda in modo leggermente diverso e alla fine ti suggerirei di imparare Objective-C. Ho un paio di ragioni per questo.

Uno, Obj-C ha un modo molto diverso di vedere il modello OO in quanto generalmente implementato in linguaggi come C ++. Obj-C si basa su Smalltalk e come tale tutte le "chiamate al metodo" sono implementati come messaggi inviati all'oggetto appropriato. Grazie a questo programmatore sono stati in grado di estenderlo in alcune tecniche molto interessanti e abbastanza potenti. Parte del motivo dell'apprendimento di una nuova lingua dovrebbe essere sempre quello di estendere la tua visione di come le cose possano funzionare - Obj-C ha molto più potenziale rispetto a C o C ++ in questo senso.

Due, Obj-C, almeno sul Mac, ha dietro di sé un framework estremamente potente con un'eccellente toolchain. C e C ++ non hanno davvero lo stesso framework coesivo su nessuna piattaforma, sebbene Microsoft probabilmente si avvicini alla loro implementazione. Basta lavorare con Cocoa per convincermi che Obj-C è un linguaggio eccezionale. La biblioteca è davvero ben pensata e mi rende geloso di coloro che ci lavorano quotidianamente.

Tre, Obj-C è un superset di C, quindi imparandolo avrai già familiarità con la sintassi di C. Inoltre, la libreria C Standard è piuttosto anemica e può essere appresa abbastanza rapidamente. Il C ++ è leggermente migliore, con boost disponibile, ma boost non è in alcun modo coerente come il cacao.

Alla fine devi decidere quali sono le tue priorità. Se stai solo cercando di imparare qualcosa di nuovo, vai con Obj-C.

Dipende da cosa stai facendo. Se dovessi sceglierne uno, direi C ++. È più multipiattaforma di Obj-C e meno doloroso di C. Ma se stai programmando un Mac, vorresti conoscere Objective-C. Se stai eseguendo una programmazione integrata o un hacking del kernel, probabilmente vorresti usare C.

C'è un motivo per cui non andare con C ++ e andare con C o Obiettivo C invece? Oggi C ++ ha di gran lunga la più ampia comunità, la più grande base di codice esistente ed è la migliore di tutte e tre. Se non ritieni che sia vero, ti preghiamo di chiarire (sul serio, sono davvero interessato).

Inoltre, C ++ è l'unico supportato da MS in termini di .NET (ovviamente se si prevede di migrare a .NET un giorno, ovviamente).

Inizia con C, quindi estendi le tue conoscenze a C ++ se hai bisogno dell'orientamento agli oggetti. L'obiettivo C è una cosa oscura come Apple Script di cui solo gli sviluppatori Apple hanno mai sentito parlare (se ce ne sono), non andrai lontano con quella lingua (senza offesa per i fan di quella lingua).

C è abbastanza facile da imparare (rispetto al C ++) e hai una buona conoscenza di base per qualsiasi altra lingua che potresti voler imparare in seguito (specialmente C ++).

Per quanto riguarda la risposta di Loren Segal, cosa vuoi fare non importa quando vuoi scegliere tra C e C ++. È solo una questione di preferenza. Entrambi hanno le librerie per tutto (dal momento che le librerie C ++ sono spesso solo wrapper orientati agli oggetti attorno alle librerie C), entrambe hanno una grande comunità, IDE e compilatori stabili.

Intel sta investendo molto nelle librerie C ++ per funzionare con i propri processori. Dal momento che Intel sembra dominare il mondo dei processori per PC ultimamente, sembra una scelta decente.

Pure C è una buona base per non avere nessun altro linguaggio di programmazione su cui concentrarsi. Objective-C in particolare è solo un codice C di base con idee smalltalk sparse in cima. Anche se C ++ si avventura lontano da C, a mio avviso è ancora chiaro che C è il linguaggio più utile da conoscere. In Objective-C si passa spesso a C. In Ruby, Python, Erlang e innumerevoli altre lingue si passa spesso alla modalità C. È anche una lingua che puoi sempre contare sull'essere in grado di utilizzare su ogni computer che tocchi.

Quindi è mia opinione personale che ogni programmatore dovrebbe davvero conoscere C. Almeno un po '.

Di recente ho imparato Object-C (perché ho iniziato a giocare con Cocoa) dopo essere stato uno sviluppatore C ++ per circa 10 anni.

Ho trovato l'esperienza dell'apprendimento dell'obiettivo-C oltre al C ++ estremamente istruttiva, anche se probabilmente non userò l'obiettivo-C per nessun progetto reale.

Sia goal-C che C ++ aggiungono uno strato di programmazione orientata agli oggetti sopra C. Ma lo fanno in modi quasi completamente opposti. Sembra che ogni volta che C ++ ha preso una decisione di progettazione, obiettivo-C ha fatto la scelta opposta. Ad esempio, C ++ utilizza la tipizzazione statica, mentre goal-C utilizza la tipizzazione dinamica. Oppure, (recente) goal-C usa la garbage collection che C ++ non ha.

Questo mi ha fatto davvero capire i concetti di programmazione orientata agli oggetti e le scelte progettuali coinvolte in esso in un modo molto migliore.

Se vuoi concentrarti solo sul sistema operativo Windows, ti suggerisco di iniziare direttamente con C # (.Net Framework)

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