Saltar al contenido

Archivos del Blog

Habilidades para un currículum informático.

Habilidades para un currículum informático.

1. Licencias

Hablando del currículum informático, me han escrito preguntándome por una licencia para un programa. Una licencia de cualquier aplicación contiene una serie de reglas para el uso y modificación de la misma. Licencias libres, dan libertades. Privativas, no las dan. También me ha dicho que yo era de los pocos que les ha hablado de licencias. ¿Cómo puede ser que una persona de una carrera no sepa de licencias? Si alguien le encarga un programa, ¿cómo sabe lo que el cliente puede o no hacer? Si decide usar librerías libres en una aplicación que va a liberar, o para el caso a vender, ¿cómo sabe qué licencia tiene que poner? Es sólo un ejemplo de estas carencias que percibimos los que venimos del campo del software libre. Y seguramente también clientes, personas de recursos humanos que entrevisten y en general, el mundo.

2. Lenguajes. También de programación.

Para un buen currículum informático que aprender un lenguaje de programación. Sí, uno. Cualquiera me vale, pero os voy a dar una pista de lo que no es un lenguaje de programación: Matlab. Es un entorno privativo donde es fácil hacer cosas porque todo está ya hecho. ¿Procesamiento de imágenes? Toolbox de procesamiento de imágenes. ¿Redes neuronales? Toolbox de redes neuronales. Todo fácil y bonito y pagado por el contribuyente. O pirateado, que tampoco hay que hacerle ascos. Pero ¿y si hay que hacer algo que no esté en una toolbox? Huuuy, qué follón… va a ser que no.

Si esos lenguajes ya son de scripting, tienes dos por el mismo precio. Pero es que incluso en las facultades  en las que enseñan lenguajes de programación, se limitan a usar extensivamente C++ o Java. Excelentes lenguajes. También con una curva de aprendizaje elevada y poco ágiles a la hora de desarrollar rápidamente algo.

Afortunadamente los dos son libres, aunque en algunos casos sólo se verán entornos de programación privativos, en el caso de C++, o, peor, sólo se verán lenguajes de programación privativos Visual algo. Los lenguajes de scripting son fundamentales para prototipado, para sistemas y para mil tareas que un informático tiene que hacer. Si no conoces Python, Perl, Ruby, JavaScript, te faltan habilidades que vas a necesitar con una probabilidad cercana al 1 en tu puesto de trabajo.

Y si no conoces otro lenguaje, el inglés, también. Busca un mensaje de error de una librería y la respuesta estará en inglés, y sí, en StackOverflow. Así que el stack de unfull stack programmer debe incluir al menos ese lenguaje, el inglés. Aunque sea para saber qué significan las palabras full stack.

3. Sistemas.

¿Cómo se instala este programa? Es frase escuchada en másters de informática en todos sitios. El problema es que cuando han visto sistemas operativos no han visto qué es el kernel, cómo se levantan servicios o cómo ver el rendimiento del mismo, sino semáforos y cómo almacenan los discos duros la información en bloques. Seguramente muy útiles, pero no si eso excluye que te expliquen como instalar un paquete desde la línea de órdenes. Y esto implica conocer una serie de cosas: el sistema operativo Linux, trabajar con la línea de órdenes y conceptos básicos como servicios, demonios o niveles de ejecución.

Mucha gente tendrá la suerte de trabajar en una gran empresa donde el departamento de sistemas le proporcionará un ordenador con todo instalado. La mayoría tendrá que trabajar en entornos no tan favorables y le darán una máquina vacía en la que tendrá que instalar todo para ponerse a trabajar en un par de horas con el resto del equipo. Y eso es saber Linux, es conocer la ínea de órdenes y cómo montar un servidor web con una base de datos NoSQL.

4. Herramientas de gestión de equipos de trabajo.

El 99% de los trabajos en equipo en la carrera se hacen usando email o, los más modernos, Dropbox o similar. Es desde luego un avance a cuando se hacía con disquetes, pero un atraso a hacerlo usando un sistema de control de fuentes como git. Con git sabes quién ha hecho qué, puedes volver atrás, probar cosas simultáneamente, crear y resolver tareas en entornos como GitHub… En público o en privado, no conocer Git y GitHub te hace ser más improductivo, y por tanto menos empleable. Ojo, que como todo lo de arriba no es culpa tuya (en parte), sino que a nadie se le ocurrió que las aplicaciones se desarrollaban en equipo normalmente y aprender un sistema como este era fundamental.

