Smalltalk se percibe ampliamente como un lenguaje antiguo y moribundo, una antigüedad de una época pasada. Nada podría estar más lejos de la verdad.
Smalltalk sigue siendo muy relevante. Es un excelente lenguaje de instrucción para enseñar programación a personas que no tienen experiencia técnica. Es un lenguaje de creación de prototipos superlativo para startups. Es un lenguaje empresarial de fuerza industrial utilizado por empresas grandes y pequeñas de todo el mundo. Hay buenas razones para considerar el uso de Smalltalk moderno hoy en día, ya que mucho ha cambiado en los últimos años para mejorar sus perspectivas.
Hoy en día no es necesario usar Smalltalk en producción, pero intente codificar algo en Smalltalk y vea cómo se siente. Debería resultar familiar, porque la implementación del paradigma orientado a objetos (OO) de Smalltalk es tan excelente que ha influido en toda una generación de lenguajes OO, como Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift, etc.
Al aprender Smalltalk, comprenderá cómo surgieron todas esas funciones útiles en los idiomas OO de hoy en día. Aprender Smalltalk también podría darte una gran ventaja en habilidades de programación entre tus compañeros, y podría ser una gran herramienta para enseñar programación a principiantes.
- ¿Qué nos dio Smalltalk?
- Pero, ¿cómo puede aprender Smalltalk hacerme un mejor desarrollador?
- ¿Cómo funciona Smalltalk? El enfoque de programación basado en imágenes
- Todo en Smalltalk es un objeto
- Reflexión computacional en Smalltalk
- El renacimiento de Smalltalk
- El legado de Smalltalk: Hacer que la programación sea divertida
¿Qué nos dio Smalltalk?
Smalltalk tiene un rico legado de contribuciones a la industria del software. Solo mira esta lista de características y tecnologías que introdujo:
- Smalltalk introdujo al mundo la máquina virtual de lenguaje (o VM), que permite que el software sea independiente de la plataforma. Esta es la misma tecnología que sustenta Java (JVM) y.NET, así como Android (Dalvik).
- Smalltalk también fue pionero en la compilación JIT (justo a tiempo), una técnica para mejorar drásticamente el rendimiento de software de código de bytes como Java.
- De Smalltalk llegó el primer IDE moderno (entorno de desarrollo integrado), que incluía un editor de texto, un navegador de sistemas o clases, un inspector de objetos o propiedades y un depurador. Esto llevó a los muchos IDE que los desarrolladores prefieren hoy en día, como Visual Studio, Xcode e IntelliJ IDEA. Personalmente, creo que ninguno de estos IDE se puede comparar con el IDE de Smalltalk en simplicidad, elegancia y velocidad de desarrollo; ¡el original sigue siendo el mejor!
- Desde el principio, Smalltalk tenía cierres, que son funciones de primera clase con alcance léxico. En esencia, un cierre es una función de devolución de llamada que puede ver variables no locales en la ubicación donde se definieron. Esto puede ayudarle a escribir código mucho más compacto y legible. Los cierres están llegando a muchos lenguajes principales, como Java, C# y PHP.
- Smalltalk fue la primera herramienta de lenguaje compatible con la programación en vivo y técnicas avanzadas de depuración, como la inspección sobre la marcha y los cambios de código durante la ejecución. Hoy en día, la depuración en vivo es posible en C# con «Editar y continuar» de Visual Studio y en Java con HotSwap.
- Smalltalk introdujo MVC (Modelo-Vista-Controlador) al mundo. MVC es un patrón de arquitectura de software para implementar interfaces de usuario. Es popular entre las aplicaciones GUI de escritorio y las aplicaciones web. En estos días, es la arquitectura que la mayoría de los desarrolladores web aprenden primero.
- En gran medida, Smalltalk es responsable de proporcionarnos desarrollo basado en pruebas (o TDD) y programación extrema (o XP), que son muy influyentes en las prácticas ágiles estándar de hoy en día.
- Smalltalk hizo de» escribir pato » una palabra familiar (bueno, si su casa tiene un programador en ella). Duck typing es donde la» comprobación de tipos » se aplaza hasta el tiempo de ejecución, cuando se utilizan las capacidades de reflexión para garantizar un comportamiento correcto. Hoy en día, encontramos duck typing en muchos lenguajes, incluidos Java, Python, Common Lisp, Go, Groovy, Objective-C y PHP.
- Smalltalk fue pionero en el desarrollo de bases de datos de objetos. Si bien no llegaron a la corriente principal, las bases de datos de objetos tienen sus nichos de mercado. El mejor ejemplo de un producto de base de datos de objetos es GemStone / S, que se adapta bien a sistemas distribuidos escalables, de alto rendimiento y de varios niveles.
- Smalltalk nos dio el primer navegador de refactorización. Por supuesto, el soporte de refactorización se puede encontrar en la mayoría de los IDE hoy en día.
- Smalltalk fue fundamental en el desarrollo de la interfaz gráfica de usuario (o GUI) y la interfaz de usuario «lo que ves es lo que obtienes» (WYSIWYG).
Pero, ¿cómo puede aprender Smalltalk hacerme un mejor desarrollador?
Smalltalk tiene varias características increíbles que se adelantaron a su tiempo:
- Persistencia basada en imágenes
- Objetos: Todo es un objeto, y los objetos se comunican solo a través de mensajes (el OO más puro y uno de los primeros)
- Programación «en vivo»
- Técnicas avanzadas de depuración, como cambios de código sobre la marcha
- Una interfaz IDE simple y ordenada
- Idiomas específicos de dominio (DSL): La única forma en que Smalltalk funciona, por lo que los programadores tienen que centrarse en el dominio del problema utilizando un lenguaje y notación que sea natural para ese dominio
Y hay algunas otras características que hacen que Smalltalk también sea especial.
En esencia, la ventaja clave de Smalltalk como herramienta de aprendizaje y lenguaje productivo es que elimina la mayoría, si no todo, del estrés cognitivo en los lenguajes OO convencionales como Java. Smalltalk no presenta desorden sintáctico ni características que distraigan. Simplemente se aparta de su camino para que pueda centrar toda su atención en el problema o la aplicación en cuestión. No es que Java sea un mal lenguaje por ser más complejo( y tener nombres de clase de 30 caracteres); lo que estoy diciendo es que aprender un lenguaje OO sin trabas en realidad puede convertirte en un mejor programador de Java una vez que entiendas sus conceptos de OO desde otra perspectiva.
Eliminar el estrés cognitivo es un objetivo fundamental de muchos lenguajes, por ejemplo, Python, Ruby, Elixir, Elm y Go. Incluso si no lo sientes, el estrés está ahí. A menudo se dice que la programación en Smalltalk o Python es más bien como Zen; tu mente simplemente fluye sin esfuerzo con la tarea. Esta es la belleza y el valor de la simplicidad del lenguaje, y Smalltalk lo tiene en abundancia.
En Smalltalk, OO se destila a sus conceptos más básicos de clases y métodos, metaclases y reflexión, y lo más importante, transmisión de mensajes. Smalltalk, en virtud de su pureza y consistencia de objetos, le dará una comprensión profundamente mejor de la programación orientada a objetos y cómo usarla para su mejor efecto.
La simplicidad de Smalltalk también lo convierte en un lenguaje de instrucción ideal para aprender programación, especialmente si no tiene experiencia técnica. La simplicidad del lenguaje y las herramientas le permite centrar sus energías en el aprendizaje de técnicas de programación, no en las formalidades lingüísticas.
¿Cómo funciona Smalltalk? El enfoque de programación basado en imágenes
El principal reclamo de Smalltalk a la fama es su enfoque basado en imágenes para la creación de software. Una imagen es una instantánea de la memoria que contiene todos los objetos de la aplicación o el sistema en ejecución. Encapsula todo el estado de ejecución de su programa. Una imagen se puede guardar en el disco, y la ejecución se puede reanudar más tarde exactamente desde donde lo dejó.
La imagen de Smalltalk puede sonar un poco loca, pero de hecho tiene un gran parecido con algo ampliamente utilizado en TI hoy en día: imágenes de sistema en virtualización de sistemas operativos como las que encontramos en VMware y VirtualBox. Hay que recordar que Smalltalk era originalmente un sistema operativo independiente cuando se creó en Xerox PARC en la década de 1970.
La imagen de Smalltalk también se parece mucho al DOM (Modelo de Objeto de documento) de una página web. Tenga en cuenta que una aplicación web es esencialmente un sistema en sí mismo, secuestrado en el navegador web y denegado el acceso directo al sistema de archivos del host y otros recursos. Cuando se cierra un navegador web, el estado del sitio web dinámico se puede guardar o almacenar en caché, y la próxima vez que se reanude el navegador, el sitio web se puede restaurar en el navegador (con algunas limitaciones).
Incluso la hoja de cálculo humilde se ajusta al concepto de imagen. Encapsula todo el estado de ejecución. No puede acceder a los recursos del sistema del host. Se puede guardar y restaurar. Y debe saber que las hojas de cálculo todavía se utilizan para desarrollar modelos sofisticados y aplicaciones con su propio lenguaje.
Por lo que el concepto de imagen es bastante frecuente. Es una forma tan agradable de desarrollar software que se ha creado una versión del concepto de imagen para JavaScript en el Núcleo Animado.
Todo en Smalltalk es un objeto
Sin excepciones: Todo es un objeto. No hay tipos de datos primitivos. ¡No hay estructuras de control como la selección y la iteración! Todo en Smalltalk se hace enviando mensajes a objetos. Esto es lo que hace que Smalltalk sea tan simple, elegante y fácil de aprender. Esto es lo que hace que el lenguaje sea tan limpio sintácticamente.
Por ejemplo, el siguiente fragmento de código extiende la clase Number para admitir una operación factorial no recursiva:
Number extend
ifFalse: .
^ (c fold: ) ]]].
7 factorial printNl.
7 my_factorial printNl. "should be the same result as the previous line"
Aquí, ifTrue: es un mensaje de palabra clave enviado al objeto booleano que resulta de evaluar la expresión (self < 2). El argumento del mensaje de palabra clave es un bloque de código (delineado entre corchetes). En realidad, ifTrue: es la primera parte de un mensaje de palabra clave de dos partes, la segunda parte es ifFalse:.
El mensaje unario new se envía a la clase OrderedCollection para crear una nueva colección. El mensaje printNl se envía al resultado (que es un objeto) de enviar el mensaje my_factorial al número 7. ¡Todo parece un lenguaje natural!
Reflexión computacional en Smalltalk
La reflexión en Smalltalk es particularmente valiosa como un medio para que un programa inspeccione su propia estructura y computación en tiempo de ejecución. Esto confiere un enorme poder, permitiendo que los programas se extiendan con nuevas clases y métodos o pregunten «¿quién me envió este mensaje?»
La reflexión computacional se utiliza para implementar una forma poderosa de manejar errores. Cuando un objeto recibe un mensaje que no implementa, recibe un mensaje doesNotUnderstand:, junto con una reificación del mensaje original. Hay muchas cosas que el programa puede hacer con el mensaje doesNotUnderstand:, ¡incluida la ampliación con una nueva funcionalidad!
El concepto de imagen y la reflexión también permiten a Smalltalk eliminar el límite de aplicación / IDE. Todo lo que necesita para desarrollar, depurar y ejecutar su aplicación está en la imagen. No es necesario abandonar el entorno de aplicación. Es un enfoque completamente holístico para el desarrollo de software que hace que todo sea más Zen y productivo.
El renacimiento de Smalltalk
Los últimos 15 años de desarrollo en el mundo de Smalltalk han hecho que el lenguaje sea mucho más atractivo.
Smalltalk ahora está disponible para programación web de front-end utilizando Amber Smalltalk, que se transpila a JavaScript. El desarrollo de Amber se lleva a cabo completamente en el navegador. Una de las cosas sorprendentes de Amber es que al importar una biblioteca JavaScript, sus objetos se pueden tratar como objetos Smalltalk.
En 2002, se lanzó el framework web Seaside, convirtiéndose en la herramienta más popular para el desarrollo web en Smalltalk. Su enfoque basado en la continuación proporcionó un mecanismo convencional de «llamada/devolución» para su aplicación web. Puede ayudar a resolver problemas como la solicitud doble y los problemas del botón de retroceso. Bastante revolucionario para su época, y todavía no se adopta comúnmente en otros marcos web.
El proyecto Pharo comenzó en 2008 para centrarse en técnicas modernas de ingeniería y desarrollo de software. Ha llevado a Smalltalk mucho más lejos que el proyecto de código abierto anterior llamado Squeak, que se basaba en el venerable dialecto Smalltalk-80. El proyecto Pharo también ha generado investigación en un nuevo tipo de IDE llamado Glamorous Toolkit. Se basa en la idea de que su entorno de programación debe ser «moldeable» para adaptarse a sus necesidades.
El año pasado, el muy apreciado Dolphin Smalltalk se convirtió en código abierto, ofreciendo otra opción maravillosa para los fanáticos de Smalltalk. Dolphin Smalltalk ha sido elogiado con frecuencia por tener una de las mejores implementaciones del IDE de Smalltalk.
El legado de Smalltalk: Hacer que la programación sea divertida
Cuando utiliza las muchas instalaciones de desarrollo de software moderno, como JVM, Eclipse IDE, closures, «live coding», MVC, TDD, VMware e incluso la aplicación web simple y antigua, recuerde sus orígenes en Smalltalk y mantenga un mayor respeto por lo que está haciendo. Tenga una mayor apreciación de los lenguajes que utiliza, ya sean Objective-C, Python, Ruby, Groovy, Scala, Dart o Swift.
Trabajar con el lenguaje que originó todas estas excelentes características y tecnologías proporciona una oportunidad única para mejorar en gran medida su conocimiento, su agudeza mental y su productividad como desarrollador de software. La palabra «diversión» no siempre entra en las discusiones sobre ingeniería de software, pero creo que Smalltalk—y sus hermanos OO—proporcionan la baja barrera cognitiva y la facilidad de programación que puede hacer que la ingeniería de software sea divertida.