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

22

Ho una domanda che penso possa essere la risposta migliore qui.

Sto abbastanza bene con C++ , bravo come in I am agio con la lingua, ho letto Accelerated C++ e fatto quasi tutti gli esercizi.

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

Sono particolarmente interessato a sapere se posso sopravvivere senza conoscere C nel mondo di oggi. Come se concedessi un'intervista in un'azienda, se dicessi loro che non so C - lo prenderanno come OK? Le due lingue con cui sto bene sono Python e C ++. Sto chiedendo questo perché ho sentito che le società chiedono strutture di dati nelle 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 sei C ++", per favore non rispondere :) Senza offesa, ma non riesco a capire perché l'apprendimento di C è un prerequisito.

    
posta S S 24.08.2010 - 15:30
fonte

16 risposte

36

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

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

    
risposta data 24.08.2010 - 15:33
fonte
23

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

  1. La mia esperienza (25 anni fuori dal college) è che il C ++, anche se sempre più raro, continuerà a essere vitale per sistemi interessanti per il prossimo futuro. Quindi mi sto attenendo a ciò 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 nei linguaggi gestiti e quindi hanno più probabilità di capire cosa succede sotto le copertine. È più facile passare da C ++ a C # / Java rispetto a viceversa perché la barra per la voce è più alta.

  3. Quindi, mentre a mio avviso, non è essenziale comprendere C per programmare con competenza in C ++, sviluppare una comprensione del perché C ++ esiste nel contesto di C - i suoi limiti e i suoi punti di forza e come sono indirizzati o non in C ++ - sarebbe inestimabile per te nel tempo.

Buona fortuna.

    
risposta data 24.08.2010 - 15:42
fonte
13

Qui è ciò che Bjarne ha da dire:

Knowing C is a prerequisite for learning C++, right?

Wrong. The common subset of C and C++ is easier to learn than C. There will be less type errors to catch manually (the C++ type system is stricter and more expressive), fewer tricks to learn (C++ allows you to express more things without circumlocution), and better libraries available. The best initial subset of C++ to learn is not "all of C".

    
risposta data 24.08.2010 - 15:47
fonte
4

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

    
risposta data 24.08.2010 - 15:36
fonte
4

Ok, per prima cosa - no, conoscere C non è un prerequisito per l'apprendimento del C ++. In effetti, può essere un ostacolo.

In secondo luogo, questo è completamente situazionale. Che tu debba sapere o meno C dipende interamente dal fatto che il lavoro lo richieda. Se vuoi essere un ragazzo di sistemi embedded allora sì, l'apprendimento di 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 dati, di nuovo si tratta di società. Di solito una società dirà "Programmiamo in queste lingue, scrivici questa struttura dati. Utilizza la lingua che preferisci dalla lista sopra." Se ti chiedono di scriverlo in C, devi semplicemente dire "Non so C - non dice sul mio curriculum che so C, questo lavoro non fa per me".

    
risposta data 24.08.2010 - 15:37
fonte
3

Like if I give an interview in a company, if I tell them that I don't know C - will they take it as OK?

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

So if they ask me to implement it, and if I do it in C++, is it acceptable?

Mi aspetterei di sì, se stanno intervistando / assumendoti di lavorare in C ++.

