viernes, 7 de diciembre de 2007

Noticias desde Microsoft

Esta mañana me ha llamado Matt, mi recruiter, para comentarme el resultado de las entrevistas. Me ha dicho que el feedback que han dado todos mis entrevistadores sobre mi es muy muy bueno y que piensan que tengo mucho talento, pero que están todavía tomando una decisión porque creen que encajaría mejor en un grupo distinto de los que me entrevistaron. Seguramente el lunes me llamará el director de ese otro grupo para explicarme en qué están trabajando y para conocerme un poco, pero no hace falta que vaya a Seattle otra vez para volver a hacer entrevistas ya que están muy contentos con mi rendimiento. Yo le dije que perfecto, que no tengo ningún problema y que me llame o me escriba un e-mail con lo que sea.

Pues nada, parece que de momento no son malas noticias. Si no me quisiesen ya me habrían dicho que no, así que creo que todo esto es positivo y me acerca un poco más al puesto de trabajo. La verdad es que los grupos con los que me entrevisté trabajaban en niveles bajos del sistema operativo y a mi siempre me ha gustado hacer cosas a más alto nivel. Parece que se dieron cuenta de esto y ahora me van a mandar al grupo adecuado. ¡A ver que pasa!

miércoles, 5 de diciembre de 2007

Microsoft III - Una de puzzles

La segunda entrevista era en el edificio 40 con un tipo llamado Anthony Jones, también del grupo de Core Networking. Llegué al edificio, le dije a la recepcionista que estaba para una entrevista, llamó al entrevistador y en cinco minutos bajó a por mí.

Se trataba de nuevo de un hombre de mediana edad, esta vez americano. Esta vez su despacho se parecía a un despacho, no como en la primera entrevista. Tenía varios libros, cuatro o cinco ordenadores, y varios premios de 'SHIP IT!' que se los dan a todos los empleados que han trabajado en un proyecto cuando este se comercializa.

Tomé asiento y empezamos la entrevista. Las primeras preguntas las de siempre. Luego pasó a preguntarme por el proyecto, en especial por el aspecto del trabajo en equipo: como nos organizábamos, como resolvíamos los desacuerdos, como distribuíamos el trabajo, etc. Le expliqué como lo habíamos hecho a hasta ahora y añadí que uno de los motivos por los que me encantaría trabajar en Microsoft es para conocer como una gran empresa es capaz de organizar a 500 tíos trabajando en lo mismo y que las cosas salgan bien. El entrevistador quedó bastante impresionado cuando escuchó esto, y me dijo que le alegraba oir que pienso que desarrollar un proyecto no es sólo programar como mucha gente cree, sino que implica muchas otras cosas.

Después de esto pasó a una 'coding question'. Era muy facilita. Dadas una cadena principal y una subcadena (menor que la principal), escribir una función que te diga si la subcadena existe dentro de la cadena principal.

De nuevo empecé dibujando un ejemplo y razonando sobre él, mientras le explicaba mis razonamientos. No voy a entrar en detalles de como resolver este problema, ya que es muy muy sencillo. Después de explicarle el algoritmo me dijo que lo codificase en la pizarra. Escribí el código y le hablé de la complejidad y el entrevistador quedó bastante satisfecho.

Parece ser que mi capacidad para escribir algoritmos era suficiente para él, así que dijo que ahora me preguntaría un par de puzzles, es decir, típicos acertijos o preguntas de ingenio. Las que me planteó fueron las siguientes:

PUZZLE 1
Tenemos dos palos, y una cuerda atada entre ellos tal y como muestra el dibujo. La cuerda mide 150 cm (antes había un error, había puesto 175 cm), los palos 100 cm, y la cuerda está colgando a 25 cm del suelo. ¿A qué distancia está un palo del otro?


PUZZLE 2

