Category Archives: programacion

Unboxing del Arduino Starter Kit

Llevaba bastante tiempo intentando que cayera en mis manos algún microcontrollador de Arduino. Desde hace meses estoy trasteando con Processing y en muchos de los libros de arte interactivo/generativo que he estado leyendo incluyen capítulos donde hablan de esta tecnología.


unboxing 1

Para quien no sepa que es Arduino decir que a grandes rasgos que es una plataforma hardware open source que permite de manera muy sencilla crear prototipos de proyectos electrónicos. A cada microcontrollador se le pueden conectar sensores (de luz, de movimiento, etc) a modo de entrada que producen salidas sobre operadores (un led, un motor, un LCD). Para programar sobre Arduino se utiliza un lenguaje de programación llamado Wiring. Con Processing comparte el IDE y la filosofía, aunque Processing esta basado en Java y Wiring en C++.


unboxing 3
 

Una de las primeras cosas que nos llama la atención del Arduino Starter Kit es lo bien que está presentado todo. El libro de proyectos, las cajitas de los componentes o los accesorios en papel de los prototipos que puedes desarrollar dan miedo abrirlos por miedo a romperlo con tus manazas. El diseño está realizado por la agencia de interacción italiana Todo. Otra ventaja con respecto de este kit a otros disponibles como el Getting Started with Arduino Kit v3.0 de MakerShed es que incluye todo el material y las explicaciones para realizar 15 proyectos! Esto hace que sea el pack perfecto para empezar a trastear y pensar en aplicaciones mucho más potentes.


unboxing 4

unboxing 5

De momento el reto es hacer los 15 proyectos que incluye el paquete. Si todo va bien iré retrasmitiendo por aquí mis avances.

Quiero ser un buen programador ¿Qué puedo hacer?

El los últimos años se está produciendo un fenómeno muy curioso en nuestro país. Mientras cada vez se depende más de la tecnología y del software, cada vez hay menos gente que decide matricularse en carreras de informática. Analizar las causas por las cuales se está sucediendo esta situación daría para otro artículo, pero sin duda alguna una de ellas está en el desfase total que se está produciendo en lo que se enseña en en las universidades y lo que demanda el mercado laboral. Esta situación anómala está llevando a que cada vez haya más gente que se plantee autoformarse haciendo uso de plataformas online.

Con el lanzamiento de Khan Academy en el año 2006 se ha produjo un movimiento de innovación dentro la educación superior. Las universidades más prestigiosas del planeta están poniendo a disposición de cualquier persona con una conexión a Internet la posibilidad de enrolarse en algunos de los cursos que ofrecen de manera presencial. El proyecto edX, organización sin animo de lucro formada entre el MIT y la universidad de Harvard, tiene de manera abiertas cursos que van de la programación a la inteligencia artificial, pasando por cursos de electrónica o gráficos por ordenador. Cursos con el mismo contenido que se imparten en universidades como la de Berkley. Hasta la UNED ha decidido poner en marcha varios cursos dentro de su proyecto UNx.

Basados en este modelo de cursos online hay nuevas startups como Udacity o Coursera que están ofreciendo una plataforma online para aprender todo tipo de materias: Física, estadística o matemáticas y por supuesto todo tipo de cursos relacionados con el desarrollo software.

Si hablamos desde el punto de vista de la programación, también están apareciendo nuevas iniciativas que permiten aprender de una manera interactiva casi cualquier tecnologías relacionadas con el mundo web. En CodeAcademy es posible aprender JavaScript, Phyton o Ruby. También hay propuestas que intentan dar un giro al aprendizaje para que sean más divertidas. Para los fans de los zombies puedes aprender mientras conoces sus secretos con Rails para Zombies. Si por el contrario te gusta la filosofía Zen también tienes tu proyecto llamado Ruby Koans.

Pero la pregunta que surge es si realmente es posible convertirse en un buen programador haciendo uso solo de los recursos online que hay disponibles. Esta claro que la base teórica queda más que cubierta. Todos los lenguajes tienen miles de introducciones, tutoriales y posts a nuestra disposición. Si nos quedamos atascados podemos hacer usos de plataformas como StackOverflow que incluyen millones de preguntas y respuestas para casi cualquier duda imaginable. El problema está en que con todo eso solo nos quedamos en la primera capa de la programación. Con eso uno no se convierte en uno de esos programadores estrella de facebook o google que ganan $150000.

