Blogia
Desarrollo de Software y formación en Zaragoza

Desarrollo de software

Math-race, real time game node.js / socket.io / knockout.js

Math-race, real time game node.js / socket.io / knockout.js

En este vídeo se puede ver la baja latencia que es posible conseguir en una aplicación web usando socket.io y node.js. 

http://www.youtube.com/watch?v=LXbYSJfLUW8

El ejemplo es un sencillo juego en tiempo real cuyo código está disponible aquí:

https://github.com/iloire/math-race

Let's node.js

Acabo de lanzar un blog dedicado a node.js y express.js, donde iré contando cosas que considero interesantes del desarrollo en esta plataforma de alto rendimiento.

También he colocado ejemplos de código:

http://www.letsnode.com/

Página oficinal de node.js: http://www.nodejs.org/

Curso de HTML5 / CSS3 en Mayo en Zaragoza

Curso de HTML5 / CSS3 en Mayo en Zaragoza

Curso de HTML5 / CSS3 en Mayo en Zaragoza

http://www.vitaminasdev.com/Cursos/3/html5-y-css3

  • Los nuevos tags de HTML5: qué podemos empezar a utilizar ya (header, nav, article, section, video, audio…) y cómo hacerlo compatible con navegadores antiguos.
  • Los formularios con HTML5 (los nuevos type, validación nativa…).  
  • Las API de HTML5: un vistazo rápido a las API de Javascript que harán más fácil el desarrollo de aplicaciones web (canvas, web workers, web sockets, cache…). Este punto es meramente introductorio y no se profundizará más en él por cuestiones de tiempo.
  • Soporte actual de CSS3 en los distintos navegadores y en qué situaciones podemos permitirnos usar CSS3 aunque no esté ampliamente soportado.
  • Las nuevas herramientas de decoración: border-radius, gradients, shadows, opacity, multiple-backgrounds…  
  • La tipografía a la carta: @font-face, sus virtudes, sus problemas y herramientas relacionadas, como Google Font Directory o Typekit.
  • Los nuevos selectores y sus posibilidades.
  • Animaciones y transformaciones con CSS3.
  • CSS columns, media queries y las nuevas herramientas de layout.

Programador cabreado

Programador cabreado

Has sentido alguna vez que tu trabajo como programador es ingrato, o te genera insatisfacción?

Te sientes con frecuencia "cabreado"?

Aquí tienes un lugar para desahogarte :)

http://www.programadorcabreado.com/

(la imagen ha sido tomada de flickr, licencia CC. Original aquí)

Uso de máquinas virtuales (VMware, Virtual PC) para programación y desarrollo de software

Windows XP Running On Linux (by paradoxperfect via Flickr))

En los cursos oficiales de certificación de Microsoft es patrón común el uso de máquinas virtuales, donde el alumno tiene un entorno de trabajo ya correctamente configurado, con las herramientas, bases de datos, componentes y servicios del sistema operativo perfectamente funcionando. 

Esto nos evita a los organizadores del curso innumerables horas muertas teniendo que instalar paquetes de software, lidiar con problemas de sistemas operativos, particularidades de cada máquina, virus, drivers, etc.

También soy partidario del uso de máquinas virtuales para programar aplicaciones de software. Cierto que estamos sufriendo una merma de rendimiento, pero con el precio que el hardware tiene estos días este problema puede resolverse aumentando la potencia de tu máquina (sobre todo un HD rápido y mucha RAM!), con una inversión modesta.

Las ventajas de desarrollar software en una máquina virtual son varias:

  • Permite tener un ambiente de trabajo permanente y garantizado, con el sistema operativo adecuado en cada caso, independientemente del sistema host que corre el equipo. Ej: Puedes tener un equipo usando Windows Vista pero desarrollar en Windows XP, o Ubuntu, etc..
  • Fácilmente puedes volver a versiones anteriores de tu máquina virtual (usando Snapshots o copias de tus discos duros virtuales), caso tu máquina virtual se corrompa, sufras virus, dañes la configuración, instales algo que no deberías, etc.. 
  • Puedes utilizar la misma máquina virtual de desarrollo en cualquier máquina física (Ej: desarrollar en el equipo de escritorio, continuar con entorno idéntico en el portátil, etc).
  • La ley de Murphy dice que tu máquina de desarrollo quemará el disco duro principal justo unos días antes de una entrega. Usando máquinas virtuales, simplemente necesitas cambiar el disco duro e instalar un sistema operativo básico en la máquina, el resto de software y componentes lo tienes en la máquina virtual, que copias en 10 minutos.
  • En grupos de trabajo grandes, permite disponer de una máquina de desarrollo a punto y configurada en pocos minutos (nuevos miembros en el equipo, por ejemplo)
  • Permite simular entornos de red heterogéneos, en tu propia máquina (Ej: trabajar con una base de datos MySQL en Linux, mientras conectas en otra máquina virtual con Microsoft Visual Studio sobre Windows), todo en la misma máquina física.

Unos consejos basados en mi experiencia:

  • Utilizar dos discos duros independientes, uno para sistema y el otro para los archivos de la máquina virtual.
  • Mantened los discos duros siempre correctamente defragmentados (el HD virtual también!)
  • Merece la pena comprar un disco duro rápido, de 10k o 15k revoluciones por minuto, tipo SAS, raptor o similar. Os garantizo que el aumento de rendimiento al programar amortiza la diferencia de precio en pocas semanas o meses.
  • Usar una cantidad suficiente de RAM. A ser posible usar un sistema operativo que permita gestionar más de 4Gb de RAM, como Windows Vista 64 bits (hasta 8 Gb de RAM), como SO principal de vuestra máquina. De esta manera, podréis tener 2 máquinas virtuales funcionando simultáneamente con 2Gb de RAM cada una, mas 2-4 Gb de RAM para el SO host.
  • La velocidad de la CPU no es lo más importante. Mejor gastar el dinero en un disco duro rápido extra y mayor cantidad de RAM. Pero si tenéis presupuesto extra, lógicamente más velocidad de CPU ayudan (y sobre todo una CPU con varios núcleos, de manera que puedan ejecutarse procesos e hilos de manera simultánea - esto tiene relevancia al programar "threads")