Tenemos dos cubos, 50 canicas rojas y 50 canicas negras. Distribuir las canicas entre los dos cubos para que, eligiendo un cubo al azar y una canica de ese cubo también al azar tengamos la probabilidad más alta de que esa canica sea roja.


La solución la pondré en unos días para que intentéis resolverlos y pongáis la solución en los comentarios. Yo el 1 lo resolví a la primera y el 2 a la segunda. El entrevistador quedó realmente impresionado y decidió terminar ya la entrevista. Nos quedaban 20 minutos todavía, así que me estuvo explicando como empiezan un proyecto en Microsoft y como se coordinan los tres tipos de empleados: Program Managers, Software Developers y Software Testers. Luego me estuvo contando que llevaba 9 años trabajando en WinSocks, y que ahora estaban trabajando ya en el nuevo Windows, que se llamará Windows Seven. También me dijo que había escrito un libro, pero ya vendía muy pocos ejemplares, y alguna que otra cosilla más. La verdad es que fue una conversación muy interesante.

Después de nuestra pequeña charla, me llevó de nuevo a recepción. La señorita me pidió un taxi al edificio 26 y Anthony se despidió de mi. La siguiente entrevista sería una 'lunch interview', es decir, que primero comería con el entrevistador. Esta vez era con el otro grupo , el de 'Component Platform'. Me monté en el taxi y me dirigí rumbo a la siguiente entrevista mientras pensaba en que nuevas sorpresas me depararía el día.


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!

viernes, 30 de noviembre de 2007

Microsoft I - El comienzo

Las entrevistas empezaban a las 9:15 en el edificio 19, así que me levanté con tiempo. Me vestí con zapatillas, vaqueros, una camiseta y el jersey rojo que me regaló mi madre y desayuné bien. El campus de Microsoft estaba a 10 minutos del hotel, pero aún así pedí un taxi para las 8:15 por si pasaba cualquier cosa. Metí en los bolsillos dinero, un cubo de rubik y una barrita energética y me metí en el taxi. A las 8:30 estaba en el edificio 19.


El campus de Microsoft es como una ciudad. En él trabajan 30.000 personas, tiene campos de futbol, de baloncesto, gimnasios, cafeterías... muchos edificios con oficinas y hasta sus propios taxis! Las entrevistas siempre empiezan en el edificio 19, que es el 'recruiting building'. Cuando entré, lo primero que tuve que hacer fue rellenar un papel en recepción con mis datos y me dieron una pegatina con mi nombre para tenerme identificado. Mi recruiter se llamaba Matt Summers y vendría a recogerme entre las 9:15 y 9:30. Mientras tanto podía comer o beber lo que quisiese, ver la tele o jugar a la XBOX 360. Me decanté por esta última opción, y estuve jugando al Guitar Hero II y al Halo 3 con una empleada de Microsoft hasta que Matt llegó a por mi.


Nos fuimos a su oficina, y allí me preguntó si tenía otras ofertas laborales pendientes, si tendría algún problema en trabajar para Microsoft y cosas de esas. Luego me hizo las típicas preguntas: ¿Por qué quieres trabajar en Microsoft? ¿Qué area te gusta más? etc. Por último me explicó en que iba a consistir el día. Me iba a entrevistar con miembros de dos grupos distintos: Core Networking y Component Platform. Seguramente serían 4 entrevistas, aunque eso podría cambiar sobre la marcha. Cada entrevistador me mandaría al siguiente, y mientras tanto los dos hablarían de como lo había hecho en la entrevista anterior para que el nuevo entrevistador tuviese información sobre mi y no me preguntase lo mismo. Por último, al acabar la última entrevista volvería al edificio 19 a hablar de nuevo con Matt (mi recruiter) para contarle como me había ido el día y para que me pidiese un taxi. Sin embargo, Matt me dijo que estaba enfermo y que seguramente ya se habría ido a casa cuando volviese, pero que me llamaría por teléfono al día siguiente.

Después de nuestra pequeña charla, Matt me subió en un taxi hacia el edificio número 10 y empezó la aventura.

