Va bene se non conosco C ma sto bene con C ++? [chiuso]


23

Ho una domanda a cui penso possa essere meglio risposto qui.

Sono abbastanza bravo C++, bravo come mi trovo bene con la lingua, ho letto Accelerated C++e fatto quasi tutti gli esercizi.

Tuttavia, ho un grosso problema. Devo imparare C? Non l'ho mai fatto Cin vita mia. Ho appena C++iniziato con la programmazione. Probabilmente perché ero sempre interessato a sapere perché tutti chiamano la lingua così complessa. Ora però conosco la risposta a quella domanda;)

Sono particolarmente interessato a sapere se posso sopravvivere senza sapere Cnel mondo di oggi. Ad esempio, se concedo un'intervista in un'azienda, se dico loro che non lo so C, lo prenderanno come OK? Le due lingue con cui sono bravo sono Python e C ++. Lo sto chiedendo perché ho sentito che le aziende chiedono strutture dati durante le interviste. Quindi, se mi chiedono di implementarlo, e se lo faccio in C ++, è accettabile?

E le persone che dicono "come puoi non sapere C quando fai C ++", per favore non rispondere :) Senza offesa, ma non riesco a capire perché l'apprendimento di C è un prerequisito.



1
L'articolo citato da DumbCoder parla della popolarità di C nella programmazione integrata.
ChrisW,

2
@ChrisW - Sì, ma mostra ancora che C non è così facile da padroneggiare, non che C ++ sia facile da padroneggiare.
DumbCoder

@DumbCoder: Oh no, programmazione integrata. Quanti lavori sono integrati rispetto al desktop?
DeadMG

@DeadMG - La padronanza di una lingua non ha nulla a che fare con quanti lavori sono disponibili per quella lingua. E da dove hai avuto l'idea che C sia usato solo nella programmazione integrata?
DumbCoder

Risposte:


36

Se conosci C ++, non imparerei C solo per il gusto di farlo. Non dovresti trovare troppo difficile imparare se e quando ne hai bisogno.

Preferirei di gran lunga incontrare qualcuno che afferma di conoscere C ++ ma non C di qualcuno che afferma di conoscere C / C ++.


Oh si. E 'l'elenco delle voci prima nella questione SO su leggende metropolitane C ++: stackoverflow.com/questions/2245196/c-urban-myths

4
+1. Se conosci C ++, per cominciare, è una pisciata per imparare il C, e in secondo luogo, è davvero poco importante.
DeadMG

6
@DeadMG Potrebbe essere facile imparare la sintassi, dal momento che è solo sapere quali parti del C ++ tralasciare, ma apprendere gli idiomi comuni è più difficile, e probabilmente la parte più importante. Ma non imparerei C se non fosse necessario.
KeithB,

6
@chubsdad intendi che non dovrei inserire "Conosco Java / Javascript" nel mio CV?
Incognito

@ user257493: Non esiste Java / Javascript
John Dibling

23

Una risposta in più parti. Solo le mie opinioni.

  1. La mia esperienza (25 anni dopo il college) è che il C ++, sebbene sempre più raro, continuerà a essere vitale per i sistemi interessanti per il prossimo futuro. Quindi mi attengo a questo come la mia principale area di competenza. Il lavoro è duro, interessante e importante.

  2. I programmatori C ++ sono generalmente preziosi proprio perché non sono cresciuti in linguaggi gestiti e quindi hanno maggiori probabilità di capire cosa sta succedendo sotto le coperte. È più semplice passare da C ++ a C # / Java che viceversa perché la barra di accesso è più alta.

  3. Quindi, mentre a mio avviso, non è essenziale comprendere C per programmare in modo competente in C ++, sviluppare una comprensione del perché C ++ esiste nel contesto di C - i suoi limiti e i suoi punti di forza e come vengono affrontati o meno in C ++ - sarebbe prezioso per te nel tempo.

Buona fortuna.


Cosa ti fa dire che il C ++ è sempre più raro? Nella tua esperienza, cosa la sta sostituendo?
Prassolitico il


13

Qui cosa ha da dire Bjarne:

Conoscere il C è un prerequisito per l'apprendimento del C ++, giusto?

Sbagliato. Il sottoinsieme comune di C e C ++ è più facile da imparare rispetto a C. Ci saranno meno errori di tipo da rilevare manualmente (il sistema di tipo C ++ è più rigoroso ed espressivo), meno trucchi da imparare (C ++ consente di esprimere più cose senza circonvoluzione) e migliori librerie disponibili. Il miglior sottoinsieme iniziale di C ++ da imparare non è "tutto C".


4

Solo la mia opinione personale: se conosci C ++, puoi scrivere in C. Qualche esperienza sarebbe piacevole, ma questo non è un problema. L'opposto non è corretto: la conoscenza in C non consente di scrivere in C ++, senza ulteriore apprendimento. Non ho mai imparato C e lo uso quando è necessario, senza problemi.


