Archivo por meses: mayo 2012

Gestión: La importancia del Feedback

Un punto clave en la Gestión de Personas, y que suele ser uno de los grandes olvidados por parte de los Gestores, es el Feedback o Retroalimentación para/con nuestros colaboradores.

Es posible que si ahora mismo alguien os pidiese una definición sobre este concepto, muchos o la mayoría os referiríais a él como el proceso de proporcionar a vuestros colaboradores una evaluación u opinión sobre su trabajo y desarrollo diario.

Pero en realidad, estaríamos equivocados, puesto que en el Feedback tan importante es proporcionar información como recibirla, ya que tal y como define la Wikipedia:

La retroalimentación, también denominada feedback, significa ‘ida y vuelta’ y es, desde el punto de vista social y psicológico, el proceso de compartir observaciones, preocupaciones y sugerencias, con la intención de recabar información, a nivel individual o colectivo, para intentar mejorar el funcionamiento de una organización o de cualquier grupo formado por seres humanos.

Así, a la hora de llevar a cabo este proceso, tan importante es ser comunicativo y saber qué debemos de comunicar, como ser receptivo y estar preparado para escuchar a nuestros colaboradores.

Errores habituales.

Para ello, debemos de evitar los siguientes errores cuando intentamos transmitir:

  • No dar la debida importancia y realizar el proceso con prisas.
  • Pretender dar indicaciones sobre cómo realizar objetivos, en lugar de los propios objetivos.
  • Transmitir ideas vagas y poco concretas.
  • Forjar tu opinión sobre tu colaborador a partir de rumores y no sobre hechos.
  • No dar libertad a nuestro colaborador sobre cómo afrontar su trabajo y querer imponer nuestro criterio.

Y los siguientes cuando debemos recibir:

  • Tener la idea preconcebida de que la otra persona no puede evaluarnos al no compartir con nosotros el día a día.
  • Esperar que nos digan cómo completar nuestros objetivos.
  • Cerrarnos al cambio.
  • Pensar que las opiniones buscan ridiculizarnos o ‘atacarnos’, en lugar de mejorarnos.
  • Asumir que es un trámite propio de la Empresa/Area inútil y sin sentido.

¿Cuándo realizar este proceso?

Otro error muy habitual es el de creer que este proceso debe ser lo más espaciado en el tiempo posible, o que solo debe realizarse cuando el calendario obligue a realizar las evaluaciones anuales.

Dejar que pasen largos periodos de tiempo, supone dejar en ‘el olvido’ a nuestros colaboradores, generando sensación de ‘abandono’ o de estar realizando tareas que ‘no importan a nadie’, o incluso que no cuentan con nuestra confianza y sus carreras se encuentran estancadas.

Por ello, es importante que tengamos siempre presente el proceso, aunque sin caer en algo continuo y agobiante que pueda hacer creer a nuestros colaboradores que queremos controlarles en exceso y que no tienen libertad de acción.

También depende del proyecto, el trabajo que se esté realizando y el estado del mismo, ya que la periodicidad puede ir desde un necesario seguimiento semanal, cuando existen retrasos o la situación del proyecto es complicada, a un seguimiento mensual para poder dar información sobre tareas actuales.

Beneficios de un buen Feedback.

El primero y más claro es lograr que nuestros colaboradores tengan una idea clara de lo que se espera de ellos.

Conseguimos también establecer una relación de mutua confianza, hacia nosotros porque nos mostramos como alguien que cuenta con ellos, les escucha y sabe valorarles, hacia ellos porque contribuimos a mejorar su confianza, su autoestima  y seguridad, lo que nos permite delegar con más tranquilidad.

Nos evita sorpresas desagradables, ya que cuando les surja algún problema o no sepan cómo afrontar un objetivo, es más fácil que nos consulten y pidan opinión, compartiendo con nosotros las dificultades con las que se puedan encontrar, en lugar de esconderlas o ignorarlas por no considerarlas importantes.

Existe una mayor motivación, al sentir que disponen de libertad para decidir, que se cuenta con ellos y su opinión cuenta, que se les permite asumir responsabilidades y hacerles sentir importantes en el equipo.

Efectos de un mal Feedback.

Evidentemente se pueden generar malos climas de trabajo, donde se nos vea como excesivamente controladores o desconfiados.