Técnicas de desarrollo como TDD (en castellano Desarrollo guiado por pruebas) o BDD (Desarrollo guiado por comportamiento), la filosofía ágil con el eXtreme Programming (XP), deben estar en el ADN del buen programador. Conseguir estas capacidades es mucho más complicado que programar nuestro primer blog. Aprender realmente a sacar provecho a estas técnicas para ofrecer un producto de calidad, es muy complicado solo haciendo uso tutoriales web. Trabajar en proyectos donde estas prácticas sea de debido cumplimiento es la forma optima de interiorizarlos en nuestra forma de programar y permitirnos dar el salto al siguiente nivel.

Pero entonces, si en las universidades no me dan respuesta y tampoco tengo la posibilidad de estar dentro de un equipo de alto rendimiento que me ayude a convertirme en un gran programador ¿Qué puedo hacer para convertirme en un verdadero profesional del desarrollo software?

Sinceramente creo que la única forma que existe es dentro de las aulas o de las salas de conferencias, pero no de las universidades, sino de la mano de profesionales del sector con experiencia probada tanto en multinacionales como en pymes, que están día a día viviendo la realidad del mercado. Profesionales que te pueden ayudar a enfocar al punto justo de las necesidades del mundo del desarrollo software. Mentores que te ayuden a ampliar tus conocimientos, y no solo de programación, también de usabilidad, ecosistemas de desarrollo o arquitectura de sistemas. El abanico es tan grande y amplio que sin enfoque claro que te ayude a desenmarañar lo importante de lo superficial es muy difícil convertirse en ese buen programador que todos quieren ser.

Consejos para Ninja Coders: No toques ahí!

 

No hay ni un solo programador que no se haya visto en una situación como esta. Se acaba de realizar un despliegue a producción y aparece un error que hasta ese momento no había sido detectado. Rápidamente pides acceso a producción porque sabes perfectamente cual es el problema y quieres solucionarlo.

Esta claro que hay un problema, pero no es otro que un programador que piensa que debe tener acceso a los servidores de producción para poder solucionar un problema online.

Para un buen proyecto como mínimo debe haber cuatro entornos.

  • El entorno de desarrollo y pruebas local de cada programador.
  • Un entorno donde se realizan pruebas de integracion tanto manuales como integradas.
  • Un entorno de preproducción donde el equipo de QA y los usuarios realizan las pruebas de aceptación
  • Un entorno de producción.

Aunque sea el crack más grande del planeta un programador jamas debe tener acceso más alla de su entorno de desarrollo. Cuando el código es subido al sistema de control de versiones y desplegado, el programador debe ser un mero espectador. Lo mismo sucede con el equipo QA o los usuarios. El entorno en el cual deben trabajar es el de preproducción y no tienen porque tener ni porque “mirar” en el entorno de pruebas o de desarrollo. Si hay una versión nueva disponible, el responsable de versiones deberá moverlas al siguiente entorno para que el ciclo de vida del proyecto siga avanzando.

Si hay un error en producción, debe ser solucionado por el equipo de operaciones. Si no pueden arreglarlo, el desarrollador deberá correguir el bug en su entorno, subirlo a gestor de versiones y desde alli esperar la validación del equipo de QA. Cuando este todo correcto se podrá realizará un parche que se subirá a producción.

No seas responsable de una catastrofe en tus servicios por tocar en producción directamente.

Adaptado de un consejo de Cal Evans.

Consejos para Ninja Coders: Las cosas no pasan mágicamente

Ninja Code Magic

Prácticamente cualquier actividad que el ser humano realiza, si es observada con suficiente distancia parece sencilla. Los gestores que no tienen experiencia en desarrollo siempre ven el trabajo de los programadores como algo que se puede hacer en un “ratito”, y los desarrolladores que no tienen experiencia en gestión ver a los gestores como esos tipos que solo hacen powerpoints. La programación es una tarea que realizan los programadores solo una parte de su jornada laboral. Pero  la parte realmente complicada, pensar, además de ser la menos visible, es la menos apreciada por la gente que no tiene experiencia en desarrollo. Esta situación ha hecho creer a algunos  que es posible eliminar esta necesidad de pensar como hacer las cosas. Primero con lenguajes cada vez menos crípticos o con los lenguajes de cuarta generación.
Esta actitud, intrínseca a la mente humana, también les sucede a los programadores. Como programador hay multitud de tareas en las cuales no se está involucrado:  la toma de requerimientos, la definición de prioridades, la instalación de los entornos de producción o simplemente realizar las presentaciones a los clientes del avance del proyecto. Si no te encargas de realizar estas tareas, llegas a pensar que pasan de manera mágica y que por tanto siempre van a suceder. El problema es cuando estas acciones dejan de pasar mágicamente y los problemas golpean en tu puerta.
Hay tantos ejemplos que suceden en el día a día. Estas haciendo un paso a producción exactamente igual que siempre, todo es lo mismo pero esta vez falla. Ha funcionado perfectamente en todos los entornos, pero en producción no. Después de días, te das cuenta que es una librería que se te olvidó pedir que instalaran en producción. Otro ejemplo. Un equipo autogestionado, que está totalmente engrasado y que parece que no es necesita a ningún gestor que este por allí dando vueltas. Todo es maravilloso, no hay problemas con las entregas y el software no tiene errores. Fuera con el gestor, pero claro en cualquier momento puede suceder que todo se vaya al garete, que empiecen los retrasos o que no se entregue el alcance exigido. ¿Como darte cuenta de eso?
No es necesario que conozcas de toda la magia que sucede alrededor de tu proyecto, pero tampoco está mal conocer un poco de ella o al menos apreciar a los que la producen. Pero sobre todo, hacer que vuelva si es que ya no ocurre.

