Por qué Leetcode está obsoleto y la programación en pareja para las entrevistas es el camino a seguir

Rate this content
Bookmark

Todos hemos experimentado la solicitud de empleo que nos obliga a realizar una prueba de codificación en línea. Tienes que repasar tus algoritmos, estructuras de datos, complejidad temporal y al final estás estudiando como si fuera un examen universitario. Ahora que somos nosotros los que generalmente entrevistamos a los candidatos, una buena pregunta para hacer es: "¿las pruebas de codificación en línea son el mejor indicador de la competencia y habilidad de un candidato?" En esta charla, exploraremos:

  • - Los problemas de las pruebas similares a Leetcode

  • - Lo que deberíamos buscar en los candidatos

  • - Cómo la programación en pareja es la mejor manera de ver cómo un candidato trabajaría con el equipo

  • - Además, una pequeña demostración de una entrevista de programación en pareja remota




Mo Khazali
Mo Khazali
32 min
09 Mar, 2023

Video Summary and Transcription

La charla analiza los problemas con las pruebas de codificación en línea y los beneficios de las entrevistas de programación en pareja. Se enfatiza la importancia de la contratación y el crecimiento, incluyendo la creación de una experiencia de entrevista positiva y considerando el costo de la contratación. El trabajo de un desarrollador de software va más allá de la codificación y requiere múltiples conjuntos de habilidades. La programación en pareja proporciona una evaluación más precisa de las habilidades requeridas para el desarrollo de software. La charla también cubre la implementación de un sistema de puntuación de tenis y la personalización de las entrevistas de programación en pareja para diferentes roles y niveles.

Available in English

1. Introduction to Hiring and Growth

Short description:

Hola a todos. Hoy discutiremos los problemas con las pruebas de codificación en línea, los beneficios de las entrevistas de programación en pareja y la importancia de la contratación y el crecimiento. También exploraremos las características ideales del candidato y la falta de coincidencia entre las plataformas de codificación en línea y las habilidades requeridas. Compartiré mi experiencia personal con las entrevistas de programación en pareja y su impacto en mi carrera. Comencemos.

♪♪ Hola a todos. Estoy muy emocionado de dar esta charla en Tech Lead Conf. Gracias por tomarse el tiempo para unirse a nosotros. Así que, hoy, vamos a echar un vistazo juntos a lo que está mal con las pruebas de codificación en línea, por qué leetcode está muerto, y cómo incluir una entrevista de programación en pareja puede revolucionar todo su proceso de entrevista.

Entonces, quiero comenzar dando una visión general de lo que vamos a hablar hoy. En primer lugar, muy rápidamente, ¿por qué importa el crecimiento? ¿Y por qué deberías enfocarte en las entrevistas? Dos, ¿qué estás buscando en el candidato ideal? ¿Cuáles son las características clave, rasgos, habilidades que deberías apuntar? Sabiendo eso, en tercer lugar, ¿cuáles son las habilidades que las plataformas de codificación en línea como leetcode, como HackerRank están realmente testing? ¿Coinciden bien con las habilidades que necesitas buscar en un candidato? Y por último, profundizaremos en todo el enfoque de la programación en pareja.

Entonces, un poco sobre mí y dónde trabajo. Mi nombre es Muhammad. Soy el jefe de móviles en una empresa llamada Theodo, con sede en el Reino Unido. Theodo es en realidad una consultoría global con más de 600 personas distribuidas en el Reino Unido, Francia, Estados Unidos y Marruecos. Ayudamos a los clientes a construir soluciones digitales para algunos desafíos estratégicos difíciles. Cosas como autoservicio y recorridos minoristas, plataformas de e-commerce para ropa de segunda mano, o construir bancos desafiantes desde cero. Entonces, si estás interesado en aprender un poco más sobre Theodo o simplemente quieres charlar, no dudes en enviarme un mensaje en Twitter. Siempre estoy dispuesto a tomar un café en persona o tener una charla virtual.

A nivel personal, la razón por la que realmente quería dar esta charla fue debido a mi propio viaje al unirme a Theodo. Mi decisión de unirme a la empresa fue en gran medida influenciada por mi propia entrevista de programación en pareja. Fue una experiencia realmente agradable que me empujó a decir que sí y unirme a Theodo y al equipo que tenemos. Entonces, el impacto de esto se siente mucho en mi propia career. Y ahora soy una de las personas que realiza las entrevistas de programación en pareja. Así que, hemos llegado a un punto completo. Y es algo que realmente disfruto. Así que estoy muy emocionado de compartirlo con todos ustedes hoy. Vamos a empezar.

¿Cuál es la importancia de la contratación y el crecimiento? No voy a dedicar mucho tiempo a esto, pero realmente, si lo analizas, puedes dividirlo en tres categorías. Uno es la calidad del equipo. Esto puede parecer muy, muy simple. Pero una alta calidad de contratación conducirá a equipos de mayor calidad. Entonces, sin tener un proceso de entrevista bien pensado y de buena calidad, corres el riesgo de tener falsos positivos. Así que, tal vez contratar a los candidatos equivocados, alguien que no encaja en el equipo o que no tiene las habilidades que estabas requiriendo.

2. Importance of Hiring and Growth

Short description:

Tener un sistema de contratación efectivo es crucial para contratar a los candidatos adecuados y evitar falsos negativos. El proceso de contratación puede afectar la reputación de una empresa, por lo que es importante crear una experiencia agradable y positiva para los solicitantes. Además, se debe tener en cuenta el costo de contratación, incluido el pago para los candidatos y el tiempo invertido por los entrevistadores. Al buscar candidatos, es importante centrarse en su capacidad para escribir código mantenible y comprensible, ya que el código se lee con más frecuencia de lo que se escribe.

O tendrás falsos negativos. Y eso no significa contratar a los candidatos adecuados. A veces, tener un sistema que no es efectivo te hará perder algunos candidatos realmente buenos que podrían haber sido un activo muy valioso para tu equipo y tu empresa.

En segundo lugar, la reputación de la empresa. Recuerdo cuando era recién graduado y buscaba trabajo, una de las cosas que se mencionaba regularmente entre mis compañeros era que ciertas empresas eran difíciles de solicitar. ¿Por qué perder el tiempo? Tenían cierta reputación de ser un poco difíciles y de no ser procesos agradables para pasar. Y por eso era conocido entre la comunidad estudiantil, probablemente no quieras perder tu tiempo solicitando en ellas o es realmente difícil. El proceso de contratación puede tener impactos realmente positivos y realmente negativos en la reputación de la empresa. Y a lo largo de todo ese proceso de entrevista y contratación, puedes aprovecharlo como una oportunidad para conocer a más ingenieros, aprender sobre las experiencias de las personas, compartir tus propias experiencias. Y es una oportunidad realmente buena para conocer a más personas en toda esa entrevista y etapa de contratación. Así que es bueno para la reputación y también una buena oportunidad para que conozcas a más personas.

