¿Por qué las universidades enseñan lenguajes de programación obsoletos como C? Sé que es el lenguaje básico y los programadores solo necesitan lógica para diseñar un programa, pero ¿no podemos simplemente incorporar todos esos conceptos básicos en algún lenguaje nuevo como Python o C ++?

En primer lugar, permítanme decir que C no está desactualizado …

El sistema operativo que se ejecuta en su computadora, a través del cual está viendo esta respuesta, está escrito en gran parte en C. Los enrutadores a través de los cuales viaja el HTML desde el centro de datos de Quora a su computadora están codificados en C. El compilador Just in time que cualquier nivel alto un lenguaje como Python invoca cuando ejecuta un programa en el que está escrito en C. Los controladores de dispositivo en su computadora también están escritos en C. La mayoría de los motores de juegos usan C para implementar gráficos complicados. Casi todos los dispositivos integrados están programados en C. Además, nos estamos moviendo hacia el “Internet de las cosas” y la importancia de C va a ser aún mayor. Por lo tanto, C no está desactualizado y no va a ninguna parte.

De vuelta a tu pregunta,

Aprender C te hace entender cómo una computadora hace las cosas adentro, mientras que lenguajes como Python te dan una visión abstracta.

Por ejemplo, en C, debe declarar el tamaño de una matriz de antemano. A veces, la matriz se llena pero desea agregar más elementos.

Para hacerlo, necesita reservar de alguna manera más espacio justo al final de la matriz, si está disponible, y solo entonces, puede expandir la matriz. Así es exactamente como lo haría una computadora, por dentro.

En Python, puedes seguir mágicamente agregando elementos a tu matriz. Hace tu vida más simple pero no te da una visión real.

En C, dado que tiene una vista de nivel tan detallada, puede hacer hacks para mejorar su complejidad de tiempo y espacio.

Por lo tanto, aprender C es tan importante como aprender Python, porque como estudiante uno debe entender cómo funcionan realmente las cosas.

Pero estoy de acuerdo, que se debe prestar más atención (que el presente) a lenguajes como Python y Java, porque con C, un principiante realmente no puede crear ningún software del mundo real como sitios web o aplicaciones móviles, y ganar interés en la programación.

Los principiantes pueden usar C solo para encontrar si una cuerda es un palíndromo. Además, no tienen idea de cómo “encontrar si una cadena es un palíndromo” podría ser útil de alguna manera.

Hubo una respuesta brillante que leí en algún lugar hace un tiempo, en respuesta a una declaración similar sobre C siendo viejo y anticuado. Olvidé dónde lo encontré originalmente (¿fue Quora? Muy bien podría haber sido), así que lo parafrasearé aquí en lugar de publicar un enlace:

Decir que C está desactualizado es un poco como decir que la potencia de vapor está desactualizada. Puede pensar: “Por supuesto, la energía de vapor está desactualizada … Tenemos generadores eléctricos y motores y servos eléctricos y otras cosas en estos días que son mucho mejores que las torpes máquinas de vapor de hace cien años. La era del vapor La locomotora que circula por el ferrocarril y las máquinas de vapor que alimentan nuestra maquinaria pesada es solo un recuerdo desvaído del pasado “.

Ahora piensa para ti mismo cómo se genera esa electricidad:

Fuente: Archivo: BalNPP m st2.jpg

Esta es una turbina de vapor en una planta de energía nuclear. Para generar energía, una planta de energía nuclear (así como muchos otros tipos de plantas de energía) funciona fundamentalmente hirviendo agua y haciendo funcionar el vapor resultante a través de una turbina, como esta, para girar imanes e inducir corriente eléctrica en una bobina. Esa electricidad, a su vez, se transmite a su hogar, donde fluye a través de su cable de alimentación y alimenta la computadora que usa para leer esta respuesta. Y resulta que el mecanismo que le da su preciosa electricidad y alimenta sus motores, televisores y computadoras … es una máquina de vapor. ¡Steam no está desactualizado en absoluto! De hecho, sigue siendo muy responsable de ejecutar todas las tecnologías “modernas” que utilizamos.

