Durante un'intervista, mi è stato chiesto se conoscevo la differenza tra C e C ++.
Mi chiedevo perché una simile domanda fosse stata posta?
Durante un'intervista, mi è stato chiesto se conoscevo la differenza tra C e C ++.
Mi chiedevo perché una simile domanda fosse stata posta?
Risposte:
Se le domande fossero formulate come "Conosci la differenza tra C e C ++?" e ti è stato permesso di rispondere semplicemente con "Sì", allora ho potuto vedere la tua confusione, ma se davvero stessero chiedendo "Quali sono le differenze tra C e C ++?" e ci si aspettava una risposta più aperta, posso vederla come una "via di indagine" legittima, come si suol dire.
Ad esempio, avendo mai solo codificato in C e mai in C ++, sarei a malapena in grado di rispondere oltre un vago "C ++ supporta la codifica orientata agli oggetti?".
Alcune persone hanno osservato che esiste un'enorme quantità di candidati alla programmazione che non riescono a scrivere codice . Quindi, sì, porre domande "ovvie" ha perfettamente senso.
Ce ne sono un sacco. C'è un'infinità di persone che hanno docenti idioti che insegnano le stringhe a C.new
e delete
, o, tutorial o libri scaduti obsoleti, che imparano il "C ++" ma in realtà C, che pensano che i due siano abbastanza vicini.
Naturalmente, se sei un datore di lavoro, dire che sono uguali o addirittura simili è una grande spia.
C'è anche una piccola percentuale di persone (come me) che hanno imparato il C ++ prima di aver imparato C.
Sono sicuro che conosci le differenze, ma se sei uno studente che ha avuto solo una classe C ++ e non una classe C, le parti di C ++ che non sono compatibili con C non saranno ovvie.
Alcune delle differenze più evidenti che ho appreso (non un elenco esaustivo) ( ) I tipi di dati di struttura originariamente non potevano contenere funzioni e non potevano avere membri privati, il che significa che è molto difficile applicare le regole di validità di un tipo di dati astratto in C. ( ) le classi non sono supportate in C ( ) passando per riferimento usando l'operatore e commerciale è specifico per C ++ ( ) C non supporta stream o template (*) malloc e free sono destinati all'uso solo in C e non in C ++
Sfortunatamente, penso che stia diventando sempre più comune.
Penso che i giovani programmatori appena usciti dalla scuola tecnica (o da dove imparano le loro abilità) semplicemente non imparano le lingue più vecchie come C, C ++, Lisp, OCaml, ecc. Vengono semplicemente come "programmatori c #" o "programmatori java ", ecc. E quando trovano un lavoro, non si sfidano con l'apprendimento di altre lingue.
Naturalmente ce ne sono alcuni che lo fanno, ma da quelli con cui ho lavorato, c'è una tendenza generale per i programmatori più giovani a seguire questo schema.
Disclaimer: dal momento che sto parlando di educazione, ovviamente ci possono essere differenze da un paese all'altro su ciò che viene enfatizzato nell'istruzione.
Probabilmente non letteralmente, in quanto pensano che C ++ e C siano la stessa cosa, ma in termini di vera comprensione e capacità di usare le diverse funzionalità di C ++, sì.
La causa principale è la natura binaria di elencare lingue / strumenti sul tuo curriculum / CV. In sostanza, lo standard sembra essere che se hai "Hello World" da compilare ed eseguire in una lingua, allora è OK elencarlo sul tuo curriculum / CV.
Come succede, la versione C di "Hello, World!" compila e gira anche in C ++. Quindi, in assenza di qualsiasi altra informazione, tutto ciò che vedendo "C ++" su un curriculum mi dice che questa persona conosce abbastanza C per ottenere "Ciao, mondo!" in esecuzione e sa che la maggior parte dei programmi C verrà compilata in C ++.
Detto questo, avrò bisogno di sondarlo un po 'durante l'intervista. Probabilmente non lo farei chiedendo un "Sì / No" "Conosci la differenza?" domanda, insomma perché ha una ovvia risposta "giusta". Probabilmente chiederei al candidato quale lingua le piaceva di più, perché e se c'erano dei vantaggi rispetto a quella che non aveva scelto.
Risposta
Sì, è comune. Ho visto questa situazione, me stesso, i colleghi o il codice delle librerie di terze parti.
Io stesso, ad esempio, a volte lavoro con altri linguaggi di programmazione o framework di programmazione e dobbiamo collegare o aggiornare le librerie "pure c" o "c ++".
Ho appena avuto il problema di modificare del codice "Pure C". E usando "nuove" e "elimina" le funzioni di allocazione della memoria, che sono "c ++". Il resto del codice non era orientato agli oggetti
Il compilatore era C ++. Più tardi, ho citato in giudizio un altro compilatore e ho scoperto l'errore.
indennità
Se qualcuno chiede, verbalmente o in una prova scritta o una prova online sul web:
"Conosci la differenza tra C o C ++"
E tu rispondi "Sì" o "No".
Significano davvero:
"Conosci la differenza tra C o C ++, per favore, dimmelo?"
Quindi, devi rispondere:
"Sì. La differenza sta nel fatto che C ++ è orientato agli oggetti, anche se è possibile utilizzare Pure C, all'interno di un programma C ++, per la compatibilità con le versioni precedenti."
A volte, non ti chiederanno "se per favore dimmelo" e presumeranno che tu non lo sappia. Non rispondere semplicemente "sì" o "no".
modificare
In via preliminare, nota che questa risposta non intende dichiarare che non ci sono differenze o che professo di conoscerle, o che conosco anche "Hello World" in C o C ++. È una risposta alla domanda inquadrando i termini di riferimento, sottolineando che molte persone conoscono le differenze elementari (ad esempio, uno ha alcuni +
caratteri nel suo nome) e pochissime persone conosceranno tutte o anche la maggior parte delle differenze.
Dipende da cosa intendi per "programmatore" e cosa intendi per "differenza".
Sono un "programmatore" (anche se mi definisco uno sviluppatore) e farei fatica a dare reali differenze tra C e C ++. Se premuto probabilmente direi che C ++ è un superset di C che ha spazi dei nomi ed ereditarietà; modi diversi di trattare la memoria. Conosco abbastanza per correggere alcuni bug o apportare alcune modifiche al programma esistente, ma non riesco a immaginare di scrivere qualcosa di più di una semplice utility in C o C ++. Conosco abbastanza per cavarmela, ma non mi dipingo come "conoscendo" una di quelle lingue.
Conosco altri "programmatori" (anche sviluppatori) che non ti direbbero nemmeno la differenza tra Java e FORTRAN, oppure Javascript e Pascal. Sono bravi in quello che fanno e non fanno linguaggi procedurali.
Poi ci sono milioni di programmatori mediocri che a malapena conoscono la singola lingua con cui lavorano ogni giorno.
Il termine "differenza" è ambiguo. Ho indicato quelle che vedo come alcune differenze sopra, ma so che non sono definitive e complete. Pochissime persone conosceranno ogni differenza - molte più persone saranno in grado di dare alcune risposte vaghe (come ho fatto io) sull'orientamento agli oggetti.
È comune per un programmatore non conoscere la differenza tra C e C ++?
Venti anni fa? Sì.
Oggi? Non così tanto.
La ragione di ciò è perché il panorama della programmazione è cambiato in modo sostanziale. Molti dei programmi di oggi sono basati sul web; anche i programmi scritti per desktop possono essere scritti in un linguaggio di livello superiore rispetto a C o C ++. Pertanto, a meno che tu non sia un programmatore che scrive codice OS, potresti non sapere molto su nessuna delle due lingue.
Un intervistatore può porre questa domanda in un'intervista per valutare quanto sai sui fondamenti della programmazione; se conosci la differenza tra C e C ++, allora probabilmente sai cos'è la programmazione orientata agli oggetti, probabilmente capisci le librerie e i compilatori, capisci le funzioni di memoria, i riferimenti, i puntatori .... molte cose che hanno influenzato i linguaggi di programmazione di oggi . Non uso molto il C ++ (e non posso davvero dire di essere un programmatore eccellente in qualsiasi lingua; la saggezza arriverà con il tempo) ma posso dire che la mia esperienza con il C ++ mi ha sicuramente reso un programmatore migliore.