5. Gestión de esos mismos equipos de trabajo.

Una herramienta como git sólo te lleva al principio del camino, trabajar sobre los mismos fuentes sin demasiados follones. Pero, ¿quién hace qué? ¿Cómo se informa a los demás de lo que está haciendo? ¿Si surge alguna duda o no sabes cómo hacer algo, a quién le preguntas? ¿Cómo se decide qué características nueva implementar? ¿Y cómo se informa de un error que ha pasado los tests o la petición de una nueva característica?

En el mundo del software libre ya hay herramientas para todo ello: gestores de incidencias como RedMine o los más básicos integrados en GitHub o Gitlab, listas de correo, canales de IRC siempre abiertos para ayudar a los principiantes.

Y StackOverflow. StackOverflow es el oráculo de Delfos y el consultorio de Elena Francis pero para un programador. Pregunta y se te responderá. ¿Que quieres adaptar una librería OpenGL para hacer programas de escritorio en XSLT? Pregunta. ¿Que quieres conectar tu Casiotone a tu Arduino? Pregunta. ¿Que del error que te ha dado ha salido un puño de la pantalla y te ha dado en tus partes? Pregunta. StackOverflow es el aleph, todo está allí y todo se sabe. Os voy a decir un secreto: los profesores de la uni no sabemos todo. De hecho, es probable que si te ha salido un error al instalar no sé qué herramienta no tengamos ni puñetera idea de qué se trata. Pregunta en StackOverflow. Primero busca, claro. Si no lo encuentras, pregunta.

6. Documentación.

Esta es una batalla perdida. Ningún informático que se respete a sí mismo documentará nada. Pero si lo hace, por favor, que no lo haga en Word. Especialmente no en Word. Todos los lenguajes de programación (entre los que no se incluye Matlab) incluyen su propio sistema de documentación, pero también hay otros sistemas Textile, Markdown o Latex que permite escribir documentación estructurada aparte de los ficheros de la aplicación. De ahí, generar cualquier cosa es fácil: PDF, HTML o un ePub. Además, se aprende en cinco minutos, lo que equivale a 0.000005 créditos ECTS. O 25, según se mida.

7. Test, integración, despliegue.

¿Cómo se publica una aplicación? Se mete en un zip y se copia al servidor por FTP, ¿no?

No. En entornos de integración/despliegue o publicación continua se hace automáticamente: test, generación de ficheros para despliegue, ejecución de lo necesario para el despliegue (¿hará falta una base de datos? ¿un servidor de mensajería? ¿una red privada virtual?) y efectivamente despliegue de la aplicación desde un entorno de gestión de fuentes como el de arriba. Todo ello, por supuesto, usando herramientas libres. ¿Es el desarrollo basado en test una materia arcana? Pues es posible, porque se ve relativamente poco en graduados en universidades españolas. En una empresa, o al menos una buena empresa, nada se despliega si no ha pasado todos los tests.

8. Seguridad.

Cuando creas algo en software libre, lo creas en abierto, donde todo el mundo puede verlo. Sabes que si hay algún hueco de seguridad, alguien te lo va a encontrar. Hay una alta probabilidad de que sea buena gente y te avise, pero también puede ser que no; en todo caso eres consciente de que la seguridad no es algo que se le añade a un programa al final cuando está todo terminado: es un requisito fundamental. Tienes que pensar en todos los posibles huecos y evitarlos, usar prácticas seguras, usar versiones de las librerías sin huecos de seguridad conocidos.

Eso no sería así sin el software libre: por un lado por la mentalidad y la cultura que uno ocupa cuando se pone a programar (recuerda, en un equipo) y por otro porque la mayoría de las herramientas que van a usar son libres y, por tanto, confías en ellas porque han pasado los mismos controles y los ha visto tanta gente (posiblemente más) que tu herramienta.

9. Accesibilidad, internacionalización, localización, usabilidad.

Y van todas juntas porque, al fin y al cabo, están relacionados con lenguajes e idiomas y formas de relacionarse con el usuario. Además, son dos dades y dos ciones, así que queda todo paralelo y simétrico. La accesibilidad y la usabilidad están íntimamente relacionadas: para cierto tipo de usuarios (por ejemplo, yo que ya no veo como solía hacerlo), el identificar las funcionalidades de una web y poder interacturar con ella es cuestión de poder cambiar el tamaño de letra y de usar contrastes adecuados. La accesibilidad universal va más allá e implica que cualquier persona con cualquier diversidad funcionar pueda acceder.

