¿Es común que un programador no sepa la diferencia entre C y C ++? [cerrado]

16

Durante una entrevista, me preguntaron si sabía la diferencia entre C y C ++.

Me preguntaba por qué se hace esa pregunta.

Stella Lie
fuente
11
Dada la cantidad de preguntas C que he visto en las últimas semanas etiquetadas con C ++, diría que fue una pregunta bastante importante.
Gort the Robot
13
A juzgar por la frecuencia con la que veo "C / C ++", diría que es muy común.
user16764
66
¿Qué respondiste?
Dima
8
Es común que un solicitante para un trabajo de programación no sepa nada. Pero no llamaría a esa persona programador.
vartec
66
@Tjaart - ¿Entiendes que hay sistemas en los que un byte no tiene 8 bits, verdad?
Ramhound

Respuestas:

25

Si las preguntas fueron formuladas como "¿Conoces la diferencia entre C y C ++?" y se le permitió responder simplemente "Sí", entonces pude ver su confusión, pero si realmente preguntaran "¿Cuáles son las diferencias entre C y C ++?" y se esperaba una respuesta más abierta, puedo verlo como una "vía de investigación" legítima, como dicen.

Por ejemplo, solo habiendo codificado en C y nunca en C ++, apenas podría responder más allá de un vago "¿C ++ admite codificación orientada a objetos?".

Kzqai
fuente
40

Algunas personas han observado que hay una gran cantidad de solicitantes de trabajo de programación que no pueden escribir código en absoluto . Entonces, sí, hacer preguntas "obvias" tiene mucho sentido.

Heinzi
fuente
77
Esta iba a ser mi respuesta. Habiendo entrevistado a personas para puestos de programación, puedo decirle que hacer las preguntas obvias eliminará a un buen número de candidatos muy fácilmente.
Tyanna
Un millón de votos a favor para ti. Estoy siempre asombrado por las preguntas de nivel principiante que muchos entrevistados no pueden responder.
HLGEM
1
Por otra parte, he estado programando durante más de 25 años y hay algunas preguntas para principiantes que realmente no puedo responder (empeora si pides definiciones). Estaba mirando el artículo vinculado en esta respuesta y pensé "hmmm, sí, déjenme pensar en eso por un minuto", mientras que en el trabajo trabajo en la implementación de sistemas bastante complejos y generalmente no tengo muchos problemas para encontrar soluciones. Algunas de esas pequeñas preguntas me asustan más que un sistema de varios niveles y agregan algunas funciones multiproceso, basura así ... Extraño, lo sé.
MetalMikester
1
en efecto. Como se discutió en otro hilo de P.SE, para las entrevistas me he acostumbrado a comenzar con preguntas ridículamente obvias ("¿cómo declaras una variable en JS?", "¿Cuántos bytes para 1 int en Java?", " ¿Qué es un puntero? ", etc ...). No me importa un primer error (el estrés es un factor, incluso si empiezo entrevistas con conversaciones para relajarlos), pero por lo general si puedo obtener 3 golpes antes de llegar a preguntas decentes, entonces considero perfectamente aceptable colgar sin ir. más lejos o echarlos. Los 5 minutos que lleva hacer preguntas estúpidas valen el tiempo ahorrado.
haylem
3
De hecho, incluso me disculpo antes de hacer estas primeras preguntas, ya que no quiero que los solicitantes calificados sean extrañados por ellos, o creo que no los estoy tomando en serio y siento que no pertenecerían aquí.
haylem
8

Hay un montón de ellos. Hay una infinidad de personas que tienen profesores que enseñan idiota C-cuerdas y newy deletetutoriales, o fuera de fecha o malos libros, que aprenden "C ++", pero en realidad C, que piensan que los dos están muy cerca.

Por supuesto, si usted es un empleador, entonces decir que son iguales o incluso similares es una gran luz de advertencia.

DeadMG
fuente
2
Esto trae un muy buen punto. Es aceptable y quizás incluso común enseñar C, pero usa el compilador de C ++. Esto, por supuesto, genera confusión por parte de los estudiantes que nunca aprenden las diferencias principales entre C y C ++. Solo estoy hablando de las principales diferencias entre la misma revisión.
Ramhound
44
@Ramhound: No es aceptable en absoluto . El hecho de que sea común es ortogonal.
DeadMG
1
El hecho triste es que C y C ++ se enseñan casi universalmente mal. Vaya a SO y mire a través de las etiquetas C y C ++, y verá los mismos conceptos erróneos, las mismas interpretaciones incorrectas, las mismas malas prácticas repetidas una y otra vez. Estas no son personas que al azar cometen los mismos errores; fueron enseñados a cometer estos errores. "Mi profesor dijo ..." es casi universalmente una bandera roja para mí ahora.
John Bode
5

También hay un pequeño porcentaje de personas (como yo) que aprendieron C ++ antes de aprender C.

Estoy seguro de que conoce las diferencias, pero si es un estudiante que solo ha tenido una clase de C ++, y no una clase de C, las partes de C ++ que no son compatibles con C no serán obvias.

