¿Está bien si no conozco C pero soy bueno con C ++? [cerrado]

23

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 Che 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 Cen 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.

SS
fuente
1
El artículo citado por DumbCoder trata sobre la popularidad de C en la programación integrada.
ChrisW
2
@ChrisW - Sí, pero todavía muestra que C no es tan fácil de dominar, no es que C ++ sea fácil de dominar.
DumbCoder
@DumbCoder: Oh no, programación incrustada. ¿Cuántos trabajos hay integrados en comparación con el escritorio?
DeadMG
@DeadMG: dominar un idioma no tiene nada que ver con la cantidad de trabajos disponibles para ese idioma. ¿Y de dónde sacaste la idea de que C solo se usa en la programación integrada?
DumbCoder

Respuestas:

36

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

CB Bailey
fuente
Oh si. Es la lista de elementos primero en la pregunta SO sobre los mitos urbanos de C ++: stackoverflow.com/questions/2245196/c-urban-myths
44
+1. Si conoces C ++, para empezar, es una molestia aprender C, y en segundo lugar, no es realmente importante.
DeadMG
66
@DeadMG Puede ser fácil aprender la sintaxis, ya que eso es solo saber qué partes de C ++ dejar de lado, pero aprender los modismos comunes es más difícil y posiblemente la parte más importante. Pero no aprendería C a menos que fuera necesario.
KeithB
66
@chubsdad, ¿quieres decir que no debería poner "Sé Java / Javascript" en mi CV?
Incógnito
@ user257493: No existe tal cosa como Java / Javascript
John Dibling
23

Una respuesta de varias partes. Solo mis opiniones.

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

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

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

Steve Townsend
fuente
¿Qué te hace decir que C ++ es cada vez más infrecuente? En su experiencia, ¿qué lo está desplazando?
Praxeolítico
13

aquí es lo que Bjarne tiene que decir:

Saber C es un requisito previo para aprender C ++, ¿verdad?

Incorrecto. El subconjunto común de C y C ++ es más fácil de aprender que C. Habrá menos errores de tipo para atrapar manualmente (el sistema de tipo C ++ es más estricto y más expresivo), menos trucos para aprender (C ++ le permite expresar más cosas sin circunlocución) , y mejores bibliotecas disponibles. El mejor subconjunto inicial de C ++ para aprender no es "todo C".

Chubsdad
fuente
4

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.

Alex F
fuente
3
@Alex Farber - "Si conoces C ++, puedes escribir en C". Dudo mucho que :)
DumbCoder
44
Discrepar. IME, los programadores que aprenden C ++ primero tienden a no darse cuenta de las características de C ++ que C no tiene. Los programadores que aprenden C primero pueden escribir fácilmente en C ++, pero comienzan de forma no idiomática.
dan04
1
Esto se basa en mi experiencia personal. Aprendí C ++ y aprovecho al máximo mi trabajo en C ++. Pero uso C cuando es necesario, sin ningún problema.
Especialmente dado que todas las bibliotecas de clase lindas no están disponibles en C. Imo, la victoria de lenguajes como C ++ y Java son las bibliotecas, no las características del lenguaje inherentes per se.
8
Los programadores de C ++ que intentan abrirse paso a través de C escriben código incorrecto por las mismas razones por las que los programadores de C ++ intentan hackear su camino a través de C ++ escriben código incorrecto. Los chicos de C usan C ++ como "C con clases", mientras que los chicos de C ++ usan C como "C ++ sin clases".
John Dibling el
4

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

Stephen
fuente
¿Por qué conocer C es un obstáculo para aprender C ++? No estoy diciendo que no esté de acuerdo necesariamente, pero esta es una declaración audaz.
Casey Patton
3

Por ejemplo, si doy una entrevista en una empresa, si les digo que no sé C, ¿lo considerarán correcto?

Pregunte si necesitan C (y esté dispuesto a aprenderlo o no si lo necesitan).

Entonces, si me piden que lo implemente, y si lo hago en C ++, ¿es aceptable?

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.

ChrisW
fuente
2

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.

frankc
fuente
2

¿Necesito aprender C?

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.

Soy bastante bueno con C ++, bueno porque estoy cómodo con el lenguaje, he leído C ++ acelerado y he hecho casi todos los ejercicios.

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 .

revs mctylr
fuente
1

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.

usuario400348
fuente
1

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.

Ø de anillo
fuente
No diría que aumenta la libertad del programador: siempre puede escribir su propia estructura y algoritmos en C ++.
DeadMG
0

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 printfy scanfseries 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.

Mark B
fuente
0

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.

John Bode
fuente
-1

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 :)

Nuno
fuente
1
Soy un gran admirador de C ++, pero no lo llamaría limpio. Y C ++ es multi-paradigma, lo que significa que un buen código de C ++ no está necesariamente orientado a objetos.
KeithB
-1

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. :)

Alexander Liberson
fuente
-1

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 Cpor 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 ...: )

liaK
fuente
-1

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:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

No creo que vayan a decidir que no sabes lo que estás haciendo porque no lo hiciste:

struct foo x;

Y realmente no debería importarles si lo usó a coutmenos 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.

nategoose
fuente