No sé C. ¿Y por qué debería aprenderlo? [cerrado]

58

Mi primer lenguaje de programación fue PHP ( jadeo ). Después de eso comencé a trabajar con JavaScript. Recientemente he trabajado en C #.

Nunca he visto idiomas de nivel bajo o medio como C.

El consenso general en la comunidad de programación en general es que "un programador que no ha aprendido algo como C, francamente, simplemente no puede manejar conceptos de programación como punteros, tipos de datos, pasar valores por referencia, etc."

No estoy de acuerdo. Yo sostengo que:

  1. Debido a que los lenguajes de alto nivel son fácilmente accesibles, más "no programadores" se sumergen y hacen un desastre
  2. Para realmente hacer algo en un lenguaje de alto nivel, uno necesita entender los mismos conceptos similares sobre los que la mayoría de los defensores de "aprender-bajo-nivel-primero" evangelizan.

Algunas personas necesitan saber C; esas personas tienen trabajos que requieren que escriban código de nivel bajo a medio. Estoy seguro de que C es increíble, y estoy seguro de que hay algunos programadores malos que conocen C.

¿Por qué el sesgo? Como programador bueno, honesto y hambriento, si tuviera que aprender C (por alguna razón imprevista), aprendería C. Considerando la multitud de idiomas que existen, ¿no deberían los buenos programadores centrarse en aprender lo que nos hace avanzar? ¿No deberíamos aprender lo que nos interesa? ¿No deberíamos utilizar nuestro tiempo finito para avanzar ? ¿Por qué algunos programadores no están de acuerdo con esto?

Creo que luchar por la excelencia en lo que haces es el rasgo determinista fundamental entre los buenos programadores y los malos.

¿Alguien tiene ejemplos del mundo real de cómo algo escrito en un lenguaje de alto nivel, como Java, Pascal, PHP o JavaScript, realmente se benefició de un conocimiento previo de C? Los ejemplos serían muy apreciados.

Stephen
fuente
@Stephen Oh, lo siento ... no entendí bien. (pero ves por qué necesitas aprender c / c ++, ¿verdad?)
ApprenticeHacker
1
@burningprodigy Sí, en el caso de que necesite hacer algo donde se requiera C / C ++, o tenga más sentido, por supuesto que aprendería C. Mi problema es con las personas que dicen que necesitas aprender C para poder efectivamente desarrollarse en lenguajes de alto nivel. Y eso es absurdo.
Stephen
@burningprodigy continuemos esta discusión en el chat
Stephen
¿Puedes darnos algún contexto (url) de donde "no puede manejar conceptos de programación como puntero ..."?
k3b
Si hubiera un idioma que quisiera poder aprender, sería Common Lisp, no C. Como desarrollador principal de C #, estoy bastante seguro de que me beneficiaría más. Ya tenemos punteros en C #. Principalmente, prefiero aprender más formas de abordar un problema que tratar de implementar mi misma solución de una manera más difícil. (Solo como una nota, estoy mintiendo a medias. He hecho algo de C, y sé que tiene sus ventajas. Solo quería dar crédito a un lenguaje increíblemente poderoso y expresivo que precedió a C en una década.)
Magus

Respuestas:

113

La ventaja de conocer C es que tienes una muy buena idea de cómo funciona una computadora. No solo cómo funciona su modelo de programación, sino cómo se presenta la memoria, y cosas así.

El único nivel debajo de C es el ensamblado hablado por una CPU en particular.

(Agregaría que saber C también le permite apreciar cuánto menos trabajo tiene que hacer en un lenguaje de nivel superior. Y es de esperar una apreciación del costo involucrado en trabajar en ese lenguaje de nivel superior).