Las ciones, igual: que el programa pueda trabajar en cualquier idioma. Las agrupo juntas porque son el tipo de cosas de “Bueno, si eso, cuando llegue la necesidad, ya lo metemos”. Pero nunca se funciona así: un programa accesible, usable, que se pueda traducir fácilmente a cualquier idioma, necesita principios de diseño (casos de uso, por ejemplo, trabajar con las librerías básicas de traducción) que no se pueden simplemente añadir luego.

Aquí se incluye, como es natural, la codificación de ficheros y cadenas y en general todo. Cuando a alguien le empiezan a salir símbolos raros se echan las manos a la cabeza, cuando es simplemente Unicode, que sirve para algo más que para poner caracteres cachondos en el Twitter. Unicode, UTF-8, todas esas cosas, todavía no se explican en Informática lo que causa múltiples problemas a la hora de trabajar con ficheros, bases de datos y programas que tengan diferentes concentos de la codificación.

10. Estadística

¿Cómo? ¿Estadística? ¿Eso no es matemáticas? No, es informática y es imprescindible cuando analizas las prestaciones de un sistema o un programa. Pídele a un informático recién licenciado que te diga qué carga es capaz de soportar una aplicación web. “Uf, un mogollón porque uso un servidor súper guay”. Si le indicas que puede ser que no, te es capaz de montar un proxy con equilibrado de carga.

Pero ¿es capaz de leer un log y modelar esa carga? ¿Es capaz de montarte un test de esfuerzo sobre el servidor con diferentes escenarios a partir de ese modelo de carga? ¿Es, simplemente, capaz de probar dos diferentes implementaciones de un algoritmo y decirte, estadísticamente, cuál es la más eficiente usando algo tan simple como un test de Wilcoxon o, más aún, decidir si se usa uno de Wilcoxon o u T de Student? O, volviendo al tema anterior, ¿saben montar un test de usabilidad con un grupo de usuarios y analizar los resultados?

Lo más normal es que no. De hecho, puede que este no sea un problema del plan de estudios, porque la mayoría incluyen Estadística, sino de no cruzar el puente entre las técnicas estadísticas y su uso en el diseño e implementación de sistemas informáticos. O de dejar la estadística como una asignatura de primero y no como algo fundamental que interesa al resto de las asignaturas de programación y de sistemas.

Resumiendo: queda cierto camino por recorrer.

Las universidades españolas no están precisamente en los primeros puestos de los ránking en informática. En los temarios se siguen al pie de la letra los currículum informático de la ACM. El software libre se obvia cuando es fundamental no sólo como herramienta, sino también como cultura y por supuesto como un conjunto de conocimientos fundamentales para entender el software y los sistemas informáticos hoy en día. Esos 10pilares que faltan son carencias que impiden construir nada encima. Una persona que conozca Python puede aprender Matlab en unas horas, o mejor, recomendar sustituirlo por SciPython, libre, rápido, con todas las librerías necesarias. Al revés, no.

Así que no voy a hacer un llamamiento a las autoridades competentes, sino a ti, que das una asignatura en primero, 2º o tercero de carrera, dales un seminario de Git o enséñaselo el primer día de clase, explícale qué es la integración continua, diles que usen Linux en la intimidad y que se instalen versiones más modernas del kernel y las usen y, en resumen, adopten estas habilidades que van a hacer de ellos informáticos más hábiles (admítase la redundancia), eficientes y empleables. Y, por supuesto, felices.

0 Seguir leyendo →

La profesión de científico de datos

El trabajo de científico de datos (data scientist) está de moda gracias a las startups. La fiebre de los datos ha hecho que empecemos a escuchar hablar de esta disciplina por todos lados. Pero, no podemos dejar de preguntarnos si es una moda pasajera o el trabajo de científico de datos ha venido para quedarse. Repasamos qué es exactamente eso de la data science, sus oportunidades laborales y las posibilidades que existen para formarse.

Un Científico de datos es una persona que está en un punto intermedio entre estadístico y programador. Es sencillamente un profesional dedicado a analizar e interpretar grandes bases de datos. O lo que es lo mismo, uno de los profesionales más importantes en cualquier empresa de internet hoy en día.