No existirá confianza suficiente para comunicar problemas o indecisiones, al considerar que lo veremos como un acto de ‘debilidad’.

La falta de transparencia y claridad sobre los objetivos, provocando que muchos eludan asumir responsabilidades sobre algo que consideran que ‘no pueden controlar’.

Y por supuesto, un alejamiento entre la dirección/gestión y los equipos de trabajo, que puede generar muchas tensiones internas e incluso enfrentamientos.

Cómo realizar el Feedback.

Para poder llevar a cabo el proceso, debemos de ser los primeros en tomárnoslo en serio y dedicarle el tiempo necesario para su preparación.

En la preparación:

  • Repasar las competencias del puesto/tareas sobre las que dar el feedback.
  • Ten claro el trabajo realizado por el colaborador en ese tiempo.
  • Piensa en cuáles son sus puntos fuertes, para usarlos como aval a tu opinión.
  • Piensa en qué puntos deben ser desarrollados y mejorados.
  • En caso de duda, busca opiniones sobre comportamientos y acciones realizadas por esa persona, consultando inclusive con terceros que hayan estado en contacto con él.
  • Analiza detenidamente la información recogida, pensando tanto en los aspectos positivos como en qué aspectos de mejora hay.

Durante la entrevista es importante iniciarla de una forma en la que podamos poner en contexto a la otra persona, a la par que creamos un ambiente cómodo para ambos, rompiendo el hielo con preguntas sobre temas intrascendentes y amables, que ayuden a conseguir una actitud positiva por parte de la otra persona. Dejar claras las reglas a seguir es importante, explicando el tiempo a dedicar y cómo se va a realizar la misma, para que quede claro cuándo hablar y escuchar cada uno.

Quizás la mejor forma de seguir sea dejando que sea la otra persona la primera en hablar, pidiendo su opinión y auto-valoración, dejando que sea él quien nos cuente cómo se ve y respondiendo nosotros con una opinión basada en hechos objetivos, pero sin caer en una dinámica negativa donde nos limitemos a ‘regañar’ o ‘echar la bronca’.

Y para finalizar, presentar un plan de acción para futuro, donde dejemos claro lo que esperamos de él y demos lugar a que pueda opinar sobre cómo mejorar , pero con acciones concretas que serán revisadas en futuros feedbacks.

Conclusión.

Al final, el objetivo de la entrevista es conseguir que nuestro colaborador se sienta cómodo con nosotros, se genere confianza, pueda hablarnos con franqueza y se cree un clima de diálogo.

Si le añadimos el reconocimiento, conseguiremos que se sientan valorados, que nos importan y podremos ofrecerles un plan de mejora personal que les haga desarrollarse profesionalmente, mejorando en sus áreas de mejora a la par que saben cuáles son sus puntos suertes.

Pero recordar, que es muy importante que pongamos interés en ello de forma sincera, ya que un falso interés puede ser aún más desmotivador que la ausencia de feedback.

Java: Crear un ejecutable para tu aplicación.

En ocasiones, aunque JAVA tenga carácter multiplataforma es posible que necesitemos crear un Ejecutable para Windows, un .exe, para nuestra aplicación JAVA.

Sea por exigencia de nuestro cliente, o por el mero hecho de querer hacer una distribución estándar para un entorno Windows.

El programa que vamos a utilizar se llama JSmooth, y es un programa gratuito que teneis disponible en Sourceforge.net, y en su página teneis disponibles manuales en HTML y PDF,.

En primer lugar, debemos de descargarnos el programa e instalarlo en nuestra máquina. Tras ello lo ejecutamos y llegamos a la primera página:

Skeleton.

Pincharemos sobre los iconos de la izquierda para ir a ‘Skeleton‘, donde debemos de indicar para qué tipo de aplicación queremos crear un ejecutable, teniendo para ello un desplegable con varias opciones. Cada opción, una vez seleccionada, cuenta con una descripción del tipo de aplicación.
En nuestro caso, seleccionamos el tipo ‘Windowed Wrapper‘ que es el que más se ajusta a la aplicación Swing que tenemos.

En la parte inferior de la pantalla, vemos algunas opciones. La primera de ellas es el mensaje que queremos que se muestre cuando no se pueda encontrar un JDK instalado en la máquina cliente. Asociada a esta primera, la opción url nos permite indicar a qué url llevar al usuario si selecciona descargar un JDK.
Por defecto la url es la que SUN tiene para JAVA con la descarga directa del último JDK o JRE.

