viernes, 26 de septiembre de 2014

XP (Xtreme Programming), una metodología 'agile' (Parte II)

En la Parte I se hablaba de expresar la metodología de programación extrema a través de diferentes prácticas, en concreto unas 12: (en lengua inglesa puede verlas haciendo click aquí)

Foto extraída de www.xprogramming.com

  1. Equipo completo, forman parte del equipo todas las personas que tienen algo que ver con el proyecto, incluido el cliente y el responsable del proyecto.
  2. Planificación, se hacen las historias de usuario y se planifica en qué orden se van a hacer. La planificación se revisa continuamente.
  3. Versiones pequeñas, las mini-versiones deben ser lo suficientemente pequeñas como para poder hacer una cada pocas semanas. Deben ser versiones que ofrezcan algo útil al usuario final y no trozos de código que puedan ser vistas funcionando.
  4. Test del cliente, el cliente, con la ayuda de los desarrolladores, propone sus propias pruebas para validar las mini-versiones.
  5. Diseño simple, hacer siempre lo mínimo imprescindible de la forma más sencilla posible. Mantener siempre sencillo el código.
  6. Pareja de programadores, los programadores trabajan por parejas (dos delante del mismo ordenador) y se intercambian las parejas con frecuencia (un cambio diario).
  7. Desarrollo guiado por las pruebas automáticas, se deben realizar programas de prueba automática y deben ejecutarse con mucha frecuencia. Cuantas más pruebas se realicen, mejor.
  8. Integración continua, se debe tener siempre un ejecutable del proyecto que funcione y en cuanto se tenga una nueva pequeña funcionalidad, debe recopilarse y probarse. Es un error mantener una versión congelada dos meses mientras se hacen mejoras y luego integrarlas todas de golpe. Cuando fallara algo, no se sabría qué es lo que falla de todo lo que habíamos metido.
  9. El código es de todos, cualquiera puede y debe tocar y conocer cualquier parte del código. Para eso se hacen las pruebas automáticas.
  10. Normas de codificación, debe formalizarse un estilo común de codificación (no importa cual), de forma que parezca que ha sido realizado por una única persona.
  11. Metáforas, hay que buscar unas frases o nombres que definan cómo funcionan las distintas partes del programa, de forma que sólo con los nombres se pueda uno hacer una idea de qué es lo que hace cada parte del programa. Un ejemplo claro es el "recolector de basura" de java. Ayuda a que todos los programadores (y el cliente) sepan de qué estamos hablando y que no haya mal entendidos.
  12. Ritmo sostenible, se debe trabajar a un ritmo que se pueda mantener indefinidamente. Esto quiere decir que no debe haber días muertos en que no se sabe qué hacer. Tampoco se debe hacer un exceso de horas otros días. Al tener claro semana a semana lo que debe hacerse, hay que trabajar duro en ello para conseguir el objetivo cercano de terminar una historia de usuario o mini-versión.

Pese a que personalmente no he hecho uso (aún) de esta metodología que acabo de comentar, su uso y sus practicas las recomiendo encarecidamente. Su uso es recomendable, en primer lugar, por su programación organizada y satisfacción que proporciona al programador, y en segundo lugar, por su aplicación en proyectos programados a corto plazo y con condiciones de altas comisiones en caso de fallo.

¡Saludos!

martes, 23 de septiembre de 2014

XP (Xtreme Programming), una metodología 'agile' (Parte I)

XP es una metodología desarrollada por Kent Beck en el verano de 1996:
"Todo en el sofware cambia. Los requisitos cambian. El diseño cambia. El negocio cambia. La tecnología cambia. El equipo cambia. Los miembros del equipo cambian. El problema no es el cambio en sí mismo, puesto que sabemos que el cambio va a suceder; el problema es la incapacidad de adaptarnos a dicho cambio cuando éste tiene lugar"
Es una metodología ligera para el desarrollo de software basada generalmente en la simplicidad, la comunicación y la realimentación o reutilización del código desarrollado. Es la metodología más destacada entre todos los procesos y metodologías ágiles de desarrollo software. La programación extrema se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad. Aquellos que defienden XP consideran que los cambios de requisitos sobre la marcha son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. 