Algunas de las diferencias más obvias que he aprendido (no una lista exhaustiva) ( ) los tipos de datos de estructura originalmente no podían contener funciones y no podían tener miembros privados, lo que significa que es muy difícil hacer cumplir las reglas de validez de un tipo de datos abstracto en C. ( ) las clases no son compatibles en C ( ), el paso por referencia usando el operador ampersand es específico de C ++ ( ) C no admite flujos o plantillas (*) malloc y free están destinados para usarse solo en C y no en C ++

AB
fuente
2
Creo que esta es una idea clave ... en los viejos tiempos, tenías un compilador de C, luego apareció C ++, así que aprendiste las diferencias. Ahora tiene compiladores C / C ++ y si se le enseña C ++ explícitamente, es casi imposible saber qué es C y qué es C ++ más allá de "las cosas orientadas a objetos". Además, no estoy seguro de que C / C ++ sea el más común lenguaje para aprender con ira (?)
Al Biglan
1
Espero que el porcentaje no sea tan pequeño, porque los programadores de C "convertidos a C ++" a menudo son muy malos programadores de C ++ .
sbi
1

Desafortunadamente, creo que se está volviendo cada vez más común.

Creo que los jóvenes programadores recién salidos de la escuela técnica (o de donde aprenden sus habilidades) simplemente no aprenden idiomas más antiguos como C, C ++, Lisp, OCaml, etc. Simplemente salen como "programadores de C #" o "programadores de Java ", etc. Y cuando encuentran un trabajo, no se desafían a sí mismos con el aprendizaje de otros idiomas.

Por supuesto, hay algunos que sí, pero de aquellos con los que he trabajado, existe una tendencia general para que los programadores más jóvenes sigan este patrón.

Descargo de responsabilidad: dado que estoy hablando de educación, entonces, por supuesto, puede haber diferencias de un país a otro sobre lo que se enfatiza en la educación.

Pete
fuente
¿De qué universidades estás hablando? ¿Idiomas "arcanos"? Tuve que aprender asamblea para MIPS en la universidad de Roma ...
Виталий Олегович
En general, los programadores "jóvenes" que he conocido tienen un título en ingeniería. Ahora que lo pienso, casi todos los programadores con los que trabajo tienen un título en ingeniería, incluido yo mismo.
Pete
1
C y C ++ todavía se enseñan en la escuela. El problema es que la mayoría de las veces se usa el mismo compilador para enseñar ambos. Esto significa que en realidad nunca aprenden las diferencias entre los dos idiomas.
Ramhound
@Pete Si salí como 'programador de C #', no puedo imaginar aprender C o C ++ como 'otro lenguaje'. Seguramente me gustaría Ruby, Haskell, Javascript, Python. Los lenguajes C-family son lo suficientemente cercanos como para saber uno.
Kirk Broadhurst
0

Probablemente no literalmente, en el sentido de que piensan que C ++ y C son uno y lo mismo, pero en términos de comprender verdaderamente y poder usar las diferentes características de C ++, sí.

La causa principal es la naturaleza binaria de enumerar idiomas / herramientas en su currículum / CV. Esencialmente, el estándar parece ser que si tiene "Hello World" para compilar y ejecutar en un idioma, entonces está bien incluirlo en su currículum / CV.

De hecho, la versión C de "Hello, World!" También compila y ejecuta en C ++. Entonces, en ausencia de cualquier otra información, todo lo que ve "C ++" en un currículum me dice que esta persona sabe lo suficiente C para obtener "¡Hola, Mundo!" en ejecución, y sabe que la mayoría de los programas de C se compilarán en C ++.

Dado eso, voy a necesitar probar eso un poco en la entrevista. Probablemente no lo haría preguntando un "Sí / No" "¿Conoces la diferencia?" pregunta, en resumen, porque tiene una respuesta "correcta" obvia. Probablemente le preguntaría a la candidata qué idioma le gustaba más, por qué y si hubiera alguna ventaja para el que no eligió.

JohnMcG
fuente
0

Responder

Sí, es común. He visto esta situación, ya sea yo mismo, compañeros de trabajo o código de bibliotecas de terceros.

Yo mismo, por ejemplo, a veces trabajo con otros lenguajes de programación o marcos de programación, y tengo que vincular, o actualizar, a las bibliotecas "pure c" o "c ++".

Acabo de tener el problema de modificar algún código "Pure C". Y utilizando las funciones de asignación de memoria "nuevo" y "eliminar", que son "c ++". El resto del código no estaba orientado a objetos.

El compilador fue C ++. Más tarde, demandé a otro compilador y descubrí el error.

Prima

Si alguien pregunta, verbalmente o en un examen escrito, o en un examen web en línea:

"¿Conoces la diferencia entre C o C ++?"

Y respondes "Sí" o "No".

Realmente significan:

"¿Conoces la diferencia entre C o C ++? Si lo sabes, por favor dímelo".

Entonces, tienes que responder:

"Sí. La diferencia es que C ++ está orientado a objetos, aunque puede usar Pure C, dentro de un programa C ++, para compatibilidad con versiones anteriores".

A veces, no le preguntarán "si lo hace, por favor dígame", y asumirán que usted no lo sabe. No solo conteste "sí" o "no".

