Software

Lenguajes, Frameworks, SDKs…

Aclaramos la organización del desarrollo software

Resumen del artículo
  • El mundo del desarrollo se ha complicado en los últimos años: plataformas, lenguajes, herramientas. Indagamos en los conceptos más importantes de la estructura del software.

Hace unos días, alguien preguntaba en Twitter por recomendaciones sobre algún lenguaje de programación para iniciar su aprendizaje. Ni corto ni perezoso me lancé a contestar: «Swift». Pero su respuesta me dejó bastante sorprendido: «No, gracias, pero Swift es Apple».

Esta confusión es muy común, principalmente entre las personas que quieren iniciarse en la programación. Pero hay muchos desarrolladores con años de experiencia que tampoco lo tienen demasiado claro. Vamos explicar la diferencia entre el lenguaje, las librerías y los frameworks.

La base: el lenguaje

Un lenguaje de programación es el conjunto de instrucciones, de palabras reservadas y su sintaxis, que proporciona al programador la forma de interactuar con un computador para indicarle las acciones que debe ejecutar.

Los lenguajes de programación pueden ser creados por una o varias personas, particulares o empresas, y pueden estar licenciados como software libre o de propiedad privada. Por ejemplo Swift, que ahora es Open Source, fue creado por Apple aunque ahora mismo es mantenido por una comunidad de desarrolladores. En el proyecto también hay otras empresas involucradas, incluso empleados de la propia Apple, pero cualquier desarrollador puede contribuir al proyecto si lo desea (y si su propuesta es aceptada).

A priori, distintos lenguajes de programación no pueden interoperar entre sí. Pero en muchos casos se crean mecanismos para que se puedan comunicar entre sí.

Hoy en día los programas y aplicaciones son muy complejos por lo que, además de estructurar el código, necesitamos organizarlos para facilitar la gestión del proyecto. Podemos hacerlo creando librerías.

Librerías y frameworks

Los programas de software pueden ir desde unas simples líneas que un desarrollador escribe en su casa, a miles de millones de líneas programadas por grandes equipos de personas. Sin una organización, resultaría tremendamente complicado manejar aplicaciones como puede ser el procesador de textos que utilizamos en nuestro día a día.

Por ello, es común elegir los componentes de un programa: clases, estructuras, funciones, variables… y crear una agrupación llamada librería que encapsula su funcionalidad. Lo bueno de las librerías es que pueden ser reutilizadas no sólo dentro de la aplicación, si no que otras aplicaciones podrían hacer uso de ellas. Así, los programadores que las utilicen no tendrán que preocuparse por lo que pasa internamente y a su vez el equipo que la ha desarrollado podrá evolucionarla sin preocuparse de otras funcionalidades del programa.

A menudo, estas librerías se encapsulan, se documentan y se distribuyen en paquetes denominados frameworks. Hay bastante controversia acerca de los términos pero como normal general el framework contiene una o más librerías así como el conjunto de reglas de uso de las mismas. Por ejemplo Apple tiene frameworks para trabajar con Mapas (MapKit), Machine Learning (CoreML), Bases de datos (Core Data)…

Gracias a las librerías y los frameworks podemos, por ejemplo, hacer llamadas a servicios web sin conocer todo el entramado de protocolos HTTP, TCP, IP… que se utilizan en la comunicación.

Existen multitud de librerías y frameworks que podemos incorporar a nuestros programas. Alguna son públicas y puedes ver incluso el código, otras son privadas pero abiertas para utilizar bajo licencia y existen las privadas cerradas que usan las organizaciones dentro de sus programas.

Pero no sólo de código vive el desarrollador. Para facilitar su tarea, existen una gran variedad de herramientas que permiten por una parte, escribir código de forma sencilla y utilizar el código para crear aplicaciones y programas para los usuarios.

SDKs y demás herramientas

Hace muchos años, cuando no existían interfaces visuales, desarrollar software consistía en escribir un código y mediante comandos de terminal se creaba un programa que el usuario ejecutaba mediante otro comando de terminal.

Hoy en día el proceso se ha complicado bastante. Si bien internamente la creación de aplicaciones es bastante sofisticada, tenemos multitud de herramientas que facilitan la creación y distribución de los programas haciendo que el desarrollador se centre en lo importante: escribir código y de calidad.