Su principal objetivo es aumentar la productividad al desarrollar software. Además del anterior objetivo se plantean otros como:

  • Satisfacer al cliente.
  • Potenciar el trabajo en grupo.
  • Minimizar el riesgo actuando sobre las variables del proyecto: coste, tiempo, calidad y alcance.
Los valores que inspira esta metodología entre otros son:
  • Comunicación.
  • Sencillez.
  • Retroalimentación.
  • Valentía y coraje.
Las características en las que se basa:
  • Basada en prueba y error.
  • Fundamentada en valores y prácticas.
  • Expresada en 12 prácticas esenciales, que se soportan unas a otras.
Hasta aquí la entrada de hoy, en la parte II ilustraré las practicas esenciales comentadas en las características.

¡Saludos!

sábado, 20 de septiembre de 2014

Sé 'Agile', principios de las metodologías ágiles

Las metodologías ágiles para el desarrollo de software surgen ante la necesidad de ofrecer una alternativa a las metodologías tradicionales, caracterizadas por ser más pesadas, rígidas y dirigidas por la documentación que va siendo generada en cada una de las actividades desarrolladas.

En 2001 se realiza una reunión de expertos en la que se acuerda el denominado Manifiesto Ágilponiendo al descubierto los mejores métodos para desarrollar software. 

Los 12 principios incluidos en el manifiesto son los que siguen: 

  • Nuestra mayor prioridad es satisfacer al cliente a través de una entrega temprana y continua de software de valor.
  • Son bienvenidos los requisitos cambiantes, incluso si llegan tarde al desarrollo.
  • Entregar con frecuencia software que funcione, en periodos de un par de semanas hasta un par de meses, con preferencia en los periodos breves.
  • Las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana a través del proyecto.
  • Construcción de proyectos en torno a individuos motivados, dándoles la oportunidad y el respaldo que necesitan y procurándoles confianza para que realicen la tarea.
  • La forma más eficiente y efectiva de comunicar información de ida y vuelta dentro de un equipo de desarrollo es mediante la conversación cara a cara.
  • El software que funciona es la principal medida del progreso.
  • Los procesos ágiles promueven el desarrollo sostenido. Los patrocinadores, desarrolladores y usuarios deben mantener un ritmo constante de forma indefinida.
  • La atención continua a la excelencia técnica enaltece la agilidad.
  • La simplicidad como arte de maximizar la cantidad de trabajo que no se hace, es esencial.
  • Las mejores arquitecturas, requisitos y diseños emergen de equipos que se auto-organizan.
  • En intervalos regulares, el equipo reflexiona sobre la forma de ser más efectivo y ajusta su conducta en consecuencia.

En próximos post comentaré las metodologías ágiles de más relevancia en la actualidad.

Un saludo!

miércoles, 17 de septiembre de 2014

Diferencia: líder sabio vs líder inteligente, ¿con cúal quedarse?

La diferencia entre un líder sabio de uno inteligente a simple vista puede ser imperceptible, sin embargo, las actitudes y aptitudes de cada uno de ellos son muy diferentes.

Veamos sus diferencias a través de un esquema:


En vista al esquema anterior hablamos de dos tipos de líderes. Existen líderes que no solo no escuchan sino que hacen pocas preguntas, es decir, son todo transmisión y nada de recepción, estos líderes pueden entrar en el cupo de los considerados inteligentes. Estos líderes aprenden pocas cosas de las personas inteligentes que les rodean, ya que con ellos nadie se siente escuchado ni respaldado.

Para estos líderes se les recomienda seguir el consejo de John Wooden, considerado el mejor entrenador de la historia de la NCAA: "Escuche a quienes están bajo su supervisión. Escúchelos de verdad. No actúe como si estuviera escuchando mientras le entra por un oído y le sale por el otro. Fingir que se escucha es peor que no hacerlo" 

Por otro lado están los líderes sabios, desean aprender todo aquello que ignoran. Actúan con gran valentía ante situaciones que se les plantean en el momento, sin descartar la posibilidad de estar equivocados y están, además, dispuestos a aspirar a un saludable equilibrio entre el coraje y la humildad.