umlcat
fuente
2
Bueno, no creo que esa respuesta sea del todo correcta. La respuesta correcta es que C ++ tiene un soporte sólido para el código orientado a objetos. No lo requiere. (Que es la fuente de esta confusión en primer lugar.)
Gort the Robot
Además, "puede usar Pure C dentro de un programa C ++" podría significar algo así como "C ++ es un superconjunto de C, es decir, cualquier programa válido de C también es un programa válido de C ++" (incorrecto). O podría significar "puede vincular programas C ++ a bibliotecas C" (es cierto, pero la mayoría de los lenguajes pueden vincularse a bibliotecas C de una forma u otra). Debería ser mucho más preciso en una entrevista real.
nikie
-2

Editar

Como primer paso, tenga en cuenta que esta respuesta no pretende declarar que no hay diferencias o que profeso saber las diferencias, o incluso que sé que "Hello World" en C o C ++. Es una respuesta a la pregunta enmarcando los términos de referencia, señalando que muchas personas conocen las diferencias elementales (por ejemplo, una tiene algunos +caracteres en su nombre) y muy pocas personas sabrán todas o incluso la mayoría de las diferencias.


Depende de lo que quieras decir con 'programador' y de lo que quieres decir con 'diferencia'.

Soy un "programador" (aunque me llamo un desarrollador) y me cuesta dar diferencias reales entre C y C ++. Si lo presiono, probablemente diría que C ++ es un superconjunto de C que tiene espacios de nombres y herencia; diferentes formas de lidiar con la memoria. Sé lo suficiente como para corregir algunos errores o hacer algunos cambios en su programa existente, pero no puedo imaginar escribir nada más que una simple utilidad en C o C ++. Sé lo suficiente para sobrevivir, pero no me considero "conocedor" de ninguno de esos idiomas.

Conozco otros 'programadores' (también desarrolladores) que ni siquiera te dirían la diferencia entre Java y FORTRAN, o Javascript y Pascal. Son buenos en lo que hacen y no hacen lenguajes de procedimiento.

Luego hay millones de programadores mediocres que apenas conocen el idioma con el que trabajan todos los días.

El término "diferencia" es ambiguo. He señalado lo que veo como algunas diferencias anteriores, pero sé que no son definitivas y completas. Muy pocas personas conocerán todas las diferencias; muchas más personas podrán dar algunas respuestas vagas (como yo) sobre la orientación a objetos.

Kirk Broadhurst
fuente
55
"Me costaría dar alguna diferencia real entre C y C ++". Ciertamente no eres un programador de C ++. ¿Por favor?
sbi
2
C y C ++ son lenguajes muy diferentes, codificados de formas muy diferentes. Claramente, simplemente no los conoces.
DeadMG
@sbi "No pinto a mí mismo como 'saber' cualquiera de esos idiomas." Te dejaré decidir eso por ti mismo.
Kirk Broadhurst
¿Algún comentario sobre los votos negativos? ¿Es porque no sé la diferencia entre los dos? No asumiría que eso me descalificaría para responder la pregunta.
Kirk Broadhurst
1
@KirkBroadhurst: Creo que indiqué qué parte de su respuesta no me gustó lo suficiente como para rechazarlo, y ese comentario fue votado cinco veces más seguido que usted fue rechazado después de eso, así que no estoy seguro de qué explicación está buscando. Sin embargo, para elaborar: el término "diferencia" es suficiente aquí, ya que C y C ++ comparten solo similitudes sintácticas superficiales y, aparte de eso, son lenguajes muy diferentes. En cuanto a las calificaciones: no creo que haya una calificación necesaria para responder aquí, pero cuando una respuesta es descaradamente errónea como esta, será rechazada irrelevante de la calificación.
sbi
-3

¿Es común que un programador no sepa la diferencia entre C y C ++?

¿Hace veinte años? Si.

¿Hoy? No tanto.

La razón de esto es porque el panorama de la programación ha cambiado a lo grande. Muchos de los programas actuales están basados ​​en la web; incluso los programas escritos para escritorios pueden estar escritos en un lenguaje de nivel superior que C o C ++. Como tal, a menos que sea un programador que escriba código del sistema operativo, es posible que no sepa mucho sobre ninguno de los dos idiomas.

Un entrevistador puede hacer esta pregunta en una entrevista para evaluar cuánto sabe sobre los fundamentos de la programación; si conoce la diferencia entre C y C ++, entonces probablemente sepa qué es la programación orientada a objetos, probablemente comprenda bibliotecas y compiladores, entienda las funciones de memoria, referencias, punteros ... muchas cosas que han influido en los lenguajes de programación de hoy . No uso mucho C ++ (y realmente no puedo decir que soy un excelente programador en ningún lenguaje; la sabiduría vendrá con el tiempo) pero puedo decir que mi experiencia con C ++ definitivamente me ha convertido en un mejor programador.

almuerzo317
fuente
8
Habría dicho lo contrario. Ahora veo más personas confundidas que incluso hace 5 a 10 años.
haylem
@Haylem Mirando hacia atrás, creo que quise decir lo contrario ... ¡Vaya!
lunchmeat317