Del mismo modo, C tampoco está desactualizado. Puede ser una tecnología “antigua” como el vapor, pero eso no dice nada sobre su utilidad o aplicabilidad actual. El hecho de que haya existido por un tiempo solo significa que ha sido probado y funciona . Al igual que Steam, C es responsable de ser la tecnología subyacente que impulsa fundamentalmente toda nuestra preciosa tecnología moderna … todas nuestras Pitones, Perls y Javas. Sin C ni siquiera tendríamos nuestros sistemas operativos para ejecutar esos otros lenguajes “modernos”. ¿Lo entendiste? Sin C, no tendrías Windows, OS X, Linux … Cuando la JVM o el intérprete de CPython o el intérprete de Perl instancian o destruyen un objeto, ¿de dónde crees que proviene el código que maneja esa asignación de memoria? Alguien antes de que escribieras esa rutina … en C!

Si alguien encuentra la fuente original de la analogía de la potencia de vapor / C para mí, estaría eternamente agradecido. 🙂

Las respuestas aquí son acertadas.

C te enseña cosas, Python te permite hacer cosas.

Si aprende C, puede hacer Python, pero no al revés.

Si comienza con C, los lenguajes parecen triviales, casi pseudocódigo. Creo que todos deberían intentar dominar C.

Es como nunca aprender a sumar porque tienes una calculadora. En una ocasión muy muy muy rara, es posible que tenga que agregar a mano, pero lo más probable es que no. Sin embargo, el conocimiento de lo que sucede detrás de escena de la calculadora puede mejorar la productividad. Además, no tener que usar una calculadora puede hacer que trabajes un poco más rápido.

Porque, C no está desactualizado.

Si desea crear tecnología de punta, necesitará C.

Necesita C para tener un excelente rendimiento en tiempo real. Esto es absolutamente obligatorio si desea crear sistemas que puedan sostener millones de transacciones en tiempo real.

Necesita C para aprovechar al máximo los recursos de su sistema. Dado que, si se construye correctamente, C puede reducir el consumo de memoria en el mismo sistema al menos en un 1000%.

Hoy, la mayoría de los sistemas compilan, PHP, código Python a C, de lo contrario, escriben extensiones bajo estas plataformas para crear código escalable y rápido.

Si no estoy lo suficientemente claro, déjame repetir esto de nuevo. El resultado final de cualquier aplicación en tiempo real es el RENDIMIENTO. Si su sitio web toma tiempo para procesar algo, el 30% del tiempo, perderá un cliente. Las empresas de consumo no pueden permitirse eso.

Entonces, si algunas startups no usan C en operaciones en tiempo real, son

a) Tener mala arquitectura

b) gastar demasiado dinero en hosting.

Desde el punto de vista comercial, esto podría significar la diferencia entre el éxito y el fracaso de una startup, ya que los costos iniciales son muy importantes.

Dejemos a un lado la parte desactualizada de la pregunta. Supongamos que la premisa de la pregunta es por qué elegir C como primer lenguaje para enseñar programación sobre Python o C ++.

Ahora, usemos algunas citas de Donald Knuth de WikiQuotes:
1) Al comprender un lenguaje orientado a la máquina, el programador tenderá a utilizar un método mucho más eficiente; está mucho más cerca de la realidad

2) Las personas que están más que casualmente interesadas en las computadoras deberían tener al menos una idea de cómo es el hardware subyacente. De lo contrario, los programas que escriben serán bastante extraños.

3) Cambiemos nuestra actitud tradicional hacia la construcción de programas: en lugar de imaginar que nuestra tarea principal es instruir a una computadora qué hacer, concentrémonos más bien en explicar a los seres humanos lo que queremos que haga una computadora.

