La tecnología en el 2020

Para nadie es un misterio que estas últimas dos décadas han sido bastante vertiginosa en lo que a tecnología se refiere. Si el principio de siglo estuvo marcado por el auge de internet y consigo todas las tecnologías asociadas a la World Wide Web, el decenio que acabamos de pasar trajo consigo todos estos avances a nuestro bolsillo, mediante nuestros teléfonos celulares.

Hoy que vivimos en una época de, breve, transición tecnológica, es lógico preguntarnos ¿Qué se viene el próximo decenio? ¿Que nos espera en el 2020?

¡Aquí algunas predicciones!

Aprendizaje profundo

Los últimos años han estado marcados por increíbles investigaciones en el área de las redes neuronales, dando grandes pasos en lo que es aprendizaje profundo. Lo anterior se ve potenciado no solo por nuevos algoritmos como son las redes neuronales recurrentes (como las redes de Hopfield) y convolucionales, también por aprovechar la capacidades de hardware que tienen los computadores modernos, especialmente para paralelizar procesos y el uso intensivo de las GPU.

Pero ¿Qué es el aprendizaje profundo? Es poder procesar más información en más capas lo cual nos permite tener aprendizaje más potente. En menos de una década pasamos de tener redes con la capacidad de un insecto a algo similar a la capacidad de la visión humana.

En la práctica significa que hoy somos capaces de enseñarle a un auto a conducirse solo, a un computador convirtiendo fotos en obras de artes imitando el estilo de algún autor, cámaras reconociendo a la perfección los elementos que hay en una mesa o celulares reconociendo nuestra voz y siguiendo nuestras instrucciones.

En un futuro no tan lejano probablemente tengamos no solo autos que se manejen solos. Habrá un sin fin de tareas que hoy realizamos humanos que a futuro computadores suficientemente inteligentes podrán realizar. ¿Tiendas o camiones de basura que se manejan solos? ¿Máquinas que hagan el aseo por nosotros? O en el campo militar ¿Guerras que participen, de forma masiva, soldados dirigidos por computadoras sin injerencia humana?

Robotica, domotica e Internet de las cosas

No solo el desarrollo del aprendizaje profundo le ha dado un nuevo impulso a la robótica, el internet de las cosas y la automatización de nuestros propios hogares ha abierto un sin fin de posibilidades. Hoy ya podemos controlar nuestro hogar desde nuestros celulares, desde abrir nuestras puertas hasta programar nuestros electrodomésticos, y todo apunta a su masificación.

Pero no todo quedará en nuestro hogar, el Internet de las cosas también tiene su lugar y viene a complementar este auge de tener todo conectado. Desde prendas de vestir hasta los accesorios estarán conectados a internet cuantificando distintos aspectos de nuestras vidas y agregando nuevas funcionalidades. ¿Mochilas que nos avisan cuando nos están robando? ¿Prendas que detecten enfermedades o midan signos vitales?

Otro lugar importante lo tienen los autos. No solo por que ya se están empezando comercializar autos que se manejan solos si no también por la llegada de los sistemas operativos para nuestros celulares como iOS y Android a estos coches. Con sistemas que ya incorporan nuestros celulares que mediante eventos o comportamientos recurrentes nos avisan recorrido y tiempo que se necesita para llegar al lugar de destino, no va a ser extraño que a futuro nuestro auto nos esté esperando afuera de nuestras casas para partir ya que vamos atrasados a un compromiso.

Concurrencia y el reinado de Javascript

Hoy sin duda el lenguaje que ha dominado el desarrollo de nuevas tecnologías es Javascript, principalmente por el auge de crear aplicaciones isomórficas donde el lenguaje del servidor y cliente (web en la mayoría de los casos) es el mismo. En la misma línea ha jugado un papel importante Meteor llevando la idea del isomorfismo a otro nivel permitiendo usar no solo el mismo lenguaje, sino también las mismas bases de datos tanto en cliente como en servidor. Esto disminuye la brecha entre el desarrollo de ambas partes del sistema agilizando el desarrollo y generando consistencia entre las mismas aplicaciones.

