Todos deberían saber programar

In this Spanish‑language podcast, the hosts discuss whether everyone should learn to program. They begin by correcting a misinterpretation of a statement by NVIDIA’s director, clarifying that the claim is not that programming is unnecessary, but that natural language may become a primary way to instruct machines. Speaker C explains that programming is more than writing code; it involves specifying requirements, using formal languages to avoid ambiguity, and abstracting real‑world problems into models. The conversation walks through fundamental concepts such as binary search, bubble sort, and other sorting algorithms, illustrating them with everyday analogies (searching a dictionary, ordering cards). They also compare data representations, contrasting simple tables with graphs for relational data. Throughout, the hosts highlight the cognitive benefits of programming: systematic problem‑solving, creativity, critical thinking, automation of repetitive tasks, a deeper understanding of computers, personal empowerment, and improved job prospects. They acknowledge current AI tools (e.g., NVIDIA’s AI‑assisted coding) can help with small tasks but are not yet reliable for large‑scale software, raising concerns about cost, vendor lock‑in, and code maintainability. The episode concludes with a strong argument that, given these advantages, everyone should acquire at least a basic programming mindset.
Chapters
El director de NVIDIA dice que no hace falta aprender a programar.
En realidad no dice eso.
Dice que no hace falta que aprendamos a programar ningún lenguaje de programación.
Sí, dice que el lenguaje de programación es ahora el lenguaje natural, pero eso solo eliminaría una de las partes en las que consiste la programación.
¿Programar no es escribir código?
No, esa es la parte más temida por los no programadores. Pero en realidad codificar, que es como se llama esa parte, es la menor de todas.
¿Hay varias partes? Pero la inteligencia artificial nos quita también del resto, ¿no?
A menos que averigüen una forma de leer tu mente, no.
Antes de continuar, un inciso. ¿Te gustaría apoyar a nuestro canal? No olvides que puedes suscribirte y activar la campanita para no perderte futuro contenido. También se agradecen me gustas. Y además, si nos prefieres en formato podcast, podemos acompañarte desde Spotify. Ahora sí, continúa. Bueno, hemos dicho que programar no es escribir código. Entonces, ¿de qué va programar?
El código se escribe cuando ya disponemos de unos requisitos y hemos especificado qué es lo que realmente queremos.
¿Y eso no puede hacerlo cualquiera que sepa qué quiere conseguir?
El software es un producto complejo porque es abstracto. Puedes saber qué quieres inicialmente, pero cuando lo vas viendo puede que cometas alguna contradicción en las órdenes que le das a la máquina.
Bueno, puedo tener más cuidado o especificar algo mucho más simple. No necesitaría aprender a programar para eso.
No aprenderías a programar para tener más cuidado, sino para aprender qué significa especificar las órdenes en un lenguaje formal.
¿Un lenguaje formal? ¿Te refieres a que no use jerga local o sea más políticamente correcto hablando?
No, me refiero a emplear un lenguaje que minimice las ambigüedades y permita comprobar las órdenes de forma simple.
¿Como cuando hablamos de la tortuga y de Logo?
¡Exacto! Con Logo mostramos cómo aprender a programar ayudaba a tener un mejor acercamiento a la máquina. El lenguaje de programación no tiene por qué ser complejo. Se puede emplear lenguajes muy sencillos como Logo, Python o Lua. Lo importante es aprender a hablar con una máquina.
Pero eso es justamente lo que NVIDIA nos facilita. Ahora la máquina, gracias a la IA, nos entiende y no hace falta ponernos a su nivel.
Realmente ponernos a su nivel no me queda claro si sería más bajo o más alto.
Recapitulemos: programar es un proceso que te permite adaptarte para resolver problemas con una serie de elementos dados. Tomas requisitos, elaboras los requisitos para que sean claros y después vas detallando la forma de resolver el problema planteado. Hmm... Ponme un ejemplo.
El más sencillo de todos. Déjame que lo pienses. Tienes un diccionario, quieres buscar la palabra pedir y el diccionario tiene 400 páginas. ¿Sabrías cómo hacerlo para encontrarlo en tan solo 8 pasos? Esto se basa en una búsqueda binaria porque el diccionario está ordenado, es decir, si abro por la mitad y veo que las palabras iniciales y finales de esas 2 páginas abiertas en la página 200 son anteriores a pedir, entonces descarto las páginas de la izquierda y sigo buscando en las de la derecha. Vuelvo a hacer lo mismo abriendo en la página 300 y en este caso descarto las 100 páginas a la derecha o a la izquierda y así un máximo de 8 veces hasta dar con la palabra.
Vaya, yo habría ojeado un poco y leído rápido por las páginas.
Eso es fuerza bruta y no te creas, Kaffelin y Andrew Woff no publicaron el documento de la búsqueda binaria inicialmente porque pensaron que era algo muy obvio. Sin embargo, al ver que la gente buscaba de forma secuencial de inicio a fin en listas de elementos ordenadas, pues lo publicaron.
Hay veces que parece más rápido lo que es más lento. Me ha gustado eso. Ponme otro ejemplo.
Vale. En los años 1950 la mayoría de código estaba en tarjetas perforadas. Cada línea de código representaba una tarjeta, por lo que un programa de 1000 líneas de código era un programa con 1000 tarjetas. Todas estas tarjetas se imprimían y agujereaban y aparecía un número de orden en ellas. Pero el gran problema era ordenarlas. Imagina si se te caen.
Un gran problema. ¿Cómo las ordenaban?
En verdad no les costaba mucho porque habían diseñado una máquina décadas antes para ordenar este tipo de elementos, pero lo ingenioso era la forma de hacerlo.
¿La forma? ¿Por qué?
Imagina que tienes una baraja de cartas en la mano y quieres ordenarla.
Vale, eso lo he hecho muchas veces. La pongo en la mesa y...
No tienes mesa.
Vale, entonces supongo que las iría poniendo en mis bolsillos y...
No tienes bolsillos.
¿Se supone que tengo que ir ordenando las cartas mirando una a una?
Sí.
¡Pero eso sería lentísimo!
Así es como lo hacen las máquinas, y sí, es lento, pero depende del método que emplees.
¿El método? Yo comenzaría mirando la carta que tengo al principio y la siguiente. Si la primera es mayor, las cambio y miro la tercera. Y... espera.
Sí, vas bien. Ese método es la burbuja. Tomas la primera carta y comparas con la siguiente, y te vas quedando con la mayor en cada comparación hasta llegar al final. Después comienzas desde el principio de nuevo.
Eso es lentísimo, ¿no?
Es el mecanismo más lento. Hay otros algoritmos como la ordenación por selección y otros como la mezcla de von Neumann o la ordenación rápida de Hoare.
Vaya, suena interesante. Entonces, al programar tienes una serie de herramientas en tu cabeza que te permiten saber cómo resolver un problema de forma más rápida.
La programación se basa en abstracciones. En principio debes aislar y abstraer el mundo a un modelo simplificado que replique el mundo y tu problema. Cuando todos los elementos están claros y bien definidos, entonces podemos comenzar a jugar con ellos.
Con definir los elementos ¿A qué te refieres?
Normalmente la máquina trabaja con datos, pero estos datos tienen una naturaleza concreta. Por ejemplo, las tablas de población están formadas por una tabla donde se almacenan datos que pueden ser un texto representando el nombre, un valor concreto para especificar su estado civil o un número para especificar su edad.
Ajá, entiendo. Entonces todo es cuestión de crear tablas.
Muchas veces las tablas no son suficientes, por ejemplo, Imagina que queremos establecer un modelo que busque relaciones entre personas. Una tabla sería un tipo de dato incómodo, mientras que un grafo sería mucho más apropiado.
¿Un grafo? Eso es una colección de nodos con sus conexiones. ¿Es como un árbol?
No exactamente. Un grafo no tiene raíz y los nodos podrían conectarse de forma circular. Un árbol presenta una jerarquía. El nodo raíz solo puede conectarse a las ramas. Y las ramas a las hojas.
Muy verde todo.
Vale, entonces, ¿lo ideal cuando pedimos a una máquina que haga un programa es tener en mente todas estas abstracciones, algoritmos y tipos de datos?
Si quieres que lo haga de forma eficiente, sí. Deberías saber qué emplear o al menos deberías saber que existe por si lo sugiere la inteligencia artificial para discernir si es lo que debes usar o no.
Pero, ¿podría comenzar a practicar con la inteligencia artificial y terminar programando pequeñas cosas al principio y cosas más complejas más adelante?
Tiene pinta de que sí. No obstante, hay mucho que deben solucionar antes.
¿Aún no se podría crear un software grande con la IA?
De momento no, a menos que le preguntes cómo organizar el código. Es muy probable que termines intentando poner todo el código dentro de un solo fichero o sin mantener una separación lógica que permita entender el código generado.
Pero yo no tendría que entenderlo, tendría que entenderlo solo la inteligencia artificial.
No hay IA de momento que revise tu proyecto, solo ficheros de código o preguntas de código que le hagas. Si tiene un desajuste con respecto a la coherencia de lo que lleva hecho con lo que tiene que hacer, es posible que finalmente termines con un código que no funciona, y cuanto más grande peor.
Entonces, ¿no crees posible que NVIDIA nos proporcione un IDE en el que poder programar usando la especificación de qué queremos conseguir como una lista de detalles y que nos dé un programa que funcione finalmente?
El problema no es si lo hace, el problema es cuánto costará que lo puedas usar, y que si tu programa y el valor de tu empresa radica en este producto, ¿qué pasaría si NVIDIA modifica de forma abrupta su editor o deja de darle soporte? Tu programa estaría atado a lo que quiera hacer NVIDIA. ¿Por qué todos deberían saber programar? Porque la vida está llena de procesos, es una cuestión de decisiones que tomas y las acciones que realizas.
¿Qué potenciamos cuando aprendemos a programar? ¿Qué destrezas adquiriríamos si fuésemos un personaje de un juego RPG?
Pues una de las habilidades mandatorias es la de la resolución de problemas. Los programadores están habituados a resolver problemas de forma lógica y sistemática, lo cual es beneficioso a la hora de abordar desafíos en diversos contextos.
Vale, resolvemos problemas si somos lo suficientemente creativos. ¿No lo podríamos hacer de la misma forma pero sin aprender a programar?
Esa es la otra habilidad que potencia: la creatividad y el pensamiento crítico.
¿El pensamiento crítico? ¿Te refieres a enfrentar los desafíos de forma única y eficiente? El pensamiento crítico es lo que se emplea para el diseño de software a nivel general, ¿no?
Sí, de hecho, analizar, evaluar, interpretar y otras actividades que se realizan durante el pensamiento crítico son cruciales en la programación.
Vale, entonces, con la programación ayudamos a mejorar nuestro pensamiento crítico. Suena bien. Aunque hay muchas tareas en la programación que no lo requieren, ¿no?
Una de las características más notables de muchos grandes programadores es su vagueza.
¡Hala! ¿Te estás metiendo con los programadores?
No lo digo de forma despectiva. Los programadores vagos hacen cualquier cosa por automatizar sus tareas, sobre todo las repetitivas, y no tener que volver a hacerlas. De ahí que programar sirva para automatizar tareas que son tediosas, repetitivas y que muchos programadores no quieren volver a hacer.
Jejeje, eso suena bien. Automatizar tareas y trabajar menos.
Otra habilidad, aunque es obvia, es que tu perspectiva con respecto a los computadores cambia. Al saber cómo se hacen algunos programas te conviertes en otro tipo de usuario, sabes a qué pueden deberse algunos fallos e incluso puedes aportar en proyectos de software libre con soluciones.
Aporte a la comunidad, suena bien, aunque nada fácil. Esos códigos no parecen muy fáciles de abordar.
Es todo cuestión de práctica, pero una vez comienzas a leer código y ves que puedes agregar algo que falta o corregir un fallo, eso potencia tu autoestima y realización personal. Además, te puede servir para encontrar puestos de trabajo.
Vale, creo que me quedan claros los beneficios.
A mí también.
En resumen, sería que puedo resolver problemas, mejorar mi creatividad y pensamiento crítico, la capacidad para automatizar tareas, perspectiva computacional, empoderamiento personal y oportunidades en el mercado laboral.
¡Exacto! ¿No es suficiente para que todos aprendan a programar?
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








