Cómo dominé las estructuras de datos y los algoritmos para el aprendizaje automático (en 6 semanas)

He pasado más del 90% de las entrevistas de codificación y no es porque sea una especie de genio.

La mayoría de las entrevistas de codificación en el espacio de la ciencia de datos y el aprendizaje automático se realizan en LeetCode o HackerRank y, por lo general, hacen una pregunta sobre estructuras de datos y algoritmos o algo estrechamente relacionado.

Y lo que he descubierto en los últimos años es que puedes “gamificar” tu preparación para estas entrevistas a través de ciertas estrategias y practicando preguntas específicas.

Entonces, en este artículo, quiero desglosar exactamente el proceso por el que pasé para dominar la codificación/estructuras de datos y las entrevistas de algoritmos en solo 6 semanas.

¡Entremos en ello!

Deje de aprender estructuras de datos y algoritmos

El primer paso puede parecer contradictorio, pero en realidad consiste en dejar de intentar aprender estructuras de datos y algoritmos de la forma tradicional.

Para aquellos de ustedes que no están familiarizados con las estructuras de datos y los algoritmos, o DSA para abreviar, permítanme darles una definición rápida de estos términos:

Estructuras de datos: organizar y almacenar datos para que se pueda acceder a ellos y modificarlos de manera eficiente. Algoritmos: procedimientos paso a paso o conjuntos de reglas para resolver un problema o realizar una tarea.

En conjunto, DSA es el estudio de cómo estructurar datos y diseñar métodos eficientes para procesarlos.

DSA se ha convertido en una especie de “meme” en el espacio tecnológico, porque estas entrevistas ponen a prueba habilidades que rara vez utilizará en el trabajo real.

Sin embargo, es parte de muchos procesos de entrevista, por lo que es un mal necesario que debemos practicar.

Si obtuvo una licenciatura en ciencias de la computación, probablemente habría estudiado DSA como módulo, pero muchas personas que buscan ingresar a la ciencia de datos y el aprendizaje automático provienen de otros entornos STEM, como física, matemáticas e ingeniería.

Entonces, naturalmente, estas personas comienzan a ver tutoriales, leer libros de texto y es muy probable que utilicen NeetCode como su principal recurso de aprendizaje.

Yo hice exactamente lo mismo.

Incluso escribí una serie de artículos sobre DSA en mi blog en ese momento, mientras tomaba el curso “Estructuras de datos y algoritmos para principiantes” de NeetCode.

Lista: Estructuras de datos y algoritmos | Comisariada por Egor Howell | Medio
Estructuras de datos y algoritmos · 13 historias en Mediummedium.com

El problema es que esto en realidad no me hizo bueno en estructuras de datos y algoritmos ni en la resolución de entrevistas de codificación.

Todavía me costaba resolver problemas básicos como 2sum.

No me malinterpretes, Neetcode es un gran recurso para aprender conceptos en DSA y áreas más amplias como el diseño de sistemas. Pero no es el recurso en sí, sino el enfoque general del aprendizaje.

Claro, aprender la teoría es útil, pero debes aprenderla mientras practicas al mismo tiempo para solidificar tu comprensión.

Es como querer jugar tenis y aprender la teoría de cómo balancear la raqueta y aprender la técnica, pero nunca llegas a practicar cómo golpear la pelota, que es fundamentalmente todo el juego.

Lo mismo ocurre con LeetCode.

Entonces, lo que hice fue adoptar el enfoque completamente inverso.

Empecé a resolver los problemas incluso antes de aprender los temas. Y luego, después de haber completado el problema o simplemente no haber podido resolverlo, aprender la solución eficiente y la teoría que la acompaña con ese tema.

Este fue mi proceso de alto nivel:

Dedica entre 30 y 60 minutos al día a dos problemas durante aproximadamente 6 semanas seguidas a primera hora de la mañana. Darme 20 minutos para resolver cada problema. Si no pude hacerlo en ese período de tiempo, use los 10 minutos restantes para revisar la solución. Al analizar la solución, me concentré en aprender el patrón, no solo la respuesta. Esto es tan importante que memorizar soluciones no le ayudará a largo plazo. Cierre la solución, espere 5 minutos e intente solucionar el problema nuevamente. Enjuague y repita.

Este enfoque transformó mi comprensión de DSA porque me obligó a aprender haciendo y a someterme al llamado “sudor mental”, como lo llama Andrej Karpathy.

Ver cursos pasivamente y consumir libros parece productivo, pero en realidad es procrastinación: evitar el trabajo real de resolver problemas y aprender a través del fracaso.

Deja de practicar todos los temas

Ahora, no quiero que sigas adelante y resuelvas ningún problema aleatorio en Leetcode, sino que te concentres en unos pocos temas seleccionados que aparecen con mayor frecuencia.

Cuando se trata de funciones de ciencia de datos y aprendizaje automático, el conocimiento de DSA no necesita ser tan extenso como lo es para puestos de ingeniería de software, incluso si busca trabajos de alto nivel.

