¿Cómo resolver un problema de programación? 🚀💚
Antes de preguntarnos sobre el cómo poder resolver el problema, que tecnología me gusta más.
Nuestra mejor forma de atacar retos de este tipo es, “Entender el que voy a hacer” porque si lo sabemos podemos diseñar una mejor solución preguntando y escuchando a nuestros reclutadores.
.
Hacer preguntas 📑
(Entendamos el “¿Qué vamos a hacer?”)
- Hacer preguntas es la mejor forma de aclarar un problema
- Hay problemas ambiguos y a veces solo conocemos la primera parte
- Preguntarnos siempre por cómo podemos interpretar las entradas y salidas nos otorga una mejor visión del problema
- Si vamos a asumir algo, hay que charlarlo con el equipo, explicando por qué podríamos partir de ello para que nuestra función opere.
Ejemplos:
- ¿Qué pasa si mi lista está vacía?
- ¿Podría haber elementos repetidos?
- ¿Qué pasa si el tipo de dato es erróneo?
.
Identificar casos de uso 👽 (incluso los extraños)
- ¿Qué pasó si nos salimos de un entorno controlado?
- Nuestro algoritmo solo con ciertas entradas causa un error y debemos identificarlo 🕵️.
.
Ejemplo:
.
Te imaginas trabajar sobre un sistema que maneje vacaciones de empleados en el cual solo se le permiten tomar 4 días de vacaciones de forma consecutiva y que justo en el mes de Febrero de ese año sea un año bisiesto.
.
Un empleado toma sus días a finales de mes, nuestro sistema programa su regreso a labores hasta el 1 de Marzo, todo pareciera okay hasta aquí.
.
Pero en realidad los días máximos permitidos no fueron 4, y se le otorgaron 5 😨 dando un día extra por este factor extraño.
.
¿Te imaginas otro caso que puedas suceder? Déjamelo en este comentario para saber si te ha tocado un reto de este estilo y cómo lo resolviste 👇.
.
Diseñar la solución 🧩 (aún no implementarla)
.
💡Diseñar es muy diferente a implementar
❌ Jamás correr a programar de una sin haber entendido el problema, esto es la receta perfecta para no pasar con excelencia nuestra entrevista.
.
Al diseñar una solución como un software engineer nuestro trabajo es identificar los atributos de calidad que nos importa realmente para cada solución:
- Tiempo
- Escalabilidad
- Velocidad
.
💡 La mejor forma de abordar los problemas es usar fuerza bruta (una solución no tan óptima) pero que me empiece a encaminar al resultado, una vez tengamos eso podemos refactorizar y optimizar sobre los atributos que necesitamos.
.
💡 Otra forma es usando divide y conquista, desglosa el problema grande en problemas más chicos, este nos ayuda a:
- Evitar la frustración de querer resolver un problema grande y complejo
- Nos enfoca en una pequeña pieza que si la solucionamos podemos integrarla con otras piezas para solucionar algo más grande.
.
Nota: Los reclutadores son nuestros amigos y los mejores aliados 🤝
- Platica con ellos
- Haz preguntas
- Usa tus soft skills para combatir el problema
- Involúcralos en todo el proceso y usa ejemplos
- Piensa en voz alta y explica tus ideas sobre un posible camino a la solución.
.
Implementar 🚀 (ahora sí)
Ve la mejor forma en la que pueda pasar tu diseño a la implementación, añadiendo comunicación por bloques y creando el código más limpio posible.
.
Fun fact 😁: Es normal equivocarse, los nervios nos traicionan y hasta les comparto que una vez de los nervios recorrí un arreglo completo de números para sacar el máximo valor 🤣 en vez de usar la función max() ya existente y hacerlo en una línea.
.
Parece chiste, pero es anécdota, déjame un comentario con alguna experiencia similar que te haya pasado para reírnos juntos y aprender de ella 😁.
.
Probar el código 🧪
- Las pruebas de escritorio son tus mejores aliadas
- Da ejemplos que recorran nuestro flujo de la solución y explicar cómo a lo largo del proceso nuestra entrada se va modificando hasta llegar a nuestra solución deseada.
- La comunicación con ellos es constate, es normal que salgan errores y que platiques con ellos qué opciones se te ocurren para solucionarlos, eso da muchos puntos 😁.
En este curso les seguiré dejando tips que me han servido en procesos de entrevista, y que ustedes puedan aplicar 😁
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?