Kotlin Cola Prioridad Sin Repetidos

Ejemplo de una prueba técnica Junior aplicable a cualquier lenguaje.

Kotlin Java LISENCE GitHub

El problema

Tenemos un proceso, que tiene un identificador, un nombre y una prioridad. Queremos manejar una cola de prioridad, sin repetidos. Sabremos que un elemento es repetido si tiene el mismo id. La prioridad es de 1 a 9 siendo 9 la más alta. Por otro lado queremos un controlador que nos centralice el proceso de acceso a la cola. Se pide resolver el problema, justificando tu solución y testear las operaciones críticas a nivel de la cola y controlador.

Hazlo en otros lenguajes

Si quieres hacerlo en otros lenguajes, crea un directorio con el nombre del lenguaje y mete el proyecto de tu solución. Es importante que muestres que todo se testea a nivel unitario y usando algún mock. Una vez hecho hazme un pull-resuqetes y pasame el color del logo del lenguaje que quieres que salga en la cabecera ¿Te atreves? ?

Acerca de

Este ejercicio de clase, tiene como objetivo mostrar aspectos de programación para la realización de una prueba técnica.

La idea principal es que puedas resolverlo con cualquier lenguaje de programación. Pero son los sutiles detalles lo que marcan la diferencia. Hay infinitas soluciones. Aunque está centrada en Kotlin, parcialmente tienes un directorio con la solución parcialmente en Java vista en clase. Aunque lo importante es que puedas resolverlo con cualquier lenguaje de programación y sigas los pasos indicados siempre que puedas. No es tanto el qué resuelvas si no el cómo lo resuelvas y lo que expliques, comentarios o técnicas que utilices.

Te dejo algunos consejos.

Antes de programar

Hazte un esquema de cómo vas a sacar la solución. Abrir el IDE y picar sin ton ni son aunque lo tengas claro no ayuda. Empezar a escribir, borrar, corregir, borrar, cambiar, noe stá muy bien visto.

5 minutos de diseño, ayudan a más de una hora de programación.

Haz un repositorio

Al crear el proyecto, crea el repositorio GIT. No se trata de dar con la solución, si no de mostrar todas las habilidades técnicas para el desarrollo de software. Haz commit en cada punto importante. Si te equivocas puedes volver atrás.

Piensa primero en los test

¿Te he dicho que es una prueba técnica? De que me sirve una solución, si no sabemos si funciona bien. Antes de programar piensa y escribe los test, aplica algo de tDD, demostrarás que conoces su filosofía. El ejemplo es suficientemente sencillo para no complicarte la vida. A partir de aquí, crea el código que necesites pasando el test.

Recuerda: Un test también es programar. No se hacen solos ?

Ahora implementa la solución

Mira lo que has avanzado antes de programar:

  • Has hecho un diseño, tienes las ideas de qué tienes que hacer.
  • Has hecho el repositorio.
  • Tienes unos test que te aseguran tu solución.

¿No está mal?

Ahora toca programar. Intenta aplicar todo que conozcas pero de una manera elegante. No meter por meter. Aplica programación funcional y cuestiones de inmutabilidad. Elige y justifica los TDAs que vas a usar. Hay varias formas y todo depende de lo que justifies o expliques. Aplica algunas interfaces, inyección de dependencias de forma manual, algún patrón, y conocimientos de Programación Orientada a Objetos etc.

Como te he dicho, el ejemplo es lo suficientemente sencillo para que lo resuelvas siguiendo tu propio camino. El mérito está en haber realizado los puntos anteriores, no tanto en este.

Documenta tu solución

Es importante que algunos aspectos del código estén documentados, ya sea usando comentarios, documentación de clases, documentación de interfaces, etc. Pero lo más relevante es que su tu código es “limpio” muchas de las cosas estarán autodocumentadas.

Finalmente, haz un README.md con todo lo que has hecho y justificando tus elecciones y soluciones.

Tiempo

Piensa que el tiempo no es infinito, esto no te debería llevar las de 75 minutos y mucho me parece ? Intenta no pasar más de 60 minutos. Si no lo consigues, no te preocupes, puedes volver a empezar y seguir practicando.

Autor

Codificado con ? por José Luis González Sánchez

Twitter GitHub

Contacto

Cualquier cosa que necesites házmelo saber por si puedo ayudarte ?.

              

Licencia

Este proyecto esta licenciado bajo licencia MIT, si desea saber más, visite el fichero LICENSE para su uso docente y educativo.

GitHub

View Github