Ahora que tenemos una premisa de un gran instructor, preguntemos nuevamente: “¿por qué elegir C como primer lenguaje para enseñar programación sobre Python o C ++?”

C puede no ser “lenguaje ensamblador MIX / cualquier otro ensamblado” pero está muy cerca de un “lenguaje orientado a máquina”.
Learning C necesita inherentemente comprender el hardware subyacente.
C realmente ayuda a explicar a los seres humanos lo que queremos que haga una computadora.

Python tiende a enmascarar casi cualquier cosa debajo (problema similar con lenguajes basados ​​en JVM).

C ++ es realmente C + ‘++’. Para aprender a programar realmente no necesitas la parte ‘++’.

La orientación a objetos, la escritura dinámica y / o todo lo demás es una excelente manera de hacer las cosas, pero aprender programación (o más bien el “arte de la programación”) es algo muy diferente.

¿Anticuado? ¿Te refieres a los clásicos? Classic C no está más desactualizado que los Beatles, si sabes a lo que me refiero. Hay muy buenas razones para aprender las cosas viejas:

  • Hay muchos programas en idiomas antiguos (¡incluso Cobol fue un gran problema en 1999!) Que pueden necesitar reparaciones, actualizaciones, etc. A menudo, esto es más rentable que comenzar de nuevo, y eso es lo que a las empresas les importa mucho más que el lenguaje art. Esto puede hacer que la retrocomputación sea un nicho de trabajo valioso.
  • Aprender a hacerlo “por las malas” hace que sea más fácil aprender nuevos idiomas más tarde. Nunca obtendrá estas habilidades de crecimiento fundamentales si solo usa entornos de desarrollo rápido y fácil. A menudo, es posible que deba aprender los conceptos básicos de un nuevo lenguaje de programación, literalmente, de la noche a la mañana. Esto es mucho más fácil de hacer si conoce muchos de ellos con una estructura fundamental similar.
  • El código de nivel simple (kernals del sistema operativo, controladores, etc.) necesita la eficiencia que los idiomas más antiguos tienen a la vanguardia. Classic C (o C ++ sin usar encapsulación) se considera la mejor opción para el lenguaje ensamblador en este sentido. Por supuesto, recuerdo el momento en que dijeron: “Los hombres de verdad solo programan en lenguaje ensamblador”.
  • Las aplicaciones escritas en herramientas de quinta generación a menudo son lentas y codiciosas de megabytes. Por ejemplo, he visto bastantes juegos poco impresionantes creados por Unity en Android con tamaños de paquete excesivos (piense en algo equivalente al Pitfall de Atari 2600 pero que ocupa 30 megabytes).

Los principales lenguajes de programación 2016

(Puede encontrar varias encuestas de blogs en Internet con diferentes resultados, pero las métricas de iEEE son justas y mejores que muchas)

Según este estudio, C acaba de aprobar Java como el mejor lenguaje de programación de 2016. No creo en su premisa de que sea antiguo y anticuado.

Un buen ingeniero de software o informático se daría cuenta de que varios idiomas tienen sus puntos fuertes y débiles y sabe cuándo usarlo porque es la herramienta adecuada para el trabajo. No veo Python compilado en código de máquina optimizado. No veo mucha gente escribiendo aplicaciones web en C ++. C es una herramienta sólida que tiene muchas bibliotecas y compiladores valiosos utilizados para construir muchas cosas. En algunos lugares, tiene más sentido. La única forma en que un idioma se vuelve obsoleto es si ya no se usa. No parece que veamos eso con C en el corto plazo.

De acuerdo con Quora User y también Quora User, C no está desactualizado, es completamente capaz de hacer lo que quiera en una computadora.

Python tampoco es especialmente nuevo, tiene aproximadamente 25 años, es más antiguo que Java, C #, ¡es más antiguo que Windows NT! ¡Python salió casi al mismo tiempo que el primer lanzamiento de Linux!