Frank Shearar
fuente
12
Frank: Golpeaste el clavo en la cabeza. Entender cómo funciona una computadora, la administración y asignación de memoria junto con la idea de que puede apreciar aún más los lenguajes de alto nivel es la razón para aprender C.Tengo la suerte de que tuvimos que aprender C para implementar proyectos de clase, como implementar una capa TCP básica sobre UDP .
Chris
12
Sin embargo, estoy de acuerdo con esto: C te lleva solo unos pasos más cerca de las bases, no del todo al suelo. Ok, hay una cosa llamada diseño de memoria. Pero, ¿qué significa físicamente? ¿Entiendes cómo funciona la computadora si no entiendes la electrónica? ¿Mecánica cuántica? Y así. No estoy seguro de si hay una sola mente en el mundo que comprenda profundamente toda la cadena alimentaria desde un lenguaje de alto nivel, a través de C, hasta la mecánica cuántica.
Joonas Pulakka
14
Mi pregunta es ¿cómo puede beneficiarse saber cómo funciona internamente una computadora? Que estas ganando Apreciar lo que tienes ahora no es una muy buena razón para aprender un lenguaje de muy bajo nivel como C. Es como decir que debería aprender Fortran para apreciar lo que tengo ahora
TheLQ
18
@TheLQ Estoy sin palabras. ¿Cómo puede beneficiarse de saber cómo funciona internamente una computadora? Estás obteniendo una comprensión más clara de lo que estás haciendo, es lo que estás ganando. Más bien: estás aprendiendo qué es lo que realmente le estás haciendo a la máquina en primer lugar.
Frank Shearar
15
Voy a marcar esto como correcto, ya que parece ser la respuesta favorita. Dicho esto, realmente no me importa "cómo funciona una computadora" en un nivel fundamental, ya que realmente no me ayuda a desarrollar la próxima característica interesante de mi aplicación. Es como conducir un automóvil: soy muy bueno en eso, pero no me importa cómo funciona la presión del líquido de ruptura. Simplemente se detiene cuando toco el freno. Además, estoy seguro de que agradecería conducir un automóvil más si tuviera que andar primero en un caballo y buggy durante cinco años. No significa que soy incapaz de postular cuánto mejor están las cosas con el auto en lugar del buggy.
Stephen
72

No creo que ninguna de las respuestas aquí sea realmente lo que estaba buscando el OP, así que voy a presentar mi propia opinión.

Mira, soy un snob C sin complejos. Mi actitud es que si no sabes C, entonces, hasta cierto punto, realmente no sabes lo que estás haciendo como programador. Entonces, creo que soy el tipo de persona "parcial" de la que estás hablando aquí.

Sin embargo, en la práctica, saber si realmente sabe o no lo que está haciendo como programador no necesariamente le impide desarrollar software realmente increíble y útil utilizando herramientas de alto nivel. Quiero decir, el creador de Stack Overflow, Jeff Atwood, aparentemente ni siquiera conoce C, y sin embargo diría que Stack Overflow es una aplicación web bastante buena.

Si decides o no aprender C (o C ++, o ensamblaje) depende del tipo de programador que quieras ser. Si solo desea desarrollar aplicaciones web o aplicaciones empresariales geniales, está bien, no hay necesidad real de aprender C. Pero si realmente desea sobresalir en lo que hace, si desea trabajar en proyectos realmente geniales que impulsan el estado de la arte, entonces realmente necesitas tomarte lo suficientemente en serio como programador para entender realmente cómo funcionan las computadoras. Dado que C es esencialmente la lengua franca del sistema operativo, así como el lenguaje que potencia casi todo lo demás (desde el kernel de Linux hasta la mayoría de las máquinas virtuales de Java, los intérpretes de Python y Ruby, las bases de datos SQL, los servidores web y casi todos los controladores de dispositivos) , una comprensión íntima del idioma es muy útil.

Sin mencionar que conocer C (o C ++) abre una gran oportunidad para contribuir a grandes proyectos de código abierto que impactan a millones (o cientos de millones) de personas. ¿Desea trabajar para mejorar el intérprete de Python o el navegador web Chromium? Bueno, necesitas saber C para el primero y C ++ para el último.

Es por eso que comparar C con lenguajes naturales muertos como el latín o tecnologías obsoletas como el caballo y el carro es completamente incorrecto. Una gran parte de nuestra infraestructura de software del siglo XXI funciona con código C, por lo que C sigue siendo tan relevante hoy como siempre.

Entonces, si debes o no aprender C realmente depende de lo que quieras de tu carrera como programador.