miércoles, 28 de noviembre de 2007

Sobre la estupidez (y sus consecuencias)

Bueno, al final se soluciono todo el tema de Microsoft. Me llamaron por la tarde para decirme que si me venia mal tener las entrevistas el miercoles y marcharme el jueves. Les dije que no habia ningun problema, me cambiaron todo y esta manana tuve las famosas entrevistas por fin. Ahora mismo sigo en el hotel, asi que manana escribire un post explicando como fue todo detalladamente. Hoy me gustaria, queridos lectores, ilustraros con un ejemplo del significado de la palabra estupidez. He aqui la historia:


Resulta que un buen dia el moruno volvio con su novia Lucy por tercera vez. Esta chica es bastante idiota, y el moruno ya la habia dejado las otras dos veces por que a ella se le fue la olla y empezo a decir que estaba confusa y esas historias. Cabe tambien anadir que habla a un volumen superior del normal, lo que produce agudos dolores de cabeza tras cinco minutes escuchandala. Pero la chica esta muy bien, todo hay que decirlo, y la carne es debil (y las mujeres malvadas y poderosas), asi que nuestro amigo Amr (nombre moruno) no puedo evitar la tentacion.

Hace una semana vino una amiga de esta Lucy a la que llamare 'Monkey' a partir de ahora debido a su parecido con este hominido, y tambien debido a la famosa frase "I would rather kiss a monkey than kiss Lucy's friend". Monkey durmio toda la semana con Lucy, por lo que tanto ella como el moruno estuvieron a pan y agua (que remedio) durante siete dias. Pero por fin el mono volvio a la jungla, y Lucy, que al parecer no podia aguantar el calenton paso dos dias enteros con su chico, el cual acababa de salir de una fuerte gastroenteritis producida por un virus (altamente contagioso, por supuesto).

Algunos podreis pensar: "Que bonito, el poder del amor, no podia aguantar estar con su chico!" Otros pensareis: "Es normal, el calenton y esas cosas...". Yo sin embargo lo veo mas simple: "Es estupida y punto".

Justo antes de venir a Seattle fui al cuarto del moruno y hable con ella. Estaba sonriente, besando a su amoricto. Yo le dije: "Eres idiota. No ves que te vas a coger tu la gastroenteritis? No podias aguantar unos dias?" a lo que ella respondio riendose y besandole de nuevo. Entonces yo le replique: "Cuando te estes muriendo no te reiras tanto" mientras recordaba la horrible noche que pase cuando me toco a mi.

Me marche a Seattle y no volvi a saber mas ni del uno ni de la otra. Entonces, el martes, mientras paseaba por Seattle, recibi un mensaje del moruno: "ANGEL, LUCY IS DYING". Se que puede resultar cruel, pero senti un gran regocijo interior al pensar que ahora Lucy tendria su preciosa cara en el water y estaria echandolo todo mientras se retorcia de dolor. TE LO MERECES, POR ESTUPIDA.


En fin, este no es mas que otro ejemplo de estupidez de los muchos que uno puede contemplar a diario. Para despedirme, una frase interesante:

"You can't fix stupid. There is no pill or class you can take. Stupid is forever"

lunes, 26 de noviembre de 2007

El 'Increible' Viaje a Microsoft

Como algunos ya sabeis, hace como un mes vino un 'recruiter' de Microsoft a la universidad y decidi acercarme para ver como era la cosa. Al final resulto que le cai bien al tipo y me dijo que me recomendaria para viajar a Seattle a la segunda ronda de entrevistas en la sede de la empresa. Total, que un mes despues aqui estoy en Seattle. Pero por supuesto, soy Angel y las cosas no podian ser tan bonitas. He aqui la historia, o mas bien, el principio de la historia.