La siguente opción es si queremos que el proceso JAVA, que se lanzará para nuestra aplicación, se ejecute dentro del proceso .exe o como un proceso aparte. En nuestro caso seleccionamos que lo lance dentro del .exe.

A continuación, tenemos la opción ‘Single Instance‘, que nos servirá para indicar si queremos o no que solo se permita una instancia de nuestra aplicación ejecutándose a la vez. La marcamos porque nos interesa que solo se permita una instancia.

Las dos siguientes son propias del JSmooth, y en nuestro caso no nos interesan.

Executable.

Pasamos al siguiente paso pulsando sobre ‘Executable‘.

Aquí, le indicamos el nombre del .exe (y en qué directorio nos lo generará) que querremos que tenga nuestra aplicación.
Le podremos asociar un icono al ejecutable, y decirle cuál será el directorio de trabajo de la aplicación una vez lanzada. Le asociamos un icono, y dejamos el campo en blanco para no obligar a nuestra aplicación a tener un directorio de trabajo pre-fijado.

Application.

Pasamos al siguente paso pulsando sobre el icono ‘Application‘, y en la siguiente pantalla pasamos a configurar la clase principal de nuestra aplicación y los distintos argumentos que podemos pasarle a la misma, o a la Máquina Virtual de JAVA.

Para seleccionar la ‘Main Class‘, primero cargaremos en la sección Classpath el fichero .jar que contiene nuestra aplicación, y luego pulsaremos sobre el botón a la derecha del campo […] para seleccionar entre todas las clases del JAR la que nos interesa.

Si no tenemos argumentos que pasar a nuestra aplicación, dejamos el siguiente campo en blanco.

También podemos elegir que se incluya un JAR dentro del .exe, que será extraido al directorio de trabajo cuando lancemos la aplicación.

Y en Classpath incluiremos todos los .jar que necesite nuestra aplicación (en la siguiente entrega veremos cómo distribuirlos con el instalador).

JVM Selection.

Pasamos a la siguiente sección, y aquí podemos indicar cuál es la versión mínima, y máxima, con la que se puede ejecutar nuestra aplicación. En nuestro caso, he puesto como mínima la 1.5, y como máxima la 1.6.

Podemos indicar, si así lo queremos, que se use un JRE (Java Runtime Environment) que se distribuya con nuestra aplicación.
Aquí, lo que he hecho ha sido copiar el directorio jre del JDK que estoy usando al directorio donde voy a tener el .exe, y referenciarlo con ‘./jre’, para que lo busque más adelante en el directorio de trabajo.

La siguiente opción sirve para ordenar cómo se buscará un JRE en el sistema donde se intente ejecutar la aplicación. En nuestro caso lo dejamos tal cuál.

JVM Configuration.

Y llegamos a la última sección, donde indicaremos algunas opciones para la máquina virtual de JAVA.

Las primeras, la memoria máxima y mínima que usará la aplicación en el cliente.

Y en el cuadro inferior podremos introducir más opciones mediante la introducción de pares ‘Clave-Valor’.

Build.

Una vez hecho esto, podremos pulsar sobre el icono de la rueda dentada para que se compile el proyecto y nos genere el .exe de nuestra aplicación.

Concurrencia en Java

Voy a iniciar mis andanzas en este blog con un tema complicado, la concurrencia.

La concurrencia en Java o en cualquier otro lenguaje es siempre un problema. Y lo es porque empiezas a jugar con unas reglas y según avanza la partida las reglas cambian, o eso es lo que parece. Porque el principal problema que enfrentamos cuando estamos codificando un proceso de forma que se ejecute con varios hilos simultáneos es el más temido entre los programadores: no poder reproducir la situación.

Realmente, ese es el resultado final, traído simplemente para escenificar el problema inicial, que no siempre se tiene en cuenta, las condiciones de ejecución de tu programa van a cambiar la forma de responder de tu código. Es culpa de lo que se conoce como condición de carrera: el resultado depende del orden en que se ejecuten los procesos concurrentes.

