Cómo superar una prueba técnica PHP - primera parte
Tags: programming, php, testing
Published: 2021-08-23 18:20:55

Pasar una prueba técnica no suele ser fácil, sobre todo, sino disponemos de mucho tiempo.

Las pruebas técnicas suelen ser de varios tipos:

**Tipo test**: preguntas variadas, incidiendo en varios temas importantes o básicos según el puesto de empleo.

- PROS: no necesitas desplegar ningún repositorio, ni tampoco pensar en como resolver un problema o desarrollar una mini-aplicación.
- CONTRAS: requiere concentración, conexión a internet, tiempo acotado. Alguna variante, las preguntas suelen estar en inglés.

**Tipo desarrollo**: en este tipo de pruebas, deberás desarrollar una pequeña funcionalidad o algoritmo, para resolver
  algún tipo de problema recurrente para ese puesto de trabajo o que lo requiere tu perfil técnico.

- PROS: suelen ser muy entrenidas, y te pueden servir como entrenamiento. Si desarrollas varias, te pueden servir para 
  otras futuras pruebas técnicas y eso que te ahorras. 
- CONTRAS: pueden requerir tiempo, y si le sumas test unitarios, vas a requerir bastante precisión.

**Tipo Mixtas**: suelen tener preguntas tipo test y preguntas de desarrollo.

- PROS: dependiendo del perfil, suelen abordarse bastante bien y las preguntas suelen llevar poco tiempo.
- CONTRAS: si alguna pregunta no la sabes, no sabrás la respuesta .

**Consejos útiles** : independientemente de que tipo de prueba estés realizando, guarda o haz captura de pantalla para futuras revisiones.
Quizá no pases la prueba, pero te servirá de punto de partida para la siguiente.


Un ejemplo de prueba técnica **PHP** es como sigue:
<hr>
# Movie dispatcher

## Tarea

**Movie dispatcher** es un priorizador de películas que te dice qué película es la primera que debes visionar en base a una serie de parámetros. Hay intención de tener en cuenta más parámetros a la hora de priorizar, así que el desarrollo debe ser extensible.

Tu tarea consiste en crear un programa que ordene las pélículas en función de la importancia de estas.

Recibirás un listado de películas, cada una tendrá los datos de cada película.

Cada película tendrá los siguientes campos:

- Título.
- Estreno.
- Descripción.

## Cálculo de prioridades

Una película siempre tendrá una prioridad con un valor de 0-5 siendo 0 su prioridad más alta y 5 su prioridad más baja. Por defecto, toda película tendrá una prioridad de 5.

En el caso del listado de películas. Si el formato es erróneo, no será capaz de priorizar ninguna película.

Las prioridades variarán en función de cada campo de la película.

- Titúlo: En función del titulo, la película tendrá más prioridad o menos. Los posibles títulos que afectan a la prioridad
son:
  - Torrente, el brazo tonto de la Ley: Restará 1,2 puntos a la prioridad.
  - Rambo 6 : Restará 0,7 puntos a la prioridad.
  - EL vengador tóxico atacaca de nuevo: Restará 0,5 puntos a la prioridad.
  - Jay y Bob el Silencioso: Restará 1 punto a la prioridad.
  - El precio del poder: Sumará 1 punto a la prioridad.
- Estreno: En función de si la película ya ha sido estrenada o no, la prioridad variará.
  - Si es bloqueante restará 2 puntos.
  - Si no es bloqueante no restará a la prioridad.
- Descripción: En función de la extensión de la tarea, la prioridad se calculará de la siguiente manera:
  - Si tiene menos de 100 caracteres: No restará nada a la prioridad.
  - Si tiene entre 100 – 500 caracteres: Restará 0,5 puntos.
  - Si tiene más de 500 caracteres: Restará 0,7 puntos.
  - Si contiene un enlace: Restará 0,5 puntos.

Al final debe aparecer el listado de películas escrito por pantalla en el orden correcto.

Siéntete libre a la hora de organizar la entrada de datos como quieras. CSV, JSON… Puedes usar cualquier framework de PHP que quieras. **No es necesario interfaz de usuario ni acceso a base de datos.** Tampoco es obligatorio leer la entrada de datos de los archivos del sistema. Es aceptable leerlo desde stdin, formulario, archivo… como quieras.

- La tarea está diseñada para darnos una idea de cómo piensas cuando te enfrentas a una tarea de cierta complejidad.
- Estamos interesados en ver cómo estructuras tu código para que sea fácilmente extensible, si cumple buenas prácticas y si es fácil de entender o modificar por otros.
- También estamos interesados en ver cómo de eficiente es tu algoritmo.
- El dominio de GIT también es importante, siéntete libre de hacer todos los commits que necesites.

<hr>
Y esto es todo, el plazo de entrega varía entre dos días y 1 hora. Además dependiendo del puesto, quizá en esa hora, debes ejecutar
una serie de test unitarios que deben encajar a la perfección. 
Como ves, este tipo de pruebas, son perfectas, ya que, el candidato debe demostrar pericia y maestría a la hora de ofrecer una solución.

En primer lugar, lo que debemos crear es nuestro composer.json :
```json
{
  "name": "app/movie-dispatcher",
  "autoload": {
    "psr-4": {
      "MovieDispatcher\\": "src/"
    }
  }
}
```

[Parte 2](https://dev.to/robertomanchado/como-superar-una-prueba-tecnica-php-segunda-parte-308e)