Adaptado de un consejo de Alan Griffiths

Consejos para Ninja Coders: Practica tus habilidades de programador

Consejos para Ninja Coders: Practica

Cualquier programador medio involucrado, puede pasar más de ocho horas al día delante de un ordenador programando. Seguramente piense que esta practicando muchísimo, pero la realidad es otra diferente. Si te preguntas, ¿Por que estoy realizando esta tarea? y la respuesta es “Para terminar esta tarea”, es que no estás practicando a propósito.

Se práctica a propósito para mejorar tu habilidad a la hora de realizar una tarea. Se trata de habilidad y técnica. Es repetición. El objetivo final de realizar la tarea es incrementar tu dominio en la ejecución de esa tarea, ir poco a poco mejorando hasta alcanzar el nivel de maestría deseado, no completar dicha tarea.

Cuando estás trabajando el fin es terminar un producto, por eso te pagan por ello. Cuando prácticas de manera intencionada el objetivo es mejorar tu rendimiento. ¿Cuanto tiempo dedicas a desarrollar los productos de otras personas? ¿Y cuanto tiempo dedicas a mejorarte a ti mismo?

Seguramente habrás oído la teoría de las 10.000 horas. Según esta teoría una persona se puede convertir en exporto en cualquier tarea si es capaz de dedicar 10.000 horas a practicar en dicha tarea. Está claro que 10.000 horas son muchas horas, son cerca de 20 horas semanales durante 10 años. Pero el conocimiento no viene mágicamente a partir de este número, va llegando poco a poco. Conseguir este nivel de compromiso solo se puede hacer con una decisión personal y consciente.

Practicar a propósito no es simplemente repetir una tarea una y otra vez, esto no aporta absolutamente nada. El objetivo es intentarlo con una tarea que supere un poco tus habilidades, superarla, analizar lo que has hecho he intentar mejorarlo en la próxima ejecución. No se trata de hacer algo en lo que ya eres bueno, se trata de retarse a si mismo y esto no es algo precisamente divertido.

Adaptado de un consejo de Jon Jagger.

Ninja Coder Logo

Consejos para Ninja Coders: Revisa el Código

NinjaCoder Programando

En todo proyecto de desarrollo se deberían hacer revisiones de código. Las dos motivos principales son que sirven para mejorar la calidad del código y ayuda a reducir el porcentaje de defectos.

En algunos de los proyectos en los cuales he trabajado esta tarea de revisión se denominaba “peer reviews” y era obligatoria en un porcentaje fijo del código. Las revisiones se realizaban por otros programadores, pero si era necesario la podía hacer el arquitecto software o el jefe de proyecto.

El problema con las revisiones de código es que los programadores pueden sentir que son juzgados. Además para poder realizar una buena revisión de código es necesario tener tiempo y conocimiento del sistema, con lo que esta tarea se puede convertir en un cuello de botella, transformándose el remedio en enfermedad.

La solución a esta situación es enfocar las revisiones de código no como una simple de forma de encontrar errores, sino como una manera de compartir los conocimientos y establecer buenas prácticas a la hora de desarrollar entre todos los programadores. Si se hacen así las revisiones fomenta el sentimiento de pertenencia del código realizado por el equipo.