Y por último, el costo. Entonces, si estás empezando a considerar ser un EM o un líder técnico, una de las cosas importantes con las que tendrás que lidiar es el costo. Eso incluye desde el costo del pago para el candidato. A corto plazo, está el costo de un equipo sordo que va a entrevistar al candidato. El costo de su tiempo que están invirtiendo para pasar por estas entrevistas con tu candidato, ver si son adecuados o no. Y luego, en el peor de los casos, si el candidato no era adecuado y necesitabas volver a contratar en algún momento, el costo de tener que volver a contratar obviamente también puede ser bastante alto. Así que con todo eso en mente, podemos tener una visión general de por qué es importante la contratación y el crecimiento y por qué debemos centrarnos en esto. ¿Qué debemos buscar en un candidato? Tengo algunos rayos de sol y la figura solitaria para darle este tipo de ambiente grandioso y sagrado. Así que este es un candidato perfecto. Estoy seguro de que en algún momento todos hemos oído hablar de este concepto del desarrollador 10X. Es el desarrollador que puede entregar a 10 veces la velocidad con una décima parte de las líneas de código. Me alegra decir que después de una extensa investigación, he llegado a la conclusión de que el desarrollador 10X es una mentira. Es una fachada total. No existe. Y a lo largo de mi investigación sobre el desarrollador 10X, en realidad encontré esta cita realmente genial que me gustó, que decía que el código se lee cuatro veces más de lo que se escribe. Entonces, si escribes código fácil de razonar, eso se paga dramáticamente en el futuro. Creo que realmente engloba algunos factores clave sobre lo que es importante cuando buscas contratar a un candidato. Quieres a alguien que pueda escribir buen código, código que será mantenible y comprensible por otros, por miembros más senior del equipo, miembros más junior del equipo, y código que en última instancia sea comprensible y razonable por otros en ese equipo. Y eso es lo que hará que esa inversión de 10X valga la pena a largo plazo, porque ese código será revisado y examinado tantas veces en el futuro y en el ciclo de vida de una base de código.

3. Job of a Software Developer

Short description:

El trabajo de un desarrollador de software es multifacético y va más allá de simplemente codificar. Necesitan identificar y descomponer problemas, diseñar soluciones eficientes, trabajar en equipos interfuncionales y ser pragmáticos en su enfoque. Para puestos de nivel superior, son importantes las habilidades de coaching, de gestión y la capacidad de mantener la calidad del código en proyectos. Contratar a un candidato requiere considerar múltiples conjuntos de habilidades.

Tomando este concepto del desarrollador 10X, de manera más realista, ¿cuál es el trabajo de un desarrollador de software? Y creo que es muy multifacético. Va más allá de simplemente codificar. Entonces, un buen desarrollador de software debe ser capaz de identificar problemas y descomponer problemas a partir de requisitos y necesidades comerciales. Deben ser capaces de design una solución que resuelva el problema mientras trabajan en un equipo interfuncional y realmente escriben esa solución eficiente en un buen lapso de tiempo. También necesitan ser un poco pragmáticos con el enfoque que toman. Y si estás contratando para un nivel más alto, como un líder técnico o un EM, también hay un aspecto de coaching y gestión. ¿Qué tan bien enseña el candidato a los desarrolladores más junior en el equipo, los capacita, los entrena? ¿Puede el candidato gestionar de manera efectiva el flujo de proyectos con el PM? ¿Puede mantener la calidad del código en una multitud de proyectos? Estos son todos factores que tendrás que equilibrar. Entonces, cuando lo ves en una escala más amplia, una imagen más grande, hay una serie de conjuntos de habilidades que debes considerar cuando estás contratando a un candidato.

4. Online Coding Tests and Pair Programming

Short description:

Las pruebas de codificación en línea evalúan principalmente el conocimiento de los candidatos sobre algoritmos y estructuras de datos. Siguen patrones similares y requieren familiaridad con conceptos clásicos de ciencias de la computación. Estas pruebas también evalúan la capacidad de implementar soluciones rápidamente bajo presión. Sin embargo, es posible que no evalúen de manera efectiva las habilidades requeridas para el desarrollo de software en el día a día. Por otro lado, la programación en pareja implica problemas realistas y entornos de codificación, lo que proporciona una evaluación más precisa.

Entonces, pensando en eso, veamos las pruebas de codificación en línea. ¿Qué conjuntos de habilidades evalúan las pruebas de codificación en línea? Voy a ser un poco audaz aquí y decir que, principalmente, las pruebas de codificación en línea solo miden de manera efectiva el conocimiento de un candidato sobre algoritmos y estructuras de datos. Estoy seguro de que has pasado por tu parte justa de pruebas de codificación en línea. Mayormente siguen los mismos patterns. Tal vez tengas que invertir una lista enlazada, o tienes que recorrer un árbol de búsqueda binaria y encontrar un nodo específico. La mayoría de estos problemas son muy similares, de hecho, en su naturaleza. Y realmente necesitas familiarizarte con los algoritmos clásicos de COMSCI y el curso de estructuras de datos.

Es muy académico en su naturaleza, y los habrás encontrado si tienes una formación clásica en ciencias de la computación, o los verás en algún momento. Pero implica muchos de los mismos patterns que se repiten una y otra vez. Y además de eso, las pruebas de codificación en línea evalúan tu capacidad para hacerlos bajo una inmensa presión en un corto período de tiempo. Entonces, ¿qué tan rápido puedes implementar realmente esos algoritmos y estructuras de datos para resolver el problema que te dan? Así que realmente, si has estudiado, memorizado los algoritmos, las estructuras de datos, y entiendes el patrón detrás de las preguntas, comienzas a verlos, y lo harás después de un poco de práctica, los resolverás prácticamente sin problemas. Si no me crees, literalmente hay un libro para eso. Así que esto es un elemento básico en la lista de compras de cada graduado. `Cracking The Coding Interview` tiene 189 preguntas de programación y respuestas típicas en estas pruebas de codificación. Es un libro con varios cientos de páginas, y lo recorres una por una, haces los ejercicios. Se siente mucho como si estuvieras estudiando para el SAT o algún tipo de prueba estandarizada, y rápidamente comenzarás a percibir estos patterns. Muy, muy formulista, no muy efectivo para evaluar las cosas de las que hablamos cuando estábamos buscando al candidato perfecto. Y la pregunta en la que debemos pensar es, ¿cuánto de esto es realmente aplicable a un rol de desarrollo de software en el día a día? ¿Con qué frecuencia estás pensando en cómo invertir una lista enlazada? ¿O con qué frecuencia realmente te enfrentas a estos problemas en los que necesitas encontrar la solución más eficiente posible, la solución más eficiente que sea posible? No es algo común en el día a día. Ciertamente no es algo que requiera la mayoría de la atención cuando buscamos contratar a un candidato. Así que hay un desequilibrio. Es una pequeña parte del rol, pero tiene un gran peso en la decisión de qué candidatos pasan y cuáles fallan. Así que hay un desequilibrio entre la contratación y el rol real.

Pasemos a la programación en pareja. Para explicar la programación en pareja, quiero comenzar con lo que no es la programación en pareja. Y la programación en pareja no es esto. No es un candidato que se acerca a un pizarrón, comienza a garabatear algunas notas, y tú, como entrevistador, estás sentado allí mirándolo intensamente. Eso no es programación en pareja. Para un buen ejercicio de programación en pareja, necesitas un problema realista y también necesitas un entorno de codificación realista. Así que comencemos con un problema realista y luego veremos un ejemplo más adelante. No nos vamos a enfocar demasiado en esto ahora mismo, pero quieres tratar de encontrar un problema similar al del mundo real.

5. Realistic Coding Environment and Demo

Short description:

Encapsula la lógica y el conocimiento en un problema relacionable para evaluar a los candidatos. Utiliza un entorno de codificación realista, como CodeSandbox o la extensión LiveShare de VS Code, para simular la programación diaria. En una entrevista de programación en pareja, enfócate en la colaboración y la resolución de problemas. Proporciona a los candidatos una demostración de cómo trabajar en equipo. Utiliza problemas del mundo real de repositorios de GitHub para evaluar en las entrevistas.

Y dentro de ese problema, puedes tratar de encapsular y abarcar cierta lógica, cierto conocimiento que te gustaría evaluar en el candidato. Es realmente importante que el problema sea comprensible y relacionable. Algo que realmente podrían codificar en un trabajo real de día a día. Eso incluye cierta lógica compleja también.

