¿La experiencia de C # se traduce bien a C ++? [cerrado]

13

Mis clases de programación en la escuela eran C ++, pero terminé trabajando en C # durante los últimos años. Si hubiera un puesto que requiriera una experiencia de 1 o 2 años en C ++, ¿merecería la pena considerar mi experiencia en C #? ¿Qué tan efectivo podría ser en tal posición? Entonces, ¿debo comenzar como un programador de C ++ de nivel básico para obtener la experiencia necesaria?

MetaGuru
fuente
44
La parte más difícil será aprender los modismos de C ++ y la forma "correcta" de hacer las cosas. En C #, cosas como la gestión de la memoria y la comprobación de límites están integradas en el lenguaje y el marco. En C ++ hay muchas más formas de dispararte en el pie.
Robert Harvey
1
@RobertHarvey: solo si nunca has oído hablar de punteros inteligentes. O contenedores.
DeadMG
11
@DeadMG: No sé a qué te refieres con eso. Incluso si has oído hablar de ellos, todavía tienes que aprenderlos.
Robert Harvey
2
La serie C ++ efectiva es mucho más alucinante que la serie C # efectiva.
Trabajo
@Robert: Bueno, si haces contenedores y punteros inteligentes, entonces no tienes que administrar una gran cantidad de memoria. Y aprenderlos es C ++ 101.
DeadMG

Respuestas:

13

El problema aquí es que C ++ y C # son, fundamentalmente, lenguajes extremadamente diferentes con diferentes enfoques para muchos problemas. Es fácil agruparlos como "Un lenguaje OO", pero el simple hecho es que muchos modismos de C # se consideran código muy malo en C ++ (y viceversa).

Si realmente conoce las diferencias y cómo se ven los modismos de C ++, entonces no veo ninguna razón para que no esté bien.

DeadMG
fuente
5

Estuve en el mismo barco hace unos 2 años. Su experiencia en C # probablemente no valdría tanto para un trabajo en C ++ como lo es para ++. Dicho esto, si sabes cómo funciona realmente C # (muy pocos programadores de C # realmente lo hacen), y aprendiste bien tu C ++, entonces el problema no será C ++. El problema será la forma en que se haya acostumbrado a ciertos patrones de diseño que tendrán un nivel demasiado alto para c ++.

Por ejemplo, pasar del buen modelo de acceso a datos ADO.NET a usar cppcon para acceso mysql, System.Collections.Generic a usar stl, herencia múltiple, recolección de basura para limpiar su memoria en destructores, etc. ser transiciones difíciles C ++ no es el problema, aprender las bibliotecas, los patrones de diseño y cómo usarlos es el desafío. La mayoría de los reclutadores no se dan cuenta de esto. Si puede hacer un diseño básico y puede usar las características comunes de c ++, entonces debería estar bien en la entrevista.

Sin embargo, listo para el trabajo es una historia diferente. Sin embargo, es un desafío divertido, espero que todo salga bien.

Jonathan Henson
fuente
Todos los trabajos de C ++ que veo requieren 2-3 años de experiencia en C ++ pero el mío está en C #. Esto es realmente frustrante para mí, ¡quiero hacer C ++! Tienes razón sobre el reclutador, me dispararon. ¿Cómo puedo obtener esta experiencia si nadie me deja probar? Estoy seguro de que si alguien me deja entrar podría aprender rápidamente, simplemente no sé cómo puedo comunicarme con ellos.
MetaGuru
Salté a un proyecto de C ++ en mi trabajo actual. Esa es probablemente tu mejor apuesta. O bien, siempre puede obtener un proyecto de código abierto que esté en c ++.
Jonathan Henson el
@Ryan Como dijo Jonathan, hay muchas maneras de adquirir experiencia en C ++. Al menos de donde soy, tienes que demostrar que tienes experiencia (en lugar de la declaración popular; tener 1 año de experiencia cinco veces más). Esto funciona en ambos sentidos: alguien sin mucha experiencia "en papel" puede tener la oportunidad de probarse a sí mismo también. ¡Solo asegúrate de conocer C ++ antes de intentarlo!
Max
3

No puedo hablar por cada empleador, pero personalmente considero que la programación es específica de la habilidad y el lenguaje como algo agradable. Todavía es bastante posible que lo contraten en otro trabajo de programación que no sea su habilidad principal.

Dicho esto, es muy poco probable que contrate a alguien que no tenga absolutamente ninguna experiencia en el idioma para el que lo estoy contratando. Pase algunos fines de semana aprendiendo y tenga un par de proyectos favoritos para reforzar su CV. Incluso los más pequeños demuestran que eres capaz de aprender y ser entusiasta.

