È comune per un programmatore non conoscere la differenza tra C e C ++? [chiuso]


16

Durante un'intervista, mi è stato chiesto se conoscevo la differenza tra C e C ++.

Mi chiedevo perché una simile domanda fosse stata posta?


11
Dato il numero di domande C che ho visto nelle ultime settimane con tag C ++, direi che è stata una domanda piuttosto importante.
Gort the Robot,

13
A giudicare dalla frequenza con cui vedo "C / C ++", direi che è molto comune.
user16764

6
Cosa hai risposto?
Dima,

8
È normale che un candidato alla programmazione non sappia nulla. Ma non definirei quella persona un programmatore.
vartec,

6
@Tjaart - Capisci che ci sono sistemi in cui un byte non è 8 bit giusto?
Ramhound,

Risposte:


25

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?".


40

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.


7
Questa sarebbe stata praticamente la mia risposta. Avendo intervistato persone per posizioni di programmazione, posso dirti che porre le domande ovvie taglierà molto facilmente un buon numero di candidati.
Tyanna,

Un milione di voti per te. Sono sempre stupito dalle domande a livello principiante, a cui molti intervistati non possono rispondere.
HLGEM,

1
Inoltre, sto programmando da oltre 25 anni e ci sono alcune domande a livello di principiante a cui non posso più rispondere (peggiora se chiedi definizioni). Stavo guardando l'articolo collegato in questa risposta ed ero tipo "hmmm yeah fammi pensare per un minuto", mentre al lavoro lavoro sull'implementazione di sistemi piuttosto complessi e generalmente non ho molti problemi a trovare soluzioni. Alcune di quelle piccole domande mi spaventano più di un sistema a più livelli e introducono alcune funzionalità multithread, merda del genere ... Strano, lo so.
MetalMikester,

1
infatti. Come discusso su un altro thread di P.SE, per le interviste ho preso l'abitudine di iniziare con domande ridicolmente ovvie ("come si dichiara una variabile in JS?", "Quanti byte per 1 int in Java?", " cos'è un puntatore? "ecc ...). Non mi dispiace un primo errore (lo stress è un fattore, anche se inizio interviste con conversazioni per rilassarle), ma di solito se riesco a ottenere 3 avvertimenti prima di raggiungere domande decenti, allora considero perfettamente accettabile riagganciare senza andare ulteriormente o buttarli fuori. I 5 minuti necessari per porre le domande stupide valgono il tempo risparmiato.
haylem,

3
In realtà, mi scuso persino prima di porre queste prime domande, poiché non voglio che i candidati qualificati vengano estirpati da loro, o penso di non prenderli sul serio e di sentire che non sarebbero qui.
haylem,

8

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.


2
Questo fa apparire un ottimo punto. È accettabile e forse anche comune insegnare C ma usare il compilatore C ++. Questo ovviamente porta a confusioni da parte degli studenti che non imparano mai le differenze principali tra C e C ++. Sto solo parlando delle principali differenze tra la stessa revisione.
Ramhound,

4
@Ramhound: Non è accettabile a tutti . Il fatto che sia comune è ortogonale.
DeadMG

1
Il fatto triste è che C e C ++ sono insegnati quasi universalmente male. Vai su SO e osserva i tag C e C ++ e vedrai le stesse idee sbagliate, le stesse interpretazioni errate, le stesse cattive pratiche ripetute più e più volte. Queste non sono persone che fanno casualmente gli stessi errori; è stato insegnato loro come fare questi errori. "Il mio professore ha detto ..." è quasi universalmente una bandiera rossa per me ora.
John Bode,

5

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 ++


2
Penso che questa sia un'intuizione chiave ... ai vecchi tempi, avevi un compilatore C, poi è arrivato il C ++, quindi hai imparato le differenze. Ora hai compilatori C / C ++ e se ti viene insegnato esplicitamente C ++, è quasi impossibile sapere cosa sia C e cosa sia C ++ oltre "le cose orientate agli oggetti" Inoltre, non sono sicuro che C / C ++ sia il più comune lingua da imparare con rabbia (?)
Al Biglan,

1
Spero vivamente che la percentuale non sia così piccola, perché quei programmatori C "convertiti in C ++" spesso sono programmatori C ++ molto cattivi .
sabato

1

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.


Di quali università stai parlando? Lingue "arcane"? Ho dovuto imparare l'assemblea per il MIPS all'università di Roma ...
Виталий Олегович l'

In genere, i "giovani" programmatori che ho incontrato hanno conseguito una laurea in ingegneria. Pensaci, quasi tutti i programmatori con cui lavoro hanno una laurea in ingegneria, incluso me stesso.
Pete l'

1
C e C ++ vengono ancora insegnati a scuola. Il problema è il più delle volte lo stesso compilatore viene utilizzato per insegnare entrambi. Ciò significa che in realtà non imparano mai le differenze tra le due lingue.
Ramhound,

@Pete Se venissi fuori come un 'programmatore C #' non riesco a immaginare di imparare C o C ++ come 'un'altra lingua'. Sicuramente mi piacerebbe Ruby, Haskell, Javascript, Python. Le lingue della famiglia C sono abbastanza vicine da conoscerne una.
Kirk Broadhurst,

0

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.


0

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".


2
Bene, non penso che la risposta sia assolutamente giusta. La risposta giusta è che C ++ ha un solido supporto per il codice orientato agli oggetti. Non lo richiede. (Che è la fonte di questa confusione in primo luogo.)
Gort the Robot

Inoltre "è possibile utilizzare Pure C all'interno di un programma C ++" potrebbe significare qualcosa del tipo "C ++ è un superset di C, ovvero qualsiasi programma C valido è anche un programma C ++ valido" (errato). Oppure potrebbe significare "puoi collegare i programmi C ++ alle librerie C" (vero, ma la maggior parte delle lingue può collegarsi alle librerie C in un modo o nell'altro.) Dovresti essere molto più preciso in un'intervista reale.
Nikie,

-2

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.


5
"Farei fatica a dare reali differenze tra C e C ++." Non sei certamente un programmatore C ++. Per favore?
sabato

2
C e C ++ sono linguaggi molto diversi, codificati in modi molto diversi. Chiaramente non li conosci.
DeadMG

@sbi "Non mi dipingo come" conoscendo "una di quelle lingue." Ti lascerò decidere da solo.
Kirk Broadhurst,

Qualche feedback sui voti negativi? È perché non conosco la differenza tra i due? Non darei per scontato che mi escluderebbe dal rispondere alla domanda.
Kirk Broadhurst,

1
@KirkBroadhurst: Penso di aver indicato quale parte della tua risposta non mi è piaciuta abbastanza per il voto negativo, e quel commento è stato votato cinque volte più spesso di quanto sei stato votato successivamente, quindi non sono sicuro di quale spiegazione stai cercando. Tuttavia, per elaborare: il termine "differenza" è sufficiente qui, poiché C e C ++ condividono solo somiglianze sintattiche superficiali e, a parte questo, sono linguaggi molto diversi. Per quanto riguarda le qualifiche: non credo che ci sia una qualifica necessaria per rispondere qui, ma quando una risposta è palesemente errata come questa, verrà declassata irrilevante rispetto alla qualifica.
sabato

-3

È 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.


8
Avrebbe detto il contrario. Vedo più persone confuse ora anche di 5-10 anni fa.
haylem,

@Haylem Guardando indietro, penso di voler dire il contrario ... whoops.
lunchmeat317,
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.