¿Cómo se traducen en soluciones del mundo real los algoritmos para resolver problemas encontrados en entrevistas? [cerrado]

7

Recientemente he terminado un curso de licenciatura en informática y estoy buscando trabajo. Durante la búsqueda me encontré con varios problemas interesantes (y difíciles) que necesitaban algoritmos inteligentes para resolver. También utilizo el código de Google Jam como un conjunto de práctica.

No puedo entender cómo se traducen esas soluciones para resolver problemas del mundo real. Muchos problemas parecen (para mí) no solo ideados y fantásticos, sino también muy específicos para ser una solución de propósito general (aunque no es imposible extenderlos utilizando el ingenio).

¿Están estos problemas solo para probar las habilidades de resolución de problemas o son algunos aspectos del problema del mundo real camuflados?

    
pregunta josh88 25.05.2012 - 12:34

6 respuestas

9

Por lo general, los problemas de entrevista son más simples que los problemas reales que surgen en el trabajo. Los problemas de la entrevista están diseñados para ver si está familiarizado con los algoritmos y las estructuras de datos fundamentales: hash, recorrido de árboles, búsqueda de gráficos, programación dinámica, etc. Cada graduado de CS debe saber esto, pero muchos no.

    
respondido por el kevin cline 26.05.2012 - 05:59
6

En general, estas preguntas solo están ahí para poner a prueba tus habilidades de resolución de problemas, especialmente, como has encontrado, cuando te piden una solución para un escenario artificial.

Sin embargo, es posible que en algunos casos la empresa utilice ejemplos de su campo, pero eso suele ser porque pueden obtener un ejemplo de su propio código base, por lo que ya tienen una buena solución (o, al menos, una uno) - y vea si puede llegar a algo similar. Pero incluso en estos casos, no es como si estuvieran buscando a alguien que pueda resolver un problema en particular para ellos.

Solo concéntrate en tu capacidad general de resolución de problemas. Es como aprender a conducir ... practique a menudo y durante el tiempo suficiente y se convertirá en una segunda naturaleza. Buena suerte!

    
respondido por el Ashley Mills 25.05.2012 - 12:54
2

A veces no se traducen en absoluto en el negocio principal de la compañía. Eso es un hecho.

Sin embargo, al menos parte del tiempo, se asocian con un problema central de negocios al que se enfrenta el equipo o la compañía a la que se entrevista.

En una empresa con la que entrevisté, principalmente conocida por ayudar a los usuarios a encontrar un vuelo rentable, me preguntaron un par de problemas con las raíces en la complejidad combinatoria y en el enrutamiento. Uno de ellos fue un problema de n elegir k, que ciertamente puede surgir cuando tiene un gran número de conjuntos y necesita enumerar todos los subconjuntos de, por ejemplo, 1, 2 o 3 elementos; hay al menos un caso plausible de que encontrar todos los vuelos sin escalas, de una parada y de dos paradas podría beneficiarse de saber cómo resolver el problema abstracto. Por separado, se me preguntó un problema de casco convexo 2D, que está estrechamente relacionado con un montón de problemas utilizados en, por ejemplo, detección de colisiones en gráficos de computadora, algunas clases de reconocimiento de imágenes y problemas de transformación de gráficos a texto y, de hecho, ciertos clases de problemas de enrutamiento; bien podrían haberme preguntado sobre el problema del árbol de expansión mínimo, que anteriormente han sido utilizados por, digamos, las compañías telefónicas para averiguar dónde colocar los postes e interruptores telefónicos de manera casi óptima, y que también surgen en problemas de transporte. .

En este equipo en particular, no hubiera participado en la resolución de problemas de enrutamiento; Me habría centrado principalmente en el trabajo de internacionalización. Pero tal vez debido a la cultura de la organización y sus problemas empresariales centrales, este tipo de problemas ahora prevalecen en su proceso de entrevista de desarrollador de software, independientemente de en qué pueda terminar trabajando.

Aunque no me fue particularmente bien resolviendo estos problemas, dada mi experiencia no académica y no algorítmica en software, de alguna manera me ofrecieron un trabajo; Supongo que en algunas organizaciones, solo quieren verte sudar y ver cómo abordas los problemas fuera de tu zona de confort bajo presión. En algunos equipos, podría haber sido realmente importante resolver también bien el problema, en lugar de solo demostrar su proceso de pensamiento.

Si bien no creo que esta sea la mejor estrategia posible para identificar a los buenos desarrolladores, Google, Amazon, Microsoft y docenas de otras compañías conocidas han adoptado el proceso de entrevistas de novatadas ritualizadas de gran algoritmo, por lo que puede ser inevitable Dependiendo de donde quieras trabajar. Puede prepararse para ellos leyendo el Algorithm Design Manual de Skiena, que lo ayudará a adaptar los problemas concretos a los abstractos, y lo llevará a proponer soluciones adecuadas, incluso si no puede implementarlas en una hora. Entrevista de codificación larga.

Si estuviera entrevistando a un candidato para un rol que involucrara un profundo conocimiento algorítmico, me inclinaría por probar proponer problemas que requieran que los extraiga de su kit de herramientas de algoritmo. Sin embargo, en la mayor parte de mi trabajo, me enfoco principalmente en encontrar candidatos que se den cuenta de por qué hacer tres capas de bucles anidados para emitir consultas separadas a una fuente externa, una ID a la vez es una mala idea y tratar de encontrar pruebas de que saben cómo hacerlo. hacer mejor que eso. Me concentro en buscar evidencia de que hayan descubierto algunas estrategias razonables para escribir códigos mantenibles, que tengan curiosidad intelectual y que tengan habilidades sociales básicas. Intento verificar que hayan trabajado lo suficientemente profundamente en algún problema que hayan aprendido lo suficiente como para ser el experto local en ello.

Si terminas entrevistando en una compañía cuyo negocio se basa en resolver un problema difícil con la ayuda de algoritmos inteligentes, es muy probable que intenten encontrar evidencia de que tú también puedes resolver problemas con la ayuda de algoritmos inteligentes. También creo que, incluso si terminas escribiendo un software empresarial "aburrido", vale la pena tener una firme comprensión del panorama de algoritmos, porque reconocerás enfoques muy malos cuando los veas y darás un paso atrás e intentarás proponer mejores soluciones. Ahora he visto un montón de código de producción de mierda que la informática básica aplicada al problema habría evitado.

Por eso, aunque no considero que la entrevista con gran cantidad de algoritmos sea tan útil como lo parecen algunas compañías, estoy convencido de que, si no puede ver la conexión entre los algoritmos abstractos y los problemas empresariales reales, el problema Es, al menos en parte, tú. Puede practicar la combinación de patrones con la ayuda del libro de Skiena y si piensa en los problemas del mundo real que le gustaría resolver e implementando soluciones defendibles, hágalo.

    
respondido por el JasonTrue 26.05.2012 - 06:35
2

A veces, solo es útil evaluar cómo reaccionarán los empleados ante problemas inusuales. Estoy seguro de que, si solicita un puesto de desarrollador web, puede configurar un blog de wordpress o escribir el suyo propio. Pero no puedes evaluar completamente las habilidades de alguien dándoles problemas de rutina.

Para hacer eso, debe empujar los límites un poco más y desequilibrar al candidato. Dale un problema difícil y mira cómo reacciona. ¿Será capaz de resolverlo rápidamente solo? O simplemente dirá: "Oye, solo lo busco en Google, estoy seguro de que hay una solución lista para usar para esto". Ambos enfoques tienen sus altibajos, y ambas respuestas son aceptables. La mayoría de las veces ni siquiera importa, si el candidato puede resolver el problema, pero es importante cómo lo aborda.

    
respondido por el v-star 26.05.2012 - 10:00
1

Depende del tipo de trabajos de programación para los que esté entrevistando y de quién realiza la entrevista.

Si el posible empleador está contratando a alguien que trabajará en un sistema integrado donde no existen marcos o bibliotecas existentes, es posible que necesiten a alguien que pueda codificar algoritmos inteligentes. En este caso, es una pregunta válida.

Pero, si están buscando a alguien para mantener y mejorar una aplicación de informes o CRUD corporativa de 5 años, es probable que sea una pérdida de su tiempo y del suyo pedirle que codifique un algoritmo que ya está en el marco de trabajo. re usando (por ejemplo, pedirle a alguien que codifique una lista ordenada en C # desde el principio ). Es mucho más valioso darles un ejemplo de algo que necesita ser arreglado / mejorado y dejar que te digan cómo lo abordarán.

En mi opinión, para muchos entrevistadores usan complejos rompecabezas de programación y otras cosas no relacionadas con el trabajo que están haciendo para sentirse superiores a los solicitantes en lugar de evaluar el nivel de habilidad de los solicitantes. Otros los usan porque Google / Facebook / Microsoft / etc. úsalos para que piensen que deberían hacerlo también para ser 'geniales'.

No quiero decir que las preguntas de resolución de problemas deban estar fuera de los límites, sino que las buenas deben encajar en el trabajo o ser razonablemente simples y genéricas, sin trucos ni trampas involucradas. FizzBuzz en lugar de Kobayashi Maru

Por lo tanto, en mi experiencia, tales preguntas rara vez tienen algo que ver con el trabajo en cuestión y algunas se preguntan por razones incorrectas.

    
respondido por el jfrankcarr 25.05.2012 - 13:51
1

Todo depende del software en el que estés trabajando. Las soluciones CRUD por lo general no son muy inteligentes a menos que esté intentando reemplazar a varios profesionales analíticos y administrativos con software. Si se involucra en la minería de datos con análisis estadístico, podría ser útil conocer varias formas de estructurar los datos. Necesitará conocer sus operaciones de geometría si va a trabajar con gráficos. Comprender los diversos algoritmos numéricos es extremadamente importante si ingresa en áreas de ingeniería o finanzas donde la precisión y la velocidad son cruciales. Los algoritmos se encuentran entre las habilidades que te permitirán explorar y trabajar en un área que empuja el sobre en algún dominio en lugar de trabajar en otra solución de informes.

    
respondido por el Peter Smith 26.05.2012 - 05:29

Lea otras preguntas en las etiquetas