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

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")
09/09/2009
The Principles Of Successful Freelancing (free ebook)
Interesante lectura para quien quiera comenzar a emprender:
Gracias Dani.
08/09/2009
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)
19/05/2009
WPF line of Business (Londres, Mayo 09)
Aproveché el curso de dos días de WPF impartido por dos especialistas de talla mundial Jaime Rodriguez y Karl Shifflet para quitarme los cariños de "la city" y visitar a buenos amigos. Mereció realmente la pena todo lo que Jaime y Karl, dos grandes conocedores de la tecnología (y muy buenos oradores) nos comprimieron en esos dos días.
Detailed Agenda
- Day One:
- Lap Around WPF
- WPF Tools ( Blend, Visual Studio 2008)
- Graphics Subsystem
- Layout
- WPF Fundamentals and new concepts
- Application Model
- Dependency Properties
- Trees (logical & visual)
- Events
- Threading
- Resources
- Controls
- Styling
- Templating
- Q&A with instructors at end of day
- Day Two:
- WPF integration with Win32 and Windows Forms
- Data binding
- Introduction to Model-View-ViewModel
- Commanding in M-V-VM
- Views, Navigation and Transitions
- Data Validation
- Error handling, Model dialogs, Logging
- Unit Testing
- MVVM & LOB tips and tricks
- Q&A with the instructors
02/04/2009
Comunidad de Microsoft Certified Trainers (MCT)
Si eres un Microsoft Certified Trainer, te puede interesar formar parte de un grupo que ha sido creado recientemente en linkedin para MCT’s actuando en España.
Es un grupo reservado para Microsoft Certified Trainers (deberás de enviar tu transcript para participar) y en el se discuten asuntos que nos interesan como conjunto de profesionales.
Si estás interesado en participar, entra en linkedin.com y busca el grupo: Microsoft Certified Trainers (MCT) en España (Spain) (intenta este link para acceder a él).
02/03/2009
Asegur@IT V (Zaragoza) 3 marzo 09
martes, 03 de marzo de 2009 9:00 - martes, 03 de marzo de 2009 14:00 Madrid, París
Instituto Tecnológico de Aragón (ITA) (Edificio Blanco) ITA-3
Auditorio del Instituto Tecnológico de Aragón
c/ María de Luna 7-8 Zaragoza Zaragoza 50018
España
La seguridad informática exige cada vez mayor conocimiento en múltiples disciplinas. Este evento pretende dar conocimiento de algunas técnicas utilizadas para atacar sistemas y cómo podemos protegernos ante ellas. Este evento está dirigido a técnicos de sistemas, administradores de redes, responsables de seguridad y desarrolladores de sitios web.
Agenda
(ver enlace)
Registro y más información:
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032405039&Culture=es-ES
04/02/2009
Desarrollar software no es sólo picar código

Me ha gustado mucho el cartel del evento de los compañeros de Navarra (autor Sergio Jimenez)
Habrá que estar atento al calendario de eventos.
28/01/2009
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:
- Innovar, generar buenas ideas.
- Transformar esas ideas en un producto de software usable.
- 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.
- Estar dispuesta a aprender lo que no sabes y a enseñar lo que has aprendido.
19/01/2009
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
14/01/2009
Salario de un buen programador

Como gerente de proyectos, ¿que considerarías una buena contratación?.
- Un programador cuyo salario ronda la media y produce lo que la media
- 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:
- 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)
- Se crea código repetido, mal diseñado, o inmantenible que hace dificultosas futuras modificaciones (pan para hoy, hambre para mañana)
- 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:
- Anticipa requisitos futuros, evitando altos costes de reprogramación
- Crea código de calidad, que necesita poca o ninguna revisión posterior en QA
- Crea código mantenible y fácilmente entendible por otro programador.
- 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.