Charles Salvia
fuente
55
No suenas tan presuntuoso. De acuerdo, tal vez un poco. :)
Stephen
77
Excelente respuesta Programé con éxito durante diez años sin aprender C y C ++, y podría haber seguido el resto de mi carrera sin haberlo aprendido. Pero desde que lo aprendí el año pasado, he escrito un mejor software, no solo en C ++, sino también en mis otros idiomas.
John M Gant
3
Aquí hay algunas cosas que el otro creador de SO tiene que decir sobre conocer C: joelonsoftware.com/articles/ThePerilsofJavaSchools.html joelonsoftware.com/articles/CollegeAdvice.html joelonsoftware.com/articles/fog0000000319.html
Isaac Kleinman
3
¿Por qué sería "completamente incorrecto" comparar C con el latín? Creo que es una excelente analogía. El latín está en todas partes a nuestro alrededor. El 58% del vocabulario en inglés está influenciado por el latín (directamente o por medio de otras lenguas romances). El latín también tiene la clave para entender nuestra cultura. La ley, la democracia, la religión, la infraestructura, la planificación urbana y una serie de otras áreas se remontan al Imperio Romano. Puede elegir ignorar C de la misma manera que puede ignorar el latín, pero nunca puede evitarlos. "El latín y el griego no son lenguas muertas. Simplemente han dejado de ser mortales". (JW McKail)
Anders Sjöqvist
2
@ AndersSjöqvist, estaría mal porque ya nadie habla latín, a pesar de que ha influido profundamente en el desarrollo de los idiomas modernos. Mientras que C se usa activamente y se usa en todas partes , en casi todos los sistemas operativos, máquinas virtuales, bases de datos o intérpretes. El latín es más bien, digamos ... Simula : un idioma mayormente muerto que ha influido profundamente en los idiomas vivos, pero que no se usa fuera de la academia.
Charles Salvia
12

Una regla práctica es que debe comprender al menos un nivel de abstracción por debajo del nivel en el que trabaja habitualmente. Tenga en cuenta que su intérprete PHP o JavaScript puede implementarse en C o C ++. Eventualmente, va a encontrar un error en el intérprete o incluso un error de tiempo de ejecución de C. Si no comprende C, estará limitado a enviar un informe de error al mantenedor, con la esperanza de que pueda reproducirlo y preocuparse por él, y luego girar los pulgares. Si conoce C, puede decirles exactamente dónde está el problema y cuál es.

Esto también significa que si trabaja en C / C ++, al menos debería poder leer el ensamblaje en su plataforma.

En cuanto a aprender C cuando lo necesita: mi observación es que la mayoría de los programadores pueden aprender Perl / Python / Javascript a pedido, pero el ensamblador / C / Lisp parece requerir mucho más tiempo, por lo que vale la pena aprender al menos algunos conceptos básicos antes de la necesidad surge

Charles E. Grant
fuente
99
Ok, "C / C ++" puedo vivir con (malditos abogados de idiomas). Y "Perl / Python / Javascript" es perfectamente razonable. Pero por el amor de Dios, ¿por qué "ensamblador / C / Lisp"? Eso es como decir "manzana / naranja / Barrack Obama". Esos tres idiomas no tienen nada que ver entre sí.
Jason Baker, el
@Jason, lo único que sugería es que a la mayoría de la gente le resulta más difícil aprender ese trío de idiomas sobre la marcha, por lo que podría valer la pena pasar un tiempo con los OP antes de que surja la necesidad inmediata de usarlos. La programación funcional y aritmética de punteros no tiene mucho en común, excepto que las personas parecen tener que mirarlos por más tiempo antes de que tengan sentido.
Charles E. Grant
No podría estar mas de acuerdo. Yendo hacia el otro lado, a niveles más altos de abstracción, el "chico / galón de TI de la oficina" que puede hacer al menos algo de programación generalmente será mejor que el que no puede.
Emmet
7

No estoy de acuerdo que es necesario aprender C primero , pero sí creo que debe aprender C con el tiempo . Todas las abstracciones tienen fugas y la comprensión de C facilita la comprensión de lo que realmente está sucediendo cuando se utiliza una abstracción elegante de alto nivel. Dicho esto, también creo que todos los programadores serios eventualmente deberían aprender a leer al menos ensamblador, por la misma razón.

Aprender estos conceptos de bajo nivel brinda una sorprendente capacidad de razonar sobre cosas de alto nivel. Por ejemplo, en C ++ y D, los argumentos predeterminados para las funciones virtuales están determinados por el tipo estático (tiempo de compilación) del objeto, no el tipo dinámico (tiempo de ejecución). Esto no tiene sentido a menos que comprenda cómo funcionan las vtables y las convenciones de llamadas y por qué sería extremadamente difícil implementar funciones virtuales de la manera opuesta.

