Es prácticamente imposible enseñarle a programar bien a cualquiera que haya sido expuesto anteriormente al BASIC: como potenciales programadores están mentalmente mutilados y no tienen ninguna esperanza de regeneración.
Edsger W. Dijkstra, 18 de Junio de 1975
Más allá de que Dijkstra es considerado uno de los más grandes científicos dedicados a las ciencias de la computación, ganador del premio A. M. Turing en 1972 y blah, blah, blah, no puedo dejar de considerar lo que dijo una de las más grandes estupideces de la historia de la programación.
Yo programé, en estricto orden cronológico, en:
- Sinclair BASIC
- CBM BASIC
- 6510 Assembler
- Pascal (en la C64)
- Quick Basic 4.5 (en la primer PC que tuve)
- Turbo Pascal
- Clipper
- Dbase II
- COBOL 400
- RPG/400 (RPG III)
- RPG IV
- CL/400
- Delphi 3.0
- Visual Basic 3.0
- Visual Basic 6.0
- Visual Basic Script
- VBA
- Visual Basic .NET 2005
- C# 2.0
La experiencia que me ha dejado el haber programado en todos estos lenguajes es muy sencilla. Uno no aprende o sabe programar en un lenguaje determinado, sino que uno debe aprender a programar, entendiendo el término programar como el encontrar un algoritmo que solucione un determinado problema. Este algoritmo puede expresarse primero utilizando diversas metodologías (top-down, estructurada, orientada a objetos) y luego programada en cualquiera de los lenguajes existentes.
La solución es independiente del lenguaje de programación a utilizar. Se puede ser un experto en Perl y conocer de memoria la sintaxis de todas las instrucciones pero si no se sabe pensar en la solución de un problema en términos de algoritmos y estructuras de datos, ese conocimiento del lenguaje resulta inútil.
Un mal programador lo es en cualquier lenguaje, lo mismo que un buen programador es bueno en cualquier lenguaje. Por supuesto que, una vez que tenemos la solución a nuestro problema, el sentido común dicta programarla en el lenguaje que mejor conocemos y si conocemos varios, en el que mejor se adapta a la solución encontrada.
Cualquiera que diga que una solución a un problema expresada utilizando un diseño orientado a objetos no puede programarse en el BASIC de Sinclair que usaba la ZX-Spectrum no tiene idea de lo que significa orientación a objetos y mucho menos de lo que significa programar. ¿Es esa versión de BASIC la mejor para implementar una solución orientada a objetos?. No, de ninguna manera. Es una tarea engorrosa y complicada, pero no imposible. Por supuesto que es mejor utilizar un lenguaje como VB.NET, C# o Smalltalk. Estos lenguajes fueron diseñados específicamente pensando en facilitar la implementación de soluciones orientadas a objetos.
Por eso lo que dice Dijkstra, con todo respeto lo digo, es una gilada monumental. No importa el lenguaje, sino los conceptos de programación que uno maneja. Un buen escritor en castellano, si aprende suficientemente bien otro idioma, seguirá siendo un buen escritor. El que maneja de forma excelente un Porsche, maneja de la misma forma un Fiat 600. Y así puedo seguir eternamente.
Mi primer libro de programación (que aún ojeo de vez en cuando) lo compré inmediatamente después que tuve mi primer computadora, una Timex Sinclair 2068 (un clon yanqui de la ZX-Spectrum inglesa). El libro se llama "Programación Avanzada en BASIC" de Peter Bishop. Tranquilamente se podría haber llamado simplemente "Programación Avanzada". El autor usa el BASIC simplemente como un lenguaje de referencia para demostrar prácticamente los conceptos de programación avanzada que explica en el libro. Y usa BASIC porque en aquel momento era el lenguaje que venia en la ROM de todas las computadoras hogareñas (home computers). Es más, usaba un BASIC lo más estandard posible para que los ejemplos fueran compatibles con todas las versiones de BASIC de la época. Y la mayor parte de los conceptos explicados en ese libro siguen teniendo vigencia.
Por eso cuando estoy frente a un problema (y tengo el tiempo suficiente) trato de no pensar, por lo menos al principio, en qué lenguaje específicamente voy a implementar la solución. Cuando logro hacerlo bien, la solución al problema termina siendo un algoritmo que fácilmente se puede implementar casi en cualquier lenguaje y permite además explotar las características especiales del lenguaje elegido.
Por eso Mr. D. lo suyo fue y será una tremenda patinada.