Ahora, es tentador responder a cualquiera que diga que Python es mejor que C con ‘bwaharharhar’ o alguna diatriba condescendiente (todavía estoy tentado), pero no lo haré.

Lo que estás experimentando es que Python es más fácil , no Python es mejor . Con C, estás aprendiendo cómo funcionan las computadoras, lo cual sí, es un poco difícil, es mucho más lento que Python.

Puede aprender conceptos básicos de informática en otro idioma, claro, pero no Python. Si desea aprender conceptos básicos de computación, necesita acceder a la memoria directamente, es solo una realidad.

No estoy diciendo que necesite acceder a la memoria directamente para realizar un trabajo productivo, en absoluto, pero si quiere aprender sobre computadoras, sí lo hace.

Realmente, creo que para las personas que quieren aprender a “hacer cosas”, los campamentos de entrenamiento son probablemente mejores que una educación en formato. Sin embargo, si puedes “obtener” C, entonces puedes “obtener” cualquier cosa, porque no solo sabrás cómo funciona algo como Python, entenderás cómo funciona la computadora .

C no está desactualizado. Si bien puede no ser tan común como lo era antes, sigue siendo relevante. Los lenguajes más populares hoy en día, como Python, C #, JavaScript, etc. no tienen la capacidad de “tocar” el hardware como C / C ++. C es necesario para escribir controladores de dispositivo y maximizar el rendimiento porque el programador puede manipular directamente la gestión y el direccionamiento de la memoria. Es por eso que Windows y otros sistemas operativos todavía están escritos en C / C ++ (con algunos otros lenguajes incluidos).

Más. Casi todos los lenguajes actualmente en uso se basan en C / C ++ de alguna manera. Por ejemplo, Python se basa en las capacidades y la estructura de C, por lo que es fácil para alguien que se muda de C a Python entender lo que está sucediendo. Además, si se encuentra con un cuello de botella de rendimiento en Python, puede volver a escribir esa parte en C y simplemente vincularla en Python, obteniendo los beneficios de ambos lenguajes.

¿Por qué las universidades enseñan idiomas obsoletos como el griego, el latín y el sánscrito?

Porque los clásicos están escritos en ellos.

C es probablemente el más clásico de los lenguajes de programación clásicos, y ciertamente el que refleja más claramente cómo funciona el hardware de la computadora. Fortran y Cobol, como la mayoría de los lenguajes modernos, ocultan eso bajo mucha abstracción. Por otro lado, la mayoría de los lenguajes de ensamblaje son ilegibles y demasiado detallados para “pensar”. Una excepción es el ensamblador universal Gnu, esencialmente un dialecto simplificado de C.

Su bajo, pero elegante, nivel de abstracción hace de C una herramienta invaluable para comprender las computadoras, así como para programarlas “cerca del metal”. No es casualidad que el primer idioma disponible en un nuevo chip sea generalmente C.

Espero que C se enseñe mucho después de que Python haya seguido el camino de TCL y Perl. ¿Alguien recuerda APL? PL-I? Yo no; pero probablemente aún podría escribir un programa decente en BAL. O C. Si tuviera que hacerlo.

Aquí hay algunas razones:

  1. Es fácil comprender todo C en tu cabeza y es fácil (ish) enseñar. El libro estándar de K&R Ansi C es un volumen delgado. Hay muy pocas ideas complejas en C.
  2. C no viene con una gran lib estándar, por lo tanto, debe implementar algoritmos usted mismo o compilar / vincular algún otro código fuente (una habilidad no trivial en sí misma).
  3. Cada computadora tiene un compilador de C. Si conoce C, tendrá una buena idea de cómo programar cualquier computadora.
  4. Todos los lenguajes populares modernos se basan más o menos en la sintaxis de C. Podrá reconocer construcciones similares en C #, Java, Python, etc.
  5. C está impregnado de la cultura Unix, una cultura que ha impregnado a la Academia desde mediados de los años setenta. Hay mucho conocimiento de los ancianos para transmitir.
  6. C le enseñará cómo programar sin una red de seguridad. Entonces te darás cuenta de por qué otros idiomas se inventaron más tarde.
  7. C no está desactualizado: hay nuevos libros sobre C que salen cada año. Echa un vistazo a O’Reilly “21st Century C”, por ejemplo.