Ahora, cuando hablamos de un entorno de codificación realista, eso significa sin pizarras, sin papel y lápiz, utiliza un editor de código real. Hay tantos entornos de codificación reales geniales que te permitirán trabajar colaborativamente en el código al mismo tiempo. Y esto será lo más parecido al rol diario. Esto es lo que estarán utilizando todos los días cuando comiencen en el trabajo. Algunos ejemplos de esto son CodeSandbox, que es muy popular. También puedes usar la extensión LiveShare de VS Code, y trabajar colaborativamente en un solo archivo o en múltiples archivos al mismo tiempo, y tienes un entorno que compartes, es una gran herramienta para usar. Y realmente te aseguras de darle al candidato lo más parecido a un entorno de codificación real que utilizarían en su trabajo diario.

Y cuando hablamos de un entorno de codificación realista, no solo nos referimos a las herramientas, sino también al estilo de interacción que tienen. Entonces, una pregunta que debes hacer es, en el rol diario, ¿qué sucede cuando un desarrollador se encuentra con un problema difícil? Y quiero que esto se quede en tu mente por un momento. Cuando un desarrollador llega a un punto en su aplicación y está pensando en ello, razonando sobre ello, y se encuentra con un problema un poco difícil, lo que suele hacer es consultar con el equipo, dar un paso atrás, hablar con los demás, obtener su opinión y tratar de llegar a una solución óptima juntos. Ahí es donde entra en juego esa pizarra. Con eso en mente, es muy, muy importante que realmente estés trabajando juntos como parte de esta entrevista de programación en pareja. Deberías estar programando y hablando tanto como ellos. Realmente quieres que sea una sesión de programación en pareja, y esto te permitirá tener una idea de cómo es incorporarlos a tu equipo, ¿cómo es trabajar con ellos? Si se unieran a tu equipo mañana, lo cual es algo genial de saber, como entrevistador, pero también tiene el otro lado, que les da la sensación de cómo es trabajar dentro de tus equipos. Así que eso, para un candidato, es invaluable. Realmente obtienen una prueba o una demostración de cómo sería unirse a tu empresa y a tu equipo.

Así que sin más preámbulos, vamos a pasar a una demostración, y con suerte todo esto comenzará a encajar. El ejemplo que tenemos aquí es un ejemplo bastante sencillo. Es una kata de puntuación de tenis. Y puedes encontrar una recopilación de estos problemas similares al mundo real en diferentes repositorios de GitHub. Este proviene de un catálogo de katas que alguien ha pasado mucho tiempo compilando, así que felicitaciones para ellos. Y tiene varios problemas diferentes con diferentes lenguajes como plantillas para que puedas comenzar a evaluar a las personas. Vamos a repasar el contexto de este juego, y luego haremos una breve demostración en vivo. No será la extensión completa de una entrevista. Y obviamente hay diferentes problemas con diferentes longitudes, diferentes dificultades. Así que realmente puedes elegir lo que creas que es más aplicable a tu proceso de entrevista específico.

6. Implementando el Sistema de Puntuación de Tenis

Short description:

Implementaremos el sistema de puntuación para el tenis, centrándonos en la lógica básica sin interfaz de usuario ni validación de datos. Durante la entrevista, observa el enfoque de resolución de problemas del candidato, su interacción contigo, su receptividad a los comentarios y su preferencia por soluciones simples. Tenemos un entorno de Live Share configurado y seguiremos el estilo de programación TDD. Pasemos a la siguiente prueba para manejar una victoria.

Pero en este caso, solo para esta demostración, hemos elegido algo un poco simple para poder revisarlo un poco. Y con suerte, será fácil de seguir. Así que vamos a implementar el sistema de puntuación para el tenis. En un juego de tenis, ambos jugadores comienzan con una puntuación de cero. Y en cada ronda exitosa que juegan, los puntos se suman en una secuencia de cero, 15, 30 y luego 40. Y una vez que estás en la etapa de 40, ganarás el juego si anotas nuevamente, a menos que ambos jugadores tengan una puntuación de 40, lo que se llama empate. Eso significa que estás en algún tipo de punto muerto. Y la forma de ganar cuando estás en un empate es anotar dos veces consecutivas. Entonces, si lograste romper el empate y anotar dos veces seguidas, terminarás ganando el juego. Así que reglas básicas del tenis.

Lo que estamos tratando de hacer es incorporar esto y construir la lógica en torno a esto sin centrarnos en la interfaz de usuario, sin centrarnos en la data validation, solo la lógica básica de esto. Y vamos a intentar hacerlo en un corto período de tiempo para esta demostración. Así que intentemos hacerlo. Antes de hacerlo, quiero que te enfoques en cosas como cuánto interactúo con el candidato en la entrevista. Cuando se quedan atascados, ¿me piden ayuda? Si no entienden algún tipo de sintaxis, ¿se sienten lo suficientemente cómodos como para preguntarme como entrevistador, cómo se establece una variable en este lenguaje? ¿Dan un paso atrás antes de intentar un enfoque y consideran todas las diferentes opciones, razonan al respecto, piensan en los pros y los contras? ¿O simplemente siguen el primer camino que ven? ¿Qué tan receptivos son a los comentarios, si les doy pistas? ¿Las toman y las investigan? ¿O simplemente las ignoran y continúan con lo que estaban haciendo? Y por último, ¿están creando soluciones demasiado complicadas o van por soluciones simples, tratando de ser pragmáticos? Estas son todas cosas que debes tener en cuenta. Y son cosas que te darán una buena indicación de cómo es esta persona en términos de sus habilidades de desarrollo de software y, en general, cómo es trabajar con ellos.

Así que tenemos a mi buen amigo, Sadik, aquí con nosotros, que amablemente ha aceptado hacer esta demostración. Gracias Sadik por tu tiempo con nosotros. No hay problema, un placer. Genial, tenemos un entorno de Live Share de VS Code configurado. Hay una clase de tenis, hay algunas pruebas, y vamos a seguir el estilo de programación TDD, vamos a crear más pruebas, hacer que pasen, y luego haremos una ronda de refactorización. Pasaremos por una ronda para esta demostración. Obviamente, harías una prueba completa si estuvieras entrevistando a alguien. Entonces, Sadik, ¿deberíamos pasar a la siguiente prueba? Tenemos pruebas para manejar un nuevo juego, un juego de un solo punto y un juego nivelado. ¿Qué crees que deberíamos testing a continuación? Supongo que esto maneja una puntuación bastante básica. Podríamos manejar una victoria a continuación. Genial. Hagamos un caso de prueba para eso. Genial. Adelante.

7. Representando una Victoria en Código

Short description:

Para representar una victoria en código, podemos usar un valor por encima de la puntuación más alta o tener algún tipo de estado en la clase. El uso de una bandera requeriría comprobaciones en varios lugares y declaraciones condicionales para evitar el incremento de la puntuación. Aunque el uso de un valor falso se desvía de la lógica real, proporciona una solución más rápida para esta prueba.

Y para ganar, anotarán cuatro veces, solo para llegar hasta el final pasando un 40. Pasado el 40. De acuerdo, genial. ¿Y qué esperamos que sean los resultados reales de la cadena de puntuación obtenida? Sí. Cambiemos eso a... Así que este es el segundo jugador al que le he dado una victoria. Así que hay dos victorias. Hagámoslo. Y supongo que sí, la forma más rápida sería devolverlo aquí de alguna manera. De acuerdo. Entonces, una victoria... Bueno, necesitamos representarla realmente en código. Así que hay un par de formas en las que podríamos hacerlo aquí. Una sería en la puntuación, como después del 40, sé que esa es la puntuación más alta que se puede obtener. Podríamos tener un valor por encima de eso solo para representar, ya que estamos recorriendo cada índice aquí, podríamos tener un último elemento que represente una victoria o podemos tener algún tipo de estado en la clase. Eso está bien.

