¿Podrá un robot sustituir a un programador?

Robots programadores

¿Deben temer los programadores que un robot pueda llegar a hacer su trabajo? Lo peor quizá no sea que un robot haga el trabajo de una persona, sino el robot en sí.

Seguro que más de uno habéis visto alguna serie como Westworld o películas como Ex Machina, donde (seguramente con razón) los robots se acaban cargando a un ser humano, acabando así de un plumazo con la primera ley de la robótica.

En el campo que nos ocupa de la programación, para que un robot pueda reemplazar a un programador tendrá que demostrar inteligencia humana (y eso ya de por sí asusta un poco). Pero mientras eso ocurre, alguno de los hermanos pequeños de ese futuro robot (y que por ahora nos dan menos miedo) puede que nos ayude a hacer más fácil nuestro trabajo.

¿Qué es la automatización?

A día de hoy es fácil decir que la automatización reemplazará muchos trabajos en el futuro. Pero por ahora se trata de algo exclusivo de determinados sectores de la industria: fabricación de un producto, transformación de algunas materias primas, logística para la entrega con vehículos autodirigidos … En estos casos es fácil entender qué es la automatización. Tendremos a unos cuantos seres humanos a atender esas máquinas, o simplemente como objeto decorativo, pero son las máquinas las que harán la mayor parte del trabajo.

En el caso del desarrollo de software la cosa se complica. Tenemos un producto objetivo (punto B) representado por la aplicación que se ejecuta en un dispositivo (escritorio, móvil, dispositivo, lo que sea) … pero ¿cuál es el punto A?

Tenemos el código fuente. Un compilador lo procesa y lo transforma en código máquina, para que la propia máquina pueda entenderlo. Puede que no sea un robot con aspecto industrial, pero sin duda es una máquina que transforma un mensaje de A a B. A medida que nuestras lenguas se vuelven más abstractas y más expresivas, el papel de esta máquina se vuelve cada vez más importante. Añadamos algunos scripts, pruebas automatizadas, despliegue de botones y tendremos una enorme cantidad de trabajo que ya no está haciendo un humano.

El compilador no es lo que preocupa. De hecho, sería estupendo que fueran más inteligentes. El sueño es un futuro donde poder recibir mensajes de error coherentes.

Y no hablamos de ficción, ya existen proyectos que intentan dar este salto, como por ejemplo cTuning Compiler Collection (cTuning CC). Este proyecto consiste en una colección de varias herramientas que combinan múltiples técnicas y frameworks cuyo objetivo es crear sistemas adaptativos avanzados, utilizando técnicas empíricas y algoritmos muy complejos.

Dentro de este grupo, destaca MILEPOST GCC. Este proyecto es uno de los primeros intentos en crear un compilador que pueda adaptarse a cualquier arquitectura utilizando un proceso de compilación iterativo, optimizándolo para lograr un aprendizaje automático, apoyándose en un centro colaborativo, donde se registran todas y cada una de las situaciones aprendidas.

 

Milepost GCC

Entonces ¿podrá un robot sustituir a un programador? – Seguramente no es posible …

Una interpretación popular de la automatización es que no necesitaremos código fuente. Las máquinas podrán “programarse”. Suena un poco confuso, así que intentaremos entender lo que esto podría significar.

Considere a una persona sentada delante de su ordenador, deseando que la máquina haga algo por él o ella. Supongamos que esta persona habla con el ordenador ya que el reconocimiento de voz es una realidad, aunque no sea perfecta. ¿Qué le dice al ordenador?

¿Qué pasa si necesitamos hablar en comandos estructurados, como “carga este archivo”, “cambia este texto a este”, o “guarda el archivo en el directorio X?” Esto es sólo un lenguaje de programación. Puede ser bonito, pero no es algo novedoso. Es sólo otro compilador más. Aunque más “cool” respecto a los que conocemos.

Para ser innovadores deberíamos permitir que el usuario haga peticiones abstractas, como “actualizar la fecha en mis documentos de ventas” o “cruza los datos de mis saldos bancarios con los gastos y dime dónde hay discrepancias”. Es más, si el objetivo es producir aplicaciones reutilizables, necesitamos que esto sea aún más abstracto: “Crea un plugin que descargue extractos bancarios, lo compare con los gastos y me devuelva un informe estándar”.

Este es el punto crucial de la programación: partiendo de requisitos abstractos y a menudo confusos, crear algo que sea útil. Para ello, tenemos que navegar por la comprensión humana, así como a través de un mar de opciones técnicas. Escribir código consiste en recoger esas ideas y convertirlas en algo concreto y útil.