The Principles Of Successful Freelancing (free ebook)

Interesante lectura para quien quiera comenzar a emprender:

http://www.danilat.com/weblog/2009/09/09/the-principles-of-successful-freelancing-disponible-gratuitamente/

Gracias Dani.

Como hacer que tu software sea el número 1, por Joel Spolsky

Joel, visionario, creador, fantástico orador, escritor y gran conocedor del mundo del software nos brinda otra de sus conferencias. Interesante!

(visto en el blog de JM Alarcón)

Vacante desarrollador / analista programador Zaragoza

Vacante desarrollador / analista programador Zaragoza

Normalmente las empresas a las que doy formación o consultoría me piden referencias de buenos candidatos que incorporar a su plantilla. El hecho de formar a una persona durante 65 horas te permite tener una idea bastante precisa de sus aptitudes, capacidad de aprendizaje, creatividad a la hora de afrontar problemas, etc..

Si eres una persona honesta, capaz de:

  1. Innovar, generar buenas ideas.
  2. Transformar esas ideas en un producto de software usable.
  3. Hacerlo de una manera precisa y eficiente, con calidad. Anticipando en tu diseño / código futuras ampliaciones y cambios. De manera entendible por otras personas que continuasen tu trabajo.
  4. Estar dispuesta a aprender lo que no sabes y a enseñar lo que has aprendido.
Tienes ahí fuera un mercado de trabajo que te acogerá con los brazos abiertos. Y si quieres enviarme tu CV, podría ayudarte. El enlace con mi correo está arriba a la derecha. 
Bueno, si eres una persona que encaja con el perfil definido, dudo que estés buscando trabajo. De todas maneras, puede ser interesante que contactemos para cualquier otro tipo de colaboración.
Confidencialidad: Cualquier CV / información personal solo será compartido con terceras personas o empresas previa autorización expresa del candidato.

 

Se que seré tu cliente de por vida

Se que seré tu cliente de por vida

Es bonito cuando te dicen cosas como esta, sobre todo cuando el producto es algo que creaste de manera rápida, para uso personal, en tu tiempo libre y que al compartirlo la comunidad lo acogió de una manera inesperada.

"You know I’ll be your customer for life. I like your design the most. I use it for personal pictures only and it’s great!"
Le Hieutrung

 

Salario de un buen programador

Salario de un buen programador

Como gerente de proyectos, ¿que considerarías una buena contratación?.

  1. Un programador cuyo salario ronda la media y produce lo que la media
  2. o uno cuyas aspiraciones salariales sobrepasan a las del resto de tu equipo pero produce 5 o hasta 10 veces más? 

¿¿10 veces más??? - no puede ser!

Puede sonar exagerado pero el desarrollo de software es una de las disciplinas en donde podemos encontrar una disparidad similar de rendimiento productivo. 

Una contratación no adecuada puede aportar a tu equipo no solamente un rendimiento negativo (no solamente gastas dinero en un recurso que no aporta valor sino que su inclusión merma el rendimiento global, en lugar de incrementarlo), sino que puede afectar al ambiente de trabajo, creando insatisfacción, baja moral, sensación de poca realización profesional y/o estancamiento.

Sin embargo, una buena contratación, además de las aportaciones personales del individuo, puede atraer un ambiente creativo, nuevas ideas y estimular la productividad general y satisfacción del equipo de desarrollo.

Como dice Joel, es mejor no contratar un programador bueno que contratar uno malo (inglés)

¿Y como diferencio a un buen programador?

Cuidado, a veces las apariencias engañan:

Un programador no es productivo:

  • Si produciendo muchas líneas de código en poco tiempo o "acabando" sus tareas rápidamente:
    1. Se tarda muchas veces más lo que costó la tarea en sí en encontrar y solucionar los bugs asociados al el código creado (hacerlo deprisa y mal, vamos)
    2. Se crea código repetido, mal diseñado, o inmantenible que hace dificultosas futuras modificaciones (pan para hoy, hambre para mañana)
    3. Crea interfaces poco usables, que el usuario no entiende, generando muchas horas de soporte y modificaciones, y lo peor, insatisfacción en el cliente.
  • Un programador es productivo, si produciendo muchas menos líneas de código:
    1. Anticipa requisitos futuros, evitando altos costes de reprogramación
    2. Crea código de calidad, que necesita poca o ninguna revisión posterior en QA
    3. Crea código mantenible y fácilmente entendible por otro programador.
    4. Piensa en como el usuario va a utilizar la aplicación y crea interfaces usables,  evitando tener que contratar un especialista en experiencia de usuario y aumentando la satisfacción del cliente.

Este artículo (inglés) introduce un concepto interesante: "total cost of ownership" o "el coste de tener un desarrollador en la empresa." 

El hecho de que un programador pueda escribir código eficiente, mantenible, usable y con menos fallos, hace que aumente la  productividad de conjunto del equipo de desarrollo, que el equipo de QA trabaje más tranquilo (y dedique menos recursos a revisar su código) y que al final el cliente esté más feliz con la aplicación, aumentando la satisfacción y productividad de todo el mundo. ¿Que precio tiene eso?

Moraleja: si estudiamos su productividad, los mejores desarrolladores están infra-remunerados, y los peores, sobre-remunerados.

Actualización (19Feb09): Concepto interesante: Programadores con producción neta negativa.