Así que retrocediendo un poco aquí para la audiencia, es realmente bueno... Sadiq está retrocediendo, mirando las diferentes opciones que puede tomar con esto. Es una muy buena señal, está hablando en voz alta. Puedo entender completamente lo que está pensando. Así que voy a tratar de contribuir un poco a esta entrevista ahora. Entonces, sí, eso me parece bien. Supongo que pensemos en los pros y los contras de cada enfoque. Si usáramos una bandera, tendríamos que hacer comprobaciones en varios lugares dentro de la funcionalidad de puntuación. Y luego tener algunas declaraciones condicionales para no incrementar la puntuación como lo estamos haciendo ahora. Eso podría tener cierta complejidad. El otro lado es representar un valor falso en la puntuación, como dijiste. Pero entonces no te estás apegando a la lógica real. No son puntuaciones de tenis. Así que supongo que con esas compensaciones en mente, ¿qué crees que deberíamos hacer? Bueno, para obtener la solución más rápida, solo el paso más rápido para esta prueba, probablemente sea más fácil ir por un valor. Y luego, si queremos volver, obviamente podríamos refactorizarlo. Sí, podríamos volver. Así que avísame qué debo escribir, y yo usaré el teclado.

8. Refactorizando la Función de Puntuación

Short description:

Elijamos un valor por encima de 40, como 60. Si ambos jugadores tienen una puntuación de 60, devolvemos Player1Wins. De lo contrario, comprobamos si el segundo jugador ha ganado y devolvemos Player2Wins. Hemos llegado a la etapa de refactorización. Dentro de la función de puntuación, refactoricemos el código que calcula el índice de la próxima puntuación. Llamémoslo 'getNextScoreIndex' y pasemos la puntuación. Mientras Sadiq trabaja en eso, es una buena señal que se sienta cómodo pidiendo sugerencias.

Entonces elijamos un valor, cualquier cosa por encima de 40. Hagamos 60 para... Oh, Dios. No me gusta eso. De acuerdo, genial. Tenemos un auto eficiente en tenis aquí, así que, de acuerdo. Hemos agregado un valor de 60 a esta matriz. Bien. Y luego, GetScoreString, supongo que deberíamos verificar la puntuación. De acuerdo. Si es igual a 60 para cada jugador, entonces si this dot, sí, puntuación del primer jugador, puntuación del segundo jugador. Si es 60, queremos devolver una cadena que diga algo como Player1Wins, ¿verdad?, siguiendo el patrón que has establecido allí. De lo contrario, comprobamos, veamos, de acuerdo, ¿ha ganado el segundo jugador? Y luego, en ese caso, también devolveríamos Player2Wins. Todos los errores tipográficos. De acuerdo, genial. Así que hemos tomado una nueva prueba y originalmente estaba fallando. Lo hicimos pasar. Ahora hemos llegado a la etapa de refactorización. Entonces, Sadiq, ¿hay algo en la clase de tenis o en la prueba que hayamos escrito que te gustaría refactorizar o limpiar? Sí, supongo que la primera parte del código que veo que se repite está dentro de la función de puntuación, donde estamos calculando el índice de la próxima puntuación. Estas son líneas largas. Tal vez podríamos llevarlo arriba, ponerlo en una función. Hagámoslo, inténtalo. Claro. Entonces, ¿alguna sugerencia de nombre? Bueno, si le damos un nombre semántico, está obteniendo el índice de la próxima puntuación en la línea 14 y 18. Entonces, ¿por qué no lo llamamos así? Claro, y tomaremos la puntuación. ¿Tomamos al jugador? O podemos tomar la puntuación actual, lo que sea. Claro, solo tomaremos la puntuación. Genial. Y a partir de eso, estamos poniendo esta parte aquí. Mientras Sadiq trabaja en eso, esto es bueno para los nombres, para las cosas en las que quería sugerencias, se sintió cómodo preguntándome, esa es una buena señal.

9. Reflexiones Finales y Conclusión

Short description:

La comodidad de Sadiq al pedir ayuda es una buena señal. Hemos refactorizado el código y lo hemos vuelto más eficiente. Nuestras pruebas están pasando y estamos en un buen estado. El problema del tenis es interesante, especialmente con los empates y las ventajas. Gracias, Sadiq, por tu tiempo. Permíteme compartir algunas reflexiones finales.

Demuestra que se siente cómodo al pedir ayuda o solicitar pistas cuando las necesita. Así que eso es una buena señal.

Genial, entonces, esa función está ahí. Probablemente deberíamos devolver, sí, y luego podemos simplemente llamar a eso en lugar de hacer esa larga búsqueda de scoring.findIndex en cada línea.

Entonces, aquí está la prueba. Genial. Y luego podemos simplemente copiar esto, hacerlo de nuevo para el segundo jugador. Suena bien. Bueno.

Entonces, hemos tomado eso. Lo hemos refactorizado, guardémoslo y veamos si la prueba sigue pasando. Increíble.

Otra cosa también, creo, en el lado de las pruebas, tenemos bastante repetición aquí, como estamos lanzando, estamos puntuando varias veces para cada uno de ellos. Podríamos ponerlo en un bucle, especialmente para este donde sucede cuatro veces. ¿Qué piensas, Sadik?

Sí, hagamos un bucle cuando sea cuatro o más. Creo que se está volviendo un poco pesado. Hagámoslo. Entonces, crearemos un bucle aquí, I es menor que cuatro, lo incrementaremos, y luego iteraremos aquí y nos desharemos de eso. Genial. Tenemos nuestras pruebas pasando. Nuevamente, hemos refactorizado ambos archivos. Estamos en un buen estado, hemos hecho un bucle del ciclo rojo-verde-refactorizar en TDD, puedes construir sobre esto en un ejercicio real. Pero nos detendremos aquí solo para mantener el ejemplo corto y simple.

Es un problema realmente interesante, te recomendaría que lo intentes, este problema del tenis, se vuelve realmente interesante una vez que tienes empates y estás tratando con las ventajas y demás.

Muchas gracias, Sadiq, por tomarte el tiempo con nosotros.

No hay problema. Gracias.

Entonces, concluyamos. Quiero dejarte con algunas reflexiones finales. Estas son cosas que suelo hacer antes y después de las entrevistas, creo que realmente dejan una buena impresión en el candidato.

10. Creando una Experiencia Positiva en la Entrevista

Short description:

No te lances directamente al ejercicio. Tómate tiempo para conocer al candidato y crear un mejor ambiente para la entrevista. Revisa la solución juntos y anima al candidato a criticar su propio trabajo. Pide feedback para mejorar el proceso. Una experiencia positiva puede hacer que la entrevista valga la pena.

En primer lugar, no te lances directamente de inmediato. No quieres tener solo una introducción simple y luego pasar al ejercicio. Recomiendo tomar un poco de tiempo, tratar de conocer al candidato. Hay mucho valor en entender su historia, sus ambiciones, cómo es conversar con ellos, y no subestimes lo bueno que puede ser para aliviar al candidato y, con suerte, brindarte un mejor ambiente para llevar a cabo la entrevista de programación.