Y esto no es algo que la inteligencia artificial esté cerca de poder hacer. Incluso los programadores humanos a veces tienen que trabajar mucho para conseguirlo. Es un nivel de razonamiento mucho más allá del alcance de lo que consideramos la automatización.

Pero quizá sí que sea posible…

Existe un rol menos tangible en la automatización. Si habláramos de Derecho Legal, podría representarse en un agente de búsqueda de jurisprudencia. En medicina sería un motor de búsqueda que relaciona distintos síntomas. Estas herramientas reemplazan en parte el esfuerzo humano y también ayudan a tomar mejores decisiones. Estos son escenarios donde la automatización puede funcionar y destacar. Después de todo, el trabajo no es sólo el razonamiento abstracto que hacemos como programadores, sino que todavía hay un montón de codificación real adicional que hacer.

De hecho, este tipo de herramientas de ayuda a la toma de decisiones ya son una realidad. Y no nos referimos a las herramientas de business intelligence (que también serían válidas), sino al nuevo movimiento que poco a poco va ganando importancia: las herramientas cognitivas.

El mejor ejemplo de este tipo de herramientas es Watson, de IBM. Esta herramienta ha combinado técnicas de BI, Big Data, análisis predictivo, cognitivo y sintáctico. De momento solo responde a solicitudes en inglés, pero es capaz de procesar las peticiones en lenguaje formal (acotándolo al contexto, por supuesto) y entregar resultados predictivos de muy buena calidad.

Podemos encontrar numerosos casos reales del uso de este tipo de sistemas cognitivos. Por ejemplo, The Weather Company utiliza Watson para mejorar la toma de decisiones y previsiones meteorológicas. Otro ejemplo real, el uso de Watson en medicina, para mejorar las decisiones de los médicos respecto a tratamientos.

Pero una cosa es el análisis de datos y toma de decisiones y otra el análisis de código estático. Estas son herramientas que buscan en el código fuente de un programa y encuentran errores. Estas herramientas ya han demostrado que pueden ayudar a encontrar fugas de memoria y agujeros de seguridad. Y mejorará con el paso del tiempo.

Las herramientas de optimización también mejorarán. En lugar de trabajar en un nivel bajo, donde ya hacen un trabajo increíble, podrán crecer y apuntar más alto. Será muy interesante contar con herramientas que sugieran reescribir una función, porque ha identificado el algoritmo XYZ, lo ha comprendido y tiene una solución mejor.

También será interesante ver la próxima generación de herramientas de refactorización. Actualmente ya existen numerosas herramientas de este tipo, pero cuidado, no son Sistemas Inteligentes, son Sistemas Expertos. La diferencia es que el sistema experto realiza (de forma excelente) las tareas que se le han programado, ninguna más. El sistema inteligente, es aquel que además de realizar las tareas programadas, las entiende, propone nueva soluciones e incluso, las mejora. Identificar funciones lógicas similares y factorizar el código común es algo que posiblemente la IA podría llegar a hacer. Hay un montón de refactorización que actualmente un programador no hace ya que a menudo no vale la pena el esfuerzo. La misma automatización podría convertirse en mejores sistemas de control que entiendan el código, no sólo el texto línea a línea.

Mucho que ganar y poco que perder.

Una gran cantidad de programación ya está automatizada y cada vez lo estará más, es una realidad. Es cierto que cuanta más automatización, menos roles, pero estos avances servirán principalmente para mejorar la productividad. Dado el volumen de problemas que tienen la mayoría de los proyectos, un aumento significativo en la productividad no supondrá la desaparición de equipos humanos de trabajo. Sólo resultará en un software de mayor calidad.

Eliminar completamente a los programadores de la ecuación requerirá una inteligencia artificial de nivel humano. Y si alguna vez empezamos a ver robots con sensibilidad humana caminando a nuestro lado, os aseguro que nuestro primer pensamiento no será “Vaya, me van a quitar el curro …”

 

Artículo traducido y desarrollado por Adrián Hontoria y Jose Antonio Alonso.

Ver artículo original en inglés de Edaqa.

Resultados de la encuesta anual a programadores de Stack Overflow

Stack Overflow

Más de la mitad de los programadores consultados asegura que la posibilidad de trabajar en remoto es uno de los aspectos más importantes a la hora de valorar una oferta de trabajo.