Se si tratta di una "struttura di dati", potresti chiedere loro se vogliono dimostrare di usare contenitori STL o se (perché è un'intervista) vogliono implementare le strutture dati da zero.

    
risposta data 24.08.2010 - 15:37
fonte
2

C è quasi un sottoinsieme appropriato di C ++. Se non conosci C, allora non conosci un sottoinsieme grande e importante di C ++. hai per 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 è importante conoscere la libreria standard C. Tuttavia, avrei lanciato un occhio molto sospettoso nei confronti di chiunque non avesse compreso i concetti del core C come puntatori, array e bit twiddling.

    
risposta data 24.08.2010 - 22:58
fonte
2

Do I need to learn C?

No, non è necessario. Periodo.

Ma l'apprendimento di qualsiasi nuovo linguaggio di programmazione è vantaggioso 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 qualsiasi altra cosa (Fortran 03, Perl, Forth) altri nuovi fangled paradigma colpisce la tua fantasia; l'apprendimento di lingue diverse ti aiuta ad esporvi a più linee di pensiero, ciascuna con i suoi punti di forza e di debolezza per affrontare il compito in questione.

Fortran è ancora dominato nel calcolo numerico, COBOL è ancora un pilastro di grandi compagnie assicurative, Unix, BSD e Linux sono ancora basati principalmente su C. Il vecchio codice non perde il suo valore con l'età sempre perché non lo fa necessariamente si consumano come dispositivi meccanici che devono essere sostituiti nel tempo. Quindi la lingua più vecchia può essere utile in termini di occupabilità rispetto al fattore cool della lingua più recente.

Proprio come studiare per diventare multilingue in lingue naturali (umane) probabilmente migliora la tua capacità di esprimere te stesso , lo stesso porta lo stesso tipo di bonus per le lingue del computer.

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

I am pretty good with C++, good as in I am comfortable with the language, I have read Accelerated C++ and done almost all the exercises

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

Prenditi il tuo tempo e continua a imparare è il consiglio più importante che posso darti. Per l'interpretazione di qualcun altro, ti incoraggio a leggere la programmazione di dieci mesi di Peter Norvig

.     
risposta data 18.07.2011 - 23:22
fonte
1

Una risposta molto breve alla tua domanda è: dipende molto dalle tue esigenze. Alcune aziende si basano principalmente su C, a volte come una reliquia (se C fosse già stato utilizzato 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 molte applicazioni potrebbero non richiedere alcuna conoscenza di C. A differenza dei linguaggi OOP, C richiede un diverso mindframe, con il quale Intendo 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 espandere la tua mente, per così dire. Ma ancora una volta, se le aziende si preoccuperanno dipende dalle loro esigenze. Alcuni possono darti una scelta di lingua, alcuni possono richiedere Java, altri C ++, altri ancora C, ecc. Riuscirai a sopravvivere? Sì, il mondo di oggi ha così tante diverse aree di programmazione che potresti non passare nemmeno con il codice C. Dovresti imparare C? Direi - sì, indipendentemente dall'uso futuro.

    
risposta data 24.08.2010 - 15:41
fonte
1

Alcune persone potrebbero non sentirsi a proprio agio nella programmazione in C mentre conoscono il C ++.

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

Mentre C è - detto - più semplice, costringe il programmatore a iniettare una struttura e algoritmi da solo nella modellizzazione del problema. Si tratta di un intenso aumento della libertà di programmazione.
Ma ha un costo, dal momento che alcune persone hanno bisogno di più strutture imposte e costruiscono un programma che tende ad essere esponenzialmente più difficile da mantenere man mano che aumenta. Dico spesso che il problema non è il linguaggio (C) ma quello che si fa con esso.

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

Inoltre, un buon programma in C implica buone capacità del sistema di sviluppo, in quanto la lingua richiede (di solito) una corretta comprensione dei componenti del sistema per costruire un runnable efficiente.

    
risposta data 24.08.2010 - 15:59
fonte
0

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

Suggerirei comunque di apprendere le funzioni printf e scanf di funzioni in modo da poter leggere il codice che le utilizza. Sono molto popolari in C ++, quindi sapere come vengono utilizzati è utile. Non suggerisco di utilizzarli nel tuo codice senza una ragione specifica.

    
risposta data 24.08.2010 - 15:44
fonte
0

L'unica volta che hai bisogno di sapere C è se ti viene richiesto 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 altri linguaggi (almeno dal punto di vista della produttività, se non dalle 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 stesso abuso, va bene. A seconda di come hai imparato C ++ e di quanto sei dipendente su C ++ - caratteristiche specifiche (modelli, tipi di riferimento, STL, sovraccarico) puoi agitare un po 'quando ti rendi conto che il 90% degli strumenti che rendono tollerabile la programmazione 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 divario 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 per le applicazioni desktop basate su GUI), sono disponibili strumenti di gran lunga migliori.

    
risposta data 24.08.2010 - 16:43
fonte
-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 lo è:)

    
risposta data 24.08.2010 - 15:38
fonte
-1

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

Dipende anche se vuoi programmare in Do oppure no. :)

    
risposta data 24.08.2010 - 16:16
fonte
-1

Sì, è Ok ...

IMHO, dato che sei bravo a C++ , è abbastanza vero ...

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 anche C .. Se la compagnia è pronta a pagarti, impara ...

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

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

    
risposta data 24.08.2010 - 19:22
fonte
-1

Penso che le cose più importanti da sapere riguardo a C siano le differenze tra C e C ++. Probabilmente vedrai un codice che ha qualche stile in C ad un certo punto, e non dovresti essere confuso quando vedi cose come malloc , free , printf , fopen o fclose . Dovresti anche sapere come sono simili e come sono diversi dalle loro controparti in C ++.

Devi anche sapere che << e >> sono operatori di spostamento a sinistra e a destra, non operatori di inserimento. In C ++, dove è possibile sovraccaricare gli operatori, questi sono stati sovraccaricati per eseguire l'inserimento di stream e cose simili, ma sono ancora utilizzati per spostare gli interi.

Assicurati di aver compreso tutte le funzionalità di base di C ++ che non sono in C. Se leggi Stackoverflow.com abbastanza avrai visto molte domande che implicano le differenze nelle lingue e le incomprensioni delle persone su di esse.

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ù affidabile in C.

Una cosa grande che è difficile da gestire in C che C ++ ha è distruttori. Quelle cose possono essere chiamate dappertutto, avendo cura di liberare risorse, ma in C devi fare tutto ciò in modo più esplicito. È facile per i programmatori C ++ dimenticare di farlo.

Per quanto riguarda le interviste, se qualcuno ti chiede di scrivere il 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 lo hai fatto:

struct foo x;

E loro non dovrebbero preoccuparsi se hai usato cout a meno che quello che stanno cercando di farti mostrare sia la tua capacità di gestire input e output, che il C ++ rende più facile per 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 rendere la transizione a C da C ++ abbastanza rapidamente.

Tutto ciò detto, C non è una lingua così grande. La libreria standard è molto più piccola di quella del C ++ e non è un grosso problema per familiarizzare con le parti più comuni di esso, quindi non può davvero far male apprenderlo.

    
risposta data 24.08.2010 - 20:19
fonte

Leggi altre domande sui tag