A lo largo de nuestra carrera profesional, muchos hemos pasado por el fantástico momento del mantenimiento correctivo de la aplicación. Es el momento en el que haces penitencia por los pecados cometidos durante el desarrollo. El momento en que te acuerda de aquello de «listo, esto funciona, subiendoooooo (a svn)». Que gracioso parecía hace unos meses, antes de que se produjese este error imposible, «lexe que 1+1 son 2 de toda la vida y ahora resulta que mi programa dice que son 2433453222».

En mantenimiento correctivo, el primer paso es «reproduce la incidencia». Pues te pones y resulta que no hay forma. Aquí viene en ayuda tuya lo que piensas del usuario. Y rechazas la incidencia. Pero la incidencia vuelve y esta vez con el fichero de trazas «JGL: después de calcular: a = 1, b=1, a+b = 3556122654». Mientras te estás frotando los ojos, pasa el listo de turno y te dice «eso va a ser el multithreading«…

Luego viene aquello de esto lo hemos probado mil veces…en una maquina aunque solo tiene un solo core y con un conjunto (reducido) de datos generados por nosotros.

Hipódromo Nacional de Maroñas | photo by jikatu

Y es que esa es una característica de la concurrencia, el resultado depende del orden de ejecución de los hilos y este orden varía según el hardware y las entradas que tengamos. Tenemos un sistema que funciona perfectamente en una maquina con un dual core y que recibe 20 entradas por minuto, se traslada a una maquina con 4 cpu y 8 cores cada una porque el trafico va a multiplicarse por 50. Y ahora el sistema es diferente, el orden de ejecución de los hilos ha cambiado radicalmente. Por esto, por las condiciones de carrera, es necesario sincronizar nuestros hilos para que no se pisen unos a otros.

Para poder hacerlo necesitamos conocer las reglas y necesitamos mecanismos que garanticen que un hilo no rompe lo que hace otro y además que el cambio de hilo sea visible al resto. a=a+b no se realiza en un solo paso. En el punto en que nos afecta, primero se hace a+b y después se hace a = esa suma. Para garantizar que se hace en un solo paso, tenemos los mecanismos que vamos a ver en los próximos artículos.

Van a ser una serie de artículos en los que iremos viendo diferentes mecanismos que nos van a permitir controlar procesos que se ejecuten mediante hilos.

Esta serie va a estar dividida en 4 bloques:

  • Lo básico
  • Las circunstancias particulares
  • Controlando la madeja
  • Deshaciendo los nudos

Además, iré al lio, prometo no enrollarme. Nos vemos. Aquí.

Presentación y puesta en marcha…

Cuando por cosas de Google o el azar vayáis llegando a este blog, el primer vistazo que le echéis no os dirá mucho, pero tras este pequeño blog se encuentran muchas conversaciones y horas para decidirnos a emprenderlo y ponerlo en marcha.

Horas dedicadas a discutir sobre las cosas que buscamos en la red cuando necesitamos información sobre temas técnicos, cosas más centradas en la gestión (que también se ha convertido en parte de nuestro día), cómo resolver tal o cuál problema que nos hemos encontrado y que no sabemos cómo solucionar, etc…

 

Esas mismas horas son las que en un momento dado nos llevaron a empezar a hablar sobre cómo nos gustaría encontrar la información, cómo creíamos que se deberían explicar muchas cosas que hoy (por desgracia) solo te encuentras introducidas y ejemplarizadas con el típico ‘Hello World’.

 

Hasta que en un momento dado, tanto hablar (que hablamos mucho, a veces incluso demasiado) terminó derivando en el germen de una idea, ser nosotros quienes contarámos esos ejemplos o explicásemos cómo hemos resuelto esos, a menudo, pequeños problemas que por ironías de la vida (o el Karma) son los que más tiempo terminan haciendo que pierdas.

Y así empezar a predicar con el ejemplo el cómo deberían explicarse las cosas, cuando uno pretende explicar cómo sacar partido a una nueva tecnología o ese nuevo framework que te ha llamado la atención.

Por todo eso hoy nace este blog, en el que no solo comentaremos las noticias relevantes en nuestro trabajo relacionado con la tecnología sino también intentaremos transmitir la cosas que nuestra experiencia en el mundo de la tecnología nos ha dado a conocer para poder hacer nuestro trabajo mejor.

 

Esperamos que ello pueda ayudar a quienes lleguen buscando alguna solución a un pequeño problema, o a los que creáis que merece la pena seguirmos más asiduamente.

 

Disfrutarlo.