En realidad, sólo ciertos temas aparecen con frecuencia en las entrevistas, que son:

Matrices y hash: utilice mapas/conjuntos de hash para búsquedas O(1) para evitar volver a escanear datos. Dos punteros: mueva dos índices uno hacia el otro (normalmente en datos ordenados) para omitir bucles anidados. Ventana deslizante: expanda/reduzca un rango contiguo para realizar un seguimiento eficiente del mejor subarreglo/subcadena. Lista enlazada: Vuelva a cablear los punteros de los nodos con cuidado, a menudo con punteros rápidos/lentos o una cabeza ficticia. Búsqueda binaria: reduce a la mitad el espacio de búsqueda cuando los datos (o la respuesta) están ordenados o son monótonos. Pilas: estructura LIFO para unir/deshacer cosas o rastrear elementos “siguientes mayores/menores”. Árboles: recorra recursivamente (DFS) o nivel por nivel (BFS) para calcular o buscar datos jerárquicos. Montones/Colas de prioridad: obtenga el mínimo/máximo rápidamente, ideal para problemas de primer nivel o de “procesar el siguiente más urgente”. Gráficos: recorra nodos/bordes a través de DFS/BFS para explorar caminos, conectividad o rutas más cortas.

Por favor, concéntrese únicamente en estos temas.

Temas como programación dinámica, intentos y manipulación de bits son muy difíciles de aprender y no aparecen con frecuencia en las entrevistas.

El tiempo dedicado a aprender estos temas avanzados se centra mejor en otras áreas del proceso, como el diseño del sistema o la preparación de entrevistas conductuales.

Para ser honesto, solo he practicado 40 problemas de Leetcode y eso me permitió aprobar más del 90% de mis entrevistas de codificación, algunas de las cuales fueron para puestos de ingeniero senior de aprendizaje automático.

Estos 40 problemas fueron elegidos intencionalmente porque cubren los temas clave planteados en las entrevistas.

Estos se tomaron como muestra de las populares listas NeetCode 150 y Blind 75, pero están dirigidos específicamente a funciones de ciencia de datos y aprendizaje automático, ya que esas listas están dirigidas principalmente a ingenieros de software.

He creado una buena tabla/base de datos de estos 40 problemas exactos que puedes encontrar en el enlace a continuación para ayudarte con tu preparación.

40 problemas de LeetCode que debes resolver
Estos 40 problemas me dieron ofertas de más de $200 mil de compañías como TransferWise, DoorDash y múltiples startups.problems.egorhowell.com

De manera transparente, estos 40 problemas no cubren todas las preguntas posibles que podría enfrentar en la entrevista, pero cubren entre el 80% y el 90% de los temas y tipos de problemas que encontrará.

Son los problemas de mayor retorno de la inversión que puede resolver en términos de inversión de tiempo y aprobación de entrevistas.

El objetivo de este conjunto de problemas es optimizar su tiempo para aprender y practicar los conceptos que ocurren con más frecuencia durante la entrevista.

Deliberadamente no estamos siendo exhaustivos; todo es cuestión de estrategia.

Deja de hacerlo solo

Aprender a resolver problemas de codificación y DSA no es tan complicado; Todo se reduce a la coherencia y a presentarse todos los días.

Si se está preparando un par de días antes, es probable que fracase porque no podrá aprender DSA en tan poco tiempo.

Me tomó alrededor de 6 semanas sentirme seguro al codificar entrevistas implementando la estrategia que mencioné anteriormente y centrándome solo en esas 40 preguntas.

Sin embargo, ningún enfoque “hacky” funciona si no haces repeticiones todos los días y no eres constante.

Y aquí es donde la mayoría de la gente fracasa.

Es como ir al gimnasio: sabes lo que tienes que hacer y cuándo ir, pero mucha gente todavía no lo hace.

No es un problema de conocimiento, sino un problema de disciplina.

Por eso existen los entrenadores personales: para mantenerte motivado y responsable de tus objetivos.

Necesitas exactamente lo mismo para LeetCode/DSA.

Cuando practicaba, literalmente hacía que mi madre me controlara todas las semanas para asegurarse de que iba por buen camino con mi práctica.

Esa responsabilidad y no querer decepcionar a mi madre es lo que me impulsó a cometer problemas incluso cuando no quería. La rendición de cuentas es un loco mecanismo de coherencia.

Entonces, quiero que hagas exactamente lo mismo. Haga que cualquier persona que conozca se comunique con usted todos los días para que usted sea responsable.

Hago esto con ciertos clientes en mi programa de coaching. Me comunico con ellos todos los días para asegurarme de que estén haciendo la preparación que me dijeron que harían.

Este es el rastreador simple que usamos, así que siéntete libre de hacer una copia y usarlo tú mismo.

¡Encuentra el rastreador aquí!

Es increíblemente eficaz y todos logran un enorme progreso para conseguir el trabajo de datos/ML de sus sueños.

Si está interesado en trabajar conmigo, no dude en presentar su solicitud a continuación:

¡Aplica aquí!

Conéctate conmigo