É comum que um programador não saiba a diferença entre C e C ++? [fechadas]

16

Durante uma entrevista, perguntaram-me se sabia a diferença entre C e C ++.

Fiquei me perguntando por que essa pergunta está sendo feita?

Stella Lie
fonte
11
Dado o número de perguntas em C que vi nas últimas semanas com a tag C ++, eu diria que é uma pergunta muito importante.
Gort the Robot
13
A julgar pela frequência com que vejo "C / C ++", eu diria que é muito comum.
user16764
6
O que você respondeu?
Dima
8
É comum que um candidato a um trabalho de programação não saiba nada. Mas eu não chamaria essa pessoa de programador.
vartec
6
@Tjaart - Você entende que existem sistemas em que um byte não é de 8 bits, certo?
Ramhound #

Respostas:

25

Se as perguntas foram formuladas como "Você sabe a diferença entre C e C ++?" e você tinha permissão para responder com "Sim", então eu podia ver sua confusão, mas se eles realmente perguntassem "O que são as diferenças entre C e C ++?" e se esperava uma resposta mais aberta, posso vê-la como uma "via de investigação" legítima, como eles dizem.

Por exemplo, apenas tendo já codificado em C e nunca em C ++, eu mal seria capaz de responder além de um vago "C ++ suporta codificação orientada a objetos?".

Kzqai
fonte
40

Algumas pessoas observaram que há uma enorme quantidade de candidatos a emprego de programação que não conseguem escrever código . Então, sim, fazer perguntas "óbvias" faz todo sentido.

Heinzi
fonte
7
Essa seria praticamente a minha resposta. Depois de entrevistar pessoas para posições de programação, posso dizer que as perguntas óbvias eliminarão um bom número de candidatos com muita facilidade.
Tyanna
Um milhão de votos para você. Eu já estou espantado com as perguntas de nível iniciante que muitos entrevistados não conseguem responder.
HLGEM
1
Além disso, estou programando há mais de 25 anos e há algumas perguntas no nível iniciante que não consigo mais responder (piora se você pedir definições). Eu estava olhando o artigo vinculado nesta resposta e fiquei tipo "hmmm sim, deixe-me pensar nisso por um minuto", enquanto no trabalho eu trabalho na implementação de sistemas bastante complexos e geralmente não tenho muitos problemas para encontrar soluções. Algumas dessas pequenas perguntas me assustam mais do que um sistema de várias camadas e lançam alguma funcionalidade multithread, uma porcaria assim ... Estranho, eu sei.
MetalMikester
1
de fato. Conforme discutido em outro tópico do P.SE, para entrevistas que adquiri o hábito de começar com perguntas ridiculamente óbvias ("como você declara uma variável em JS?", "Quantos bytes para 1 int em Java?", " o que é um ponteiro? "etc ...). Eu não me importo com um primeiro erro (o estresse é um fator, mesmo se eu iniciar entrevistas com conversas para relaxá-las), mas geralmente se eu conseguir três advertências antes de chegar a perguntas decentes, considero perfeitamente aceitável desligar sem ir mais ou expulsá-los. Os 5 minutos necessários para fazer perguntas estúpidas valem o tempo economizado.
haylem
3
Na verdade, eu até peço desculpas antes de fazer essas primeiras perguntas, pois não quero que candidatos qualificados sejam desconcertados por eles, ou acho que não os estou levando a sério e sinto que eles não pertenceriam aqui.
haylem
8

Há um monte deles. Há uma infinidade de pessoas que têm palestrantes idiotas que ensinam cordas em C newe delete/ ou tutoriais desatualizados ou livros ruins, que aprendem "C ++", mas na verdade C, que pensam que os dois são muito próximos.

Obviamente, se você é um empregador, dizer que eles são iguais ou até semelhantes é uma grande luz de advertência.

DeadMG
fonte
2
Isso traz um ponto muito bom. É aceitável e talvez até comum ensinar C, mas use o compilador C ++. É claro que isso leva a confusões dos alunos que nunca aprendem as principais diferenças entre C e C ++. Estou apenas falando sobre as principais diferenças entre a mesma revisão.
Ramhound
4
@Ramhound: Não é aceitável a todos . O fato de ser comum é ortogonal.
11132 DeadMG
1
O fato triste é que C e C ++ são quase universalmente ensinados mal. Vá para SO e veja as tags C e C ++ e verá os mesmos conceitos errôneos, as mesmas interpretações erradas, as mesmas práticas ruins repetidas vezes sem conta. Não são pessoas que cometem os mesmos erros aleatoriamente; eles foram ensinados a cometer esses erros. "Meu professor disse ..." é quase universalmente uma bandeira vermelha para mim agora.
John Bode
5

Há também uma pequena porcentagem de pessoas (como eu) que aprenderam C ++ antes de aprender C.

Tenho certeza que você conhece as diferenças, mas se você é um aluno que teve apenas uma aula de C ++ e não uma classe C, as partes do C ++ que não são compatíveis com C não serão óbvias.