En segundo lugar, tómate un poco de tiempo al final, revisa la solución que han creado juntos y ve si pueden encontrar mejoras y si puedes hacer que el candidato critique su propio trabajo. Es una buena señal cuando un candidato está dispuesto a criticar o señalar aspectos que faltan en su solución. Así que recomendaría tomarse un poco de tiempo al final, un par de minutos para hablar sobre ello.

Y por último, pide su feedback. Les brinda una buena oportunidad para darte puntos de mejora, pero también para hablar sobre cómo fue su experiencia. Y hablando de experiencia, quiero terminar con esta nota. Hace un tiempo tuvimos un candidato que se postuló con nosotros. Desafortunadamente, no fue seleccionado, pero recibí este correo electrónico unos días después. Y solo quiero dejarlo ahí por un segundo. Mensajes como este hacen que esta entrevista de programación en pareja sea genial a mis ojos. Es una sensación agradable cuando como entrevistador sientes que no has desperdiciado una hora del tiempo del entrevistado, y recibir su respuesta diciendo que sienten que realmente han aprendido algo o que tuvieron una experiencia agradable es algo que realmente ha valido la pena para todos nosotros. Y espero que en las entrevistas que realice en el futuro, pueda dejar una experiencia similar en los demás. Muchas gracias por escuchar.

QnA

Coding Tests and Pair Programming

Short description:

La mayoría de las personas han abandonado las pruebas de codificación, pero aún desempeñan un papel importante en el proceso de contratación. Se debe considerar el costo de las entrevistas, especialmente en entornos de consultoría. El ejercicio de codificación mencionado en la charla se llama kata de puntuación de tenis. La programación en pareja es efectiva para evaluar las habilidades de comunicación y la capacidad de comprender conceptos. Para puestos de nivel superior, es importante la capacidad del candidato para explicar temas y encajar en un rol de liderazgo.

Sí, fue como una batalla hasta hace unos minutos, hace unos segundos, verifiqué y era 46 y 46. Ahora, la opción no tiene el 56%. ¿Cómo te sientes al respecto?

Para empezar, estoy bastante contento de que la mayoría de las personas hayan abandonado las pruebas de codificación. Es genial verlo y espero que ese número aumente con el tiempo. Los `sí` todavía representan aproximadamente un tercio, alrededor del 32 o 33%. También me interesa ver para qué lo usan las personas. Entonces, las personas que aún utilizan pruebas de codificación, ¿en qué etapa de la entrevista se utilizan? ¿Es una parte fundamental o es parte de un filtro de selección? Pero sigue siendo una cantidad considerable, ¿verdad? Uno de cada tres trabajos a los que te postulas probablemente tendrá una prueba de codificación, lo que significa que se invertirá mucho tiempo en eso.

Sí, sí. Tiempo que hoy en día podría haberse invertido de manera mucho más efectiva en cosas más prácticas. Porque la energía en un proceso de contratación, y mencionaste en la charla, cuánto tiempo cuesta la entrevista para el proceso de contratación. Sí. Por cierto, el otro día fue muy popular el costo de las reuniones, ya sabes, en Google, el calendario falso y el costo de las personas. Deberíamos hacer eso después del proceso de contratación al final. ¿Cuántas personas de nuestro equipo de ingenieros hicieron la entrevista y cuánto nos costó? Sí, sí. Especialmente estando en un entorno de consultoría, sabes, es un factor clave allí. Así que definitivamente piensa en el costo del tiempo de cada persona individual también.

Comenzaré con una pregunta rápida. Alguien preguntó cómo se llamaba nuevamente el ejercicio de codificación, ¿kata de puntuación de tenis o algo así en tu charla? Sí, este tipo de problemas generalmente se llaman katas. Hay un repositorio completo en GitHub con, ya sabes, docenas de ejemplos de ellos, puedes encontrar uno que se adapte a ti y a tu estilo. Este en particular se llama kata de puntuación de tenis. Así que si lo buscas, deberías encontrar un repositorio de GitHub al respecto. Bien. De acuerdo, eso está resuelto. La segunda pregunta que recibimos fue sobre cómo encontraste que el Método de Programación en Pareja se adapta a la experiencia de los candidatos.

Sí, eso también es muy interesante. Entonces, si estás contratando, digamos, a nivel de recién graduado, lo que realmente estás buscando no es algo como experiencia con la sintaxis o muchas de las cosas que esperarías con la experiencia. Lo que estás evaluando más es la comunicación, eso es lo fundamental que deseas, y qué tan rápido pueden comprender conceptos, cuánto están dispuestos a aprender, porque ese es el career. Y eso es lo que están tratando de aprender. Si estás evaluando y haciendo una entrevista de programación con alguien que quiere ingresar a un nivel de liderazgo técnico o a un nivel de ingeniero senior, entonces tendrás que buscar otras cosas. La comunicación es importante, pero también es cómo explican estos temas. Y realmente tienes que ver si pueden encajar en ese rol de liderazgo y mentoría. Entonces, tal vez como entrevistador, te retires un poco y les des más libertad para dirigir la entrevista.

Customizing Pair Programming Interview

Short description:

Puedes personalizar la entrevista de programación en pareja para adaptarla a diferentes roles y niveles. Es importante evaluar las elecciones arquitectónicas y las habilidades de integración. Considera preguntar a los candidatos sobre cómo manejar problemas complejos antes de comenzar la entrevista. Ajusta el proceso para que sea específico para cada rol y equipo. Adáptate al cambiante panorama tecnológico para encontrar el ajuste perfecto para los candidatos.

Y a partir de eso, puedes tener una idea, si fueras un desarrollador junior, trabajando con un desarrollador senior o con un líder técnico, ¿cuál sería el estilo de trabajo con ellos? Así que es muy ajustable. También puedes elegir problemas más difíciles si estás tratando de contratar a un desarrollador senior. Hay tantos de estos CADAs con diferentes requisitos y diferentes complejidades. Así que es muy adaptable, diría yo.

Sí. Y como mencionaste, la comunicación, he escuchado que al menos algunas empresas hacen esto como una prueba de una semana o incluso más o menos, la persona se integra en el equipo y literalmente tiene un trabajo porque esa es la parte de comunicación que se ve. Haciendo preguntas, depurando de alguna manera, ya sabes, incluso el proceso en la nueva empresa.

Sí. La segunda pregunta que recibimos fue sobre el candidato senior, y es como, encontré que con los candidatos más senior, la habilidad en la que estamos interesados puede ser trabajar en escalas más grandes y no siempre se presta a mirar código juntos. Los ejemplos serían architecture y organización para proyectos verdes. ¿Qué piensas, cómo se sentiría este formato con un rol de clase de personal para ti?

