2 puntos por GN⁺ 2024-11-17 | 1 comentarios | Compartir por WhatsApp
  • Algunas pruebas de programación irreales en entrevistas técnicas crean situaciones de presión distintas al trabajo real y no miden adecuadamente la capacidad práctica de un desarrollador
  • Las tareas individuales de alta presión no reflejan un entorno laboral con colaboración y apoyo, y suelen derivar en depurar una base de código heredada sin documentación ni ayuda del equipo
  • Incluso una “prueba de 4 horas”, como la describen las empresas, puede convertirse en 8 a 10 horas o más si se suma investigar la empresa, revisar los requisitos del puesto y pulir la entrega
  • Las pruebas con stacks tecnológicos no relacionados con el rol se justifican como evaluación de adaptabilidad, pero pedirle a un desarrollador Ruby que depure PHP puede no alinearse con la idoneidad real para el puesto
  • La contratación debería enfocarse en habilidades relevantes, resolución de problemas, colaboración y potencial de crecimiento, en lugar de pruebas arbitrarias de alta presión; las tareas excesivas pueden agotar y alejar a buenos candidatos

Pruebas de entrevista que no coinciden con el trabajo real

  • Algunas entrevistas técnicas les exigen a los desarrolladores completar en pocas horas tareas como depurar PHP heredado o crear una miniapp
  • Estas tareas individuales no se parecen a la forma en que se trabaja en la realidad
    • En el trabajo normalmente se colabora con un equipo y se puede recibir el apoyo necesario
    • Tener que depurar por tu cuenta y a toda velocidad una base de código antigua, sin documentación ni ayuda del equipo, no encaja con un entorno de desarrollo común
  • Las empresas lo ven como una evaluación de la “capacidad de resolver problemas”, pero si la prueba no está conectada con las exigencias reales del rol, es difícil medir la idoneidad práctica del candidato

El costo oculto de tiempo y la carga para el candidato

  • El tiempo recomendado para una prueba de programación no suele reflejar bien el tiempo que realmente termina invirtiendo el candidato
    • Antes de empezar, hay que investigar la empresa y revisar los requisitos del puesto
    • También hace falta tiempo para pulir el proyecto y dejar la entrega en buen estado
    • Una prueba “de 4 horas” puede extenderse a 8, 10 o incluso más
  • Para desarrolladores que compaginan trabajo y vida personal, esto puede sentirse como hacer trabajo no remunerado por un empleo que todavía no han conseguido

Cuando la evaluación de adaptabilidad falla

  • A veces se justifican pruebas con stacks no relacionados como una forma de evaluar la “adaptabilidad”
    • Pedirle a un desarrollador Ruby que depure PHP, más allá de la importancia de la adaptabilidad, puede ser un criterio inadecuado para juzgar el valor del candidato
    • La capacidad de resolver rápido tareas ambiguas e irrelevantes no basta para determinar si alguien encaja en el rol real
  • Algunas pruebas pueden sentirse más como una forma de presumir el estándar “élite” de la empresa que como una evaluación del ajuste del candidato
    • Si en todos los procesos de contratación se levantan barreras tipo “top 1%”, incluso candidatos experimentados que podrían hacer bien el trabajo pueden abandonar por lo artificial y estresante de la situación

Qué deberían evaluar las pruebas de contratación

  • El proceso de contratación debería diseñarse alrededor de las habilidades concretas que requiere el rol
    • Hay que evitar pruebas estilo bootcamp de programación que no tienen relación con las exigencias reales del trabajo
    • Debería centrarse en resolución de problemas, colaboración y potencial de crecimiento en áreas relevantes
    • La adaptabilidad no debería medirse por qué tan rápido alguien resuelve una tarea arbitraria, sino por su capacidad de aprender a largo plazo

