Actualmente, nuestra empresa desarrolla aplicaciones que consisten, la mayoría de las veces, en servidores web Ruby on Rails y un montón de diferentes clientes REST, desde sistemas de kiosco en Java hasta dispositivos integrados en C / C ++ (además de las interfaces para navegadores web estándar). Necesitamos expandir nuestro equipo y, al no haber encontrado buenos programadores senior, decidimos poner un poco de esfuerzo en capacitar a programadores junior que crecerían junto con la compañía.
Ya les hemos dado algunos libros de Ruby and Rails y les pedimos que construyan algunos programas de juguetes, pero ahora me estoy dando cuenta de cuán empinada es la curva de aprendizaje para el estado actual de la programación web.
Cuando comencé a programar hace 15 años, utilicé solo Delphi y Source Safe y pude producir software utilizable desde el principio. Ambas eran herramientas simples y era fácil profundizar en el funcionamiento interno del entorno. Poco a poco comencé a usar marcos de terceros, me cambié a CVS, SVN y finalmente a Git, aprendí las piezas que hacen que la web de hoy, como HTTP, JavaScript, CSS, REST, etc. Hoy, incluso después de años de experiencia, no sé tanto sobre cómo funciona Ruby on Rails por dentro como lo hice sobre Delphi en el pasado, y para mí eso fue importante para poder conectar los bloques básicos de aprendizaje con las herramientas que estaba usando.
Me parece que los programadores que estoy contratando tomarán mucho tiempo para integrarse con el equipo y producir algo utilizable, porque hay muchas cosas que aprender a usar un solo marco (Rails): Ruby, HTML, CSS, JavaScript, REST, casos de prueba, acceso a la base de datos (con SQL creado mágicamente dentro del marco), MVC, tres administradores de paquetes diferentes (aptos para Ubuntu, gem y bundler para Ruby), ssh, git, Apache y Phusion Passenger para la implementación, etc.
Me siento perdido ya que es la primera vez que necesito tratar directamente con programadores junior. ¿Cuál es la mejor manera de capacitar a los programadores junior en las mejores prácticas actuales para el desarrollo web cuando hay tantas opciones?
fuente
Respuestas:
A muchas personas no les gustará esta idea, pero estoy abogando por esto siempre que pueda: independientemente del lenguaje de programación y el entorno, si no tienen experiencia y si hay tareas de mantenimiento que surgen de los informes de errores del mundo real de los clientes de los suyos, trate de asegurarse de que sean asignados a ese tipo de tarea al menos durante 30-40% (+) de su tiempo. "Aquí está el informe de error, échale un vistazo, resuélvelo. Si no sabes de qué se trata, comunícate con colegas experimentados, búscalo en Google, lo que sea". Trabajo real en problemas reales, nojuguetes, al menos: no solo juguetes. Asegúrese, también, de que alguien con mucha experiencia eche un vistazo a lo que estaba haciendo antes de que sea lanzado y enviado al cliente, por supuesto. Asegúrese de que el nuevo colega reciba comentarios honestos sobre lo que hizo de colegas y clientes. Elija estas tareas con cuidado para no sobrecargarlas, pero tenga en cuenta que algún día desea que hagan su trabajo de forma independiente.
Hacer la corrección de errores es aprender en el trabajo que les permite trabajar en el código que realmente se ejecuta y tiene cierta relevancia (de lo contrario no habría informes de errores) y les mostrará en muchos ejemplos cómo no hacerlo.
El foco se pone automáticamente en los puntos de dolor. Comenzarán a aprender esos detalles que realmente están causando problemas. También pone una responsabilidad real sobre sus hombros desde el principio, lo que (si bien el mantenimiento como tal no es realmente atractivo) puede ser bastante motivador si lo hacen a satisfacción del cliente / usuario final. Las personas mayores tomarán más en serio lo que hicieron porque saben el impacto si las cosas salen mal, y de esa manera también se simplificará la integración en el equipo, ya que también les hará hablar entre ellos automáticamente.
El punto no es hacerlos productivos desde el primer momento (como podría parecer). El punto es asegurarse de que sepan que se supone que deben hacer algo valioso desde el primer momento, y centrarse en lo que más importa sin la necesidad de crear una lista.
Tengo algunos años de experiencia trabajando de vez en cuando con personas que vienen directamente de la universidad a su nuevo trabajo de desarrollador, y los peores resultados que obtuve fueron generalmente cuando alguien sin al menos algo de experiencia en mantenimiento me pidió que hiciera un nuevo desarrollo de aplicaciones. . Solo asegúrese de que siempre tengan a alguien a quien puedan pedir ayuda si se sienten perdidos.
fuente
Supongamos en primer lugar que ha contratado programadores junior que son realmente competentes. Esto no es necesariamente una suposición segura, especialmente porque los programadores senior que entrevistan a "alguien menos experimentado que yo" probablemente pasen por alto la incompetencia básica.
Pero, suponiendo que sean competentes, el primer paso es enviarlos a una clase. Una clase de una semana le costará $ 2,000- $ 3,000 (EE. UU.). Sin embargo, les dará experiencia práctica, con un instructor que (con suerte) comprende el material y un plan de lección diseñado para ponerlos al día. Enviar a alguien con un libro y la directiva para "aprender esto" no será tan valioso, y es probable que cueste más (el costo de la clase es casi igual a una semana de programador desperdiciada).
Después de que tengan el conocimiento básico, trabaje con ellos. Siéntese en un escritorio adyacente y dedique al menos la mitad de su tiempo para asegurarse de que entiendan su negocio y su forma de hacer las cosas. Sí, disminuirá su productividad, al menos inicialmente, pero a largo plazo hace que su equipo en general sea más productivo. Y si piensa, una vez más, en los costos, si una persona menor pierde un mes haciendo algo incorrecto, es probable que sea aproximadamente medio mes de su salario.
fuente
Las aplicaciones de juguete que les estás pidiendo que hagan deben implementar alguna funcionalidad CRUD básica, y cada desarrollador debe escribir su propio código. Pero puede discutir la aplicación en revisiones de código y ofrecer consejos. Tendrán que comprender primero la arquitectura general de una aplicación MVC, si es posible cualquier expectativa razonable de productividad.
A partir de ahí, cada desarrollador debería poder abrirse por su cuenta en los temas asociados como Javascript, CSS, DAL, generadores de plantillas, enrutamiento, etc. Puede darles orientación sobre qué temas estudiar (puede basarse en las necesidades más apremiantes de su empresa), guiarlos y controlar su progreso. Mueva a los desarrolladores de uno en uno a proyectos simples que produzcan funcionalidades que harán avanzar su esfuerzo de desarrollo real en el momento en que demuestren una comprensión de las habilidades necesarias.
Puede vincular algunos de sus desarrolladores experimentados con un aprendiz como una especie de programa de tutoría. Debe haber pautas disponibles para los desarrolladores junior para que sepan cuándo pueden interrumpir a su mentor y por cuánto tiempo. Su mentor puede supervisar su trabajo cuando comienzan a escribir código real.
Lo pasarás mejor si encuentras jóvenes que sean muy inteligentes, intelectualmente curiosos y emprendedores. He visto que este proceso funciona; era el enfoque de mi empleador anterior, ya que no quería pagar mucho dinero por los expertos, aunque era más una especie de "hundirse o nadar" (no había un programa de capacitación formal como tal). Su mayor desafío fue lograr que se quedaran el tiempo suficiente para recuperar su inversión; siempre existía el atractivo de pagar mejor en otro lugar.
fuente