dsimcha
fuente
2
Aprenda a leer un lenguaje ensamblador AN quizás. El problema es que tengo más de 10 familias de procesadores diferentes que uso y aprender todas las variantes es una receta para la confusión y el caos. Intente comparar AMD SHARC con Atmel AVR32 y TI MSP430.
u
@ Ian: Correcto. Idealmente, debe aprender el lenguaje ensamblador de cualquier arco para el que más se desarrolle. Para la mayoría de las personas, supongo que será x86 o ARM.
dsimcha 26/10/10
3
"todos los programadores serios eventualmente deberían aprender a leer al menos el ensamblador" Son comentarios como estos los que me ayudaron a comenzar con esta pregunta. Creo que simplemente está parcializado, señor. Aunque, me gusta lo que dijiste sobre las abstracciones con fugas. Eso tiene sentido. Por otro lado, estas cosas no hacen mucha diferencia en el "mundo real" en mi arena. Todavía estoy usando la abstracción de alto nivel, permeable o no.
Stephen
1
@Stephen, deberías intentar escribir un lenguaje ensamblador. Las CPU de 8 bits no son difíciles e intentar implementar la misma pequeña cosa tanto en 6502 (como el C64) como en Z80 (como las máquinas de negocios CP / M) es realmente muy educativo. experiencia debido a algunas diferencias de diseño muy básicas (página de índice versus registros).
+1 a pesar de la All abstractions are leakydeclaración descaradamente falsa .
Thomas Eding
7

El sesgo es uno de status quo. En los viejos tiempos (1980 y antes), C / C ++ era prácticamente un requisito para las aplicaciones de rendimiento. Eso ha cambiado, pero los desarrolladores senior generalmente provienen de ese fondo antiguo y ven las cosas en ese contexto.

Para el desarrollo real, se utilizan otros lenguajes : C # es popular, al igual que Java, mientras que PHP y Python son populares para proyectos internos y siempre es útil tener a mano a alguien con al menos conocimientos básicos en esa área en caso de que elija una aplicación abierta. proyecto PHP fuente para, digamos, su sistema de seguimiento de errores. Sin embargo, las especificaciones de trabajo todavía parecen provenir de esa plantilla estándar que se escribió hace 25 años.

JohnL
fuente
66
"Las especificaciones de trabajo todavía parecen provenir de esa plantilla estándar que se escribió hace 25 años". No podrías estar más correcto.
Stephen
¡Felicidades John!
Mark C
6

Por mucho que odie publicar la publicación obligatoria del blog de Joel, estoy de acuerdo con él aquí . C es la lengua franca de la programación. No puedo pensar en ningún lenguaje de alto nivel que no pueda interactuar con él de alguna manera. Debido a eso, C sigue siendo una opción popular para el tipo de programación de sistemas. Simplemente no puede interactuar con algunas cosas a nivel de sistema operativo sin C.

Además de eso, ¿qué planeas hacer cuando tu lenguaje de alto nivel no es lo suficientemente rápido? Saber cómo escribir C es especialmente importante cuando estás usando un lenguaje de alto nivel, escrito dinámicamente como Ruby, Python o PHP. Pero incluso los programadores de Java y C # necesitan bajar a C de vez en cuando.

Jason Baker
fuente
jajaja Consejo de Joels en la columna vinculada: "Sería mejor ignorar lo que digo aquí y, en su lugar, crear algún tipo de software en línea que permita a otros estudiantes encontrar personas con las que salir".
Stephen
3
@Stephen: si quieres que la gente realmente se fije en ti, haz que paguen.
Fred Nurk
@ Fred Gran consejo, jajaja.
Stephen
6

¡Qué gran fiesta de babosas! (Como supuestamente dicen: ¿Es esta una pelea privada, o alguien puede unirse?)

Yo era profesor, y lo que encontré (después de una prueba y error) fue que era mucho más fácil guiar a los estudiantes a través de los intrincados conceptos de programación si entendían, a nivel básico, lo que estaba haciendo una computadora. No en todos los detalles, pero el principio básico, como qué es la memoria, qué instrucciones son, etc. Lo que me gusta de C es que está cerca de la máquina.

Eso no quiere decir que otros maestros vinieron al mismo lugar. Comenzaron en el lenguaje de alto nivel (BÁSICO :-) y avanzaron desde allí, sin efectos negativos evidentes.

Así que, Stephen, podrías tener razón. No lo creo, pero me he equivocado antes.

Mike Dunlavey
fuente
4

Supongo que esto es progreso.

Hace veinte años, la sabiduría convencional era que tenía que aprender ensamblador para comprender lo que estaba obteniendo de los lenguajes de nivel superior como el C (por eso tuve que tomar una clase de ensamblador en la universidad usando VAX Macro; adivina lo útil que es resultó ser al graduarse).

Existe la superstición de que debido a que C es algo difícil de aprender y que casi no proporciona abstracciones (los punteros y las secuencias de bytes son básicamente eso), aprenderlo de alguna manera lo convertirá en un mejor programador o le dará una mejor idea de cómo funcionan las cosas en el hardware nivel.