Desde 2011, Stack Overflow pregunta cada año a los desarrolladores de todo el mundo acerca de sus tecnologías favoritas, hábitos de codificación y preferencias de trabajo, cómo aprenden, comparten y mejoran su nivel. Este año ha participado el grupo más grande de encuestados de la historia: 64,000 desarrolladores realizaron la encuesta de 2017 durante el mes de enero.

Stack Overflow es la comunidad de desarrolladores de software más grande y fiable del mundo gracias a encuestas e informes como el que nos ocupa, los cuales comparten para mejorar la vida de los desarrolladores. Según sus propias palabras “Queremos capacitar a los desarrolladores proporcionándoles información sobre ellos mismos, su industria y sus compañeros. Y queremos utilizar esta información para educar a las empresas sobre quiénes son los desarrolladores y qué necesitan”.

Cada año que se realiza la encuesta se descubren cosas nuevas, y este año no iba a ser una excepción:

· Un error común acerca de los desarrolladores es que a menudo se piensa de ellos que empezaron a programar siendo muy jóvenes y ya llevan muchos años en ello. La encuesta demuestra que existe una amplia gama de niveles de experiencia. Entre los desarrolladores profesionales consultados, el 11,3% obtuvo sus primeros trabajos de codificación solo un año después de haber aprendido a programar. Un 36,9% más aprendió a programar en un periodo de entre uno y cuatro años antes de comenzar su carrera como desarrolladores.

· Sólo el 13,1% de los desarrolladores están buscando trabajo activamente. También destaca el dato de que el 75,2% de los desarrolladores están interesados en conocer nuevas oportunidades de empleo.

· Cuando preguntamos a los encuestados qué valoraban más al considerar un nuevo trabajo, el 53,3% dijo que las opciones de trabajar en remoto eran una prioridad. La mayoría de los desarrolladores, el 63,9%, asegura que actualmente trabaja en remoto por lo menos un día al mes, y el 11,1% dicen que trabajan en remoto a tiempo completo o casi todo el tiempo.

· La mayoría de los desarrolladores aseguran estar mal pagados. Los desarrolladores que trabajan en el gobierno y las organizaciones sin fines de lucro se sienten los peor pagados, mientras que los que trabajan en finanzas se sienten los mejor pagados.

Haz clic aquí para ver la encuesta completa de Stack Overflow.

Qlikview, TOMA DE DECISIONES BUSINESS INTELLIGENCE

Logotipo de Qlikview

Qlikview es una herramienta de Business Intelligence que permite crear cuadros de mando útiles obteniendo información de diversas fuentes.

Es una herramienta útil para empresas de cualquier tamaño:

1. Imagina que eres un pequeño e-commerce y utilizas diferentes herramientas para gestionar tu negocio en aspectos tan dispares como los carritos abandonados, los orígenes del tráfico orgánico, las menciones en redes sociales … Todos estos son datos que seguramente estás analizando de forma individual, cada uno de ellos con su herramienta correspondiente y en ningún momento tienes la posibilidad de detectar relaciones entre ellos.

Una integración de Qlikview marcará la diferencia en la gestión de tu negocio. Por ejemplo, te permitirá crear un panel de control único con una interfaz totalmente personalizada donde acceder a toda la información crítica de tu negocio en un solo vistazo. El procesamiento y análisis de datos de diferentes fuentes que es posible hacer con Qlikview te permitirá definir relaciones entre elementos que hasta ahora no las tenían, el límite lo ponen tus necesidades de información; Qlikview recogerá el dato de las fuentes que quieras cruzar y te mostrará las relaciones de una forma intuitiva.

2. También puede que seas una gran marca retail con decenas o incluso cientos de tiendas y hayas detectado problemas a la hora de obtener información útil en … ¿el proceso de distribución? ¿la gestión de pedidos recibidos por Internet donde utilizas distintos proveedores para realizar las entregas?

Qlikview te permitirá recibir información de cualquier fuente de datos e integrarlos para tomar decisiones de negocio óptimas. Todo de forma instantánea y en tiempo real. Cualquier empleado de la empresa encargado de esta área podrá acceder a los datos y tomar decisiones en cualquier momento y lugar.

Dashboards Qlikview
Ejemplos de Dashboards de Qlikview

La integración de datos de distintas fuentes y su rápido procesamiento es una ventaja competitiva para cualquier organización que pretenda ser eficaz. Y no solamente a nivel de empresa sino también a nivel de departamentos ya que es posible realizar integraciones para análisis de datos de distintas áreas de forma individualizada como marketing, finanzas, IT, recursos humanos, distribución, suministros …

Los cuadros de mando pueden desplegarse en entornos web con lo que la información está accesible desde cualquier dispositivo con acceso a Internet: escritorio, móviles, tablets …