Todo comenzo hace tres dias. Era fin de semana y tenia pensado aprovechar mi tiempo libre para preparame para las entrevistas de Microsoft resolviendo problemas en una pizarra, que es lo que te piden alli. Sin embargo, justo por la noche, me empiezo a doler mucho el estomago. No, no podia ser que JUSTO ESE DIA me cogiese la misma gastroenteritis que hace unos dias habian pasado otros amigos. Pero si, era real.

Despues de toda la noche vomitando y retorciendome de dolor en la cama, se hizo de dia. Vomite una vez mas y por fin pude dormir un rato. Llame al moruno y su madre me preparo unas bebidas de madre para el estomago y me compro fruta y gatorades. La verdad es que todo eso ayudo mucho, pero aun asi me pase el dia entero durmiendo y todavia con dolores. Por la noche intente practicar un poco para le entrevista pero estaba muy cansado y no podia concentrarme mucho, asi que no hice gran cosa.

Domingo. Estaba bastante mejor, pero tenia un largo dia por delante. Imprimir todos los papeles que me habian mandado, preparar la maleta y, por supuesto, intentar practicar lo maximo posible. Mas o menos aproveche el timpo, pero no quedo mucho para practicar. Hice lo que pude, llame al taxi, y a las 4:20 de la manana sin haber dormido me fui al aeropuerto. Y aqui empieza lo bueno.

Mi avion era de Delta Airlines. Esta compania (y imagino que muchas otras) tienen un sistema que tu mismo haces el check-in. Metes tu tarjeta de credito en una maquina y te detecta si estas en el vuelo. A mi por supuesto me dijo que no aparecia, asi que tuve que hablar con el senor que habia en el mostrador. Se puso a consultar en el ordenador y me dijo que mi billete aparecia cancelado (???), pero que lo iba a arreglar. Estuvo como 10 minutos pulsando teclas y me saco el billete para Salt Lake City, donde cogeria otro avion hacia Seattle.

El viaje transucrrio sin mas complicaciones y llegue a Salt Lake City puntual. Desayune un bocadillo cortesia de Microsoft y dormi un rato hasta la hora de embarque a Seattle. Fui al mostrador, le di mi billete a la senorita y me dijo que no tenia asiento (???!!!!). Me paso con un chico rubio que parecia entender mas del sistema informatico, y este se puso a teclear otros 10 minutos. Me dijo que mi avion salia a las 8:30 y no a las 9:40. Yo le ensene mi itinerario para que viese que no, que era a las 9:40 y que incluso el numero de vuelo era el mismo. Pero el tipo dijo que no, que me lo habian cambiado a las 8:30, y me saco un nuevo billete para las 11:05 con el cual por fin consigo embarcar.

LLegue a las 12:15 a Seattle. Encendi el telefono y a los 10 segundos, en el propio avion, me llama la senorita de Microsoft que me habia estada organizando todo: que haces en Seattle? Ha habido un problema con los horarios y te habiamos cancelado todo, como has conseguido llegar? Yo le digo que no lo se muy bien, y la senorita dice que iba a llamar a Jaime, que sera como su coordinadora, y que ahora me llamaban. Me llamo Jaime 10 minutos despues para decir que lo sentia mucho, que habian tenido un problema con los horarios y no me esperaban en Seattle, asi que no tenia la entrevista preparada. Que podia ir al hotel, que no habria ningun problema, y que intentaria arreglar lo de la entrevista durante el dia, que ya me llamaria por la noche.

Cogi un taxi hasta el hotel (50 dolares mas cortesia del tio Bill) y por supuesto, mi reserva estaba cancelada. El tio del hotel llamo a la recruiter para cerciorarse de que no estaba cancelada y por fin me dio la llave de la habitacion, la 210.

He visto casas mas pequenas que esa habitacion, pero por desgracia no estoy ahora mismo alli tumbado en la cama escribiendo esto sino en el hall del hotel, de pie, en un ordenador mierdoso, porque me olvide el portatil en el cuarto (esto ya si es culpa mia).