Cuando se realicen las revisiones es necesario que los comentarios no sean ácido y que siempre se respete el trabajo de los otros. En lugar de dejar la revisión a los más expertos es bueno que se repartan el trabajo en diferentes roles. Una persona se puede encargar de la documentación, otro sobre la funcionalidad y otro sobre las consultas a la base de datos. Estos roles deben ir rotándose de manera semanal para que el equipo vaya aprendiendo del resto de compañeros. Una buena forma de programar este tipo de revisiones es juntar al equipo un par de horas a la semana en una sala de reuniones y analizar una parte del código al azar. Es importante que en las reuniones de revisión no se entre en detalles sobre el formato de código. Para esto es mejor utilizar herramientas que lo realicen de manera automática.

Si eres capaz de hacer que las reuniones de revisión se conviertan en algo divertido, serán mucho más productivas y los programadores las aceptarán de manera más natural.

Adaptado de un consejo de Mattias Karlsson.

Ninja Coder Logo

Consejos para Ninja Coders: No tengas miedo a romper las cosas

ninja coder

A todos los programadores les ha tocado alguna vez tener que trabajar con un código sujeto por palillos. El sistema está mal diseñado y cualquier cambio que se realiza acaba afectando a otro módulo sin que nos demos cuenta. Cada vez que se incluye una nueva funcionalidad el programador acaba encomendándose al santoral para no cargarse algo en otra parte del programa. En pocas palabras es como si uno jugara a la ruleta rusa con 5 balas dentro de la cámara.

Este miedo es porque el código esta realmente mal y necesita la ayuda de alguien que le acabe sacando del estado en el que se encuentra. Como sucede con los cirujanos, primero es necesario causar un poco de dolor para extraer el tumor, pero poco a poco este dolor irá pasando y si se hacen las cosas bien el paciente acabará recuperándose.Con la programación sucede lo mismo, es posible que en un primer momento al intentar arreglar las cosas se sufra un poco, si se hacen con cabeza y poco a poco nuestro código acabará resucitando.

No hay que tener miedo a tocar el código. No pasa nada si mientras que estas refactorizando el sistema hay cosas que dejan de funcionar. El tiempo que se dedique a mejorar las cosas retornará con mucho más valor a lo largo del ciclo de vida del software.

Además como beneficio extra la experiencia del equipo acabará mejorando puesto que conocerá perfectamente como las cosas funcionan y como integrar de manera más sencillo nuevas funcionalidades.

Vivir con miedo no es vivir.

Adaptado de un consejo de Mike Lewis

Ninja Coder Logo

Consejos para Ninja Coders: Aprende Continuamente

En los tiempos que corren, es muy sencillo encontrar alguien en cualquier parte del mundo que pueda realizar tu trabajo, solo en la India aparecen más de 450.000 al año. Hay mucha gente que puede hacer tu trabajo, y si no estás al día de lo que sucede dentro del mundo de la tecnología llegará un momento que estarás desfasado al realizar siempre el mismo trabajo, y tarde o temprano la tecnología que conoces será obsoleta o serás sustituido por un recurso más barato en cualquier lugar del mundo.

Para combatir esto muchas empresas son lo suficientemente generosas para dar formación a los empleados, otras ni se plantean perder el tiempo o el dinero en regalarte esto. Para apostar sobre seguro lo mejor es que cada uno tome el control de su propia formación.

Hacerlo es mucho más sencillo de lo que se puede pensar y encima nos puede salir gratis!

  • Lee libros, revistas, blogs o sigue a usuarios en twitter. Si quieres entrar en más detalle date de alta en las listas de correo del producto que te interesa.
  • Si quieres enterarte realmente de que va cualquier tecnología escribe código con ella.
  • Si tienes la oportunidad búscate un mentor que te ayude en los pasos a realizar. Siempre es mejor tener a tu lado alguien que sabe más que tú o que tiene más experiencia para aprender cosas.
  • Convierte a alguno de los expertos que hay por la red en tu mentor virtual. Revisa todo lo que escriban y suscríbete a sus blogs.
  • Entra en profundidad en las librerías y frameworks que utilizas.  Aprender como funcionan las cosas te ayuda a trabajar mejor con ellas. Debugea el código para entender exactamente que pasa.
  • Siempre que cometes un error, arregles un bug o afrontes un problema entiende realmente lo que sucede. Busca en la red personas que les haya pasado lo mismo.
  • Una forma genial de aprender es dar una charla sobre un tema. Cuando la gente te pregunta sobre él te hará que refuerces tu conocimiento y que lo mejores.
  • Ve a conferencias. Si no puedes asistir no es problema, gracias a la red puedes verlas sin moverte de tu casa.
  • Entiende y soluciona los warnings que aparecen al analizar tu código.
  • Escucha podcast mientras vas en el transporte público.
  • Aprende una nueva tecnología o lenguaje al año.
  • Aprende sobre el sector para el cual desarrollas: banca, publicidad, etc. Siempre te servirá para entender mejor los requerimientos de lo que programes.
  • Apúntate a una escuela.