Tom Squires
fuente
3

Estás exactamente en la misma situación en la que estuve hace 4 años.

Hice algo de C ++ durante mis estudios, pero lo odiaba. Hice un montón de desarrollo web cuando pude en mi tiempo libre y conseguí un trabajo en ese campo.

Cuando me mudé, solicité un trabajo en C ++ que tenía 2 años de experiencia en C ++ como requisito. Bueno, actualicé mis recuerdos de C ++ antes de la entrevista y cuando llegó el momento de las pruebas me las arreglé para salir con algunas cosas que no estaba tan seguro de estar haciendo bien.

Pero la mayor parte de la entrevista fue sobre resolución de problemas y soluciones creativas y C ++ terminó siendo solo un factor menor.

Por lo tanto, las posibilidades realmente dependen del empleador y de los puestos que tienen.

Si está pasando por una agencia de reclutamiento, "probablemente" se le dirá que su perfil no coincide. Pero con un empleador real, sus posibilidades son mucho mejores, ya que realmente saben lo que necesitan.

Coyote
fuente
1
solo asegúrese de saber qué es un destructor virtual para que pase la pantalla del teléfono.
Kevin
2
Como dijeron los demás, asegúrese de recordar los pocos conceptos básicos de la administración de memoria en C ++. Es la diferencia fundamental. De lo contrario, en relación con las bibliotecas y los marcos La mayoría de las empresas (grandes) tienen sus propias bibliotecas y contenedores, por lo que no esperan que conozca sus implementaciones. Contrariamente a C #, donde la mayoría de las bibliotecas de alto nivel están respaldadas en el marco .net y el requisito será conocer un conjunto de bibliotecas relevantes para el puesto.
Coyote
¿Entonces conseguiste el trabajo? Realmente me gustaría pasar a hacer C ++, pero mi falta de experiencia documentada está cerrando puertas, de lo contrario no estoy seguro de cómo construirlo.
MetaGuru
Sí ... Trabajé allí durante 3 años. Fue una gran experiencia ... pero tuve que ponerme al día con las particularidades de C ++ los primeros meses.
Coyote
1

Depende. Si puede responder algunas preguntas básicas de la entrevista sobre punteros y demás, entonces debería estar bien.

También es beneficioso si puede enumerar las diferencias entre las plantillas de C ++ y los genéricos .NET.

Aparte de eso, es bastante fácil ponerse al día con el resto a medida que avanza.

Ñame Marcovic
fuente
1

Si. Puede que no sea tan relevante como la experiencia en C ++, pero es bueno.

Los buenos empleadores estarán interesados ​​en cómo piensas , más que en cuántos años de un idioma específico tienes.

Un puesto de nivel básico en C ++ está bien: puedes aprender rápidamente y hacer un gran trabajo. Una buena compañía te dará muchas oportunidades para crecer. Si no, puedes ir a otro lugar y tener experiencia en C # y C ++.

B Seven
fuente
0

Realmente depende de la naturaleza del negocio al que se postula. Si están buscando a alguien que tenga buenas habilidades de programación y arquitectura basadas en OO, es probable que C # sea tan bueno como lo siguiente.

Si se enorgullecen de la velocidad / capacidad de respuesta de su software, entonces necesitará conocer sus algoritmos, ya que esto es más importante que las micro optimizaciones: tablas de hash versus búsqueda lineal, etc. C # sigue siendo relevante aquí, pero necesitaría para demostrar la comprensión de las características de rendimiento; por ejemplo, no todos conocen ngen.exe.

Si están en un entorno integrado / móvil y / o no recolectado, realmente necesita saber cómo administrar la memoria de manera efectiva. Los punteros inteligentes, como señaló @DeadMG, son clave aquí, pero también lo es comprender el perfil de asignación de memoria. Los programadores de juegos a menudo preasignan grandes conjuntos de objetos y los reciclan para conocer los requisitos de memoria por adelantado y reducir las incógnitas por cuadro. Esta es también la técnica utilizada en el desplazamiento de TableViews en iOS.

Si hay algún trabajo de integración, es probable que necesite experiencia de nivel C en términos de cálculo de datos entre idiomas (como P / Invoke), pero también comprensión de nivel de byte de cómo se pueden usar estas estructuras de datos, lo cual no es una práctica común en C # en mi experiencia.

JBRWilkinson
fuente