Claro. Así que en realidad, puedo darte una idea de cómo manejamos esto. Entonces, como parte de esto, tenemos esta entrevista de programación en pareja, creemos que sigue siendo fundamental para contratar a un líder técnico o a un gerente de ingeniería. Pero además de eso, tal vez agreguemos una entrevista de design arquitectónico también. Y la idea es, bueno, también necesitamos evaluar cómo pueden tomar decisiones arquitectónicas. Cómo crearán sistemas e integrarán diferentes partes de una aplicación. Y creo que puedes agregar eso. Pero esta entrevista de programación en pareja sigue siendo bastante importante, especialmente porque creo que hemos aprendido a lo largo del día de hoy que un líder técnico y un gerente de ingeniería tienen como tarea interactuar con las personas, comunicarse, empatizar con el equipo, enseñarles cosas. Así que creo que sigue siendo una parte fundamental. Si quieres ajustar la entrevista de programación en pareja, una sugerencia podría ser dar un paso atrás y antes de comenzar la entrevista, preguntarles en general sobre un problema más complejo. Digamos que puedes tener un problema, como cómo manejar el inicio de sesión en general, y ver cómo pueden explicar esos conceptos más fundamentales también. Así que ese es otro paso que puedes agregar antes de comenzar realmente la entrevista de programación en pareja. Sí, y puedes ajustarlo. Como mencionaste, es muy fácil ajustarlo para agregar otros niveles u otros pasos que consideres buenos para el equipo e incluso más, hacerlo específico para cada rol, cada equipo y el nivel al final. Sí. Oh, eso fue realmente esclarecedor, y aprendí mucho. Nuevamente, volveré y veré cuánto tiempo dediqué a las pruebas y la programación en pareja. Lo hacemos, cómo podemos ajustarlo más para encontrar el ajuste perfecto, especialmente hoy en día que, sí, el panorama tecnológico está cambiando mucho. Las cosas cambian tan rápido, y definitivamente queremos tener el ajuste perfecto para nuestros propios candidatos. Muchas gracias por los conocimientos hoy, Charitas. Gracias por recibirme.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Impact: Growing as an Engineer
React Summit 2022React Summit 2022
27 min
Impact: Growing as an Engineer
Top Content
Becoming a web engineer is not easy, but there are tons of resources out there to help you on your journey. But where do you go from there? What do you do to keep growing, and to keep expanding the value you bring to your company? In this talk we’ll look at the different kinds of impact you can have as a web engineer. We’ll walk through what it means to take on bigger, more complex projects, and how to scale yourself, and grow the community around you. By driving our own development we can all grow our impact, and in this talk, we’ll discuss how to go about this.
On Becoming a Tech Lead
TechLead Conference 2023TechLead Conference 2023
25 min
On Becoming a Tech Lead
Top Content
Tech lead sounds like a lot of work. And not the fun coding kind either. Why would you ever want that? What does it feel like when you get it?In this talk Swizec explains why he took the step towards technical leadership, how his priorities changed, and why it means he’s doing more engineering than ever. A whole new world where writing code is the easy part.
Emma Bostian: I landed my dream job by sharing my blogs on Twitter
10 min
Emma Bostian: I landed my dream job by sharing my blogs on Twitter
Top Content
Featured Article
Emma Bostian
Emma Bostian
Software engineer, lecturer, podcast host, author — is there something Emma Bostian hasn't done? She moved from America to Sweden, started working at Spotify, and took up a few challenges along the way. And now she has some career tips to share.

What led you to software engineering? 
I was raised in the ecosphere of tech because my dad is a software engineer at IBM, and my mom was a designer there, too. My dad always encouraged me to join STEM and take a look at computer science — however, I was convinced I wanted to be a medical doctor. In my first year of college, I declared a biology major and quickly realized I was not too fond of it. In my second semester, I switched to an actuarial science major where I took Introduction to Computer Science, and the rest is history. In my second year of college, I declared a computer science major and began my journey from there.
What is the most impactful thing you ever did to boost your career?
Writing blog posts and documenting my learning journey on Twitter has far been the best career boost. I wrote purely for myself to reference the things I learned over time, and I even utilized my design skills in Figma to create custom graphics depicting difficult concepts like CSS specificity. By sharing my blogs on Twitter and engaging with the people reading them, I was able to grow an audience extremely quickly. I began receiving conference speaking opportunities, podcast requests, and course invitations to teach with LinkedIn Learning and Frontend Masters.
Ultimately, I landed my job at Spotify through Twitter, too, when a friend and follower of mine asked if I would be interested in interviewing. Now I live in Stockholm working my dream job. It still blows my mind how tweeting about my blog led me to some of the most amazing career opportunities.
What would be your three tips for engineers to level up their career? 
First, be patient. I often see posts on Twitter or LinkedIn about developers who were promoted to a senior position after a year. And while this is wonderful, I think we forget that each company has a different standard for what constitutes a senior developer, and everyone's journey will be different.
Second, don't be afraid to ask questions. If you try your best to solve a problem or answer a question you have, but you can't figure it out after a reasonable amount of time, ask a team member or mentor for help.
And lastly, invest in the right resources for learning. When I started my journey, I didn't know which platforms worked for me to learn. Now, I have a few trusted platforms such as Frontend Masters, Free Code Camp, or Level Up Tutorials that I go to when I need to learn a new skill.
You're currently working as a software engineer at Spotify. What does a typical day of yours look like there?
I begin my day answering emails. Then we have a team breakfast and a standup remotely as we're all still remote at Spotify. After that, we might have a web tech sync with the other squads in our business unit. The day usually includes some form of pair or mob programming, depending on the work stream. 
My team always has Fika, a traditional Swedish coffee break, scheduled every afternoon. Every couple of Fridays, we have team games planned to release some stress. 
Also, I tend to have a lot of free time to focus, which is nice but makes for a boring answer to this question!
Do you have some rituals or tools that keep you focused and goal-oriented?
I'll admit that I've been struggling with staying motivated in the time of remote work. I've been remote with Spotify since onboarding a year ago, but my team is wonderful, and they help me when I'm down.
Apart from that, I use Todoist to keep track of my tasks, and, naturally, I listen to Spotify while working. But other than that, not really. Maybe I should adopt some new tools to keep me on track!
My current favorite Spotify playlist is Brand New Chill: https://open.spotify.com/playlist/37i9dQZF1DX6uQnoHESB3u?si=380263b3c853442e
I also love Chillout Daily: https://open.spotify.com/playlist/7ozIozDp260fjNOZy1yzRG?si=66d6c839ec9b458a
You wrote a book called De-coding the Technical Interview. What was the impulse to do it?
I wanted to give the community a manual of the essentials of computer science knowledge to ace the technical interviews. The book covers data structures like stacks, queues, or linked lists, tackles algorithms, and deals with systems design. You'll also learn about the interview process from start to finish, get tips on how to submit an amazing take-home project, or understand how to problem solve. You'll also gain knowledge on the frontend coding skills needed to excel at a frontend interview.

If you could stress one piece of advice on surviving a technical interview, which would it be?
Do not lie your way through an interview. If you don't know the answer to something, just admit it. There's no shame in admitting you don't know the answer to something. There is shame in faking it and pretending like you do know the answer.
What's the single best practice everyone who writes code should follow?
Remember that while you are technically writing code for computers, you're also writing it for humans. Your code should be readable and have as little complexity as possible without sacrificing accessibility or performance.
In addition to the book, you co-host the Ladybug Podcast. What inspired you to enter this field, and what are the podcast's main topics?
We talk about everything tech and career on the podcast, from Java and GraphQL to how to start a business and cross-cultural communication. The podcast is a way for me and my co-hosts to share our experiences in tech, having taken different paths. And I'm really glad for doing it — it has allowed me to meet so many incredible people, learn many new things, and support my dream of teaching.
What pieces of your work are you most proud of?
My technical interview book was a huge feat for me as well as my courses with LinkedIn Learning on building a tech resume. I enjoy creating things that help other people advance their careers, so I'm also proud of my courses with Frontend Masters on design systems and CSS.
***
Follow Emma on Twitter
Kent C. Dodds: Consume, build, and teach — and level up your career
14 min
Kent C. Dodds: Consume, build, and teach — and level up your career
Top Content
Featured Article
Kent C. Dodds
Kent C. Dodds
Even though his bio offers quite a hefty reading, he only applied for one job in his career. The rest came along as he was building his name as a renowned speaker, teacher, and a prolific figure of the open-source community. How did Kent do it? “Commit to creating high-quality content,” he says.