Solo mis pensamientos 🙂

El típico hogar estadounidense de clase media tiene más de 100 computadoras. Están en ti Cafeteras, teléfonos, automóviles, aire acondicionado, motosierras, lavadoras. Están por todas partes. La mayoría de ellos se programan usando ensamblaje o C.

Aprender C es importante para un estudiante de informática. Puedo explicar por qué es así, pero aquí hay una publicación de blog que lo hace mejor

Blog: Joel sobre software
http://www.joelonsoftware.com/ar

Ahora entienda una cosa importante aquí; Las universidades indias enseñan una versión muy antigua del lenguaje, o usan implementaciones de compiladores obsoletas. A menudo usan Turbo C 3.0 o compiladores similares.

Supongo que su sensación de usar un lenguaje “antiguo” proviene de allí. No hay nada de malo en eso. Si este es el caso, te aconsejo que presiones para usar compiladores modernos como las últimas versiones de gcc, clang, vc ++, etc. en tu universidad.

Mi propia universidad, que está afiliada a la Universidad de Pune, utilizó una combinación de gcc y Turbo C ++. Afortunadamente, han actualizado el programa de estudios ahora.

Recientemente vi a Bjarne Stroustrup quejándose de este problema de compiladores obsoletos en académicos indios en un video de YouTube.

Escribo código C, C ++ para vivir. Una gran parte del software actual todavía está escrito en C. Confía en mí. C no está desactualizado, pero muchos de los métodos de enseñanza de las universidades indias sí lo están.

PD: casi asumí que la pregunta la hace un estudiante indio. Entonces la respuesta es desde esa perspectiva.

Python y C ++ tienen enfoques diferentes para el problema y tienen un proceso de pensamiento diferente. C es un lenguaje secuencial.

Espera, Python no es un lenguaje de alto nivel, es un lenguaje de secuencias de comandos.

De todos modos, aprender C nos hace comprender cómo funciona la memoria, cómo se ejecuta el código, cómo se estructuran los datos de proceso / datos de texto / pila, etc. Si te mueves directamente a los lenguajes orientados a objetos o basados ​​en objetos, te los perderías o tendrías problemas para entenderlos.

Y para ser sincero, C es relativamente fácil de aprender. Es un concepto básico en un sentido verdadero, en comparación con el cual C ++ es un vasto océano donde tienes que asaltar mucho.

Bueno…. La primera C no está desactualizada y la segunda Python no es nueva. Y en el caso de C, tenemos un idioma que todavía está en demanda y uso, especialmente si está cerca del hardware.

Aparte de eso, C te enseña mucho más que Python. Te enseña cómo funciona la gestión de memoria. Python es basura recolectada. Las universidades tienen que ver con el aprendizaje y, sinceramente, C encaja mejor que Python aquí. No me malinterpretes. Me gusta más el lenguaje moderno que el C. Pero para fines de enseñanza es una mejor opción a nivel universitario.

C es antiguo pero no está desactualizado, análogo al idioma hablado Inglés y chino son antiguos pero no están desactualizados. Realmente no hay ninguna razón convincente para algo mejor que C para programar microprocesadores. C ++ o Python no es mejor que C, son simplemente diferentes.

La razón por la que todavía se enseña C es porque probablemente sigue siendo, con mucho, el lenguaje de programación general más utilizado y popular del mundo. A pesar de las deficiencias, está más probado y escrito sobre el lenguaje.

Casi todos los microcontroladores, ARM y procesadores integrados utilizan el compilador C. Diablos, incluso C ++ y Python están escritos en C.

