Estamos a punto de contratar 1-2 nuevos ingenieros para el equipo de software (que consta de 3 desarrolladores, 1 probador).
¿Cuáles son los pasos para integrarlos en el equipo?
Mis ideas son:
- leer documentación (estándares de codificación, documentos en metodologías de desarrollo que utilizamos)
- hacer que lean el código existente
- asignarles algunas tareas simples
- al final, hacerlos responsables de la parte del código
¿Qué más podriamos hacer?
El proyecto se encuentra en un sector médico (sistema de ultrasonido) y ya lleva 5 años. Tenemos lanzamientos anuales y estamos a punto de terminar un lanzamiento, cuando queremos agregar 1-2 ingenieros.
El proyecto se encuentra en la fase de mantenimiento (refactorizando el código heredado y agregando nuevas funciones). Las cosas están más o menos a tiempo (más o menos).
team
integration
BЈовић
fuente
fuente
Respuestas:
Viniendo de alguien que ha tenido que acelerar muchas bases de código diferentes en mi carrera, esto es lo que sugeriría:
A partir de ahí, expanda el alcance y la complejidad de las tareas a lo largo del tiempo dependiendo del nivel de experiencia y aptitud del ingeniero. Eso permitirá al desarrollador ampliar su conocimiento de la base de código de forma natural.
Evitaría leer solo tareas (documentación o código). Leer la documentación se vuelve realmente aburrido muy rápido y leer código aleatorio no es útil ya que no tendrán ningún contexto con el que trabajar. Ya es bastante difícil leer el código para las revisiones de código cuando ya conoce el producto y la base de código. No puedo ver nada útil al tener un nuevo ingeniero leyendo el código.
fuente
Mi sensación es que la tolerancia de la mayoría de las personas para leer la documentación es bastante baja (bueno por un día o dos, pero más allá de eso, probablemente estarán ansiosos por hacer algo un poco más práctico).
No creo que realmente puedas entender el código de una aplicación sin una comprensión razonable de la aplicación en sí. El software presumiblemente tiene muchas funcionalidades con las que podrían 'jugar' como usuario; necesitarán poder probarlo eventualmente, por lo que espero que sea bastante importante que sepan cómo instalarlo, configurarlo y realizar tareas comunes con él.
Personalmente, considero que una descripción general de la arquitectura de alto nivel suele ser bastante útil para tener una idea básica de cómo funcionan las cosas. Las tuercas básicas de la aplicación principal. por ejemplo, comprender todos los subsistemas y cómo se unen las cosas, saber qué bits son manejados por software / bibliotecas de terceros y qué bits deben mantenerse internamente. (A menos que su organización tenga documentación actualizada de una calidad verdaderamente excepcional, supongo que no hay forma de que controlen ese tipo de cosas sin que alguien se las explique directamente usando una pizarra: ))
En cuanto a darles algo "práctico", las tareas de mantenimiento / búsqueda de errores pueden ser una buena manera de ponerlos al día por un tiempo (¿un par de semanas / meses?): Estarán en situaciones donde áreas específicas de funcionalidad necesita ser entendido, probado y depurado; ayudando a desarrollar el conocimiento del código, los requisitos, las herramientas utilizadas por la empresa, los procesos de desarrollo y los productos en su conjunto, mientras que con suerte no necesitará dedicar demasiado tiempo al resto del equipo de desarrollo
fuente
Como líder, paso al menos 2 días con nuevos desarrolladores. Descubrí que desarrollar una relación en la que se siente cómodo hacer la inevitable pregunta "¿cómo es su progreso?" es un deber. Hay miedo en cualquier comunidad nueva para encajar ... ocultamos errores, actuamos de manera perfecta, hacemos las cosas mejor de lo que son, disminuimos la dificultad. Un gerente que pase 2 días con alguien les hará saber que no se trata de su cultura y les permitirá liderar con el ejemplo. Los nuevos programadores necesitan una lección de historia sobre de dónde vienes y qué tan lejos estás. Los documentos simplemente no le hacen justicia a la tarea.
fuente
Solo he estado trabajando en la industria durante 10 meses (en colocación) pero descubrí que lo siguiente me ayudó:
Ambos me ayudaron un poco. Buena suerte.
fuente
Iría de alto nivel a bajo.
Demuestre la aplicación lo antes posible
Una de las cosas más importantes es que el desarrollador tiene una idea de en qué trabajará. Durante la demostración, señale algunas de las cosas que se han desarrollado recientemente y la dirección de la aplicación.
Explicar la arquitectura de alto nivel.
Esto también es muy importante. Permita que el nuevo desarrollador escuche y haga preguntas. Haga esto como un ejercicio grupal con los otros desarrolladores, que con suerte intervendrán y lo ayudarán. Esto le permitirá al nuevo desarrollador saber que está bien hablar abierta y honestamente.
Tenga listo un excelente documento de incorporación
Tener un excelente documento de incorporación no solo ayuda a los nuevos desarrolladores, sino también a los antiguos. Puede contener expectativas, enlaces útiles e información de configuración del entorno. (No puedo decirle cuántas veces utilicé nuestra incorporación para configurar mi entorno cuando obtengo una nueva computadora ...) Esto debería estar bien estructurado y al punto y no quedarse y no ser un vertedero para cada pequeño detalle
Aliéntelo a hacer preguntas (y esté disponible para responderlas)
Con las respuestas, guíelos, pero no les diga qué hacer. Déles pistas pero permítales que finalmente lo descubran ellos mismos.
Ayuda a los otros miembros del equipo a dar la bienvenida al recién llegado
Hay dos caras de la moneda cuando alguien se une a un equipo. El equipo también necesita tener las herramientas para dar la bienvenida al nuevo desarrollador.
Déjelos tomar una tarea pequeña o dos
Permítales agregar algo nuevo y visible para el proyecto que sea demostrable. Cuando se muestre, indique quién lo hizo y qué buen trabajo hicieron. Esto realmente puede aumentar la autoestima. Cuanto más rápido sienten que están agregando valor, más rápido sienten que son parte del equipo. Cuanto más rápido se sientan capacitados para hacer lo mejor que puedan.
Anímelos a realizar tareas más difíciles una vez que se sientan más y más cómodos
Los buenos candidatos harán esto naturalmente.
fuente
Un flujo de "orientación" por el que he pasado (y que encontré útil) fue algo similar a:
Creo que este enfoque (y sus variaciones) será útil porque:
fuente
Las contrataciones iniciales necesitan una tarea pequeña, pero no demasiado pequeña y bien definida para trabajar. De esta manera, pueden comenzar a tener una idea de cómo está estructurado el código al tratar de descubrir cómo realizar su tarea. En el proceso surgirán preguntas y en ese momento puede dirigirlas a la documentación u otros recursos que pueden usar para ayudarlos a internalizar la base del código. También ayuda si su ciclo de desarrollo, compromiso e implementación es corto y pueden ver los frutos de su trabajo en acción lo más rápido posible.
fuente
Así es como hago
Recuerde: no importa cuánto lo intente, hasta que y a menos que el participante comprenda el proyecto por completo, no podrá realizar el trabajo de manera más eficiente.
fuente
Número uno: primero aprenda a usar el software para descubrir qué problemas resuelve desde la perspectiva del usuario. Si no tiene una interfaz de usuario (por ejemplo, es un servicio de fondo o algo así), permítales usar cualquier interfaz disponible para consumirla. Obtener una nueva visión de la vista de un usuario de su software siempre es bueno, y podría ayudar al nuevo empleado a ver cosas que usted no puede, debido a que ya está incrustado en el proyecto.
Después de esto, un buen primer proyecto podría ser algo así como un módulo adicional o nuevo para agregar al software, minimizando la cantidad de conocimiento necesario de la base de código existente. Escribir algo nuevo siempre será más fácil que realizar una corrección de errores, lo que puede requerir muchos cambios en muchos archivos fuente. En mi opinión, dar a un nuevo empleado una tarea de corrección de errores probablemente los desconectará de su empresa.
fuente
Su esquema para familiarizar a los nuevos con el proyecto parece razonable. Pero tenga en cuenta que tendrán mucho que aprender al principio. Esta suele ser una situación abrumadora. Tendrá que ser paciente y responder las mismas preguntas repetidamente. Esto es normal, los nuevos desarrolladores tienen que aprender mucho, no subestimes esto. Si te enojas por estas preguntas repetidas, te arriesgas a que no te pregunten y tratarás de descubrir cosas solas que tal vez sean muy lentas en el mejor de los casos, pero con frecuencia imposibles. También deberán aprender la jerga. La mayoría de los proyectos de equipos desarrollan su propio lenguaje. Cuando explique conscientemente trate de evitar la jerga. Explique estas cosas como le explicaría a su madre. De nuevo, sé paciente.
Además, podría intentar integrarlos con los demás miembros del equipo probando algunas tareas de estilo de centro de evaluación, por ejemplo, construir un puente en 45 minutos a partir de 4 hojas de papel que sostienen una taza de café. Utilizamos esta técnica en un curso práctico de ingeniería de software para lograr que un grupo de 8 estudiantes rompa el hielo antes de trabajar en un solo proyecto durante 3 semanas. Ayuda a acelerar las fases de formación del equipo.
fuente
1) Déles una explicación de las reglas y pautas de su código. También dé una explicación general de cómo funciona su aplicación y la estructura general del código.
2) Encuentra algunos pequeños errores o proyectos que son en gran medida independientes de otro código. Explique lo que debe hacerse, en qué parte del código y verifíquelos regularmente.
3) Comience lentamente a darles proyectos cada vez más grandes mientras los revisa cada vez menos.
4) Siéntate junto a ellos de vez en cuando. Puedes aprender mucho simplemente mirando cómo alguien más aborda un problema. Pequeñas cosas como "oh, puedes buscar funciones en tu código presionando ctrl-". Son muy útiles.
Ahora, he descubierto que hay dos extremos :
Alguien que hace una pregunta cada cinco minutos. "¿Qué hace este Path.Join?". Primero deben buscar una respuesta en Google y solo acudir a usted cuando no puedan encontrar una respuesta.
Y el otro extremo, alguien que trabaja durante medio día sin hacer una sola pregunta. Deberían sentir que es bueno hacer preguntas. Solo quiero que primero lo prueben ellos mismos.
fuente
Esta fue mi fórmula y se usó con varios recién llegados; estos pasos demostraron ser altamente efectivos.
a) Todos los nuevos desarrolladores recibirán una introducción sobre los requisitos del proyecto y los procesos de desarrollo durante 2 días.
b) Asignar la tarea de 3 semanas de escribir pruebas Junit para el código que no tiene suficiente cobertura.
c) Una vez hecho 3, asigne tareas pequeñas
d) Asignar tareas complejas y realizadas.
fuente
Creo que solo asigne algunas tareas pequeñas, pídales que escriban algunas pruebas unitarias, haga que depuren algunos errores de regresión. Nada demasiado grande o exigente, pero lo suficiente como para tenerlos en pie.
También debe asignar un desarrollador senior, preferiblemente por nuevo desarrollador que pueda ayudar a guiar al candidato.
Y sí, haga que documenten lo que están aprendiendo sobre el sistema. Asumo aquí que tienes algún tipo de páginas wiki internas. Si no, definitivamente es una necesidad tanto a largo como a corto plazo, una forma sorprendentemente rápida de hacer que la gente se incremente. Las páginas Wiki no solo deben contener la documentación del código, sino también cosas como limitaciones conocidas (esto es software: D), soluciones, métricas de rendimiento de tiempo / memoria, etc.
fuente
No explique solo las buenas prácticas y estándares de codificación, sino explique cómo está estructurado el código de lectura. Explique qué se supone que debe hacer el software y cómo se logra o se logrará esto.
No lo entenderán hasta que haya algún trabajo que hacer, por lo que sugiero que se divida en dos partes, una antes de comenzar el trabajo real, y la segunda, después de que comiencen a trabajar. Buscarán en algún código o documentación y pensarán "¡¿ WTF !? ". Cuando esto ocurra, alguien los acompañará y les explicará los detalles menores.
fuente