El punto fuerte de Qlikview radica en su lógica asociativa, realizada por completo en memoria, al instante. Aparece por tanto un nuevo concepto llamado “Autoservicio BI”, ya que los propios usuarios son los que varían los cuadros de mando gracias a la rapidez de procesamiento. Es por esto por lo que se pueden obtener resultados con una capacidad analítica muy alta.

Fruto de esta tecnología tan optimizada es la posición de Qlikview en los cuadrantes de Gartner en los últimos años, llegando a posicionarse como líder, a la par de los productos de BI tradicionales.

En Oxygen podemos ayudarte en la integración de QlikView en tu empresa. Ponte en contacto con nosotros, estaremos encantados de explicarte los beneficios que puede aportarte esta herramienta.

PROGRAMAR TU PROYECTO EN LARAVEL

Logotipo Laravel

Un programador php muchas veces no trabaja solo, se apoya en un framework que le permite construir aplicaciones web de forma mucho más sencilla y económica. Laravel es uno de ellos.

En Oxygen tenemos profesionales con varios años de experiencia y diversos proyectos desarrollados en Laravel.

Laravel surge en 2011 y se ha convertido en un framework de PHP en el confían desarrolladores de todo el mundo por su simplicidad, flexibilidad y robustez.

 

ALGUNAS VENTAJAS PARA TU PROYECTO

  • Reduce los costes de desarrollo de un proyecto ya que disminuye los tiempos de programación y mantenimiento.
  • Se pueden crear rutas de una manera muy simple. Agruparlas, poner filtros de condiciones para acceder, y otras funcionalidades lo que hace mas fácil el mantenimiento del sitio web, así como el construir urls amigables que indexar más fácilmente en Google y otros buscadores.
  • Cuenta con buena y abundante documentación, por lo que un proyecto puede ser más fácilmente compartido entre diferentes desarrolladores a lo largo del tiempo. Además posee una amplia comunidad y foros.

 

Y ALGUNAS VENTAJAS MÁS DE TIPO TÉCNICO …

  • Es MVC (Modelo Vista Controlador) lo que permite separar la aplicación en tres capas: Modelos (encargada de gestionar los datos), Controlador (encargado de la lógica y el procesamiento de la aplicación) y Vista (el front-end).
  • Es modular y con una amplio sistemas de paquetes y drivers con el que se puede extender la funcionalidad de forma fácil, robusta y segura.
  • La interacción con las bases de datos es totalmente orientada a objetos, siendo compatible con la gran mayoría de las bases de datos del mercado actual y facilitando la migración de nuestros datos de una forma fácil y segura.

 

Por estas y otras muchas razones, Laravel se ha convertido en un framework de referencia ya que presenta una: sencillez, robustez y menores costos y tiempos en los desarrollos sin importar el tipo de proyecto al cual se aplique.

TECNOLOGÍAS DISPONIBLES EN OXYGEN

Tecnologías Oxygen

Este es un listado de las tecnologías que podemos utilizar en Oxygen para desarrollar tu proyecto. Esta lista está en constante evolución por lo que te recomendamos ponerte en contacto con nosotros si tienes alguna pregunta o hay algo que no encuentras.

LENGUAJES / TECNOLOGÍAS

CSS3

Ecmascript 6

HTML 5

Java

JavaScript

Meteor

Native Script

Node.js

PHP

Phyton

Ruby

Scala

Typescript

 

CMS / SHOP CORES

CS Cart

Joomla

Magento

Moodle

Prestashop

Shopify

WordPress

 

MÓVILES

Android nativo

Cordova

iOS nativo

Phonegap

Windows Phone

Xamarin

 

FAMILIA CSS

Bootstrap

LESS

Responsive HTML/CSS

SASS

 

FRAMEWORKS JAVASCRIPT

Angular JS

Ember JS

JQuery

React JS

Vue JS

 

FRAMEWORKS PHP

Cake PHP

Codeigniter

Laravel 5

Symphony

Yii 2

 

FRAMEWORKS JAVA EE

Play

Spring

 

FRAMEWORKS NODE.JS

Express

Salis

 

FRAMEWORKS PYTHON

Django

 

BASES DE DATOS

Couchbase

Elasticsearch

MongoDB

mySQL

PostgreSQL

Redis

 

SERVERS

Apache

Apache Tomcat

Jetty

 

ORM

Sequelize

Mongoose

Hibernate

 

TASK RUNNERS

Composer

Grunt

Gulp

Maven

 

PAAS