3
@Alex Farber - "Se conosci C ++, puoi scrivere in C". Ne dubito fortemente :)
DumbCoder il

4
Disaccordo. IME, i programmatori che imparano prima il C ++ tendono a non rendersi conto delle funzionalità di C ++ che C non ha. I programmatori che imparano prima C possono scrivere facilmente in C ++, ma iniziare in modo non idiomatico.
dan04,

1
Questo si basa sulla mia esperienza personale. Ho imparato il C ++ e faccio la maggior parte del mio lavoro in C ++. Ma uso C quando necessario, senza problemi.

Soprattutto dato che tutte le librerie di classe carine non sono disponibili in C. Imo la vittoria di linguaggi come C ++ e Java sono le librerie, non le caratteristiche del linguaggio intrinseco in sé.

8
I programmatori C ++ che tentano di farsi strada attraverso C scrivono codice errato per gli stessi motivi per cui i programmatori C che tentano di farsi strada attraverso C ++ scrivono codice cattivo. I ragazzi C usano C ++ come "C con classi" mentre i ragazzi C ++ usano C come "C ++ senza classi".
John Dibling,

4

Ok, prima di tutto - no, conoscere C non è un prerequisito per l'apprendimento del C ++. Anzi, può essere un ostacolo.

In secondo luogo, questo è completamente situazionale. La necessità o meno di conoscere C dipende interamente dal fatto che il lavoro lo richieda. Se vuoi essere un tipo di sistemi embedded, allora sì, imparare C ti aiuterà. Altrimenti, la maggior parte dei lavori non lo richiede. Se un lavoro ha bisogno di C, dovrebbe dirlo. Se non lo dice, probabilmente non ne ha bisogno. Per quanto riguarda le strutture dei dati, dipende ancora dalla società. Di solito una società dirà "Programmiamo in queste lingue, scrivici questa struttura di dati. Usa la lingua che preferisci dall'elenco sopra". Se ti chiedono di scriverlo in C, dici semplicemente "Non conosco C - non dice sul mio curriculum che conosco C, questo lavoro non fa per me."


Perché conoscere C sarebbe un ostacolo all'apprendimento del C ++? Non sto dicendo che non sono necessariamente d'accordo, ma questa è un'affermazione audace.
Casey Patton,

3

Ad esempio, se concedo un'intervista in una società, se dico loro che non conosco C, la prenderanno come OK?

Chiedi se hanno bisogno di C (e sii disposto a impararlo o no se lo fanno).

Quindi, se mi chiedono di implementarlo, e se lo faccio in C ++, è accettabile?

Me lo aspetterei, se ti intervistano / ti assumono per lavorare in C ++.