La tecnología actual no solo necesita del mejor talento sino de datos, mucho datos. Muchos. La moda por lo abierto y el giro hacia los datos no es más que el mismo espíritu corporativo de siempre buscando el próximo yacimiento. Y lo que vale para los entornos de inteligencia artificial y de machine learning, vale para casi cualquier tecnología.

Este gran valor de los datos contrasta con que los datos son el recurso más abundante del planeta. Se calcula que se crean 2.5 trillones de bytes de información nuevos al día. No parecen cosas fáciles de compatibilizar. ¿Cómo es posible que algo tan abundante sea tan valioso? Aunque fuera por pura oferta y demanda, acumular datos debería ser algo trivial. Y lo es, lo complejo es procesarlos.

Hasta hace relativamente poco sencillamente no podíamos hacerlo. A finales de los años 90, el campo del machine learning (aprendizaje automático) empezó a tomar entidad autónoma. Nuestra capacidad de trabajar con cantidades inmensas de datos se abarató y la irrupción social de internet hizo el resto. Desde hace unos años nos encontramos ante la primera gran ‘democratización’ de estas técnicas. Y, con ello, el boom del científico de datos: nadie quiere tener una mina de oro sin aprovechar.

En busca de un científico de datos

El problema es que, de repente, ha surgido una gran demanda de un perfil que hasta ahora prácticamente no existía. Recordemos que se precisan conocimientos estadísticos que un programador no suele tener y conocimientos informáticos que un estadístico no suele ni siquiera imaginar.

La mayor parte de las veces se ha solucionado con formación autodidacta que completa las habilidades básicas que debería tener un programa formativo pero no tiene. Por eso, hoy por hoy, podemos encontrar una gran diversidad de perfiles profesionales en el mundo del científico de datos. Según Burtch Works, el 32% de los científico de datos en activo vienen del mundo de las matemáticas y la estadística, el 19% de la ingeniería informática y el 16% de otras ingenierías.

Cómo formarse

Grados

A día de hoy, existen algunos grados dobles en ingeniería informática y matemáticas (Autónoma de Madrid, Granada, Politécnica de Madrid, Politécnica de Cataluña, Complutense, Murcia Autónoma de Barcelona) o en informática y estadística (Universidad de Valladolid) que parecen la mejor opción si nos planteamos esta especialización. De hecho, esta opción parece más interesante que los posibles ‘grados en ciencia de datos’ que pudieran surgir en el futuro: las posibilidades son más amplias, la formación más diversa y permite no encasillarnos.

Posgrados

El de los posgrados es un mundo muy diverso. Podemos encontrar posgrados, másteres o cursos de especialización en casi todas las universidades y una oferta privada realmente desmesurada. Por poner algunos ejemplos tenemos posgrados en la UGR, la UAB, la UAM, la UPM o la Pompeu Fabra. De todas formas, en posgrados es más difícil recomendar un curso en concreto. La clave está en buscar complementar nuestra formación previa y, en ese sentido, la diversidad es una buena noticia.

Lo que sí podemos encontrar en la formación de posgrado que no podemos encontrar en la formación previa es el componente de ‘orientación de negocio‘. No debemos olvidar que la mayor parte del trabajo de los científicos de datos está en empresas que buscan rentabilizar sus bases de datos, porque lo que la orientación al mercado es algo muy recomendable. De hecho, muchos de los másteres en ‘big data’ lo ofrencen escuelas de negocios como OEI o Instituto Empresa.

MOOCS

Uno de los recursos más interesantes que podréis encontrar son los moocs (ya sabéis, los cursos abiertos masivos online). Empezando por el programa de especialización en big data de Coursera, podemos encontrar cursos online de las mejores universidades del mundo. Si tuviera que recomendar alguno, los cuatro moocs que me parecen más interesantes el CS109 Data Science de Harvard, el curso de Machine Leaning de Standford, el The Analytics Edge del MIT o el Learning for data de CalTech. Todo esto sin hablar de las numerosas herramientas para aprender lenguajes como Python o R.

Certificados y otras opciones

También existen una serie de certificados o acreditaciones que permiten avalar nuestros conocimientos en ciencia de datos: el Certified Analytics Professional (CAP), Cloudera Certified Professional: Data Scientist (CCP:DS), EMC: Data Science Associate (EMCDSA) o certificados más específicos como los de SAS. Algunos de estos certificados tienen unos requisitos muy duros pero son una buena alternativa si hemos estado trabajando en este campo con anterioridad.