Esto no necesariamente es cierto. El estándar C no te acerca más al metal que cualquier otro 3GL (Pascal, Fortran, etc.). Algunas implementaciones de C pueden proporcionar ganchos que le brindan un mayor acceso a algunas áreas, pero en general, los punteros desnudos están lo más cerca posible, lo que no está del todo cerca. No puede acceder directamente a registros o palabras de estado, por ejemplo.

Al final, todo se reduce a códigos de operación y modos de direccionamiento, por lo que si realmente está interesado en cómo funcionan las cosas en el nivel inferior, será mejor que aprenda ensamblador sobre C.

Por sí solo, aprender C no (necesariamente) te convertirá en un mejor programador. Sin embargo, definitivamente le dará una apreciación de los tipos de cadenas reales y las bibliotecas de contenedores estandarizadas.

John Bode
fuente
Supongo que "aprecio" es una forma de decirlo. En mi clase de programación de la escuela secundaria, se trataba principalmente de "Necesito usar esta función. ¿Cómo convierto un LOLOMGCHAR * en un WTFBBQCHAR *?"
Katana314
Creo que C fue fácil de aprender. al menos fue para mí solo leyendo Kernighan y Ritchie.
robert bristow-johnson
2

Un lenguaje es una herramienta. Si solo tiene que escribir páginas web y similares, estoy seguro de que puede escapar sin tener que aprender C, de la misma manera que si solo hace kits de modelos de plástico, solo necesita un cuchillo afilado y pegamento, un La llave no se requiere normalmente.

Escribo código para sistemas embebidos con recursos de memoria altamente restringidos (el más grande que he hecho recientemente es 16kbytes y fue ENORME) En este mercado, entonces C o ensamblador son las únicas opciones y ninguno de los lenguajes esponjosos de nivel superior simplemente no funciona.

uɐɪ
fuente
1
Eso es genial ... Pero no todos hacen eso. La implicación parece ser que las personas que no escriben para sistemas integrados solo están jugando y no están haciendo un desarrollo serio, al menos, tomando la analogía de su modelo en el contexto de sus sistemas integrados. Claramente, ese no es el caso y es posible escribir aplicaciones de producción a gran escala sin tocar C.
JohnL
Por supuesto, es posible escribir aplicaciones de producción a gran escala sin acercarme a C. Escribí el código durante 10 años antes de poder usar C. Usé PL / M, Pascal, ADA y ensamblador. Estos fueron fácilmente tan buenos como C para aprender la mecánica subyacente de la máquina, y a menudo mejores para producir código libre de errores.
u
Genial, aunque su respuesta anterior no me dio la impresión de que pensaba de esa manera, de ahí mi respuesta ...
JohnL
¿Tiene alguna experiencia con los motores de Java destinados al uso integrado?
2

En mi experiencia, durante un tiempo C / C ++ fue un buen buffer que separó a los buenos programadores de los codificadores VB6. Después de hacer cinco años impares de C / C ++, conseguí un trabajo trabajando en VB6. Me sorprendió la calidad (o falta de ella) de los codificadores. Tenían poco interés en las entrañas del lenguaje, en el diseño o en el rendimiento. Desafortunadamente, cuando la compañía se mudó a .Net, los codificadores C / C ++ y los codificadores .Net estaban usando las mismas herramientas. Los codificadores VB eran aún peores codificadores VB.Net. La situación empeoró cuando todo el desarrollo fue a ASP.NET. De repente, cualquiera que pudiera arrastrar y soltar un control era un programador.

Sin embargo, en el mercado laboral, no había mucho para diferenciar a los codificadores de núcleo duro (ex C / C ++) y los turistas.

Como tal, tener C o C ++ en su currículum puede ayudarlo a diferenciarse del riff-raff.

Dave
fuente
2

Procoativamente preguntó: ¿Está solicitando confirmación de que no tiene que aprender C? Si aprende C puro (no necesariamente C ++) obtendrá un conocimiento profundo del modelo de ejecución de una computadora. Especialmente sobre memoria y asignación. Esto también es importante para las personas que programan en idiomas de nivel superior.

Para un programador PHP es menos transparente cómo se ejecuta el código en la máquina dada. Puede que no le importe al programador PHP ya que la transferencia de red es el cuello de botella en la aplicación, etc.

PHP / Python / C # simple tiene muchas capas de abstracción entre el lenguaje y la CPU. Estas capas son tan gruesas que no te permiten mirar a través de ellas. Cuando aprende C, hay una hoja delgada entre usted y la CPU y el sistema operativo. Eso no facilita la programación (y puede que ni siquiera sea mejor). Pero en realidad puedes aprender cómo funciona la CPU. Una vez que conoce el C "intermedio", puede comenzar a vincular ese conocimiento hacia arriba al lenguaje de nivel superior. Este es el beneficio inmediato que obtendrá.

En mi opinión, un programador siempre debe pasar algún tiempo aprendiendo diferentes conceptos de programación. Definitivamente vale la pena echarle un vistazo a C, pero también echar un vistazo a los lenguajes de programación de nivel superior, como Clojure, Haskell, Prolog.

No tiene que convertirse en un maestro en estos, solo le enseñarán la lección de que los "niveles" de los lenguajes de programación no son binarios, pero hay muchos niveles. Conócelos, de arriba a abajo (ensamblador). Te hará un mejor programador.

wirrbel
fuente
2

Necesita saber suficiente C para leer el código escrito en C, debido a la gran cantidad de código muy importante escrito en el lenguaje. Eso es todo lo que retendrá de leer bien un manual completo sobre el tema (usé la "programación en C" de Kochan) sin tener que codificar en el lenguaje, de todos modos. Si alguna vez terminas en una situación que requiere que uses el lenguaje ampliamente, tendrás una buena base para construir. Probablemente quiera estudiar algo como el libro de Duntemanns Assembly si la máquina es un cuadro negro para usted. También recomiendo el "Código" de Petzold.

Fuera de eso, alfabetización básica en C y familiaridad básica con la máquina subyacente, sería mejor que pases tu tiempo de estudio en cosas reales, como SICP, TCP / IP Illustrated o libros sobre Matemáticas concretas, algoritmos o estructura de datos . Las cosas de verdad.

Pasar mucho tiempo estudiando C mientras codifica en PHP simplemente no vale el costo de oportunidad. Hay más cosas útiles para aprender. C realmente es solo otro idioma que puedes aprender bien solo a través del estudio y el uso, pero que puedes aprender cuando lo necesites.

Sudar las cosas duras.

revs naftalimich
fuente
1

C es el lenguaje que se usa para escribir otros idiomas. Le permite tener la intimidad con la CPU y otro hardware que desee.

Si no conoce C, no sabe cómo otros lenguajes logran los resultados que obtienen.

La abstracción es un concepto importante, por supuesto, y no todos necesitan saber cómo su marco de elección está logrando los resultados que promete. No necesita pasar 20 años escribiendo C, o de hecho pensando en lo que sucede con sus vtables cuando usa herencia múltiple, para escribir un buen código.

Ahora, puede conducir un automóvil sin comprender cómo funciona un motor de 4 tiempos o, de hecho, sin poder usar un cambio de palanca (caja de cambios manual).

Sin embargo, si comprende lo que sucede debajo del capó, de vez en cuando podrá lograr resultados excepcionales que alguien sin ese conocimiento tendrá dificultades para replicar.

Bill Michell
fuente
1

C (y posiblemente C ++) es el mar en el que está nadando. El sistema operativo que ejecutará su código probablemente esté codificado en C (y C ++). Entonces su API nativa para acceder a los servicios del sistema operativo estará en C.

Si puede hacerlo sin saber qué hay debajo, no es necesario saber C. Sin embargo, la mayoría de los programadores necesitan sumergirse en niveles más bajos en algún momento de sus vidas.

También se basa en su especialización de áreas de desarrollo. Por ejemplo, un desarrollador web que escribe HTML, Javascript y algunas secuencias de comandos del lado del servidor puede que nunca necesite saber nada sobre C, pero un desarrollador de sistemas o juegos distribuidos sí.

Nunca está de más pasar unas semanas aprendiendo algo tan fundamental para su profesión.

Mert Akcakaya
fuente
1

C tiene muchas ventajas:

  1. C es un lenguaje de bajo nivel. Puede usar c para desarrollar kernel y driver.
  2. C es el lenguaje más rápido. C. Por ejemplo: memcached, redis, nginx, apache, mysql, etc.
  3. C es un lenguaje multiplataforma. El programa desarrollado por c puede ejecutarse en todas las plataformas. Otros lenguajes multiplataforma no pueden hacer esto. Java, python, php, etc. no se pueden ejecutar en la plataforma iOS.
  4. C ++ no puede ejecutarse en muchos sistemas integrados.
Edward Shen
fuente