Se si tratta di una domanda "strutture dati", potresti chiedere loro se vogliono che tu dimostri utilizzando i contenitori STL o se (perché è un'intervista) vogliono che tu implementi le strutture dati da zero.


2

C è quasi un sottoinsieme proprio di C ++. Se non conosci C, non conosci un sottoinsieme grande e importante di C ++. Non si deve imparare questo sottoinsieme? No. C ++ è un linguaggio ridicolmente grande e la maggior parte delle persone sceglie un sottoinsieme e programma con quello. Non è necessario conoscere il sottoinsieme che è C. Soprattutto, non è così importante conoscere la libreria standard C. Tuttavia, lancerei un occhio molto sospettoso verso chiunque non capisse i concetti di base di C come puntatori, matrici e punteggi.


2

Devo imparare C?

No, non è necessario. Periodo.

Ma l'apprendimento di qualsiasi nuovo linguaggio di programmazione è utile a lungo termine. L'apprendimento delle lingue basato su diversi paradigmi di programmazione è ancora più vantaggioso. Che si tratti di un linguaggio OOP (Smalltalk o C ++), un linguaggio dinamico (Lisp, Clojure, Python), funzionale (Lisp, Haskell, Erlang), concorrente (Erlang, Go, Algol 68, Smalltalk) o qualunque altra cosa (Fortran 03, Perl, Forth) altri nuovi zanne paradigma colpisce la tua fantasia; l'apprendimento di lingue diverse ti aiuta a esporti a molteplici linee di pensiero, ognuna con i propri punti di forza e di debolezza per affrontare il compito da svolgere.

Fortran è ancora dominante nell'informatica numerica, COBOL è ancora un pilastro delle grandi compagnie assicurative, Unix, BSD e Linux si basano ancora principalmente su C. Il vecchio codice non perde il suo valore con l'età sempre perché non si esaurisce necessariamente come i dispositivi meccanici che devono essere sostituiti nel tempo. Quindi il linguaggio più vecchio può essere prezioso in termini di occupabilità rispetto al fattore cool del linguaggio più recente .

Proprio come studiare per diventare multilingue nelle lingue naturali (umane) migliora probabilmente la tua capacità di esprimerti , lo stesso comporta lo stesso tipo di bonus per le lingue dei computer.

Quindi, mentre penso che sia importante (nel tempo) imparare a diventare fluente non solo in più lingue, ma è più importante essere fluente in più paradigmi di programmazione.

Sono abbastanza bravo con il C ++, bravo come mi trovo bene con il linguaggio, ho letto il C ++ accelerato e ho fatto quasi tutti gli esercizi

Ho intenzione di fare un backup e dire che il C ++ è un linguaggio ricco e complesso, ci vorranno anni di esposizione e pratica costante per diventare veramente fluenti in tutte le sue sottigliezze ricche (o brutte).

Prenditi il ​​tuo tempo e continua a imparare è il consiglio più importante che posso darti. Per qualcun altro lo prende, ti incoraggio a leggere il programma Teach Yourself di Peter Norvig tra dieci anni .


1

Una risposta molto breve alla tua domanda è: dipende fortemente dalle tue esigenze. Alcune aziende fanno affidamento principalmente su C, a volte come reliquia (se C era già stato usato per anni lì). Altre società non hanno nulla a che fare con C. C è un linguaggio di livello inferiore rispetto, per esempio, a Python o Java, e molta programmazione applicativa potrebbe non richiedere alcuna conoscenza di C. A differenza dei linguaggi OOP, C richiede un diverso mindframe, con il quale Voglio dire che i programmi sono strutturati e organizzati in modo diverso, e alcuni aspetti più sfumati devono essere presi in considerazione. È generalmente utile imparare quell'idioma, anche semplicemente per espandere la tua mente, per così dire. Ma ancora una volta, se le aziende si preoccuperanno dipende dalle loro esigenze. Alcuni potrebbero darti una scelta di lingua, alcuni potrebbero richiedere Java, altri C ++, altri ancora C, ecc. Puoi sopravvivere? Si Oggi' Il mondo di s ha così tante diverse aree di programmazione che potresti non passare nemmeno dal codice C. Dovresti imparare C? Direi di sì, indipendentemente dall'uso futuro.


1

Alcune persone potrebbero non sentirsi a proprio agio a programmare in C mentre conoscono C ++.

Esiste una struttura "protettiva" attorno al C ++ che contribuisce a guidare non solo la struttura ma anche gli algoritmi di un programma. Ad esempio l'aiuto della struttura e degli algoritmi STL, l'ovvio approccio alla programmazione orientata agli oggetti, il con / destructor, il livello astrattivo aggiunto proveniente dai template ...

Mentre C è - detto - più semplice, forza il programmatore a iniettare una struttura e algoritmi da solo nella modellizzazione del problema. Questo è un intenso aumento della libertà di programmazione.
Ma ha un costo, poiché alcune persone hanno bisogno di una struttura più imposta e costruiscono un programma che tende a essere esponenzialmente più difficile da mantenere man mano che aumenta. Dico spesso che il problema non è il linguaggio (C) ma ciò che si fa con esso.

Detto questo, come reclutatore, sono felice di intervistare qualcuno con forti competenze in C ++, ma sarei ancora più entusiasta se avesse abbastanza autonomia linguistica per sviluppare un intero progetto in C.

Inoltre, un buon programma C implica buone capacità del sistema degli sviluppatori, poiché il linguaggio richiede (di solito) una buona comprensione dei componenti del sistema per costruire un runnable efficiente.


Non direi che aumenta la libertà del programmatore: puoi sempre scrivere la tua struttura e i tuoi algoritmi in C ++.
DeadMG

0

Se ti senti a tuo agio in C ++, non mi preoccuperei di imparare C. C ++ ha molti miglioramenti rispetto a C (la capacità di supportare RAII con costruttori / distruttori, contenitori di base, flussi e stringhe è grande).

Suggerirei comunque di apprendere le serie printfe le scanffunzioni in modo da poter leggere il codice che le utilizza. Sono abbastanza popolari in C ++, quindi è utile sapere come vengono utilizzati. Non suggerisco di usarli nel tuo codice senza un motivo molto specifico.


0

L'unica volta che è necessario sapere C è se ci si aspetta di produrre codice C. In caso contrario, non ci sono problemi.

Non ho scritto C professionalmente negli ultimi 6 anni circa; ci sono molti domini applicativi meglio serviti da altre lingue (almeno dal punto di vista della produttività, se non delle prestazioni) come Java o C # o Python. Sicuramente puoi sopravvivere e persino prosperare come sviluppatore di software senza mai toccare C.

Se vuoi imparare C per il tuo abuso, va bene. A seconda di come hai appreso il C ++ e di quanto fai affidamento su C ++ - caratteristiche specifiche (modelli, tipi di riferimento, STL, sovraccarico) potresti sbagliare un po 'quando ti rendi conto che il 90% degli strumenti che hanno reso la programmazione tollerabile non sono più disponibili. Roba come la gestione della memoria in C è molto laboriosa e noiosa rispetto a C ++ o Java. Ci sono anche alcune incompatibilità tra C e C ++ e con ogni nuova versione linguistica il gap si allargherà.

Ci sono ancora domini applicativi in ​​cui C è lo strumento giusto per il lavoro: piccolo, veloce, non molto magico sotto il cofano e non è assemblaggio. Ma per lo sviluppo generale di applicazioni (in particolare applicazioni desktop basate su GUI), sono disponibili strumenti di gran lunga migliori.


-1

Penso che se ti senti a tuo agio con C ++ lo sarai anche con C.

La differenza principale tra i due è che C ++ è pulito - orientato agli oggetti - C non è :)