C tampoco está solo en códigos de bajo nivel de hardware. Los programas modernos de C ++, C # y Objective-C tienen algo de C.

Con el tiempo envejecemos, aprendemos más y maduramos, hablamos mejor; Sin embargo, las letras y palabras con las que jugamos siguen siendo las mismas de siempre. Y eso significa mucho.

Como elucidamente por Ryan Lam, las tecnologías en realidad no envejecen. Cuando lo viejo se modifica con más potencia y armas, nace la nueva tecnología. No puedes renunciar a la mecánica newtoniana diciendo que la mecánica cuántica lo ha reemplazado. Y C se actualiza constantemente, se modifica su sintaxis, se corrigen errores de rendimiento y se agregan continuamente nuevas bibliotecas y funciones; finalizado hasta la fecha en forma de C11.

Sin embargo, uno debe estar de acuerdo en que las universidades prefieren ir con la generación padre C. Y eso es bastante absurdo. Podría haber otra lingüística de programación de enseñanza en universidades como Python, Go, Ruby, JS, excepto que los principiantes se perderían:

  • Punteros
  • Uso extenso de bibliotecas
  • Estructura flexible
  • Preocuparse por los tipos de datos y las conversiones de tipos
  • Trabajos de preprocesador
  • Operaciones más lógicas menos directas

C es un lenguaje desactualizado, pero aún en uso muy amplio. Se ha convertido en el COBOL de la programación de sistemas. C tiene capacidades limitadas de compilación y análisis en comparación con los lenguajes “modernos” ya que estaba vinculado a tamaños de memoria limitados en un PDP 8. El diseño de C estaba muy limitado por la tecnología de 1968. Eso lo convierte en un lenguaje muy anticuado y desactualizado.

Además, C fue diseñado como un lenguaje ensamblador con sintaxis estructurada, no como un lenguaje de alto nivel real.

Claro que puede hacer cualquier cosa en una computadora con ensamblador (si el sistema lo tiene, hay sistemas que no tienen ensamblador, pero están codificados exclusivamente en HLL), o incluso código de máquina de 0s y 1s. Pero cuál es el punto. No muy productivo

Los lenguajes posteriores son de alto nivel, hacen que los programadores estén más orientados a los problemas que a las máquinas, analicen errores comunes, usen sistemas de tipos para ayudar en esto. Los idiomas posteriores tienen instalaciones como tipos, axiomas y, en el caso de Eiffel Design by Contract. Los programadores realmente inteligentes usan estas instalaciones para crear grandes sistemas correctos. Sin esas instalaciones integradas en un idioma, está obligado a probar la corrección probando los sistemas y eso no ofrece ninguna garantía. Los sistemas de tipos tampoco dan garantía, pero están muy lejos en el camino.

Así que eso es lo último que data de C es su orientación a la máquina en lugar de la orientación al problema.

Algunos afirman que los maestros de C funcionan como una computadora. No hay nada malo en eso, pero aprende y olvídalo. Los programadores en C no aprenden cómo funciona la ‘computación’. Los dos no son lo mismo y las computadoras limitan el cálculo, lo que no es bueno.

C evita que los programadores lleguen a este nivel de comprensión; eso es probablemente lo peor de todo, aparte de todas las trampas y dificultades que conlleva.

C sigue siendo el lenguaje central para la programación integrada. Prácticamente ninguno de los idiomas de moda actual se puede utilizar en un entorno de recursos limitados. Pero la demanda de tal programación está aumentando constantemente con el Internet de las cosas, entre otras razones.

La respuesta ya está dada, yo diría una frase aquí: “si obtuviste la habilidad C, obtuviste la informática”.
Estaba trabajando en una organización, donde la biblioteca de libros de tecnología no tiene el libro de Programación C. Le regalé uno a la biblioteca, porque siempre sentí que la biblioteca de tecnología sin programación en C es como “Falta el alma”.