What led you to programming?
I had a friend when I was a teenager who was really into it, and he tried to teach me. But I just couldn't get it — it didn't make any sense to me. So I never really thought I'd get into programming, but I liked computers a lot, and I ended up going to school for electrical engineering. 
Well, that didn't work because I'm not good at math. But right when I started the program, I got a job at a company uploading videos to YouTube and that sort of thing. The work was tedious, so I decided to write a computer program to automate lots of the work I was doing with the knowledge I had about programming. And that was the first spark of things for me to use programming to solve real-world problems. 
What is the most impactful thing you ever did to boost your career? 
Committing to creating high-quality content. That might sound obvious because I'm a full-time educator now, but I would not have gotten my job at PayPal if I hadn't been so active with my blog. In fact, lots of my jobs came out of me being involved in the community around meetups, conferences, or open-source projects. 
How do you choose topics for the content you create, be it for your blog or podcast?
I don't think too much about the content other people are creating. And I don't often consume it. My ideas come from the things that I'm working on, things that I'm learning myself, or — when I was working with a team of developers — the things that I had to remind people of in code reviews regularly. Anytime that I would have a code review comment that was pretty long to describe my position, that was an excellent opportunity for a blog post. Also, if people ask me about a topic regularly, I'll make a blog post rather than answer that question multiple times.


What would be your three tips for engineers to level up their career? 
The number one thing I tell people is to be a nice person. I know that sounds fluffy or silly, but it cannot be overstated. You will get so much further in your career and just in life in general if you're a nice person. That doesn't mean that you take people being jerks lying down, but how you interact with others is out of kindness. You could be the best engineer in the entire world, but if you're not a nice person, you will not reach your full potential or accomplish your goals, whatever they may be.
Second, it's just as important to decide what you are not going to learn as it is to decide what you are going to learn. You could jump into countless things — and there are successful people who are polyglot programmers, but I can't speak to that a whole lot. All I can tell you is that in my experience, focusing on specific things that I want to be truly good at has worked out great for my career. That doesn't mean that I closed myself off to other things. With my website rewrite, I have been doing a lot of dev ops-related work and a lot of back-end stuff that I've typically not been involved in. You want to keep your head up on what's going on outside of what you're doing so that you know what direction to go in when you come across problems you need to solve. However, finding a focus on what you want to be good at has helped me a lot. That way, you feel a little less stressed.
And the third one? 
Learn how to learn effectively. It's a three-step process: you consume, build, and teach. The consumption of newsletters and Twitter and whatever inspires you, but you don't want to spend too much time doing that — implementing it into actually building something matters. This happens naturally if you work at a company, but maybe you're not making the things you want to learn, so you may want to start a side project. The building phase is where you get experience, but you also want to solidify that experience. How? You start teaching. You don't necessarily have to teach it to people, it could be stuffed animals. The goal of the teaching is to retain in your mind what you've learned through the building process.
What are you working on right now? 
The big thing I'm working on right now is a rewrite of my website. It'll be much more than just a developer portfolio — I'll have user accounts, and there'll be fun things that you can do with it. And because it's more than just a website, I'm using Remix, a new cool framework in the React ecosystem. I'm also working on updating my material on TestingJavaScript.com and a TypeScript course as well. 
So, whatever I'm working on, it ends up resulting in lots of opportunities for content.


Do you have some rituals that keep you focused and goal-oriented? 
I have a notepad where I keep all of my notes of what I'm going to do for the day so that when I'm checking things off, I'm not distracted notifications. I've tried apps for that, and that does not work well for me. 
I also am a firm believer in inbox zero. I have my work inbox and my personal inbox, and I keep them both at zero. And I kind of use that as a to-do list. 
And if I'm not feeling excited about working for some reason, I will often hop on my Onewheel, which is an electric skateboard that only has one giant wheel in the middle. It's just a total blast, and I'll hop on that with my backpack and a charger, and I'll go to a Starbucks or a park just to declutter my mind.
What things in the React universe are you excited about right now?
React version 18 is coming out soon. The experimental version is out there, and it's fun to play with. I'm just really thrilled that it's no longer a concurrent mode but concurrent features that you can opt into. Cool things like that will enable React server components in the future. 
But the biggest thing I'm excited about is Remix. That's huge. It eliminates a lot of problems that are solved well other tools, but when I'm using Remix, I don't have those problems, so I don't need those clusters.
You already said that teaching is an integral part of the learning process, and you stand your word since you're also a full-time educator. What inspired you to enter this field?
I have been a teacher for as long as I can remember. I grew up in a church where you talk in front of your peers from a very young age, and my mom was an elementary school teacher, so teaching has just always been a part of me. 
I really just enjoy sharing what I'm learning with others. As far as teaching technical topics, I gave my first workshop when I was still a student at Brigham Young University. With my fellow, we taught how to use AngularJS, and I got Firebase to sponsor pizza so they would show up, and that was pretty fun.
Then I started teaching on the side at egghead.io right after I'd graduated. That was when I first got a paycheck for teaching. And I realized that teaching could be quite lucrative and support my family and me as a full-time endeavor. So I did it — I quit my job. I'm a very risk-averse person, so I'd done teaching as a side hustle for four years just to verify that I could make this work.
When TestingJavaScript was released, and I got that paycheck, I realized that I didn't need my PayPal salary anymore. I could just focus my daytime on teaching and give my evenings back to my family, which was a nice trait.


Apart from that, how has teaching impacted your career? 
Earlier I mentioned that pretty much all of my jobs came because I was perceived as an expert. After the first job, where I was an intern and then converted into full-time, I never applied to another. I worked for four different companies, and they wouldn't have recruited me if they didn't know who I was and what I was doing. My content is how they knew who I was — I just made it easy for them to find me. Teaching made that impact. It made my career. 
We talked about React and Remix. Are there any other open-source projects that you'd recommend keeping an eye on or contributing to?
I have some myself. React Testing Library is probably the biggest one that people are familiar with. And if React isn't your jam, then other framework versions of the testing library. 
React Query is also really popular. If you're using Remix, you don't need it, but if you're not, I strongly advise using React Query cause it's a stellar, fantastic library, and Tanner Linsley, the creator, is a stellar and fantastic person. 
What pieces of your work are you most proud of? 
Probably the biggest thing I've ever done is EpicReact.Dev. It has helped tens of thousands of people get really good at React, improve their careers and make the world a better place with the skills that they develop. My whole mission is to make the world a better place through quality software, and I feel like I've done that best with Epic React. 
There are things that I've built at other companies that are still in use, and I'm proud of those cause they've stood the test of time, at least these last few years. But of everything, I think Epic React has made the biggest impact.
***
Follow Kent on Twitter and listen to his favorite Spotify playlist
Effective Communication for Engineers
TechLead Conference 2023TechLead Conference 2023
36 min
Effective Communication for Engineers
Your communication skills affect your career prospects, the value you bring to your company, and the likelihood of your promotion. This session helps you communicate better in a variety of professional situations, including meetings, email messages, pitches, and presentations.
Charlie Gerard's Career Advice: Be intentional about how you spend your time and effort
6 min
Charlie Gerard's Career Advice: Be intentional about how you spend your time and effort
Featured Article
Charlie Gerard
Jan Tomes
2 authors
When it comes to career, Charlie has one trick: to focus. But that doesn’t mean that you shouldn’t try different things — currently a senior front-end developer at Netlify, she is also a sought-after speaker, mentor, and a machine learning trailblazer of the JavaScript universe. "Experiment with things, but build expertise in a specific area," she advises.

