martes, 7 de abril de 2009

Proceso de Selección - Parte I

Como parte importante de mi trabajo, habitualmente me toca la difícil y compleja tarea de buscar personas para que se integren a mi equipo. En la estructura actual, una de mis labores es el desarrollo de productos nuevos y la mantención correctiva de productos antiguos. No somos una empresa muy grande y muchos menos una empresa con estructuras muy verticales, por lo que, en general, busco personas que puedan tener una visión más amplia de los problemas, es decir, que puedan moverse libremente desde la Especificación de Requerimientos hasta la Puesta en Producción pasando por Desarrollo y Pruebas.

Es un hecho que no todas las personas pueden (y quieren) cumplir con este desafío, pero, para las que si lo desean hacer, es un requisito básico que tengan una buena base de programación. Sin esto, difícilmente, podrán levantar la cabeza del bit y el byte para entender aspectos más importantes del problema, del negocio y/o del cliente.

Anteriormente, he participado de varios procesos de selección en los cuáles se realizan preguntas sueltas y/o exámenes para verificar, certificar, los conocimientos de programación. En lo personal, siempre he sentido que las empresas que realizan esto, se acercan un poco a un proceso de selección más objetivo, por lo tanto, decidí aplicarlo en mi proceso de selección.
El proceso de entrevista es el normal (revisión del CV, entrevista personal, etc.) más la realización de algunas preguntas de programación. Dado que el lenguaje que utilizamos principalmente es Java, la búsqueda y las preguntas están orientadas a personas con experiencia en este lenguaje.

La primera pregunta (muy simple por lo demás), consiste en determinar cuál es la salida, en tiempo de ejecución, del siguiente programa:

Para mi sorpresa, esta pregunta casi siempre la contestan mal. No tengo claro si es la sorpresa de la situación, la presión, lo inesperado y/o definitivamente que no les enseñan esto en los planes de estudio actuales (claramente, esto no debiera ser un capítulo en ninguna parte, con algunas horas bastaría para poder enseñar esto).

Bueno, pero, en definitiva, ¿cuál es el problema? ¿porqué no es inmediata la respuesta? básicamente por dos razones:

  • Las personas no conocen los operadores ++, --, etc.
  • Las personas no tienen claro la precedencia en los operadores.

Para enteder claramente la pregunta, es necesario conocer y entender los puntos anteriores. Sin entrar mucho en detalles, los operadores ++ y --, son conocidos como operadores de incremento y decremento y reemplazan las instrucciones siguientes:

  • i++ es equivalente a i = i + 1
  • i-- es equivalente i = i - 1

El segundo aspecto importante para entender la pregunta es la precedencia de estos operadores. Para esto:

  • Si los operadores se ubican antes, se realiza el incremento/decremento y se retorna el valor.
  • Si los operadores se ubican después, se retorna el valor y se realiza el incremento/decremento.

Lo más importante en esta sintaxis, es que el valor actual de la variable a la que se le aplica el operador se altera siempre. Por ejemplo:



  • En la primera instrucción, primero se asigna el valor de i a la variable j y luego se incrementa ( i = i + 1).
  • En la segunda línea, primero se incrementa i (i = i + 1) y luego ase asigna el valor de la variable a j.
  • En la tercera línea, se asigna el valor de i a j sin modificar el valor de i.

Desde que comencé mis primeros pasos en programación en la universidad (en lenguaje C), estos operadores y la sintaxis asociada fueron recalcados como importantes y fundamentales. Especial relevancia toman estos operadores en el caso de los ciclos for, por ejemplo, las siguientes declaraciones producen el mismo resultado:

Nuevamente, la compresión del operador (++ en este caso) facilita la lectura del código y, por el contrario, la no compresión de él, podría indicar la utilización de él exclusivamente por memoria y/o copy & paste lo que claramente no es recomendable.

¿Está claro, ahora si, cuál es el resultado en tiempo de ejecución del programa?

No hay comentarios.: