¿Por qué todos los programadores deberían aprender C?


Antes de comenzar, vamos a marcar una diferencia entre alguien que solamente quiere aprender un lenguaje de programación, y alguien que tiene el verdadero deseo de ser un programador. No me malinterpreten, hay muchas buenas razones para aprender un lenguaje de programación, e incluso si aprendes un lenguaje como Python o JavaScript, puedes ya considerarte un programador. Dominar cualquier lenguaje de programación es todo un desafío y un logro meritorio. Sin embargo, el programador al que me refiero aquí es alguien que quiere entender la programación en un nivel más profundo, tan sólo por el interés de programar. Este es alguien que naturalmente tiene un deseo de convertirse en un programador que domine más que un solo lenguaje de programación.

Originalmente, pensé en el título de este artículo como "¿Por qué todos los programadores deberían aprender C primero?", pero lo descarté en absoluto. Claro, en efecto hay ventajas en aprender C primero, pero de hecho, si estuviera enseñando a estudiantes de secundaria, casi con seguridad les enseñaría primero un lenguaje de alto nivel como Python. Luego, tomaría a mis mejores estudiantes y les enseñaría C. Por otro lado, si estuviera dando clases a ingenieros eléctricos, probablemente empezaríamos con C de todas formas.

C se utiliza, por ejemplo, para el desarrollo de sistemas operativos. El primer sistema operativo hecho en C fue Unix. Años después, sistemas operativos como Linux también fueron hechos en C. Pero el uso de C va más allá. C es el precursor de casi todos los lenguajes de programación de alto nivel más populares en la actualidad. De hecho, Perl, PHP, Python y Ruby también fueron escritos en C.

Ventajas

Dicho esto ya, creo que hay ventajas en aprender C primero que C++ o Java. Cuando trabajas con lenguajes como Java, C# e incluso Python, inmediatamente comienzas a alejarte del aprendizaje de los fundamentos de un lenguaje de programación y comienzas a aprender librerías y frameworks asociados. Pero con C no ocurre eso, sólo tienes unas cuantas llamadas a librerías y lo que viene es que tienes que mantenerte enfocado en la semántica del lenguaje. Por lo general, C te obliga a pensar más y más profundamente acerca de lo que en realidad está sucediendo.

C es un lenguaje de medio nivel. C es el lenguaje de los compiladores, intérpretes, editores, sistemas operativos y programación embebida. Cuando aprendes a programar en C casi tienes que comprender cómo se ejecutan los programas. Aprendes lo que significan cosas como registro, pila, montículo y E/S mapeada en memoria.

Simplicidad y velocidad

C es simple, elegante y diabólicamente rápido. Es también compacto y eficiente. C tiene punteros puros, operadores bit a bit, y las keywords extern, volatile, static, y register lo que significa que vas a comprender más sobre cómo escribir código eficiente de lo que puedas conseguir con cualquier otro lenguaje de alto nivel. Lo único que te enseñará más de estas cosas es un lenguaje de más bajo nivel, pero con los complejos procesadores actuales no sería recomendable utilizar ensamblador o similar.

La sintaxis de C es la razón por la que los programadores hablan de la “familia C de lenguajes de programación”, que incluye lenguajes como C, C++, Java, EcmaScript (JavaScript), Objective-C y muchos otros más.

Disciplina

C también resulta ser exigente, fastidiosa, meticulosa y a veces francamente críptica. Puedes escribir fácilmente código que después es difícil de leer y de mantener. Sin embargo, y esto es un punto clave, no tienes por qué pasar necesariamente por ello. Aprender a escribir código mantenible en C requerirá disciplina de programación. En la mayoría de los lenguajes solucionar errores de sintaxis puede ser trivial. Sin embargo, encontrar y corregir un punto y coma que falta o sobra en C puede ser a veces una tarea épica.

Pocas distracciones

C no es un lenguaje orientado a objetos por lo que no te distraerás con cosas como herencia y polimorfismo. No estoy diciendo que estos no son conceptos importantes, es sólo que puedes simplificar las cosas un poco, aprendiendo programación procedimental antes que la orientada a objetos. De hecho, una vez que has aprendido C y has escrito un par de programas significativos, aprender C++ es el siguiente paso natural.

Programación embebida

Mi argumento final para aprender C está ligado a la programación embebida. Como programador siempre tengo una sensación de satisfacción cuando hago que funcione cualquier fragmento de código. Hacer que una computadora haga lo que quieres es muy satisfactorio. Pero cuando integras tu código embebido con hardware y ves cómo haces que ocurran cosas fuera de una computadora, como por ejemplo mover un brazo robótico, es una emoción incomparable. Esta emoción solamente fue posible gracias a que aprendí a programar en C.

Vía: PluralSight