No es necesario que todo el tiempo libre que tengas lo dediques aprender, un poco a la semana es mejor que nada. Reserva en tu agenda lo que puedas para aprender. La tecnología avanza muy rapido, no te quedes rezagado.

Adaptado de un consejo de Clint Shank.

Ninja Coder Logo

Consejos para Ninja Coders: El formato del código importa

Una parte muy importante del tiempo de los programadores se gasta leyendo y entendiendo el código del sistema con el que se trabaja. Encontrando donde hay que insertar las nuevas lineas o arreglar ese bug que se resiste. De hecho se pasa más tiempo leyendo código que programando. Por eso es muy importante que el aspecto de nuestro código este lo más optimizado posible. Para conseguirle es necesario seguir una serie de pautas.

  • Debe ser fácil de buscar en él.

De los tiempos en los cuales el hombre era perseguido por animales salvajes que solo querían comérselo, hemos aprendido a reconocer patrones visuales. Cuando algo no “pega” con su entorno nos llama la atención y nos fijamos en ello. Es importante que nuestro código siempre este escrito de la misma manera y siguiendo las mismos estándares de codificación: Definición de constantes, declaración de variables, métodos públicos y privados, clases.

  • El formato debe hablar.

Desde que aprendemos a programar nos enseñan lo importante que son los nombres que les ponemos a las variables. Tan importante es esto, como la agrupación del código o la indentación de sus lineas. Como punto de partida lo mejor es hacer uso del formato que te proporciona el IDE, para que posteriormente, dependiendo de las pasos que incluya el código, se realicen los ajustes pertinentes.

  • Debe ser compacto.

Cuanto más código haya en la pantalla mejor. Si tenemos que estar moviendo el cursos continuamente lo único que hacemos es paginar la información relevante que entra en nuestra cabeza. Hay que incluir los comentarios justos y necesarios, evitar los espacios en blanco y retornos de carro que no aportan nada, y apoyarse lo máximo en las capacidades que nos da el IDE.

Adaptado de un consejo de Steve Freeman.

Ninja Coder Logo

Consejos para Ninja Coders: Elige bien tus herramientas

En la actualidad prácticamente ningún software se desarrolla desde cero. Si no estamos basándonos en un framework de desarrollo, utilizamos alguna librería o componente externo. Estas practicas son muy buenas para el desarrollo software por varios motivos.

  1. El tiempo de desarrollador se puede dedicar a tareas orientadas a negocio y no a la construcción los componentes de la arquitectura básica (acceso base de datos, loggin, control de acceso, etc).
  2. Los componentes y librerías que son muy utilizados tienen un menor número de bugs.
  3. Internet está lleno de  buenas librerías de software que son totalmente gratuitas. Esto disminuye el coste de desarrollo de una pieza de software.
  4. Mantener y construir software suele ser muy caro y consume un gran número de recursos. Comprar algo normalmente es más barato.

Pero hay tantas posibilidades y combinaciones posibles a la hora de seleccionar las herramientas que se adaptan a tus necesidades, que es necesario pensar con tranquilidad con cual quedarnos. Para ayudar en la selección basta tener unas cuantas cosas en cuenta.

  1. Para cada nuevo componente que quieras integrar revisa su comportamiento y la forma en la cual se comunica con los elementos que le rodean. Ten en cuenta que si es necesario que desarrolles conectores ad hoc entre tus componentes solo conseguirás que el código sea más complejo.
  2. Cada uno de los elementos tiene un ciclo de vida software totalmente diferente. A la hora de actualizar a las ultimas versiones comprueba que todo sigue siendo compatible.
  3. Cuanto mayor sea el número de ficheros de configuración que tengas que controlar más compleja será su mantenimiento.
  4. Evita que tu software se vuelva demasiado dependiente de librerías externas. Sus carencias puede acabar limitando tu software.
  5. Software libre no siempre es software gratis. No olvides el coste que puede suponer cualquier tipo de soporte que quieras contratar.
  6. Ten en cuenta siempre las licencias que los componentes puesto que afectarán al tipo de licencia que posteriormente quieras aplicar a lo que hayas desarrollado.

El mejor consejo es intenta mantener al mínimo el número de componentes externos que incluyas, añadiendo poco a poco según la necesidad. Mantenlos separados de los componentes de negocio mediante algún tipo interfaces. De esta manera podrás cambiarlos de manera sencilla en el momento que quieras.

Adaptado de un consejo de Giovanni Asproni