Cuando pensamos que el auge de Javascript (y el ecosistema que lo acompaña, sobre todo NodeJS) estaba en declive el 2015 nos sorprende con múltiples noticias casi simultáneas:

  • La llegada de React Nativo, permitiendo escribir con componentes de forma reactiva aplicaciones nativas para sistemas móviles.
  • La creación de un equipo compuesto por profesionales de Microsoft, Google y Mozilla para crear WebAssembly, una forma de compilar aplicaciones (en el cliente y servidor) de forma estándar e independiente del sistema donde se ejecuten. Javascript más liviano y rápido de ejecutar.
  • La unión de dos proyectos similares, Node.js e io.js en Node.js 4, realizando un esfuerzo enorme no solo en juntar sus bases de código sino también en realizar un esfuerzo conjunto para juntar los equipos de desarrollo.
  • La compra por parte de IBM de StrongLoop, dueños de LoopBack, uno de los principales frameworks Node.js, poniendo al gigante tecnológico y los recursos que esto implica, detrás del mejor framework para la creación de APIs RESTful existente.

En paralelo, han surgido múltiples lenguajes que utilizan el paradigma concurrente. Esto implica que la creación y comunicación de procesos en lenguajes como Golang, Clojure, Erlang o Elixir es trivial. Lo anterior no solo aprovecha las bondades de la computación distribuida de forma más eficiente, transparente y fácil, además nos entrega un sin fin de posibilidades al facilitar la comunicación entre procesos que ni siquiera están en la misma máquina.

Y como era de esperarse, junto con estos lenguajes y su auge han salido múltiples frameworks web con capacidades increíbles. A modo de ejemplo, Phoenix, un framework web que alcanzó ya su versión 1.0, ostenta tener tiempos de respuesta medibles en microseconds y generar aplicaciones web en tiempo real por defecto.

A ciencia cierta nadie puede saber si continuará el reinado de Javascript, si alguno de los lenguajes que ha estado tomando vuelo tomará su lugar o habrá una coexistencia pacífica. Lo que sí está claro es que Ruby on Rails y Djando ya no serán los predilectos de las startups de Silicon Valley.

El revivir de SOA como microservicios

Si un tema a sido noticia en todo el mundo de la arquitectura de software es microservicios. Las empresas líderes del mercado como Google, Amazon, Netflix y Yahoo hablan de ello (y se reúnen para crear estándares al respecto), llenan salas en conferencias y han generado todo un nuevo auge tecnológico. Pero ¿Que son? Bueno, básicamente, es la descomposición de un sistema en servicios pequeños y autónomos que se comunican entre sí. El espíritu de lo que fue SOA (arquitectura orientada a servicios por sus siglas en inglés) hoy es viabilizado por tecnologías como los contenedores y frameworks para APIs RESTful.

El auge que han tenido no solo se debe a que la idea de desacoplar un sistema en distintos servicios con responsabilidad unica con heterogeneidad de tecnologías y lenguajes es sexy… Porque lo es. Además en los sistemas modernos se hace necesario. Mantener una base de código de las proporciones que hoy hablamos, en un único sistema monolítico se hace sumamente costoso, y no solamente eso, cuando hablamos de distribuir dichos sistemas es evidente que replicar absolutamente todos los componentes de forma homogénea es ineficiente. Al ser servicios autónomos coordinados por un sistema que actúa como puerta de entrada pueden ser distribuidos a la medida que la carga de cada uno por separado crece.

Con el trabajo que ahora en conjunto las grandes empresas están invirtiendo y el auge que ha tenido sin duda alguna veremos más y mejores herramientas para crear software con esta arquitectura. Será la elección por defecto cuando hablemos de software a mediana y gran escala, especialmente en empresas que sus sistemas web sean parte crucial de su negocio.

Fin de la era de los contenedores

Los contenedores y las tecnologías asociadas han generado una capacidad importante para probar y poner en producción sistemas de diversa complejidad. Pero no solo se han ganado elogios, además un sin número de críticas por su tamaño, velocidad y estándares de seguridad. Problemas que vienen a solucionar los unikernels.

Los unikernels son, algo así como, una versión compilada de los contenedores. Son pequeñas imagenes que son resultado de compilar un sistema operativo para una único propósito. Donde los contenedores para una aplicación podían pesar 800MB un unikernel puede pesar 50MB.

Pero no solo en tamaño y rendimiento destacan, además, como son maquinas especializadas en un único propósito los márgenes para poder vulnerar su seguridad son estrepitosamente menores.

En un futuro cercano sistemas como MirageOS o LING podrán tener las facilidades que hoy entregan los contenedores para así dar a pequeñas empresas y startups la posibilidad de reducir sus costos y aumentar sus estándares de seguridad cuando les toque armar sistemas más complejos o distribuidos.