¿Cómo elegir, motivar y desarrollar un programador novato?

Imagine que necesita contratar un nuevo programador, sin embargo, está 100% seguro de que no hay desarrolladores experimentados (lo que necesita) en el mercado local y necesita trabajar con novatos. Hace un par de meses contratamos a dicho desarrollador con la cláusula de que aprenderá y aprenderá a satisfacer las necesidades de la empresa; sin embargo, eso no sucedió y su progreso es decepcionante. De todos modos, se va en dos semanas y necesitaremos uno nuevo. Es importante mencionar que tenemos una política para un período de prueba de 6 meses que no puedo cambiar.

Mi idea era contratar no a 1 programador por seis meses, sino a 2 programadores por 3 meses y hacerlo como un juego: establecer metas, hacer una competencia, establecer una prueba final y elegir el mejor que dejará el otro (en el En el mejor de los casos, tendremos 2 buenos programadores :) -- básicamente, el problema es la falta de programadores de calidad que podemos encontrar en el mercado local y la subcontratación no es una opción en absoluto, sufrí esto antes).

¿Tienes alguna idea de cómo motivar al futuro programador para que se convierta en el más grande de los universos dentro de 3 a 6 meses? Necesito resultados rápidos en poco tiempo o el Director dirá "Este no es lo suficientemente bueno, necesitamos otro". y todo volverá a empezar (lo cual es un dolor).

"hacer una competencia" - ¿Qué sucede si el mejor programador es la persona menos competitiva? Advertiría contra este enfoque, ya que podría privar de derechos a personas que podrían ser (en todos los demás aspectos) candidatos muy fuertes.
Esta pregunta suena más adecuada para Programmers.SE
Creo que este enlace debería ayudar un poco: randsinrepose.com/archives/2011/04/19/…
@Marcie: Cierto, pero también es una cuestión de gestión del equipo, que es completamente el tema aquí.
Estás jugando con fuego. Pueden tratar de eclipsarse unos a otros, o socavar a otros, o peor aún, uno socavará al otro, y terminarás quedándote con el XXX traicionero antes de que averigües qué sucedió.
@Marcie - Recuerde, tiene votos cercanos disponibles con su nivel de reputación actual. Sugiero que las personas los usen en preguntas que creen que deberían cerrarse o migrarse.
He planteado la siguiente pregunta aquí en meta. Me gustaría obtener opiniones de los ávidos usuarios de este sitio con respecto a este tipo de preguntas: meta.pm.stackexchange.com/questions/222/…

Respuestas (8)

La programación no es realmente una disciplina en la que la competencia pura funcione bien. Se puede lograr mucho más tratando de fomentar la cooperación que la competencia, por lo que no creo que contratar a un par de personas en lugar de una haga el trabajo aquí.

Si quieres desarrollar un programador novato, necesitas:

  • Actitud correcta. En términos generales , la gente no quiere aprender , lo cual es triste, pero también significa que aquellos que lo hacen realmente brillan. Y la actitud de aprendizaje no tiene nada que ver con las habilidades actuales, es solo actitud. Eso es algo que debe buscar durante las entrevistas.

  • Alguien de quien aprender. Puede ser un colega del escritorio de al lado o un mentor dentro de la organización o un gerente o prácticamente cualquier persona que se adapte al puesto de la manera que desee. Idealmente, déjelos trabajar juntos, pero lo mínimo que debe hacer es conseguir que un "maestro" tenga suficiente tiempo para verificar el trabajo entregado por el novato y compartir algunas ideas sobre posibles mejoras con ellos regularmente.

  • Tiempo de aprender. El fracaso frecuente en términos de autodesarrollo es esperar que las personas crezcan y no darles tiempo para aprender. No podemos esperar que las personas se conviertan en programadores de estrellas de rock cuando prácticamente no tienen oportunidad de aprender nada, ya que están enterrados bajo un montón de trabajo urgente.

  • Fuentes de aprendizaje. Lo más probable es que este sea trivial, ya que hay muchas cosas geniales en Internet sobre casi cualquier tecnología popular. Sin embargo, si piensa en una tecnología muy limitada con una base de usuarios limitada, es posible que deba respaldarla con otros medios de capacitación.

  • Expectativas claras. Tampoco debe olvidarse de establecer expectativas claras. Mientras no me digan que mi objetivo principal es mostrar una curva de aprendizaje decente, podría concentrarme en otra cosa. Si no aprendo, probablemente quieras deshacerte de mí de todos modos, pero esa es otra historia. Las expectativas deben establecerse muy claramente.

En resumen: encuentra a la persona con la actitud adecuada y bríndale ayuda en su esfuerzo de aprendizaje.

"actitud correcta": esa debe ser la clave que me perdí hasta ahora gracias Pawel
@pawel: ¿supongo que no has escrito ningún libro sobre el tema? Me encantaría tener una fuente "publicada oficialmente" para señalar a la gente. Estos puntos no podrían ser más precisos, ni podrían pasarse por alto en el mundo de los negocios.
@Shauna: diría que es solo sentido común, pero sé cuán escasos pueden ser los recursos en el mundo de los negocios. Por cierto: si alguien necesita tener una fuente "publicada oficialmente" para entender esas cosas, creo que hay pocas esperanzas para ellos de todos modos :)
@pawel - Jaja, de hecho, en ambas cuentas. De las pocas respuestas que he visto de usted en mi corto tiempo en este grupo de SE, sigo diciendo que debería escribir un libro. :)
@pawel: "En general, la gente no quiere aprender": No estoy de acuerdo con eso, especialmente para los principiantes. La mayoría de ellos son conscientes del hecho de que no saben mucho y están ansiosos por aprender más. Pero aún es posible que no lo hagan, por la razón que enumeras después de esa oración: no hay tiempo, nadie de quien aprender, etc. Creo que muchas personas dejan que otras personas establezcan sus prioridades y terminan sin aprender, pero no porque no quieran.
@Traroth, a menos que el ego se interponga en el camino. Demasiadas veces he visto a principiantes pensar que lo tienen todo resuelto. Esto también es parte de la naturaleza humana (ver cómo reaccionan los adolescentes ante los padres o aplicar el dicho común "sé lo suficiente como para ser peligroso" a cualquier otra cosa), pero no es aceptable.

Lo primero es lo primero: necesitas contratar a alguien valioso. Esto significa alguien que es inteligente y hace las cosas. No hay mejor referencia que este artículo: http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html

Después de eso, debe invertir en su aprendizaje. Si el novato está solo después de que lo contrataste, su motivación no durará mucho. Capacítelo, asígnele tareas motivadoras, y no solo trabajo basura, y las cosas deberían funcionar bien.

Creo que te estás preparando para fallar, poniendo mucha presión sobre el pobre chico (o chica). Si no hay buenas personas localmente, esto podría deberse a una de varias razones:

  • Realmente no hay personas adecuadas... sin conocer su entorno, no puedo comentar sobre la probabilidad de esto;
  • Su organización no está atrayendo a las personas adecuadas. Esto podría ser reputacional, financiero o la industria no es atractiva.

¿Por qué no considerar un enfoque completamente diferente? - contrate a un contratista por unos meses y vea si hace el trabajo. ¡Esto no es subcontratación, al menos en mi libro! Si esto funciona, entonces tiene el resultado técnico que desea, ciertamente sin un nuevo desarrollador para el futuro. Si no funciona, tal vez estés esperando milagros, y un novato no tendría ninguna posibilidad sin importar lo bueno que fuera. Estás buscando convertir a la nueva persona en "la más grande del universo" en unos meses... perdona mi franqueza, pero eso no parece realista, y estás condenado a una decepción tras otra si eso es realmente lo que eres. esperando

La programación en pareja puede ayudar aquí. Trate de emparejar a las personas más experimentadas con las menos experimentadas.

desafortunadamente, eso nunca funcionó en mi equipo por alguna razón, cuando trabajan juntos es más como una consulta por un tiempo: traté de emparejar a un programador experimentado con un principiante sin experiencia en el front-end y fue un desastre, el resultado fue casi el mismo conocimiento cero del principiante después de unos 2-3 días trabajando juntos y un programador experimentado cabreado (no creo que el front-end sea algo tan complicado; logré entender los conceptos básicos muy rápidamente cuando tenía 16 años, así que Creo que ese tipo simplemente no era la persona adecuada)
Encuentro que la programación en pareja funciona mejor cuando dos desarrolladores aproximadamente iguales con conjuntos de habilidades complementarios trabajan juntos. Un programador veterano y un novato están enseñando, no emparejando.

Pawel ha proporcionado una muy buena respuesta, pero le falta un concepto importante: el medio ambiente. Debe elegir las características de los novatos en función del tipo de entorno en el que las colocará. Si van a ser arrojados al fondo del grupo corporativo infestado de tiburones para desarrollar software, debe contratarlos en función de los instintos de supervivencia. Si se trata de un entorno centrado en el equipo, la personalidad a menudo pesa mucho sobre las habilidades al menos hasta llegar al cuarto inferior de la curva de campana.

Los desarrolladores no son widgets intercambiables. Tienen un conjunto de personalidad bastante diverso y reaccionarán de manera diferente según sus personalidades y el entorno que los rodea.

Y, si está contratando para una competencia, asegúrese de que la personalidad no interrumpa el resto de la organización de la competencia. Descubrí que los desarrolladores demasiado competitivos tienden a no jugar bien con los demás o tienden a enfocarse en los aspectos equivocados del proyecto (objetivos visibles a corto plazo, no caminos estratégicos a largo plazo).

Creo que es profundamente injusto para el desarrollador que NO obtiene el trabajo. Nunca tomaría una posición en la que mi longevidad dependiera de "ganar" a otro compañero de trabajo en algún tipo de competencia.

¿Realmente tiene tiempo para crear un plan de estudios completo, junto con una prueba final? ¿Es ese el mejor uso de sus recursos?

Si tiene problemas para encontrar candidatos locales, considere el teletrabajo como una forma de ampliar su grupo. Si esa no es una opción, adopte un enfoque a largo plazo. Adapte sus prácticas comerciales al largo proceso impredecible de preparar a los novatos locales. La introspección y la comprensión de sus propias fortalezas y debilidades como organización ayudarán. Si sabe lo que funciona y por qué funciona, puede enseñarlo.

Encontrar a aquellos que quieran aprender (un punto excelente de Pawel) es la parte difícil de construir un equipo de desarrollo, sin importar la ubicación, el tamaño o la calidad de su grupo de contratación.

Nada es un sustituto de la experiencia relevante.

Esta es una cita de Chris Sterling en su libro Managing Software Debt: Building for Inevitable Change . Su punto es que para que cualquier persona tenga éxito en el desarrollo de software, debe tener la oportunidad de adquirir experiencia relevante (dominio, tecnología, etc.). Las personas que tienen esa experiencia relevante necesitan compartirla. Seis meses deberían ser mucho tiempo.

En un capítulo sobre la gestión de Platform Experience Debt, el autor reafirma su experiencia de que “Cuando la brecha entre aquellas personas que tienen un conocimiento sustancial sobre la tecnología y el dominio y los que son novatos es demasiado grande, el emparejamiento por sí solo probablemente no sea suficiente”. propone que las actividades de intercambio de conocimientos y las configuraciones de equipos colaborativos son dos formas en que las organizaciones pueden abordar el tipo de problema al que se enfrentan.

En términos de intercambio de conocimientos , creo que los programas de capacitación pueden ser la mejor opción para usted. He tenido mucho éxito con un par de enfoques diferentes en mi organización. El primero es Tech Labs, donde cualquiera puede presentar un problema de desarrollo al que se enfrenta y hacer que algunos de los miembros del equipo con más experiencia lo consulten sobre el problema. Hacen esto en un foro grupal para que otras personas que se encuentren con el problema puedan aprender cómo lidiar con él. Esto también permite que se identifiquen ejemplos específicos de problemas como antipatrones, cuando corresponda, de modo que se puedan adoptar mejores patrones de diseño en el futuro. El segundo es el Brown Bag estándar.sesión, donde las personas se reúnen durante el almuerzo para aprender sobre un tema que es nuevo para ellos. Los temas de bolsa marrón que hemos llevado a cabo normalmente se centran en principios que los miembros del equipo pueden poner en práctica.

La configuración del equipo también puede tener un gran impacto en el éxito de los nuevos miembros del equipo. Por ejemplo, es posible que no desee establecer la expectativa con la nueva persona de que, en general, debe tener conocimientos sobre toda la aplicación que está creando. En su lugar, es posible que desee hacer arreglos para que se centren en un componente específico, brindándoles la oportunidad de ganar confianza y aumentar gradualmente su conocimiento del dominio. Otras configuraciones pueden incluir:

  • Convierta al nuevo miembro del equipo en un SDET inicialmente para que tenga la oportunidad de comprender y probar el código que están escribiendo otros.
  • Asigne al nuevo miembro del equipo una tarea de refactorización para familiarizarse con la base de código antes de tomarlo "de frente".
  • Apoyar a un mentor que pasa el 50% de su tiempo brindando apoyo práctico al nuevo miembro del equipo
  • Levantar una comunidad de práctica en torno a determinadas áreas especializadas donde no existe una distribución general del conocimiento, en la que puedan participar nuevos miembros del equipo

Mi opinión es que su método no está adaptado para encontrar programadores prometedores para ingresar al programa, ni para que los recién llegados adopten una buena curva de aprendizaje.

  1. Primero, el contexto económico es bueno para los programadores en la mayoría de los lugares. (divulgación completa: trabajo como profesor asociado en informática/ingeniería y consultor en PM) La mayoría de mis estudiantes actuales (estamos en junio, están completando su BsC y MsC en septiembre) ya encontraron un trabajo (principalmente como programadores para estudiantes de BsC). De hecho tenemos muchas más ofertas de trabajo que estudiantes. Ofrecer una competencia, por lo tanto, el riesgo de no ser confirmado en el trabajo con una probabilidad del 50% no es lo suficientemente bueno para los jóvenes programadores en este contexto.

  2. Hagamos lo que debe hacer un PM: pretendamos que somos estos tipos.

Cuando dos programadores discuten lo suficiente juntos, rápidamente sabrán quién es el más capaz entre ellos.

Imagina que eres el peor: para qué molestarte en esforzarte y aprender, ya sabes que será un fracaso: si el otro dedica el mismo tiempo que tú, se mantendrá por encima de ti. Lo mejor que puedes hacer es hacer tu CV y ​​buscar un nuevo lugar.

Imagina que eres el mejor. Si el único incentivo para tener una buena curva de aprendizaje es ser el mejor, no es necesario que lo hagas porque ya eres ese tipo.

Entonces, en ambos casos, no hay necesidad de ser competitivo...

Creo que deberías encontrar otra forma de motivar a UN muy buen potencial. Para encontrar a este tipo, pase mucho tiempo con la ayuda de un técnico de su organización. Luego asegúrese de que el recién llegado entienda que si aprende rápido en los primeros 3 o 6 meses, será muy bien recompensado (dinero, tiempo, responsabilidades, proyectos interesantes).

Una vez hecho esto, la tutoría es la mejor manera de asegurarse de que alguien aprenda de manera eficiente (el mentor orienta en la capacitación, agiliza el proceso separando el trigo de la paja, lo que se debe aprender de lo que no es importante).

gracias, interesante punto de vista y muchas notas hechas en mi cuaderno