Para terminar esta entrada, llegamos a la conclusión de que aquellos líderes incluidos en el grupo de los inteligentes son los mismos que tienden a la arrogancia, suelen ser poco sensatos, aunque no por ello inseguros. En cambio, los sabios tienen opiniones sólidas que apenas defienden, con el objetivo de poder retractarse cuando hacen frente a hechos que las contradicen. La actitud que brindan los líderes sabios es el camino a seguir hacia el éxito.

Les dejo con un consejo de Andrew Grove con el que anima a los directivos a actuar con determinación, aún cuando no sepan lo que están haciendo: 

"Actúe de acuerdo con lo que piensa en todo momento como si no hubiera ninguna duda; y cuando se dé cuenta de que está equivocado, corrija el rumbo con suma rapidez"

¡Un saludo a todos!

sábado, 13 de septiembre de 2014

Mejora el rendimiento de Windows 7 u 8 de forma rápida

Aunque, como ya se sabe, el rendimiento tanto de Windows 7 como de su versión 8 y 8.1 es bastante razonable, podemos encontrar PCs con cierta edad de uso que se hacen notar "sofocados" corriendo esos sistemas. 

Hacía tiempo que vengo observando en gran cantidad de post y videos cómo realizar alguna mejora de rendimiento. La que más me ha sorprendido, y con la que al final me quedo (por el momento) es con una configuración que trata de suprimir los efectos visuales, transparencias, animaciones, etc. que incluyen las últimas versiones de Windows. Si bien, aunque en equipos potentes no sería necesario realizar estas configuraciones, en equipos con algunos años de más es muy recomendable y ahorraría consumo de recursos a la CPU.

Aquí les muestro un minitutorial de cómo hacerlo:

Nota: la realización de este tutorial se ha realizado utilizando la versión 8.1 de Windows, todas las imágenes están basadas en dicho sistema.

1. Abrimos ventana de opciones en "Este equipo" (botón derecho) y seleccionamos "Propiedades":


2. Entramos en "Configuración avanzada del sistema":


3. En el apartado de Rendimiento seleccionamos "Configuración...":


4. En la ventana "Opciones de rendimiento" puede ajustar las opciones visuales que quiera, en la imagen de abajo puede ver que he seleccionado la opción Ajustar para obtener el mejor rendimiento:


Si deselecciona todas las opciones y hace click en "Aplicar" podrá ver como la apariencia de su PC baja de calidad, sin embargo, la interacción entre ventanas será mucho más rápida y fluida. 


Les invito a probar varias configuraciones para comprobar la mejora de rendimiento.

¡Un saludo!

miércoles, 10 de septiembre de 2014

¿Problemas de productividad?: The Pomodoro Technique ®

Si hay algo que daña a un país, a una empresa o a un equipo de trabajo es que las personas que los componen no sean para nada productivos. 

La productividad la definiré con un simple ejemplo: se trata de una relación que podría combinar el tiempo invertido y la cantidad de producto obtenido en ese tiempo. Por tanto un ejemplo puede ser el tiempo invertido por una cadena de montaje en crear 10 productos en un tiempo x, para lo cual si al siguiente día la cadena de montaje es capaz de crear 15 productos en el mismo tiempo x, podremos decir que somos productivos. Les dejo enlace con más ejemplos de indicadores de productividad.

Una técnica de productividad que está poniéndose de moda y que es buena darla a conocer, es la de Pomodoro por Francesco Cirillo.


El funcionamiento de Pomodoro es eficaz realizándose en 6 sencillos pasos:

Nota: para explicar el funcionamiento de Pomodoro he utilizado la aplicación para smartphone (iPhone) Flat Tomato (Time Management Tool Inspire By Pomodoro) y en alguna ocasión he utilizado iconos e imágenes de tutorial extraídos de la misma aplicación.


1. ELIJA UNA TAREA que desee realizar:

Por ejemplo, alguna tarea que merezca una atención completa por su parte.




















2. AJUSTE EL POMODORO/TOMATE (o reloj en la aplicación) en 25 minutos:

Hágase un pequeño juramento así mismo: "voy a pasar 25 minutos en esta tarea y no voy a consentir ninguna interrupción".

















3. TRABAJE EN LA TAREA hasta que SUENE el TOMATE (o reloj):

Sumérjase en la tarea en los siguientes 25 minutos. Si de repente se da cuenta que tiene algo más que necesita hacer, debe escribirlo en una hoja de papel (en este caso en la aplicación se marcaría con un punto).
















4. CUANDO EL RELOJ SUENE coloque una marca en un papel (en este caso en la aplicación):

¡Enhorabuena! Ha pasado un Pomodoro completo realizando una tarea.


















5. TOME UN DESCANSO CORTO:

Respire, medite, tome una taza de café, estire las piernas o haga alguna otra cosa de descanso que no esté relacionada con la tarea que haya realizado. Su cerebro se lo agradecerá más tarde.

















6. CADA 4 POMODOROS, tome un descanso largo:

Una vez que haya completado cuatro Pomodoros, se puede tomar un descanso más largo, sobre 20 o 30 minutos sería lo ideal. Su cerebro usará ese tiempo para asimilar la nueva información y descansará antes de la siguiente ronda de Pomodoros.
















Les animo a probar esta técnica y notar cómo el tiempo puede tornarse más productivo. Les dejo algunos enlaces en diferentes plataformas:

Web: Marinara Timer, Moosti, Tomato Timer

Escritorio (Windows, OS X, Linux): TeamViz, Focus Booster App

Android: It's Pomodoro Time!, ClearFocus: Pomodoro Timer

iOS: Pomodoro Timer, además Flat Tomato (utilizado en la exposición).


¡Un saludo a todos!

viernes, 5 de septiembre de 2014

La habilidad directiva del ingeniero (Parte I)

Un ingeniero, por su perfil profesional, está llamado a ser uno de los líderes naturales en cualquier proceso de creación, gestión y realización de proyectos. Se trata comúnmente de aplicar temas genéricos de organización y gestión de recursos para llevar a cabo un objetivo común, la elaboración de un proyecto de la forma más óptima posible.

En esta primera entrada voy a hablarles de la forma correcta de obrar por parte de un líder de proyecto, lo que se suele dominar puramente como un jefe o jefe de proyecto en estos casos.

Para esta vez les hago referencia al libro "Buen jefe, mal jefe" de Robert I. Sutton. Hasta el momento (por lo que he leído de él) lo considero un buen libro que todo jefe que se precie debería leer. Plantea lo que todo jefe o líder debe aprender para conseguir ser cada día mejor ante sus subordinados.

Hoy, voy a comentar los consejos que recomienda llevar a cabo por un líder, al realizar una nube de ideas y una batalla posterior para eliminar las peores, y quedarnos con la mejor o las mejores ideas.

A un buen jefe (considerado en el libro, un jefe sabio) le gustan las buenas discusiones. Como índica el libro, "Montones de estudios demuestran que, cuando la gente se enfrenta por una idea y lo hace con respeto mutuo, es más productiva y creativa" 

Karl Weick capta la esencia de una buena discusión con esta frase "Discuta como si tuviera razón, escuche como si estuviese equivocado"

A continuación sigue la lista de consejos para dirigir un buen enfrentamiento en un equipo de trabajo:
1. No empezar el debate hasta que todo el mundo comprenda el desafío o el problema al que se enfrenta.
 2. No discutir mientras se generan ideas o soluciones (nube de ideas); hacer que la gente se sienta cómoda para proponer ideas disparatadas o controvertidas. Cuando tenga unas cuantas ideas, invite a su equipo a echarlas por tierra.