1 comentarios

 
GN⁺ 2024-11-17
Opiniones de Hacker News
  • ¿Cuándo fue la última vez que tuviste que depurar una base de código vieja, sin documentación ni ayuda del equipo? Siempre fue así. Era de 300.000 a 400.000 líneas de C++, y “legacy” significaba que no había ninguna prueba, casi no había documentación, y como único desarrollador en una empresa pequeña tenía que seguir dando servicio a decenas de miles de usuarios mientras corregía bugs y agregaba funciones.
    Como ejemplo reciente, había un parche de una función clave que llevaba más de un año pendiente; el autor original ya no estaba, y había que reescribir el código desde cero o revivir el parche para adaptarlo a master.
    La capacidad de meterse en un proyecto y llevar a la gente hacia el objetivo es claramente una habilidad necesaria para un desarrollador senior, y estoy de acuerdo con la conclusión de que hay que evaluar la capacidad de resolver problemas. Pero el contenido de una entrevista técnica debería variar según el rol: no hace falta pedirle a un desarrollador web junior que resuelva algoritmos de grafos en una pizarra, pero un desarrollador senior o arquitecto de un producto de red social sí debería entenderlos en profundidad.

    • Coincido con lo de “siempre fue así”. Hoy mismo depuré una parte central del sistema que, a diferencia del resto, está hecha en Python, casi no se actualiza desde 2020, no tiene comentarios ni documentación, y el sistema de despliegue está tan roto que me dan ganas de llorar cada vez que pienso en él.
      La semana pasada depuré código Go de 2020, también sin comentarios ni documentación; era otra parte central del sistema y parecía escrito por gente demente. Es doloroso.
    • También tengo que depurar código que escribió algún idiota hace 6 meses, o sea yo, y no recuerdo en absoluto cómo se suponía que debía depurarlo, así que en la práctica es como si lo hubiera escrito otra persona.
    • Totalmente cierto. Los ingenieros que creen que este problema no existe son los que ven las dependencias y las capas inferiores del stack solo como cajas negras rígidas que no se pueden tocar. Deberían verlas como algo en lo que, si hace falta, uno puede entrar para arreglarlo o incluso agregarle funcionalidad.
      Creo que la disposición a bajar de nivel para resolver el problema en la capa correcta es una de las grandes habilidades blandas que distinguen a un ingeniero senior. En vez de esquivar un bug de una capa inferior o una función faltante con una corrección posterior en tu propio código, si lo arreglas en la capa correcta, todo el sistema se vuelve más robusto ante cambios arriba y abajo del stack y ante casos de uso futuros inesperados.
      Por el contrario, si no se adopta este enfoque, cuando los ingenieros senior se van o son reemplazados por juniors, la base de código empieza a pudrirse. Por ejemplo, si para cada caso borde de parsing de entrada agregas otra expresión regular de validación ingenua delante de un parser aterrador y opaco, en vez de corregir la gramática del parser en sí, la base de código está evolucionando hacia una bola de lodo.
      Claro que, si lo arreglas en la capa correcta, muchas veces la empresa tiene que mantener una pequeña rama privada de hotfix de largo plazo del software del ecosistema que usa en su stack. El upstream normalmente no ve ese problema como un problema y no acepta el parche, así que hay que conservarlo por cuenta propia.
      Dicho en broma, si uno pudiera autenticar el perfil de GitHub y contar cuántas veces alguien creó o mantuvo estas ramas privadas de hotfix de largo plazo, quizá se podría medir la seniority de un ingeniero mucho más fácilmente que con una prueba de programación.
    • La capacidad de meterse en una base de código desconocida, y a veces en una biblioteca de la que dependes, investigar rápido, depurar y encontrar la causa raíz es, por experiencia, muy valiosa.
      No ayuda actuar como si no sirviera en el mundo real. La realidad es desordenada, la documentación muchas veces no existe o no es confiable, y la persona o el equipo que escribió el código original puede que ya no esté.
    • Si una sola persona desarrolladora en una empresa pequeña está dando servicio a decenas de miles de usuarios, me parece que podrían contratar a más desarrolladores. Es una lástima: deberían poder invertir presupuesto en pruebas o en mejorar la experiencia de desarrollo, y trabajar con menos estrés.
  • Tengo una pequeña anécdota. La pareja de un amigo renunció a principios de este año y luego se preparó para entrevistas en distintas empresas de Big Tech durante 4 a 6 semanas por cada una. Meta 4 a 6 semanas, Stripe 4 a 6 semanas, y así; entre medio también hizo entrevistas al azar para practicar y desarrollar memoria muscular, investigó los problemas que podrían aparecer en cada empresa y resolvía LeetCode varias horas al día.
    Al final le fue bien y aceptó una oferta L6/staff en MAANG. Pero hablando esta semana, dijo que todavía ni siquiera empezó su nuevo rol y ya olvidó la mayoría de los detalles que había practicado. Dijo que la preparación de diseño de sistemas fue lo más difícil porque no tenía experiencia en diseño de sistemas, pero ahora es staff eng en MAANG. En la vida real, habiendo hecho un proyecto pequeño juntos, es una persona muy buena, pero no era una ingeniera excepcionalmente brillante.
    Es realmente raro, y parece explicar bastante los ciclos de auge y caída en la contratación. Si ves videos de preparación para entrevistas de diseño de sistemas, parecen casi guiones. Entras a la entrevista y solo tienes que seguir el guion; no parece importar si realmente diseñaste sistemas similares o más complejos. El objetivo de la entrevista de diseño de sistemas parece ser, al final, “¿conoces el guion?”.
    Si ves estos dos videos seguidos a 2x, sorprende lo guionizado que se ve todo: https://www.youtube.com/watch?v=4_qu1F9BXow, https://www.youtube.com/watch?v=_K-eupuDVEc

    • Cuando antes me tocó contratar, diseñaba problemas en los que pudiera acompañar al candidato y observar qué descubría en el momento y cómo dejaba ver cosas que sabía sin darse cuenta. Los problemas de pizarra que aprendí eran eso, no el estilo LeetCode de ahora.
      Mis dos padres estuvieron en la industria tecnológica de Santa Cruz en los años 80 y 90, y en ese entonces, como el pool de talento no era grande, era una herramienta inclusiva para encontrar gente a la que se pudiera convertir en desarrolladora. La industria actual adoptó esa práctica, pero la volvió excluyente, justo lo contrario.
      Una de las personas que contraté era física, no conocía nada de la jerga y se asustó muchísimo la primera vez que vio un problema de pizarra. Cuando la llevé hasta un punto en el que se sintiera cómoda, empezó a hablar de herramientas que había creado para ayudar en su trabajo de física, y se sorprendió cuando le dije que esas herramientas que había hecho sin conocimientos de desarrollo eran software. No solo era software real, sino que era muy impresionante, y el problema de pizarra fue una herramienta para revelar potencial.
      Entiendo que las grandes empresas quieran widgets que puedan insertar directamente en lugar de personas, pero da risa que usen algo que fue creado con el objetivo exactamente opuesto. Incluso pienso que por suerte ya soy lo bastante viejo como para no tener esperanzas de entrar a una empresa cool que haga este tipo de desafíos de código.
    • Si hablas con reclutadores de estas empresas, este método fue diseñado a propósito para ser relativamente meritocrático.
      La lógica es que, sin importar a qué universidad fuiste, qué clases tomaste o qué ventajas o desventajas tuviste, si tienes las cualidades necesarias para el rol, es algo que puedes aprender en unos meses. Como la técnica está muy estandarizada, el proceso también se vuelve bastante objetivo.
      No esperan que uses esa técnica específica en el trabajo real. En cambio, demuestras que puedes aprender ese tipo de técnica y rendir a alto nivel en una situación de entrevista con mucho estrés. La lógica es que eso es una buena señal de que podrás aprender las técnicas necesarias para el proyecto al que te asignen después y rendir bajo una gran presión de fechas límite.
      No estoy defendiendo el sistema, pero sí hay una lógica clara detrás.
    • Me pregunto si trabajaste con esa persona después de que pasó por ese proceso de entrenamiento. Practicar problemas de código de estructuras de datos y algoritmos y estudiar diseño de sistemas puede cambiar a un ingeniero. Puede que haya mejorado mucho más de lo que piensas.
      Aunque diga que lo olvidó, si consiguió ese puesto probablemente podía resolver problemas medianos de LeetCode. Es difícil creer que lo haya olvidado todo, y es probable que todavía pueda resolver problemas fáciles que la mayoría de la gente no puede sacar en el momento. También debería seguir conociendo la complejidad de tareas esenciales de backend como búsqueda, ordenamiento, arreglos y búsquedas con hash, recorridos de árboles y grafos.
    • Solo tú sabes que diseñaste sistemas más complejos. El entrevistador no tiene forma de saber si eso es cierto o si eres un actor siguiendo un guion de actuación que dice “he diseñado sistemas complejos”.
      Y puede que el talento actoral sea más común en la población general que el talento para programar.
    • Entonces suena como si el sistema hubiera funcionado exactamente como estaba previsto. Una persona que parece inteligente consiguió un buen trabajo; no sé cuál es exactamente el problema de esta historia.
  • Hace poco dirigí el proceso de entrevistas para un puesto de ingeniería relativamente sénior en una startup pequeña. Creo que a distintas personas les funcionan mejor distintos formatos de entrevista, así que les di opciones a todos:

    1. Una prueba para hacer en casa, pensada para unas 4 horas, pero sin límite real de tiempo. No era un problema de algoritmos, sino una versión reducida de un proyecto real que yo había hecho el mes pasado.
    2. Un ejercicio de pairing en vivo durante 2 horas. Era una variante de la opción 1, pero más bien del tipo “veamos hasta dónde llegamos en 2 horas”.
    3. Enviar una muestra de código de trabajos anteriores. Había visto mucho enojo contra las pruebas para hacer en casa, así que pensé que las tres opciones se repartirían de forma pareja; pero, para mi sorpresa, alrededor del 90–95% de los candidatos eligió la prueba para hacer en casa. A mí también me parecería el formato preferible si fuera candidato, así que fue un dato interesante, y me sorprendió mucho que la mayoría lo prefiriera.
    • Yo prefiero un poco más las pruebas para hacer en casa, principalmente porque son menos caóticas. El problema es que no hay garantía de que la otra parte vaya a dedicarles tiempo. En una entrevista presencial, la empresa también incurre en un costo considerable, así que puede asumirse que es menos probable que mi tiempo se desperdicie. La asimetría en el proceso de búsqueda de empleo ya es grande, y las pruebas para hacer en casa la aceleran aún más. Un amigo no técnico todavía me mira mal porque una vez no terminé una prueba. El requisito principal era claramente trivial, pero las instrucciones eran lo bastante vagas como para quemar horas tratando de decidir si estaba lo suficientemente bien para enviarla. Además, esperaban un conjunto de tecnologías bastante estrecho que, aunque no era difícil, no tenía ganas de aprender solo por la oportunidad de quizá ayudar a una empresa que decía “no encontrar talento técnico”.
    • Me da curiosidad si les preguntaste por qué eligieron la prueba para hacer en casa. Yo creo que preferiría las opciones 1 y 2 antes que la 3. Si el entrevistador entiende el problema que estoy resolviendo, puede evaluar mejor mi enfoque. Si lo hago en casa y lo envío después, el entrevistador puede comparar mi solución con la suya o con otras, y así entender mejor mi estilo de programación usando la misma tarea como referencia. Si trabajamos juntos en pairing, puede ver mi proceso de pensamiento, y yo puedo explicar mejor por qué elegí ciertos modismos. El código pasado casi no tiene contexto. Es simplemente código escrito para otro proyecto. En una etapa inicial, puede servir para enviarlo junto con el CV y comprobar que realmente puedo escribir código, pero en etapas posteriores solo sería impresionante si hay una app funcionando y puedo guiar al entrevistador por el código de una funcionalidad específica. Pero ¿cuánta gente tiene simplemente software funcionando a mano? Normalmente uno tiene código que más o menos corre gracias a algunos trucos. Yo prefiero la opción 1 antes que la 2, porque reduce la probabilidad de cometer errores. En vez de arriesgarme a arruinarla durante 2 horas en vivo por la presión y la ley de Murphy, obviamente prefiero dedicar 2 horas más en casa y tener libertad para investigar lo que no sepa.
    • Soy un ingeniero introvertido de habilidad promedio, pero después de más de 10 años resolviendo problemas, elegiría la opción 2. En persona puedo explicar mis ideas con mucha más facilidad, hay mucho menos trabajo que hacer y creo que tengo más formas de impresionar al entrevistador. También he estado del lado de evaluar pruebas para hacer en casa, y sé lo difícil que es impresionar profundamente a alguien con eso.
    • Pensé que “3. Enviar una muestra de código” iba a ganar por goleada. Parece obvio, porque es trabajo ya hecho; me da curiosidad si alguien realmente eligió eso.
    • La idea de dar opciones es interesante, pero desde el punto de vista del responsable de contratación complica más el problema. ¿Cómo se pueden comparar de forma justa los resultados de opciones distintas? Incluso con la misma entrevista, creo que comparar candidatos de manera justa ya es bastante difícil. La última vez que hice una entrevista de programación real, podía elegir cualquier lenguaje de programación y también elegir 1 de 3 problemas para resolver. Me gustó bastante y recibí una oferta. En una entrevista con límite de tiempo, poder elegir Python en lugar de C++ se sintió casi como hacer trampa.
  • Cuantas más quejas veo en línea sobre las entrevistas de programación, más me convenzo de que las entrevistas de programación son, por lejos, la mejor forma de filtrar candidatos para puestos de desarrollo de software. En la industria sobran los que hablan bonito, los impostores y los que agendan reuniones; faltan personas que se arremanguen, se metan al código y realmente terminen el trabajo. Este problema empeora cuanto más alto es el nivel. Pueden quejarse todo lo que quieran, pero un puesto cómodo en FAANG de 500 mil dólares al año no es algo que se dé por sentado. Si no tienes ganas de repasar programación básica y escribir unos cuantos bucles for, la empresa simplemente pasará a alguien que sí lo haga.

    • Yo paso bien este tipo de entrevistas, estoy en FAANG y este mes me voy a mudar a otra FAANG. Aun así, estas entrevistas son inútiles y dan una señal falsa sobre la capacidad de resolver problemas y aprender. Si la entrevista realmente evaluara la capacidad de arremangarse y meterse al código, no entiendo por qué, al entrar como nuevo, tuve que explicar tantas prácticas de ingeniería de software y depuración a personas que llevaban mucho más tiempo ahí. Si has trabajado de verdad en una empresa grande, sabes que el 90% del trabajo real lo hace el 5% o menos de la gente. Si las entrevistas funcionaran bien, esa proporción debería ser mucho mejor.
    • No me gustan los desafíos de programación, pero no porque sean difíciles. Es porque favorecen a quienes tienen tiempo para hacer desafíos de programación. Aun así, es cierto que en la industria hay muchísimos farsantes, y quizá las pruebas de programación sean, por ahora, la mejor forma de filtrarlos.
    • Quizá antes haya sido así, pero ahora existe toda una industria dedicada a ayudar a explotar este sistema. Está Cracking the Coding Interview, Elements of Programming Interviews in Java/Python/otros lenguajes, LeetCode y sitios con suscripciones premium pagas, hasta bootcamps de entrevistas simuladas. Ya se parece más a jugar con el sistema que a demostrar habilidad.
    • Dices que “las entrevistas de programación son la mejor forma absoluta de filtrar candidatos para desarrollo de software” y, al mismo tiempo, que “la industria está llena de gente que no sabe trabajar”. Es sorprendente que no haya ninguna disonancia cognitiva entre la premisa de que las entrevistas de programación son el método estándar de contratación y la realidad de que los resultados son tan malos.
    • Incluso si aceptamos que LeetCode en general es bueno, ¿qué pasa con una variante cada vez más dominante: los ingenieros de ML/AI? Si el problema fuera algo como la tokenización de LLM, ¿cómo se podría prohibir el uso de LLM en problemas tipo “ML-LeetCode”? Si el candidato es experto programando con Cursor y Claude, resuelve el problema en 10 minutos con 3 prompts y corrigiendo 2 errores fáciles de detectar, y además tiene artículos de nivel NeurIPS y código open source, ¿filtré a un impostor fraudulento o descarté a un candidato de primer nivel? No creo que los problemas estilo LeetCode tengan sentido para alguien que trabaja con LLM. Nos guste o no, cada vez una mayor parte de los futuros puestos cómodos en FAANG+ de 500 mil dólares al año estará relacionada con LLM.
  • Hacer que un desarrollador Ruby depure PHP como prueba de flexibilidad suena como una prueba razonable. Un buen desarrollador, especialmente un desarrollador sénior, debería poder hacer ese tipo de cosas. Encerrarse únicamente en la categoría de “desarrollador Ruby” es una trampa profesional.

    • Y además es una trampa bastante lucrativa.
    • Dependiendo de quién lo lleve adelante y cómo, puede ser un ejercicio interesante o uno terrible. Pero si se presenta como un rol de Ruby y el candidato tiene suficientes opciones, puede hacer que se vaya pensando que la descripción del puesto era mentira.
    • Estoy de acuerdo. En el trabajo real esto pasa con suficiente frecuencia como para que no sea un ejemplo completamente inventado. Normalmente en toda la empresa solo hay dos o tres personas que pueden y quieren hacerlo.
      A veces hay que depurar una DSL antigua y específica de un proveedor, o código en el que el framework y los estándares son tan viejos que prácticamente se volvió otro lenguaje.
      También toca agregar soporte para funciones backporteadas o parchear agujeros de seguridad en clientes antiguos y stacks legacy. En una empresa grande, incluso nos tocó hacernos responsables del código en escrow de un socio mucho más pequeño.
      Configurar el entorno para poder depurar bien suele ser más trabajo que el arreglo real. Aun así, es una buena prueba para perfiles sénior o superiores.
    • Una vez pasé una prueba de JavaScript y me contrataron sin haber escrito ni una sola línea de JavaScript. El ejercicio era casi conversacional.
      El entrevistador dijo: “Invierta este arreglo”, y yo respondí: “En Python usaría array.reverse() o reversed(array), y JS debe tener una de esas opciones, así que probablemente sea el método .reverse”. El entrevistador dijo: “Buena suposición”.
      Sinceramente me pareció divertido, salí sintiendo que había aprendido algunas cosas, y la otra parte pudo ver cómo razono ante un problema nuevo.
    • Priorizar la carrera por encima de la salud mental también es una trampa de vida.
  • He depurado muchas veces bases de código antiguas sin documentación ni ayuda del equipo. Existen de verdad sistemas donde ya no queda nadie de quienes los crearon y la documentación no existe o no se puede encontrar. Así que este ejemplo no es muy bueno. La capacidad de depurar un programa, seguir el flujo de una solicitud y ver qué está pasando es una buena habilidad.
    Pero donde este ejemplo sí es realmente malo es en que encasilla a los desarrolladores en una tecnología específica. Si tienes una aplicación legacy en PHP, terminas filtrando a desarrolladores Java, Python, Ruby o Go que tienen esa capacidad de depuración, pero que serían más lentos porque no saben PHP. Aunque quizá, tras tocar PHP directamente unos meses, podrían ser desarrolladores más fuertes.
    Estoy de acuerdo en que una “tarea de 4 horas” puede convertirse fácilmente en 8, 10 o más horas para producir un buen resultado. El tiempo indicado se puede manipular fácilmente, así que alguien con más tiempo disponible puede parecer mejor candidato.

    • Cuando entrevisté en Stripe, tenían preparados problemas de “depura esto” en varios lenguajes. Creo que eran Ruby, Java, Python, JavaScript, Go y quizá uno o dos más. Era bastante bueno, pero también parecía muy intensivo en trabajo.
  • ¿Cuándo fue la última vez que depuré una base de código antigua sin documentación ni ayuda del equipo? Todos los días de esta semana.
    Si hablamos de documentación, el código se actualizó por última vez en junio y la documentación se actualizó por última vez en enero de 2022.
    Si hablamos del equipo, la mitad que no fue despedida hace dos años ya se fue a lugares mejores. Claro que hay un equipo dueño de este proyecto, pero también tiene otros tres proyectos, y en el último año sus aportes aquí fueron unas cuantas líneas, de las cuales 11 fueron actualizaciones de dependencias.

    • Hacer este tipo de cosas en el trabajo está bien, pero hacerlo en una entrevista me parece un problema. No todo el mundo se siente cómodo frente a un entorno desconocido y personas desconocidas. Por favor, denme una prueba tipo tarea, y no se pongan a conversar entre ustedes mientras estoy parado frente al pizarrón.
  • Decir “es como hacer que un desarrollador Ruby depure PHP” y “si el puesto requiere una tecnología específica, evalúa esa tecnología” suena a alguien que reprobó un coding challenge.
    Hablando en serio, las empresas rara vez adoptan prácticas de contratación solo por diversión. Por lo general, es el mejor método que esa inteligencia colectiva pudo idear. Pedir que lo eliminen sin intentar entender qué problema están tratando de resolver y sin proponer alternativas no es productivo.
    Creo que en desarrollo de software reinventamos la rueda con demasiada frecuencia, en vez de tomar prestadas prácticas de otras profesiones. Veamos qué procesos de contratación atraviesan los ingenieros civiles para ganar la mitad que los desarrolladores de software e integremos eso a nuestras prácticas. Entonces todos seremos soldados felices.

    • Es poco probable que las empresas no creen prácticas de contratación por diversión y que sean lo mejor que produjo su inteligencia colectiva. Normalmente, la persona de mayor seniority trae algo que leyó o vivió en el pasado.
      Me parece muy poco probable que hayan reflexionado sobre qué intentan lograr realmente. Simplemente lo hicieron porque otros lo hacen, y creen que en algún lugar alguien diseñó el proceso con una intención.
      La contratación en tecnología está tan perdida que da la impresión de haberse asentado, en el mejor de los casos, en un máximo local.
    • Aun así, quizá sí se pueda crear mejor software.
  • Tuve una experiencia muy mala en una empresa que no hacía ninguna prueba de código. Solo hubo 2 o 3 entrevistas.
    El problema apareció cuando empecé a trabajar con el equipo de ingeniería de datos. La mayor parte del stack se basaba en Hadoop, Kubernetes, Ruby, Python y varias tecnologías, y requería una comprensión básica de computación en la nube.
    Pero la experiencia laboral y los antecedentes de cada persona eran tan disparejos que, en lugar de hacer el trabajo para el que me contrataron, pasaba mucho tiempo cubriendo huecos de otros. Algunos compañeros no podían hacer tareas básicas como empaquetar una CLI de Python con Docker o revisar jobs de Hadoop, así que terminé haciendo mucho trabajo de pegamento para compensarlo.
    Al final me fui. No porque pensara que yo era especial, sino porque me cansé de pasar el 80% de mi tiempo apoyando a personas contratadas en el mismo nivel o en niveles más altos. Admito que las prácticas de contratación de esa empresa eran muy malas, pero hace falta alguna forma de evaluación técnica básica.

    • Me pregunto si “no podían hacer tareas básicas” significa que eran completamente incapaces de ejecutar el trabajo asignado, o si se trababan en tareas simples pero en general eran independientes y competentes.
      Otra pregunta importante es si había que explicarles lo mismo a las mismas personas una y otra vez. No saber algo es aceptable, pero no querer aprender es difícil de aceptar.
  • Lo interesante de las pruebas tipo tarea para llevar a casa es que, aunque te digan “dedica solo X horas”, existe un riesgo moral que te incentiva a dedicarles más tiempo. Si la empresa pregunta, también aparece el incentivo de mentir sobre el tiempo que realmente usaste
    Varias veces entregué tareas en las que enfaticé que me ajusté al tiempo recomendado y resolví el problema de forma adecuada, pero en la entrevista de seguimiento me regañaron con un “¿por qué no implementaste X?”
    En ese sentido, las pruebas tipo tarea demasiado abiertas son malas tareas. Porque favorecen a quienes tienen más tiempo libre para hacerlas con más detalle. Saludos a las pruebas tipo tarea de ciencia de datos que piden una presentación en PowerPoint como entregable final

    • Exactamente eso. Y luego alguien sentado en la empresa, que nunca me ha conocido ni ha hablado conmigo, se queja de que hay demasiados comentarios, de que no usé el formateador de código que a ellos les gusta o de que no hice verificación de tipos opcional. Si quieren una guía adecuada de configuración del proyecto, tienen que pagar por eso