domingo, 2 de diciembre de 2007

Microsoft II - Desde Turquía con Amor

Tras unos 5 minutos en el taxi, llegué al edificio 10, el de Core Networking. En Microsoft el tema de los edificios es un auténtico caos, ya que están numerados sin seguir ningún tipo de norma, por lo que a lo mejor al lado del edificio 13 está el 38 y cosas así. Por eso es buena idea llevar contigo un mapa si vas en coche o sino coger un taxi, ya que los taxistas a base de estar allí trabajando varios años ya se conocen donde esta cada cosa.

Abrí la puerta del edificio 10 y me encontré con el mostrador de recepción. Me acerqué y le dije a la chica guapa que tenía una entrevista con Sermet Iskin. Buscó su nombre en el ordenador, le llamó y me dijo que esperase un minuto que ahora venía. Mientras esperaba me llamó la atención que justo detrás de recepción hubiese una mesa de ping-pong con dos ingenieros allí jugando. También había varias XBox 360. Parece que allí los empleados no se aburren...

Unos minutos después llegó mi entrevistador. Era un tipo de unos 30 años, con perilla. Me dio la mano y me dijo que le siguiese al despacho. Me estuvo contando que estaba en ese edificio de forma provisional porque se iba a cambiar a una oficia dentro de una edificio nuevo, pero que todavía lo estaban construyendo. También me contó que era de Turquía, y estuvimos un rato hablando de los extranjeros en los Estados Unidos mientras llegábamos a su despacho.

El despacho era de tamaño normal y se notaba que era provisional, ya que sólo tenía tres ordenadores, alguna foto de su hija y poco más. Me dijo que me sentase y hablamos un poco de lo que él hacía en Microsoft. Estaba trabajando en la capa de SOAP de Windows, es decir, en una API para poder desarrollar servicios web de manera fácil y rápida.

Lo primero fue lo de siempre: ¿Por qué Microsoft? ¿Qué área de la ingenería informática te gusta más? etc. Luego me preguntó por algún proyecto interesante que hubiese hecho últimamente en GRUPO. Muy importante esto de grupo, ya que les interesa muchísimo que seas un buen 'team player'. Le hablé un poco del proyecto que estamos haciendo en Java para Design of Large Programas, un juego de estrategia en tiempo real multijugador, y él estuvo un rato insistiendo en los aspectos del grupo: cómo nos organizábamos, como nos repartíamos el trabajo, que hacíamos cuando no estábamos de acuerdo en algo... Después de eso me pidió que le explicase alguna parte interesante del proyecto. Le expliqué que utilizaba concurrencia, y tras comentarle como sincronizábamos los distintos threads me respondió: "bueno, eso no parece muy difícil o interesante, no?" jajaja Salí del lío diciéndole que efectivamente no lo era, pero sólo quería mostrarle como el proyecto utilizaba un poco de todo: concurrencia, networking... Se lo creyó y me hizo otras preguntas sobre el proyecto tras las que acabó pidiéndome que dibujase en la pizarra un diagrama para explicárselo mejor.

Se ve el tipo no tenía muchas ganas de hacer la entrevista. Me dijo: "tómate tu tiempo y avísame cuando termines" y se puso a hacer cosas en el ordenador. Hice un diagrama simplificado de las clases que formaban el juego y le avisé. Le expliqué como funcionaba todo y él intentó convencerme de que el servidor del juego no hacía falta que almacenase ningún tipo de información, sólo que hiciese broadcasting a todos los clientes de los comandos que ejecutaba cada cliente. Le dije que no, que era necesario que mantuviese información sobre el juego para que se pudiesen hacer trampas entre otras cosas. Quedó satisfecho con la explicación y dijo que ahora tocaba una 'coding question'.

La pregunta era la siguiente: Dada una lista enlazada ordenada, eliminar los elementos duplicados. Me dijo que me lo pensase y se puso otra vez con el ordenador.

Lo primero que hice fue un dibujo del problema. Luego deduje el algoritmo a partir del ejemplo que había dibujado, el cual es bastante sencillo: recorremos la lista y mantenemos una referencia a cada dato 'nuevo' que encontramos. Luego, borramos todos los nodos que nos encontramos hasta llegar a otro 'nuevo'. Cuando esto ocurre, enlazamos la referencia que teníamos con el siguiente nodo nuevo y repetimos el proceso hasta que hemos recorrido toda la lista.

Le dije que ya estaba listo y le expliqué el algoritmo sobre el dibujo. Quedó satisfecho y me dijo que lo codificase. Me preguntó si el puntero a la lista había que pasárselo a la función por copia o por referencia, es decir, si íbamos a eliminar el primer nodo en algún momento. Le dije que sí, pero me dijo que lo pensase mejor y me di cuenta de que de la manera que había escrito el algoritmo el primer nodo nunca se iba a eliminar, porque siempre iba a ser 'nuevo'. Escribí el resto del código sin problema, y cuando acabé me dijo que lo revisase bien. ¿Qué pasaba si el último elemento estaba repetido? Lo revisé y tenía razón: había que acordarse de poner la referencia al siguiente nodo del último elemento nuevo a NULL. Me dijo que no pasaba nada, que ya no quedaba más tiempo y me acompañó de nuevo a la entrada.

Allí me dio la mano, me dijo que estaba encantado de haberme conocido y que ahora me entrevistaría con un tal Anthony también de Core Networking, pero que tenía que ir al edificio 40. La recepcionista me pidió un taxi, me monté en él y marché rumbo a la segunda entrevista.

El comienzo no había sido malo. No estaba teniendo problemas con el inglés, no me había puesto nerviso, y aunque había tenido algunas dificultades durante la entrevista no lo había hecho mal del todo. ¡A ver que pasaba en la siguientes!

3 comentarios:

Anónimo dijo...

muchísima suerte, en serio. un beso gordote! sandri

Angel dijo...

Gracias! A ver que me dicen...

destyreal dijo...

El entrevistador de las pruebas algorítmicas, tal como lo describes, ni se despeinaba con las correcciones. Eso, unido a mucha xbox, ping pong, recepcionistas de quitar el hipo, sueldos atractivos y demás placeres, suena a que está reservado sólo a mentes privilegiadas. Esperamos que la tuya esté entre las seleccionadas y que montes alguna party en la que podamos disfrutar de nuestro momento de gloria en ese ambiente tan selecto y exclusivo... XDDD