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:
- Debido a que los lenguajes de alto nivel son fácilmente accesibles, más "no programadores" se sumergen y hacen un desastre
- 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.
fuente
Respuestas:
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).
fuente
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.
fuente
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
fuente
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.
fuente
All abstractions are leaky
declaración descaradamente falsa .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.
fuente
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.
fuente
¡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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
C tiene muchas ventajas:
fuente