Otros recursos interesantes son las asociaciones (como R Hispano o Python España) y los grupos informales tipo Databeers que tanto éxito están teniendo por todo el país. Es verdad que el ecosistema de eventos y reuniones en data science está empezando a desarrollarse, pero con la experiencia acumulada en otros ámbitos seguro que se pone al día pronto.

¿Qué lenguajes hay que aprender?

En realidad, como cualquier iniciado sabe, en programación la elección de un lenguaje u otro siempre es complicada. En esta elección intervienen desde factores técnicos o formativos a simples preferencias personales.Lo que sí está claro es que hay algunos lenguajes más populares que otros.

Los tres grandes de la Ciencia de Datos: R  + Python + Sql

  • SQL: El 68% de los científicos de datos usan SQL y si incluyéramos a todas las bases de datos, completaríamos casi el 100 por 100 de los encuestados. Es algo necesario no sólo por la inmensa cantidad de datos de los que hablamos sino porque la mayor parte de los datos que usa un científico de datos profesional provienen de internet.
  • R: En torno a un 52% de los dateros usan R para su trabajo usual. Tiene a su favor que ha sido el lenguaje estadístico por excelencia durante muchos años y podemos encontrar códigos y paquetes para casi cualquier cosa que se nos ocurra. Tiene en su contra que su sintaxis es más antigua, compleja y fea que otros lenguajes más modernos que empujan fuertes. Es el lenguaje de los que se acercan desde un background científico.
  • Python: El 51% por ciento de los dateros usan Python de forma habitual. Es la némesis de R en este caso: tiene una sintaxis muy buena y moderna pero aún queda mucho por trabajo por hacer desarrollando su ecosistema. No obstante, para ser justos, Python cada vez es más competitivo y iniciativas como SciPy están poniéndole las cosas muy difíciles a R. Es el lenguaje de los que se acercan desde un background informático.

Aunque el sentido común nos dice que cada uno de los lenguajes es mejor para determinadas cosas, en la práctica hay cierta rivalidad. Personalmente, uso R pero suelo recomendar Python. No sólo porque es más bonito, sino porque es multipropósito y eso siempre es una ventaja.

Otras herramientas

  • Excel: No es un lenguaje y no suele gustar a aquellos que trabajan con datos a nivel profesional. O eso dicen porque las encuestas dicen lo contrario: Un 59% por ciento de los encuestados usan habitualmente excel. Así que, en fin, la aplicación de hojas de cálculo de Office sigue dando mucha guerra.
  • Algunos lenguajes o entornos gozan de cierto éxito empujados por la inercia corporativa. Es el caso del clásico Matlab pero progresivamente va perdiendo peso y uso hasta sólo un 6%.
  • Si examinamos las encuestas podemos encontrar muchos más lenguajes que obedecen a necesidades más particulares. Scala (17%), Slack (10%), Perl (12%), C# (6%), Mahout (3%), Apache Hadoop (13%) o Java (23%).
  • También hay muchos programas específicos (libres o privativos) que se usan en la ciencia de datos con distintos usos. Por poner algún ejemplo, podríamos hablar de Tableau, RapidMiner o de Weka.

El mercado laboral: sueldos y oportunidades

Los sueldos cambian mucho dependiendo de el lugar, las funciones y el empleador. No obstante, ahora mismo es una expertise bien pagada. Los sueldos/ingresos están en una media de 141.000 dólares para freelance; 107.000 para asalariados; 90.000 para trabajadores gubernamentales o en el sector sin ánimo de lucro y 70.000 dólares para trabajo en universidades.

No obstante, estos sueldos medios hay que tomarlas con mucha prudencia. El salario medio en Estados Unidos está entre 103.000 y 131.000 dólares. En Europa Occidental está entre 54.000 y 82.000 dólares. En España, estamos en cifras similares porque ya que tenemos grandes empresas que se han volcado en este campo.

Lo que diferencia a la ciencia de datos del resto del mundo del desarrollo es la escasez de profesionales. Este fenómeno hace que los sueldos estén relativamente inflados y que, conforme vayan apareciendo más perfiles dateros, se vayan ajustando. Por eso, se puede decir que es el momento para subirse a la ola de la ciencia de los datos. Dentro de un par de años el mercado habrá madurado y las oportunidades estarán en otro lugar.

0 Seguir leyendo →