Algumas das diferenças mais óbvias que aprendi (não uma lista exaustiva) ( ) tipos de dados de estrutura originalmente não podiam conter funções e não podem ter membros particulares, o que significa que é muito difícil aplicar as regras de validade de um tipo de dados abstrato em C. ( ) as classes não são suportadas em C ( ), passando por referência usando o operador e comercial é específico para C ++ ( ) C não suporta fluxos ou modelos (*) malloc e free são destinados apenas para uso em C e não em C ++

AB
fonte
2
Eu acho que essa é uma das principais informações ... antigamente, você tinha um compilador C, então veio o C ++, então você aprendeu as diferenças. Agora você tem compiladores C / C ++ e, se você aprender C ++ explicitamente, é quase impossível saber o que é C e o que é C ++ além do "material orientado a objetos". Além disso, não tenho certeza se C / C ++ é o mais comum. idioma para aprender com raiva (?)
Al Biglan 12/12/12
1
Eu espero muito que a porcentagem não seja tão pequena, porque os programadores de C "convertidos em C ++" geralmente são muito maus programadores de C ++ .
SBI
1

Infelizmente, acho que está se tornando cada vez mais comum.

Acho que jovens programadores recém-saídos da escola técnica (ou de onde aprendem suas habilidades) simplesmente não aprendem idiomas mais antigos, como C, C ++, Lisp, OCaml, etc. Eles simplesmente saem como "programadores de c #" ou "programadores de java" ", etc. E quando conseguem um emprego, não se desafiam a aprender outras línguas.

É claro que existem alguns que sim, mas daqueles com quem trabalhei, há uma tendência geral para os programadores mais jovens seguirem esse padrão.

Isenção de responsabilidade: Como estou falando sobre educação, é claro que pode haver diferenças de país para país sobre o que está sendo enfatizado na educação.

Pete
fonte
De quais universidades você está falando? Línguas "misteriosas"? Eu tive que aprender montagem para o MIPS na universidade de Roma ...
Виталий Олегович
Geralmente, os "jovens" programadores que conheci são graduados em engenharia. Pensando bem, quase todos os programadores com quem trabalho são formados em engenharia, inclusive eu.
Pete
1
C e C ++ ainda são ensinados na escola. O problema é na maioria das vezes o mesmo compilador é usado para ensinar os dois. Isso significa que eles nunca aprendem as diferenças entre os dois idiomas.
Ramhound
@Pete Se eu me tornei um 'programador de C #', não consigo imaginar aprender C ou C ++ como 'outra linguagem'. Certamente eu gostaria de Ruby, Haskell, Javascript, Python. As línguas da família C são próximas o suficiente para que conhecer uma seja suficiente.
precisa
0

Provavelmente não literalmente, pois eles acham que C ++ e C são a mesma coisa, mas em termos de realmente entender e poder usar os diferentes recursos do C ++, sim.

A principal causa é a natureza binária da listagem de idiomas / ferramentas em seu currículo / currículo. Essencialmente, o padrão parece ser que, se você tem o "Hello World" para compilar e executar em um idioma, não há problema em listá-lo em seu currículo / currículo.

Por acaso, a versão C de "Hello, World!" também compila e executa em C ++. Portanto, na ausência de outras informações, tudo o que vê "C ++" em um currículo me diz que essa pessoa conhece C suficiente para obter "Olá, Mundo!" em execução e sabe que a maioria dos programas em C será compilada em C ++.

Dado isso, vou precisar sondar isso um pouco na entrevista. Eu provavelmente não faria isso perguntando "Sim / Não" "Você sabe a diferença?" pergunta, em suma, porque tem uma resposta "certa" óbvia. Eu provavelmente perguntaria à candidata qual idioma ela gostava mais, por que e se havia alguma vantagem na que ela não escolheu.

JohnMcG
fonte
0

Responda

Sim, é comum. Eu já vi essa situação, eu mesmo, colegas de trabalho ou código de bibliotecas de terceiros.

Eu, por exemplo, às vezes trabalha com outras linguagens de programação ou estruturas de programação e precisa vincular ou atualizar as bibliotecas "pure c" ou "c ++".

Eu apenas tive o problema de modificar algum código "Pure C". E usando as funções de alocação de memória "new" e "delete", que são "c ++". O restante do código não foi orientado a objetos

O compilador foi C ++. Mais tarde, processei outro compilador e descobri o erro.

Bônus

Se alguém perguntar, verbalmente, ou em uma prova escrita ou na web:

"Você sabe a diferença entre C ou C ++"

E você responde "Sim" ou "Não".

Eles realmente querem dizer:

"Você sabe a diferença entre C ou C ++, se sim, por favor me diga?"

Então, você tem que responder:

"Sim. A diferença é que o C ++ é orientado a objetos, embora você possa usar o Pure C, dentro de um programa C ++, para compatibilidade com versões anteriores."

Às vezes, eles não perguntam "se você me diz" e assumem que você não sabe. Não basta responder "sim" ou "não".