What led you to software engineering?My background is in digital marketing, so I started my career as a project manager in advertising agencies. After a couple of years of doing that, I realized that I wasn't learning and growing as much as I wanted to. I was interested in learning more about building websites, so I quit my job and signed up for an intensive coding boot camp called General Assembly. I absolutely loved it and started my career in tech from there.
 What is the most impactful thing you ever did to boost your career?I think it might be public speaking. Going on stage to share knowledge about things I learned while building my side projects gave me the opportunity to meet a lot of people in the industry, learn a ton from watching other people's talks and, for lack of better words, build a personal brand.
 What would be your three tips for engineers to level up their career?Practice your communication skills. I can't stress enough how important it is to be able to explain things in a way anyone can understand, but also communicate in a way that's inclusive and creates an environment where team members feel safe and welcome to contribute ideas, ask questions, and give feedback. In addition, build some expertise in a specific area. I'm a huge fan of learning and experimenting with lots of technologies but as you grow in your career, there comes a time where you need to pick an area to focus on to build more profound knowledge. This could be in a specific language like JavaScript or Python or in a practice like accessibility or web performance. It doesn't mean you shouldn't keep in touch with anything else that's going on in the industry, but it means that you focus on an area you want to have more expertise in. If you could be the "go-to" person for something, what would you want it to be? 
 And lastly, be intentional about how you spend your time and effort. Saying yes to everything isn't always helpful if it doesn't serve your goals. No matter the job, there are always projects and tasks that will help you reach your goals and some that won't. If you can, try to focus on the tasks that will grow the skills you want to grow or help you get the next job you'd like to have.
 What are you working on right now?Recently I've taken a pretty big break from side projects, but the next one I'd like to work on is a prototype of a tool that would allow hands-free coding using gaze detection. 
 Do you have some rituals that keep you focused and goal-oriented?Usually, when I come up with a side project idea I'm really excited about, that excitement is enough to keep me motivated. That's why I tend to avoid spending time on things I'm not genuinely interested in. Otherwise, breaking down projects into smaller chunks allows me to fit them better in my schedule. I make sure to take enough breaks, so I maintain a certain level of energy and motivation to finish what I have in mind.
 You wrote a book called Practical Machine Learning in JavaScript. What got you so excited about the connection between JavaScript and ML?The release of TensorFlow.js opened up the world of ML to frontend devs, and this is what really got me excited. I had machine learning on my list of things I wanted to learn for a few years, but I didn't start looking into it before because I knew I'd have to learn another language as well, like Python, for example. As soon as I realized it was now available in JS, that removed a big barrier and made it a lot more approachable. Considering that you can use JavaScript to build lots of different applications, including augmented reality, virtual reality, and IoT, and combine them with machine learning as well as some fun web APIs felt super exciting to me.


Where do you see the fields going together in the future, near or far? I'd love to see more AI-powered web applications in the future, especially as machine learning models get smaller and more performant. However, it seems like the adoption of ML in JS is still rather low. Considering the amount of content we post online, there could be great opportunities to build tools that assist you in writing blog posts or that can automatically edit podcasts and videos. There are lots of tasks we do that feel cumbersome that could be made a bit easier with the help of machine learning.
 You are a frequent conference speaker. You have your own blog and even a newsletter. What made you start with content creation?I realized that I love learning new things because I love teaching. I think that if I kept what I know to myself, it would be pretty boring. If I'm excited about something, I want to share the knowledge I gained, and I'd like other people to feel the same excitement I feel. That's definitely what motivated me to start creating content.
 How has content affected your career?I don't track any metrics on my blog or likes and follows on Twitter, so I don't know what created different opportunities. Creating content to share something you built improves the chances of people stumbling upon it and learning more about you and what you like to do, but this is not something that's guaranteed. I think over time, I accumulated enough projects, blog posts, and conference talks that some conferences now invite me, so I don't always apply anymore. I sometimes get invited on podcasts and asked if I want to create video content and things like that. Having a backlog of content helps people better understand who you are and quickly decide if you're the right person for an opportunity.What pieces of your work are you most proud of?It is probably that I've managed to develop a mindset where I set myself hard challenges on my side project, and I'm not scared to fail and push the boundaries of what I think is possible. I don't prefer a particular project, it's more around the creative thinking I've developed over the years that I believe has become a big strength of mine.***Follow Charlie on Twitter

Workshops on related topic

How To Design A Sustainable Freelance/Contracting Career + Speedcoding Challenge
React Summit 2022React Summit 2022
75 min
How To Design A Sustainable Freelance/Contracting Career + Speedcoding Challenge
WorkshopFree
Shane Ketterman
Shane Ketterman
Ready to kickstart your freelance career or just getting started on your freelance journey? You’re in the right spot. Learn from the world’s largest fully distributed workforce in the world.
The independent talent movement is the future of work. If you’re considering leaving full-time employment for a career as a freelancer, now is the time to find your successful space in the independent talent workforce. More people are working freelance today than ever before, with the freelance marketplace now contributing $1.2 trillion to the US economy. Some of the most in-demand roles for freelancers right now are senior developers with professional experience in React, Python, Blockchain, QA, and Node.js.
This workshop will help you design a sustainable and profitable full-time (or part-time) freelancing/contracting career. We will give you tools, tips, best practices, and help you avoid common pitfalls.
At the end of the workshop there will be a Q&A session with a Freelance Developer who can answer your questions and provide insights and tips into their own success.
During the Workshop break, we will be running a speed-coding challenge! At the end of the workshop, we will award a prize for the winner and display the leaderboard.
We will have you login to our portal and complete the challenge as fast as you can to earn points. Points are assigned based on difficulty and the speed at which you solve the tasks. In case you complete all tasks, you get extra points for the remaining time. You’ll see your score, ranking, and the leaderboard once you complete the challenge.
We will be giving away three Amazon Gift Cards ($200, $100, $75) for the top three winners.
Designing A Sustainable Freelance Career
React Advanced Conference 2021React Advanced Conference 2021
145 min
Designing A Sustainable Freelance Career
WorkshopFree
Alexander Weekes
Rodrigo Donini
2 authors
Would you like to pursue your passions and have more control over your career? Would you like schedule and location flexibility and project variety? Would you like the stability of working full-time and getting paid consistently? Thousands of companies have embraced remote work and realize that they have access to a global talent pool. This is advantageous for anyone who has considered or is currently considering freelance work.>> Submit your interest on becoming a freelance engineer with Toptal and get a call with Talent Acquisition specialist <<

Freelancing is no longer an unstable career choice.

This workshop will help you design a sustainable and profitable full-time (or part-time) freelancing career. We will give you tools, tips, best practices, and help you avoid common pitfalls.
Table of contents

Module 1: Dispelling common myths about freelancing
Module 2: What does freelancing look like in 2021 and beyond
Module 3: Freelancing choices and what to look for (and what to avoid)
Module 4: Benefits of freelancing from a freelancer + case study
BREAK
Module 6: How to get started freelancing (experience, resume, preparation)
Module 7: Common paths to full-time freelancing
Module 8: Essentials: setting your rate and getting work
Module 9: Next steps: networking with peers, upskilling, changing the world
Module 10: Freelancer AMA
Landing Your Next Developer Job
React Summit Remote Edition 2021React Summit Remote Edition 2021
121 min
Landing Your Next Developer Job
WorkshopFree
Sadek Drobi
Nouha Chhih
Francois Bohyn
3 authors
Renaud Bressant (Head of Product), Nathanael Lamellière (Head of Customer Success and Solution Engineer), Nouha Chhih (Developer Experience Manager) will be looking at the different developer jobs that you can accounter when looking for your next developer role. We'll be explaining the specifics of each role, to help you identify which one could be your next move. We'll also be sharing tips to help you navigate the recruitment process, based on the different roles we interviewed for as recruiters, but also as candidates. This will be more of an Ask Us Anything session, so don't hesitate to share your thoughts and questions during the session.