Hoy en día las empresas o comunidades enfocadas en el software, han creado los llamados SDK (Software Development Kit). Se trata de un conjunto de herramientas, que van desde un editor de código hasta estructuras de compilación, librerías y/o frameworks, cuyo fin es crear software para una o varias plataformas.

Para entenderlo mejor, vamos a conocer varios ejemplos de SDKs y lo que son capaces de hacer.

Xamarin 

Se programa utilizando Visual Studio, propiedad de Microsoft, y permite generar aplicaciones para Windows, macOS, iOS, Android… mediante las librerías .NET. Se programa en C# pero muchas de las librerías sobre las que está construido están desarrolladas utilizando C o C++. Proporciona varias opciones: un modo en el que se genera un binario universal para todas las plataformas y otros en el cual se programa para cada una de manera independiente traduciendo código C# al lenguaje de la plataforma y usando el framework de creación de aplicaciones específico de la misma.

Android 

La herramienta oficial actual es Android Studio. Proporciona todas las librerías necesarias para el desarrollo así como el constructor de interfaces y la generación de ejecutables mediante Android SDK. Pueden utilizarse los lenguajes Java y/o Kotlin indistintamente y las librerías pueden estar programadas en cualquiera de ellos. Ambos lenguajes son interoperables (podemos hacer llamadas de uno a otro de forma simple) y los dos se pueden ejecutar sobre la máquina virtual de Java que da soporte a las aplicaciones de Android.

Cocoa y Cocoa Touch (Apple)

Xcode es la herramienta que proporciona todos los SDKs para crear aplicaciones en plataformas de Apple. Cada una de las apps (al menos hasta septiembre) tienen su framework de desarrollo de aplicaciones: UIKit para iOS, AppKit para macOS, WatchKit para watchOS… que incluyen el diseño de las interfaces. Los lenguajes compatibles son Swift y Objective-C. La mayoría de los frameworks están construidos con este último, ya que Swift hasta hace poco no era estable como para crear librerías independientes, pero ya tenemos SwiftUI, Combine o RealityKit con Swift. El truco en este caso es que ambos lenguajes utilizan la misma arquitectura de compilador llamada LLVM y mediante cabeceras simples pueden hacerse llamadas entre ellos.

Pero, ¿Swift es Apple o no?

¡No, no y mil veces no! Swift fue creado por Apple, empleados de Apple están inmersos en su desarrollo y sus plataformas utilizan el lenguaje pero hay mucho más Swift ahí afuera. Para empezar, Swift es compatible con Linux, es decir, que podemos crear programas que se ejecuten sobre varias distribuciones de este sistema (aunque solo Ubuntu tiene soporte oficial) y Microsoft anunció que haría compatible Windows en cuanto el lenguaje fuera estable a nivel binario, cosa que ya ha pasado.

Por si esto fuera poco, existen frameworks que permiten crear servidores web completos de forma muy sencilla, segura y con un rendimiento muy alto. Ya podemos desarrollar servicios de backend para nuestras aplicaciones o una página web completa utilizando Swift con herramientas como Vapor.

Otro detalle muy importe es que el padre del lenguaje, Chris Lattner, tras dejar la compañía de la manzana y pasar por Tesla, ha sido un tiempo responsable de TensorFlow, el framework de Machine Learning de Google y probablemente el más avanzado. Pues bien, TensorFlow está desarrollado en python (como lenguaje de programación) y se están dando pasos para que las librerías sean interoperables con Swift. Además, python no es un lenguaje compilado por lo que está penalizado en rendimiento. Swift sí lo es y se postula como un gran candidato a ser un lenguaje de primer nivel para el Machine Learning.

Por último y no menos importante, el nuevo sistema de Google llamado Fuchsia tendría soporte para Swift. Aunque la compañía del buscador dice que es un pasatiempo, muchas son las voces que aseguran que sería el sustituto de Android en unos años. O al menos un sistema para probar conceptos que luego se incorporarían a Android, como el soporte de desarrollo nativo a nivel binario con lenguajes como Swift (ahora mismo en Android ya se puede desarrollar en C++ de forma nativa).

Espero que haya quedado un poco más claro quién es quién y, si finalmente no eliges Swift como lenguaje de programación, que al menos tendrás claras las razones. Un saludo y Google Apple Coding.

Arturo Rivas

Líder técnico especializado en mobile. Analista y desarrollador software. Apasionado de la tecnología, el deporte y la música.

Artículos relacionados

Botón volver arriba