En fin, que a ver que pasa. Yo voto por que me consiguen preparar la entrevista para manana, pero todos estan de mala ostia porque no entraba en sus planes y me hacen preguntas para humillarme.

Mas noticias en breve.

martes, 25 de septiembre de 2007

Red Rally

Antes de nada, siento mucho el haber tardado casi un mes en actualizar. Entre otras cosas he estado muy enfermo durante una semana sin poder ir a clase y luego he tenido que recuperar toda la tarea pendiente.

Bien, hoy voy a escribir sobre un evento que tiene lugar todos los años al comenzar el curso. Este año fue el fin de semana del 6 de Septiembre, hace ya unos días, pero aún así me parece lo suficientemente curioso para comentarlo. Se trata del Red Rally, una celabración que tiene lugar antes del clásico partido entre Univeristy of New Mexico y Nex Mexico State University con el que da comienzo la temporada de fútbol americano universitario.


El Red Rally empezó el viernes por la tarde. Desde las 6 hasta las 8 todos los estudiantes se reunieron en el patio de La Posada, donde había música y otras actividades en plan decorar camisetas o pintarte la cara con los colores del equipo. La mayoría de la gente iba vestida con ropa de la universidad de color rojo y plateado, los colores de los Lobos. También repartieron entre los presentes palitos de plástico de esos que los doblas y empiezan a brillar.
A las 8 en punto se acabó la fiesta y todos nos dirigimos hacia el Johnson's field, que es una gran campo de césped donde los estudiantes pueden practicar distintos deportes. Ya estaba anocheciendo y íbamos todos en una fila. Los americanos estaban muy implicados, la mayoría con la cara pintada, cantando canciones de su equipo, moviendo sus palos fosforitos y dando gritos mientras íbamos andando.


Unos 10 minutos más tarde llegamos al lugar en cuestión. Justo en el centro habían montado una gran hoguera con un "AGGIE" en el medio que iba a ser quemado. El aggie es la mascota de New Mexico State University: igual que los equipos y el emblema de la UNM son los lobos, allí es el aggie, que es una especie de granjero.


Después de casi una hora de la típica parnafernalia americana que me pone malo (la banda tocando, la gente gritando de forma absurda, unos tipos tirando a las cheerleaders por el aire, un pequeño discurso de la jefa del consejo de estudiantes diciendo lo bien que lo están haciendo, etc) le prendieron fuego al granjero. Estuvo bien, aunque ardió muy rapidamente. Tanto tiempo esperando para verlo quemarse en un minuto...


Mientras continuaba la hoguera empezó a tocar un grupo como de reggae bastante chulo. Estuvimos en el Johnson's Field bailando y haciendo el tonto hasta que terminó la hoguera y los bomberos apagaron lo que quedaba de ella. Después de eso nos fuimos todo los que estábamos allí a cenar a Il Viccino, un restaurante italiano barato pero con una comida muy rica.


Como al acabar de cenar era tarde y no había ningún plan nos fuimos para los dorms. Antes de subir a nuestros cuartos nos quedamos un rato hablando en la calle tres o cuatro personas. Estábamos felices hablando cuando de pronto a lo lejos apareció una figura sin camiseta que echó a correr hacia nosotros. Era Max, un irlandés americano que como buen irlandés estaba borracho como una cuba.


No se por qué esa noche le apetecía practicar francés (no se si sabría hablarlo, pero el decía que un poco sí) y se dedicó a preguntarle a todo el que pasaba que si hablaba francés. Nos echamos con él unas risas y alguna foto y por fin le convencimos de que se fuese, porque estaba armando mucho ruido y como era tarde nos podía meter en líos.

Y eso es todo, ya que después de eso nos fuimos a acostar. La semana siguiente fue el partido de fútbol americano entre Lobos y Aggies, antes del cual se celebró un TAILGATE, que no es más que una escusa para emborracharse (como tantas cosas en América). En el próximo post explicaré en que consiste.