1
Sono un grande fan del C ++, ma non lo definirei pulito. E il C ++ è multi-paradigma, il che significa che un buon codice C ++ non è necessariamente orientato agli oggetti.
KeithB,

-1

Conoscere C ti fornirà ulteriori approfondimenti sulla gestione della memoria, ecc. Tutto dipende da quanto basso livello vuoi ottenere e se la comprensione delle cose a una leva inferiore ti aiuta o no. Potresti fare un ulteriore passo avanti e imparare anche il linguaggio degli assemblaggi, ma tutto dipende da quanto vale per te.

Dipende anche se si desidera programmare in C o meno. :)


-1

Sì è ok ...

IMHO, dato che sei bravo C++, è davvero abbastanza ...

Scommetto che ci sono industrie che sono alla ricerca di programmatori C ++ ... Ma una volta che ci sei, tutto dipende dalle esigenze del tuo progetto .. Qualunque cosa richieda potresti dover imparare .. Potrebbe essere Java, .Net o persino C .. Se la società è pronta a pagarti, imparala ...

Se ti trovi nelle prime fasi della tua carriera, gli intervistatori dell'IME tendono a esaminare il tuo atteggiamento e la comprensione della lingua con cui ti senti a tuo agio ..

Invece di imparare Cper il bene, impara il C ++ un po 'a fondo .. Migliora ciò che sei bravo in .. Sono sicuro che c'è molto che potresti dover imparare ... Per me, c'è sempre qualcosa in C ++ da imparare ..: )


-1

Penso che le cose più importanti da sapere riguardo a C siano le differenze tra C e C ++. È probabile vedere un po 'di codice che ha un certo stile C in esso ad un certo punto, e non deve essere confusa quando si vedono le cose come malloc, free, printf, fopen, o fclose. Dovresti anche sapere come questi sono simili e come sono diversi dalle loro controparti C ++.

Si dovrebbe anche sapere che <<e >>sei operatori di spostamento a destra ea sinistra, non inserimento operatori. In C ++, dove è possibile sovraccaricare gli operatori, questi sono stati sovraccaricati per eseguire l'inserimento di flussi e cose simili, ma vengono comunque utilizzati per spostare numeri interi.

Assicurati di aver compreso tutte le funzionalità di base di C ++ che non sono in C. Se leggi abbastanza stackoverflow.com avrai visto molte domande che coinvolgono le differenze nelle lingue e le loro incomprensioni.

Dovresti anche familiarizzare con il preprocessore C, che è quasi lo stesso (e spesso lo stesso programma) del preprocessore C ++. Sapere come usarlo ti aiuterà in C ++, ma è molto più usato in C.

Una cosa grande che è difficile da affrontare in C che C ++ ha sono i distruttori. Queste cose possono essere chiamate ovunque, occupandosi della liberazione delle risorse, ma in C devi fare tutto ciò in modo più esplicito. Questo è facile per i programmatori C ++ di dimenticare.

Per quanto riguarda le interviste, se qualcuno ti chiede di scrivere codice per qualche algoritmo generale in C e fai qualcosa del tipo:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Non penso che decideranno che non sai cosa stai facendo perché non l'hai fatto:

struct foo x;

E a loro non dovrebbe importare se hai usato a coutmeno che ciò che stanno cercando di farti mostrare non sia la tua capacità di gestire input e output, che il C ++ rende più facile per i casi comuni.

Se ti trovi nella posizione di essere intervistato per un lavoro che richiede C, dovresti essere in anticipo sulla tua mancanza di conoscenza di C al di fuori della sua sovrapposizione con C ++. Probabilmente capiranno che un buon programmatore dovrebbe essere in grado di passare abbastanza rapidamente da C a C ++.

Detto questo, C non è un linguaggio così grande. La libreria standard è molto più piccola di quella di C ++ e non è un grosso problema familiarizzare con i suoi pezzi più comuni, quindi non può davvero far male a impararla.

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.