3.  Si alguien se pone agresivo, tómese un descanso y pídale que deje de soltar veneno. Preste especial atención a los graciosos que profieren insultos devastadores disfrazados de chistes y burlas.
4. Anime a todo el mundo a discutir. Acalle educadamente a quienes hablan demasiado e invitar a quienes guardan silencio a entrar en la refriega.
5. No se limite a escuchar las palabras de los demás; observe su lenguaje no verbal. ¿Sonríen? ¿Escuchan de verdad? ¿Miran furiosos, sonríen con suficiencia o ponen los ojos en blanco? Tome como modelo un lenguaje no verbal constructivo y reconduzca al grupo que interviene con expresiones negativas (quizá involuntariamente).
6. Ponga especial cuidado en invitar a los tímidos o nuevos o a quienes se hallan en lo más bajo de la jerarquía a que expresen sus opiniones y defiéndelas con energía de los posibles ataques personales.
7. Descubra las rarezas de cada uno. A algunos de ellos nada les hace mella: no se inmutan ante una grosería. Otros son tan susceptibles que la crítica más comedida les infunde cólera o desánimo.
8. Una vez que la discusión se haya resuelto, asegúrese de que el conflicto y las críticas cesan. Ha llegado el momento de desarrollar y aplicar las ideas acordadas. Prohíba al grupo que insista en que su "gran idea" se ha visto acallada o en las críticas manidas hacia las ideas "ganadoras".
9. Cuando el debate haya finalizado, trabaje entre bastidores. Calme a quienes se sientan atacados y piensen que sus ideas han quedado aparcadas. Llame la atención y aconseje a quienes han proferido ataques personales. 
10. Pese a la capacitación y el asesoramiento cualificado, algunas personas pueden ser demasiado groseras o muy sensibles a las críticas. Tal vez tenga que excluirlas de futuras batallas, ya que sus debilidades pueden hacer imposible que otros participen en un debate constructivo.

Aquí termina esta entrada dedicada al enfrentamiento constructivo en un equipo de trabajo, llevada de la mejor manera por un buen líder.

En adelante seguiré exponiendo más habilidades directivas que debe tener muy en cuenta un ingeniero.

¡Un saludo a todos!

lunes, 1 de septiembre de 2014

¡Bienvenida!

Bienvenidos,

este es mi blog, llamado "Un mundo de ingeniería". En él trataré de escribir de la forma más continuada posible, mostrando todo aquello que considere de interés y para lo que me encuentre investigando. 

Las vivencias, experiencias, conocimientos y competencias adquiridas hasta el momento me hacen sentirme con la obligación y necesidad de que, poco a poco, pueda compartirlas a través de este blog.

Si bien, aunque soy experto en la rama de informática y dentro de ella experto en tecnologías de la información, llegará el momento de hablar de otras ramas de ingeniería que puedan estar en conjunción con la primera. Las necesidades de tiempo, por ejemplo, impiden estudiar todo aquello que a uno le apasiona, en mi caso las ramas dedicadas a la aeronáutica, el diseño industrial, las telecomunicaciones, etc. 

En algunos casos varias ramas de ingeniería se encuentran y se tiene la necesidad de unirlas para crear algo extraordinario. Esa unión la tenemos presente en una gran mayoría de productos, como por ejemplo aviones, teléfonos móviles, y todo tipo de aparatos en los cuales tengamos una serie de tecnologías unidas y ensambladas para un único fin. La correcta unión de esta serie de tecnologías y ramas de investigación hace que podamos crear aquello que nos propongamos.

Por tanto, con este blog intentaré mostrar aquellas tecnologías que sean novedad para la sociedad y que puedan aportarnos algo bueno, con el claro objetivo de aprenderlas y aplicarlas al mundo.

Les dejo con un pasaje de la película Matrix (1999) con el que termino esta bienvenida.

- Ya era hora. Bienvenido. Supongo que ahora te sentirás un poco como Alicia cayendo por la madriguera del conejo.
+ Es posible.
- Puedo verlo en tus ojos.
(...)
- Esta es tu última elección. Después ya no podrás echarte atrás.
Si tomas la pastilla azul, fin de la historia. Despertarás en tu cama y creerás lo que quieras creerte.
Si tomas la pastilla roja te quedarás en el país de las maravillas, y yo te enseñaré hasta donde llega la madriguera del conejo.
(...)
- Recuerda. Lo único que te ofrezco es la verdad. Nada más.


Renunciemos a la plácida felicidad que otorga la pastilla azul y adentrémonos al mundo real. 

Un saludo a todos.