Voy a repetir mi párrafo de conclusión aquí, para ahorrarle la lectura de todos los detalles si no está tan interesado:
Básicamente, si está utilizando desarrolladores senior para realizar tareas de 5 horas, necesita un nuevo gerente en su proyecto. Para eso están destinados los pasantes universitarios y los desarrolladores junior. Bríndeles un desarrollador senior para consultar según sea necesario y, de lo contrario, permita que los desarrolladores senior se centren en los problemas que atienden a sus capacidades en lugar de perder su tiempo y talento en cosas que no requieren ninguno.
———————–
- ¿Debo tomar el IIT, Tirupati CSE o el BITS Hyderabad CSE?
- ¿En qué área de la informática debería enfocarme? ¿Qué debo hacer para mejorarme en esa área?
- ¿Debo hacer una programación competitiva cuando he perdido el interés en ella?
- Entre KJ Somaiya EXTC y Swami CS, ¿cuál es mejor?
- Si quiero trabajar en el campo de investigación de Machine Learning en la industria, ¿necesito un doctorado? ¿Qué puedo hacer para enriquecer mi perfil para ingresar allí sin un doctorado? ¿Cuáles son los problemas que puedo enfrentar en el futuro por no tener un doctorado?
Realmente no hay forma de responder esa pregunta sin saber más acerca de los parámetros dentro de los cuales están trabajando. ¿Es el ‘proyecto’ solo una tarea para modificar el código existente para agregar / modificar la funcionalidad existente o es una pizarra en blanco? Si es lo último, es una apuesta decente que incluso un desarrollador senior puede perder un poco de esas 5 horas simplemente para configurar un entorno de desarrollo: construir objetivos para código y pruebas, dependencias / marcos descargados y vinculados, etc., por lo que hay probablemente no sea mucho para un proyecto de pizarra en blanco de 5 horas: es el tipo de cosa que solo existe en una tarea de CS, y esperaría que un ingeniero experimentado realice una tarea de este tipo en 1/5 a 1 / 10 el tiempo de un estudiante, si no menos, ya que rara vez requieren el mismo tipo de integridad que requiere el código de producción. Luego, hay factores como el tiempo de respuesta de compilación / ejecución / prueba, que son diferentes para diferentes idiomas, con los idiomas interpretados en general un poco más fáciles de avanzar rápidamente (respuesta de compilación más rápida, generalmente resolución de dependencia más fácil, generalmente prototipos más fáciles de líneas individuales) de código para probar la validez, etc.), pero los lenguajes compilados fuertemente tipados a menudo le brindan una base de código mucho más fácil de mantener a largo plazo, especialmente si un equipo grande significa que muchas personas se encontrarán con frecuencia con código con el que no están familiarizados.
Me he encontrado con ingenieros realmente fenomenales que eran capaces de algo del orden de 10 veces la productividad de sus pares promedio, pero eso incluye cosas como diseñar y documentar su trabajo, depurar problemas operativos en los sistemas de producción, etc. Y generalmente se logra a través de Una combinación de talento / velocidad / experiencia y buena ética de trabajo. A menudo, los muchachos que realmente están produciendo una gran cantidad de código de alta calidad simplemente trabajan más horas que todos los demás y pueden mantener su enfoque durante períodos más largos, generalmente porque disfrutan resolviendo problemas y tienen dificultades para guardarlos sin completar. Pero eso no puede ser realmente un factor en una tarea de 5 horas, ya que ya es menos de un día de trabajo completo, por lo que no se puede encontrar ninguna ventaja.
Siempre tuve la reputación de ser un ingeniero realmente rápido y de alta calidad, pero buena parte de esa reputación se basaba en el hecho de que me encantaba la codificación y nunca había necesitado dormir mucho, así que a menudo me iba a casa y me ponía gran parte de un segundo día laboral completo antes de acostarse durante 5-6 horas. Combinar eso con un multiplicador de productividad más razonable y 10x no es tan difícil de creer. Pero mi deseo de trabajar ese tipo de horas locas eventualmente disminuyó y, lamentablemente, eso también redujo mi multiplicador de productividad, ya que soy menos capaz de pasar días de trabajo enteros leyendo documentación o estudiando el código existente sin interrupción: esas son las cosas eso me hizo rápido, pero lo hice principalmente fuera de la vista y de mis compañeros
Los desarrolladores experimentados pasan menos tiempo buscando cómo resolver un problema y más tiempo implementando una solución porque tienen experiencia a la que recurrir cuando diseñan una solución. También saben dónde encontrar las respuestas que ya no tienen mucho más rápido. Son mejores para leer documentos: otro diferenciador entre los ingenieros promedio y excelentes es que generalmente encontrará que los ingenieros excelentes han leído la documentación de manera preventiva en lugar de esperar hasta que estén buscando una respuesta específica a un problema. El beneficio de la lectura preventiva es que obtienes un conocimiento significativo sobre los problemas que ya se han resuelto para ti en un API / SDK / Framework determinado e, incluso si no puedes recordar exactamente cómo hacer algo, sabes aproximadamente dónde búsquelo en los documentos y no perderá el tiempo tratando de construir su propia implementación antes de descubrir la versión superior que ya se proporciona. Los ingenieros que no leen los documentos hasta que se encuentran con algo a menudo resultan haber implementado la rueda docenas de veces sin siquiera darse cuenta de la redundancia de su esfuerzo, simplemente porque no se atascaron al implementar lo que hizo. Por supuesto, también hay calidad de código. Los ingenieros experimentados conocen muchos pequeños consejos y trucos que hacen que su código sea más fácil de leer y / o ejecutar de manera más eficiente (y es mucho menos probable que caigan en la trampa de la optimización prematura). Finalmente, los ingenieros experimentados tienen menos probabilidades de cometer el tipo de errores que pueden costarle mucho tiempo en las pruebas, y cuando los encuentran, es probable que sean mucho más rápidos para depurarlos / corregirlos. Recuerdo que me sorprendió lo rápido que los muchachos mayores podían concentrarse en un problema cuando era nuevo en esto. Pero habían visto cosas similares docenas o incluso cientos de veces antes, mientras que todo era nuevo para mí. Tenían herramientas de las que nunca había oído hablar, y mucho menos sabían cómo usarlas de manera efectiva.
Por lo tanto, es posible que un ingeniero junior no sea mucho más lento que un ingeniero senior en un proyecto tan pequeño. Francamente, hay tanta dificultad en una tarea que solo lleva 5 horas completarla. En el mejor de los casos, es probable que descubra que el desarrollador experimentado le brinda un resultado final más completo, con buenos comentarios, pruebas bien escritas que realmente tienen una muy buena cobertura de la base de código, etc. Pero eso es porque esperaría una tarea que requiera un Un total de 5 horas para requerir solo algo así como 90 minutos de codificación. Un buen ingeniero pasará aproximadamente la misma cantidad de tiempo diseñando / investigando, implementando y probando unitariamente su trabajo. Deje los 30 minutos adicionales para configurar un entorno de desarrollo, escribir buenos comentarios / documentos y realizar algunas pruebas de integración manual del resultado final. Solo hay una gran cantidad de cosas que va a hacer en 90 minutos, e incluso un ingeniero junior no es muy probable que requiera mucho más de 180 minutos para escribir la misma cantidad de código, porque no puede ser tan difícil. asignación. Principalmente se reduce a la velocidad de escritura a esa escala. Es probable que pasen los mismos 90-120 minutos en diseño, dependiendo de la cantidad de investigación que se requiera sobre el código existente (los ingenieros experimentados probablemente puedan leer y comprender el código desconocido 5 veces más rápido que alguien nuevo en el trabajo), y probablemente lo harán completamente no implementan buenas pruebas, así que supongo que ambas terminarán aproximadamente al mismo tiempo. Pero el resultado del desarrollador principal será más completo, será más fácil de leer, probablemente se ejecutará más rápido y probablemente tendrá más longevidad en la base de código.
Por otro lado, una tarea que le lleva a un desarrollador experimentado una semana podría fácilmente llevar a un desarrollador junior un mes o más, y una tarea que requiere 2-3 meses para un desarrollador senior probablemente esté completamente fuera del ámbito de lo posible para un junior desarrollador sin ayuda significativa de un mentor más experimentado. Se requiere experiencia para hacer un trabajo de diseño a gran escala como ese, y mucho menos para darle la vuelta e implementarlo correctamente.
Básicamente, si está utilizando desarrolladores senior para realizar tareas de 5 horas, necesita un nuevo gerente en su proyecto. Para eso están destinados los pasantes universitarios y los desarrolladores junior. Bríndeles un desarrollador senior para consultar según sea necesario y, de lo contrario, permita que los desarrolladores senior se centren en los problemas que atienden a sus capacidades en lugar de perder su tiempo y talento en cosas que no requieren ninguno.