umlcat
fonte
2
Bem, não acho que essa resposta esteja totalmente certa. A resposta certa é que o C ++ possui um suporte robusto ao código orientado a objetos. Não requer isso. (Qual é a fonte desta confusão em primeiro lugar.)
Gort the Robot
Além disso, "você pode usar o Pure C dentro de um programa C ++" pode significar algo como "C ++ é um superconjunto de C, ou seja, qualquer programa válido em C também é um programa válido em C ++" (errado). Ou pode significar "você pode vincular programas C ++ a bibliotecas C" (é verdade, mas a maioria das linguagens pode vincular-se a bibliotecas C de uma maneira ou de outra.) Você deve ser muito mais preciso em uma entrevista real.
Nikie
-2

Editar

Como exemplo, observe que esta resposta não pretende declarar que não há diferenças ou que eu afirmo conhecer as diferenças, ou mesmo que eu saiba que "Hello World" em C ou C ++. É uma resposta para a pergunta, enquadrando os termos de referência, apontando que muitas pessoas conhecem as diferenças elementares (por exemplo, uma tem alguns +caracteres em seu nome) e muito poucas pessoas sabem todas ou mesmo a maioria das diferenças.


Depende do que você quer dizer com 'programador' e o que você quer dizer com 'diferença'.

Sou um 'programador' (embora me chame de desenvolvedor) e lutaria para fornecer diferenças reais entre C e C ++. Se pressionado, provavelmente diria que C ++ é um superconjunto de C que possui namespaces e herança; maneiras diferentes de lidar com a memória. Eu sei o suficiente para corrigir alguns bugs ou fazer algumas alterações em seu programa existente, mas não consigo imaginar escrever nada além de um simples utilitário em C ou C ++. Sei o suficiente para sobreviver, mas não me considero "conhecedor" de nenhum desses idiomas.

Conheço outros 'programadores' (também desenvolvedores) que nem diriam a diferença entre Java e FORTRAN, ou Javascript e Pascal. Eles são bons no que fazem e não fazem linguagens processuais.

Existem milhões de programadores medíocres que mal conhecem o idioma único com o qual trabalham todos os dias.

O termo "diferença" é ambíguo. Eu apontei o que vejo como algumas diferenças acima, mas sei que elas não são definitivas e completas. Pouquíssimas pessoas conhecerão todas as diferenças - muito mais pessoas poderão dar algumas respostas vagas (como eu) sobre orientação a objetos.

Kirk Broadhurst
fonte
5
"Eu lutaria para fornecer diferenças reais entre C e C ++." Você certamente não é um programador de C ++. Por favor?
SBI
2
C e C ++ são linguagens muito diferentes, codificadas de maneiras muito diferentes. Você claramente simplesmente não os conhece.
DeadMG
@sbi "Não me considero" conhecedor "de nenhum desses idiomas." Vou deixar você decidir isso por si mesmo.
precisa
Algum feedback sobre os votos negativos? É porque eu não sei a diferença entre os dois? Eu não assumiria que isso me desqualificaria de responder à pergunta.
precisa
1
@KirkBroadhurst: Acho que indiquei que parte da sua resposta não gostei o suficiente para fazer voto negativo, e esse comentário foi votado cinco vezes mais que você foi votado depois disso, então não tenho certeza de qual explicação você está procurando. No entanto, para elaborar: O termo "diferença" é suficiente aqui, pois C e C ++ compartilham apenas semelhanças sintáticas superficiais e, além disso, são linguagens muito diferentes. Quanto às qualificações: eu não acho que exista uma qualificação necessária para responder aqui, mas quando uma resposta estiver descaradamente errada como essa, ela terá o voto negativo irrelevante da qualificação.
SBI
-3

É comum que um programador não saiba a diferença entre C e C ++?

Vinte anos atrás? Sim.

Hoje? Não muito.

A razão para isso é porque o cenário da programação mudou bastante. Muitos dos programas atuais são baseados na Web; até programas criados para desktops podem ser escritos em uma linguagem de nível superior ao C ou C ++. Como tal, a menos que você seja um programador que escreve código do sistema operacional, talvez não saiba muito sobre os dois idiomas.

Um entrevistador pode fazer essa pergunta em uma entrevista para avaliar o quanto você sabe sobre os fundamentos da programação; se você conhece a diferença entre C e C ++, provavelmente sabe o que é programação orientada a objetos, provavelmente entende bibliotecas e compiladores, funções de memória, referências, ponteiros ... muitas coisas que influenciaram as linguagens de programação atuais . Eu não uso muito C ++ (e realmente não posso dizer que sou um excelente programador em qualquer linguagem; a sabedoria virá com o tempo), mas posso dizer que minha experiência com C ++ definitivamente me tornou um programador melhor.

lunchmeat317
fonte
8
Teria dito o contrário. Eu vejo pessoas mais confusas agora do que 5 a 10 anos atrás.
haylem
@ Haylem Olhando para trás, acho que pretendia dizer o contrário .... gritos.
lunchmeat317