AWS Elastic Beanstalk

Heroku

 

PROTOCOLOS

JSON-RPC

REST

SOAP

XML-RPC

 

CONTROL DE VERSIONES

GIT (Github, Bitbucket)

SVN

 

APIs

Airpush API

Authorize Net

Bing API

DailyMotion API

Facebook Ads API

Facebook API (login, compartir, …)

Google Adwords API

Google Analytics API

Google API (login, compartir, …)

Google Maps API

LinkedIn API

PayPal Direct Payment

PayPal Express Checkout

Sound Cloud API

Stripe

Twitter API

YouTube API

 

OPTIMIZACIÓN SERVIDORES

APC Cache

Docker

Jenkins

Memcache

Varnish Cache

WebRTC

 

OTROS SOFTWARE

3D Studio Max

Adobe PhotoShop Design

Autocad

Blender

Dreamweaver / Fireworks

Flash

Illustrator

PhotoShop

Premiere

Rhino

V-Ray

¿CÓMO DESARROLLO MI PROYECTO? ¿IN-HOUSE? ¿OUTSOURCING? ¿FREELANCE?

Oficina de trabajo

Cualquier responsable de desarrollo se ha hecho esta pregunta alguna vez.

En Oxygen, como empresa de desarrollo de software que somos, nos hemos encontrado con infinidad de situaciones y necesidades distintas y toda esa experiencia nos ha permitido desarrollar nuestra propia teoría.

 

“Lo óptimo es que cuentes con alguien in-house que conozca bien el proyecto y tenga una formación tecnológica buena; que la parte principal del desarrollo la realices con una compañía externa y que el mantenimiento y las pequeñas mejoras las afrontes con un freelance o un equipo externo”

 

Ahí queda eso. Vayamos por partes.

 

Hoy en día muchos negocios tienen una fuerte base tecnológica por lo que es obligatorio que o bien el equipo directivo tenga una buena formación tecnológica o bien cuenten con alguien in-house que sea el responsable de este área. Es importante que, en la medida de lo posible, tengamos el control tecnológico de nuestro proyecto y conozcamos sus fortalezas y debilidades.

Este perfil, debe ser el responsable de definir el proyecto y transmitirlo a un equipo de desarrolladores que le den vida.

 

A la hora del desarrollo ¿es mejor tener un equipo interno o externalizar? Desde nuestro punto de vista, es mucho mejor externalizar por dos motivos:

1. Experiencia y actualización

Un equipo externo está en constante evolución. Vemos muchos proyectos distintos en el mismo tiempo en el que un equipo in-house ve solamente uno. El suyo propio.

Es cierto que el equipo interno se especializa al máximo, pero eso mismo provoca que su capacidad de innovación sea mucho menor. En grandes empresas es evidente que hace falta un mix, es decir, mantener un equipo interno que soporte el día a día y externalizar una parte del proyecto que aporte innovación y frescura de forma continua.

 

2. Costes fijos y flexibilidad

Un equipo de desarrollo interno implica unos costes fijos que en muchas ocasiones no se tienen en cuenta: costes laborales, bajas, vacaciones, costes de formación, tiempos de contratación, gestión de recursos humanos, etc. La externalización elimina de un plumazo todos estos costes.

Un equipo externo aporta la flexibilidad que el ritmo de la economía actual necesita. El mundo tecnológico tiene unos tiempos de reacción muy cortos y trabajar con una empresa externa es como tener un servicio “plug and play”. Además, lo utilizas solamente el tiempo que lo necesitas y con un coste conocido de antemano.

 

Una vez finalizado el desarrollo principal, será necesario mantenerlo y hacer mejoras del mismo. Nuestra experiencia aquí nos dice que lo óptimo es tener un responsable tecnológico que sea capaz de innovar (y para eso hace falta tiempo que no se tiene si se emplea en desarrollar) y también de transmitir los objetivos del desarrollo a un equipo externo (o un freelance) que sería quien ejecutaría el proyecto.

 

En resumen, en nuestra opinión, cualquier empresa de base tecnológica debería:

  1. Centrarse en su modelo de negocio y trabajar en la definición de las innovaciones que necesitan para mantenerse como líderes en su sector (que es lo que va a hacer que ese negocio tenga éxito en el tiempo).
  1. Tener in-house un responsable o un pequeño equipo que le aporte estabilidad y control tecnológico del proyecto.
  1. Y externalizar todo el desarrollo y evoluciones tecnológicas del proyecto para optimizar costes, tener flexibilidad, capacidad de reacción y un aporte de innovación exterior.