Tengo una pregunta que creo que se puede responder mejor aquí.
Soy bastante bueno C++
, bueno, ya que me siento cómodo con el idioma, he leído Accelerated C++
y hecho casi todos los ejercicios.
Sin embargo, tengo un gran problema. ¿Necesito aprender C
? Nunca lo C
he hecho en mi vida. Acabo de empezar C++
cuando comencé con la programación. Probablemente porque siempre estuve interesado en saber por qué todos llaman al lenguaje tan complejo. Ahora, aunque sé la respuesta a esa pregunta;)
Estoy particularmente interesado en saber si puedo sobrevivir sin saberlo C
en el mundo de hoy. Por ejemplo, si doy una entrevista en una empresa, si les digo que no sé C
, ¿lo considerarán correcto? Los dos lenguajes con los que estoy bien es Python y C ++. Pregunto esto porque he oído que las empresas solicitan estructuras de datos en las entrevistas. Entonces, si me piden que lo implemente, y si lo hago en C ++, ¿es aceptable?
Y las personas que dicen 'cómo puedes no saber C cuando eres C ++', por favor no respondas :) Sin ofender, pero no entiendo por qué aprender C es un requisito previo.
Respuestas:
Si conoces C ++, no aprendería C solo por el simple hecho de hacerlo. No debería resultarle demasiado difícil aprender si y cuando lo necesita.
Prefiero conocer a alguien que dice que conoce C ++ pero no a C que a alguien que dice saber C / C ++.
fuente
Una respuesta de varias partes. Solo mis opiniones.
Mi experiencia (25 años fuera de la universidad) es que C ++, aunque cada vez es menos frecuente, seguirá siendo vital para sistemas interesantes en el futuro previsible. Así que me quedo con eso como mi principal área de especialización. El trabajo es duro, interesante e importante.
Los programadores de C ++ generalmente son valiosos precisamente porque no han crecido en lenguajes administrados y, por lo tanto, tienen más probabilidades de comprender lo que sucede debajo de las cubiertas. Es más fácil pasar de C ++ a C # / Java que viceversa porque la barra de entrada es más alta.
Entonces, aunque en mi opinión, no es esencial entender C para programar de manera competente en C ++, desarrollar una comprensión de por qué C ++ existe en el contexto de C - sus limitaciones y sus fortalezas y cómo se abordan o no en C ++ - sería invaluable para ti con el tiempo.
La mejor de las suertes.
fuente
aquí es lo que Bjarne tiene que decir:
fuente
Solo mi opinión personal: si conoce C ++, puede escribir en C. Alguna experiencia sería buena, pero esto no es un problema. Lo contrario no es correcto: el conocimiento de C no permite escribir en C ++, sin aprendizaje adicional. Nunca aprendí C, y lo uso cuando es necesario, sin ningún problema.
fuente
Bien, lo primero es lo primero: no, conocer C no es un requisito previo para aprender C ++. De hecho, puede ser un obstáculo.
En segundo lugar, esto es completamente situacional. Si necesitará o no saber C depende completamente de si el trabajo lo requiere. Si quieres ser un chico de sistemas integrados, entonces sí, aprender C te ayudará. De lo contrario, la mayoría de los trabajos no lo requieren. Si un trabajo necesita C, debería decirlo. Si no lo dice, probablemente no lo necesite. En lo que respecta a las estructuras de datos, nuevamente se trata de la empresa. Por lo general, una empresa dirá "Programamos en estos idiomas, escríbanos esta estructura de datos. Utilice el idioma que elija de la lista anterior". Si te piden que lo escribas en C, simplemente dices "No sé C, no dice en mi currículum que sé C, este trabajo no es para mí".
fuente
Pregunte si necesitan C (y esté dispuesto a aprenderlo o no si lo necesitan).
Espero que sí, si te están entrevistando / contratando para trabajar en C ++.
Si se trata de una pregunta de "estructuras de datos", puede preguntarles si quieren que demuestre el uso de contenedores STL o si (porque es una entrevista) quieren que implemente las estructuras de datos desde cero.
fuente
C es casi un subconjunto adecuado de C ++. Si no conoce C, entonces no conoce un subconjunto grande e importante de C ++. ¿Se tiene que aprender este subconjunto? No. C ++ es un lenguaje ridículamente grande y la mayoría de la gente elige un subconjunto y un programa con eso. No es necesario que conozca el subconjunto que es C. Especialmente, no es tan importante conocer la biblioteca estándar de C. Sin embargo, lanzaría una mirada muy sospechosa hacia cualquiera que no entendiera los conceptos básicos de C, como punteros, matrices y juegos de bits.
fuente
No, no necesitas hacerlo. Período.
Pero aprender cualquier nuevo lenguaje de programación es beneficioso a largo plazo. Aprender lenguajes basados en diferentes paradigmas de programación es aún más beneficioso. Ya sea un lenguaje OOP (Smalltalk o C ++), un lenguaje dinámico (Lisp, Clojure, Python), funcional (Lisp, Haskell, Erlang), concurrente (Erlang, Go, Algol 68, Smalltalk), o lo que sea (Fortran 03, Perl, Forth), otro paradigma nuevo y caído te llama la atención; aprender diferentes idiomas te ayuda a exponerte a múltiples líneas de pensamiento, cada una con sus propias fortalezas y debilidades para abordar la tarea en cuestión.
Fortran todavía domina la informática numérica, COBOL sigue siendo un pilar en las grandes compañías de seguros, Unix, BSD y Linux todavía se basan principalmente en C. El código antiguo no pierde su valor con la edad siempre porque no necesariamente se desgasta como dispositivos mecánicos que necesitan ser reemplazados con el tiempo. Por lo tanto, el lenguaje antiguo puede ser valioso en términos de empleabilidad en comparación con el lenguaje más moderno factor .
Del mismo modo que estudiar para convertirse en multilingüe en idiomas naturales (humanos) podría mejorar su capacidad de expresarse , lo mismo conlleva el mismo tipo de bonificación para los idiomas de computadora.
Entonces, si bien creo que es importante (con el tiempo) aprender a ser fluido no solo en múltiples idiomas, sino que es más importante ser fluido en múltiples paradigmas de programación.
Voy a hacer una copia de seguridad y decir que C ++ es un lenguaje rico y complejo, tomará años de exposición y práctica constante para llegar a ser verdaderamente fluido en todas sus sutilezas ricas (o feas).
Tómese su tiempo y seguir aprendiendo es el consejo más importante que puedo darle. Para que alguien más lo tome, le animo a leer la programación Teach Yourself Program de Peter Norvig en diez años .
fuente
Una respuesta muy breve a su pregunta es: depende en gran medida de sus necesidades. Algunas compañías confían principalmente en C, a veces como una reliquia (si C ya se había usado durante años allí). Otras compañías no tienen nada que ver con C. C es un lenguaje de nivel inferior que, por ejemplo, Python o Java, y mucha programación de aplicaciones puede no requerir ningún conocimiento de C. A diferencia de los lenguajes OOP, C requiere un marco mental diferente, por lo que Quiero decir que los programas están estructurados y organizados de manera diferente, y algunos aspectos más matizados deben tenerse en cuenta. En general, es beneficioso aprender ese idioma, incluso simplemente para expandir su mente, por así decirlo. Pero, una vez más, si las empresas se preocuparán depende de sus necesidades. Algunos pueden darle una opción de lenguaje, algunos pueden requerir Java, otros C ++, otros aún C, etc. ¿Puede sobrevivir? Sí hoy' El mundo tiene tantas áreas diferentes de programación que ni siquiera puede pasar por el código C. ¿Deberías aprender C? Yo diría que sí, independientemente de su uso posterior.
fuente
Algunas personas pueden no sentirse cómodas programando en C mientras conocen C ++.
Existe una estructura "protectora" alrededor de C ++ que contribuye a impulsar no solo la estructura sino también los algoritmos de un programa. Por ejemplo, la ayuda de la estructura y los algoritmos STL, el enfoque de programación orientado a objetos obvio, el con / destructor, la capa abstracta extraída que proviene de las plantillas ...
Si bien C es, dijo, más simple, obliga al programador a inyectar una estructura y algoritmos por sí mismo en la modelización del problema. Este es un aumento intenso de la libertad de programación.
Pero tiene un costo, ya que algunas personas necesitan una estructura más impuesta y crean un programa que tiende a ser exponencialmente más difícil de mantener a medida que crece. A menudo digo que el problema no es el lenguaje (C) sino lo que se hace con él.
Dicho esto, como reclutador, me complace entrevistar a alguien con fuertes habilidades en C ++, pero estaría aún más entusiasmado si tiene suficiente autonomía del lenguaje para desarrollar un proyecto completo en C.
Además, un buen programa en C implica buenas habilidades del sistema de desarrollo, ya que el lenguaje requiere (generalmente) una comprensión justa de los componentes del sistema para construir un sistema ejecutable eficiente.
fuente
Si se siente cómodo en C ++, no me preocuparía aprender C. C ++ tiene muchas mejoras sobre C (la capacidad de soportar RAII con constructores / destructores, contenedores de línea de base, flujos y cadenas son grandes).
Sin embargo yo sugeriría el aprendizaje de las
printf
yscanf
series de funciones para que pueda leer el código que utiliza ellos. Son bastante populares en C ++, por lo que es útil saber cómo se usan. No sugiero usarlos en su propio código sin una razón muy específica.fuente
El único momento en que necesita saber C es si se espera que produzca el código C. Si no, entonces no hay problema.
No he escrito C profesionalmente en los últimos 6 años más o menos; Hay muchos dominios de aplicaciones que son mejor atendidos por otros lenguajes (al menos desde el punto de vista de la productividad, si no del rendimiento) como Java o C # o Python. Ciertamente puede sobrevivir e incluso prosperar como desarrollador de software sin tocar C.
Si quieres aprender C por tu propio abuso, está bien. Dependiendo de cómo aprendió C ++ y cuán dependiente sea de las características específicas de C ++ (plantillas, tipos de referencia, STL, sobrecarga), puede que se agite un poco cuando se dé cuenta de que el 90% de las herramientas que hicieron tolerable la programación ya no están disponibles. Cosas como la administración de memoria en C requieren mucha mano de obra y son tediosas en comparación con C ++ o Java. También hay algunas incompatibilidades entre C y C ++, y con cada nueva versión de lenguaje, esa brecha se ampliará.
Todavía hay dominios de aplicación donde C es la herramienta adecuada para el trabajo: pequeño, rápido, sin mucha magia bajo el capó, y no es ensamblaje. Pero para el desarrollo general de aplicaciones (especialmente aplicaciones de escritorio guiadas por GUI), hay herramientas mucho mejores disponibles.
fuente
Creo que si te sientes cómodo con C ++, también lo estarás con C.
La principal diferencia entre ambos es que C ++ está limpio, orientado a objetos, C no :)
fuente
Conocer C le dará más información sobre la administración de memoria, etc. Podrías ir un paso más allá y aprender también lenguaje ensamblador, pero todo depende de lo que valga para ti.
También depende de si quieres programar en C o no. :)
fuente
Si esta bien...
En mi humilde opinión, ya que eres bueno
C++
, es suficiente ...Apuesto a que hay industrias que están buscando programadores de C ++ ... Pero una vez que te interesas, todo depende de las necesidades de tu proyecto ... Lo que sea que necesites debes aprender ... Puede ser Java, .Net o incluso C .. Si la compañía está lista para pagarle, solo aprenda ...
Si está en las primeras etapas de su carrera, los entrevistadores de IME tienden a analizar su actitud y la comprensión del lenguaje con el que se siente cómodo.
En lugar de aprender
C
por el bien, aprende C ++ un poco a fondo ... Mejora en lo que eres bueno ... Estoy seguro de que hay mucho que tendrás que aprender ... Para mí, siempre hay algo en C ++ que aprender ...: )fuente
Creo que lo más importante que debes saber sobre C son las diferencias entre C y C ++. Es probable que vea un código que tiene algo de estilo C en ella en algún momento, y no debe ser confundido cuando ves cosas como
malloc
,free
,printf
,fopen
, ofclose
. También debe saber cómo son similares y cómo son diferentes de sus contrapartes de C ++.También debe saber eso
<<
y>>
son operadores de desplazamiento a izquierda y derecha, no operadores de inserción. En C ++, donde puede sobrecargar los operadores, estos se han sobrecargado para realizar la inserción de la secuencia y cosas similares, pero aún se usan para cambiar números enteros.Asegúrese de comprender todas las características básicas que tiene C ++ que no se encuentran en C. Si lee stackoverflow.com lo suficiente, habrá visto muchas preguntas que involucran las diferencias en los lenguajes y los malentendidos de las personas sobre ellos.
También debe familiarizarse con el preprocesador C, que es casi lo mismo (y a menudo el mismo programa) que el preprocesador C ++. Saber cómo usarlo lo ayudará en C ++, pero se confía mucho más en C.
Una gran cosa que es difícil de tratar en C que tiene C ++ son los destructores. Esas cosas se pueden llamar por todas partes cuidando la liberación de recursos, pero en C tienes que hacer todo eso de manera más explícita. Es fácil para los programadores de C ++ olvidarse de hacerlo.
En cuanto a las entrevistas, si alguien le pide que escriba código para algún algoritmo general en C y usted hace algo como:
No creo que vayan a decidir que no sabes lo que estás haciendo porque no lo hiciste:
Y realmente no debería importarles si lo usó a
cout
menos que lo que están tratando de hacer que muestre es su capacidad para manejar la entrada y la salida, lo que C ++ facilita para los casos comunes.Si se encuentra en la posición de ser entrevistado para un trabajo que requiere C, debe ser sincero acerca de su falta de conocimiento de C fuera de su superposición con C ++. Probablemente entenderán que un buen programador debería poder hacer la transición a C desde C ++ con bastante rapidez.
Dicho todo esto, C no es un lenguaje tan grande. La biblioteca estándar es mucho más pequeña que la de C ++ y no es tan importante familiarizarse con las piezas más comunes, por lo que realmente no puede hacer daño aprenderla.
fuente