
La reflexión es algo curioso. Aún más interesante si se basa en muchos años de experiencia. Bajo el corte, la historia sobre el destino de un programador a través de la boca del director de desarrollo de Parallels RAS Igor Marnat en primera persona. ¡A disfrutar!
“Si no avanzas, entonces no te quedas quieto. El mundo está avanzando, pero tú no. ¡Por lo tanto, estás retrocediendo! © (Alguien es muy inteligente)
EpigrafíaPara mí, la programación aún no se ha convertido en una rutina, aunque lo he estado desarrollando durante más de veinte años. Creo que esto se debe al hecho de que tomé ciertas medidas antes de que mi fusible finalmente se agotara.
Si la programación se ha convertido en una tarea para ti, entonces quizás mi experiencia te sea útil. ¿Quieres algo para cambiar? Al menos algo necesita ser cambiado (pensamiento profundo, ¿no?). Debemos movernos a algún lado. Y ahora, en diferentes momentos, intenté moverme hacia adentro, hacia los lados y hacia la amplitud.
Movimiento profundo
La peculiaridad de nuestro trabajo es que cada desarrollador debe ser un especialista en dos áreas: programación, como tal, y en el área temática para la que crea el software. Cuanto mejor y más profundo comprenda el desarrollador estas dos áreas, más interesantes tareas podrá resolver. Cuanto más interesante y grande sea la tarea, más notable será el resultado.
La mayoría de los programadores derivan su motivación de los niveles superiores de la pirámide de Maslow: cognición, autorrealización y la necesidad de respeto. Para esto, es necesario que, en primer lugar, el resultado de su trabajo sea notable. En segundo lugar, este resultado debería ver la luz, la gente debería usarlo. La visibilidad del resultado, obviamente, está estrechamente relacionada con el tamaño de este resultado, con su valor, peso.
Durante el desarrollo de software para telecomunicaciones, invertí mucho tiempo y esfuerzo en estudiar una nueva área temática: el dispositivo de procesadores de propósito general y DSP, memoria, sistemas de almacenamiento, protocolos de red, tipos de señalización, algoritmos de procesamiento de señales, en general, un montón de diferentes interesantes cosas de telefonía, circuitos, redes.
Me llevó varios años (durante los cuales trabajé notablemente más de ocho horas al día). Cinco años después, trabajé a nivel de arquitecto, participando en la creación de la estructura de software de las nuevas centrales telefónicas, la arquitectura de sus componentes. Escribí menos código, desarrollé especificaciones para el equipo, revisé códigos complejos, trabajé en algunos componentes críticos, protocolos y controladores. Una buena comprensión del dispositivo de cada componente, los principios de su funcionamiento, la comunicación con el resto le permite desarrollar una arquitectura de producto, protocolos de comunicación, interfaces externas.
Obviamente, cualquier producto de software es el resultado del trabajo de todo el equipo, pero con mi nivel de participación en el proyecto, me sentí involucrado en la creación no de los componentes individuales, sino de todo el producto. Al mismo tiempo, obtienes una conducción increíble, también hay más responsabilidad.
En general, cuanto más se sumerge el programador en el área temática con la que trabaja, mejor conoce el contexto, cuanto más amplios son sus horizontes, más interesante puede hacer su trabajo.
Esto se aplica no solo a la disposición interna de los componentes del producto. Cuanto mejor conozca a sus usuarios, cómo usan el producto, por qué, y no de otra manera, qué problemas tienen, cómo están organizados los productos de la competencia, más interesante será para usted trabajar.
Es fácil aprender todo esto: debe comunicarse más con los equipos de soporte, prueba, implementación y con los usuarios finales del producto. Si es posible establecer una interacción de trabajo, resolver algunos problemas para ellos, participar en un trabajo conjunto, generalmente es excelente.
Por cierto, hay una observación más sobre la organización del flujo de trabajo en sí, que se adhiere, en particular, a la filosofía DevOps y al enfoque de desarrollo y operaciones conocido como SRE, originalmente de Google. Es necesario esforzarse por eliminar la separación entre los equipos de desarrollo, implementación y soporte, el movimiento hacia la colaboración.
Por si acaso, observo que los RFC, los libros de tapa con animales, la documentación de los fabricantes y la correspondencia en la mayoría de las comunidades de código abierto usan el inglés como un medio estándar de comunicación. Hay menos información en las traducciones, a menudo está distorsionada y casi siempre llega tarde. Muchos fabricantes no se molestan en traducir la documentación en absoluto. Por lo tanto, como mínimo, la capacidad de leer libros en inglés es un requisito sanitario-higiénico bastante básico, por así decirlo, para un desarrollador que quiera desarrollarse.
Movimiento lateral
En muchos sentidos, el interés del programador en su trabajo está determinado por su interés en el área temática en la que trabaja. Por ejemplo, puede aburrirse con las aplicaciones financieras, pero será interesante trabajar en la infraestructura para tales aplicaciones.
Paralelamente al desarrollo de software integrado para telefonía, trabajé en un sistema distribuido para recopilar información y facturar a los usuarios, y este es un mundo completamente diferente, otros idiomas, otras plataformas. A continuación, la automatización de la implementación, la configuración y las pruebas, este es el tercer mundo, todo es diferente nuevamente.
Quizás para revitalizar su interés, debería hablar con un colega o jefe, ver qué hacen los equipos cerca. Incluso un pequeño paso lejos de las actividades habituales puede hacer una gran diferencia en su trabajo, darle una visión diferente de las cosas. Como dice el refrán, el punto de ubicación determina el ángulo de visión
Movimiento en amplitud
Cuando ingresé a la telefonía, resultó que no tenía tiempo para dedicar suficiente tiempo y atención a otros proyectos en los que trabajé. La solución era obvia: comencé a trabajar aún más. Pero no escala mucho. Con mucho trabajo por la noche y los fines de semana después de algún tiempo, ya no tengo ganas de trabajar, y no hay tiempo para vivir. Mi jefe y yo decidimos contratar a otro programador en nuestro equipo. Más bien, presuntuosamente realicé un par de entrevistas con un swoop (el primero en mi vida al otro lado de la mesa), y me di cuenta de que llevar a una persona inteligente a mi equipo no fue tan fácil como parece.
¿Cómo entender a un extraño en poco tiempo? ¿Cómo evaluar su profesionalidad y cualidades personales? ¿Son generalmente importantes, estas cualidades personales? ¿O es importante la profesionalidad? ¿A qué debe prestar atención al contratar? ¿Y cómo exactamente lo giras? Ahora todo esto parece bastante obvio, pero cuando contraté al primer ingeniero para mí, fue un verdadero bosque oscuro para mí.
Como de costumbre, comencé con Google. Encontré varios artículos de Joel Spolsky, los tragué, leí los libros a los que se refería, luego los enlaces de estos libros, fui a estudiar de manera más sistemática, y así, gradualmente, comencé a sumergirme en una nueva área temática: gestión de proyectos, equipo, gestión del proceso de desarrollo en sí.
El proceso de desarrollo de software, como cualquier otro proceso de producción, tiene sus propios investigadores, historial de desarrollo, mejores prácticas, enfoques de organización. Muchos de sus aspectos relacionados directamente con el desarrollo, las mejores prácticas de ingeniería, son bastante jóvenes.
Por ejemplo, ágil apareció hace relativamente poco, hace menos de veinte años, CI: alrededor de treinta años, el libro clásico de Frederick Brooks durante unos cincuenta años. Otros aspectos relacionados con la gestión del equipo, la psicología, la motivación, la gestión de procesos en la organización en su conjunto, la organización de las comunicaciones son universales, provienen de otras áreas temáticas hace muchos años y son perfectamente aplicables en el campo del desarrollo.
Leí bastante literatura sobre el tema de la gestión de equipos. Me parece que este tema ha sido estudiado más a fondo y profundamente en Estados Unidos y Japón. Además de los libros clásicos sobre desarrollo, ingeniería, gestión, recomendaría libros de diseñadores de aviones y diseñadores de cohetes soviéticos y rusos. Además, NASA, NAVY, Toyota: estas organizaciones y empresas invierten mucho en optimizar sus procesos, realizan conferencias internas para sus gerentes, hay materiales disponibles en la red, hay muchos libros de arte interesantes sobre ellos y sobre ellos. Además, además de una excelente información sobre los procesos de gestión construidos en estas empresas, leer sobre automóviles, aviones, misiles, barcos y su desarrollo es simplemente muy interesante.
En general, el alcance para aumentar su competencia en el campo de la gestión es enorme, las tareas también son muy diferentes. Puede comenzar organizando su propio trabajo, introduciendo las mejores prácticas de ingeniería como pruebas unitarias, revisiones de código, integración continua y entrega continua, puede detenerse muy lejos. Y es mejor no parar :)
Conclusión
La práctica muestra que si comienzas a moverte activamente en al menos una de las direcciones anteriores, después de algún tiempo inevitablemente ocurrirá otro movimiento: subir la escalera jerárquica. Si existe tal deseo, entonces esta también es una opción muy interesante. Lo principal aquí es no olvidarse del equilibrio necesario entre el trabajo organizativo y técnico que le gustaría mantener.
El desarrollo de software es un maratón que dura toda la vida. Siempre hay plazos, plazos, todo el tiempo que necesita para impulsar un poco más. Para ahorrar energía y motivación, para protegerse del agotamiento, necesariamente debe cambiar, levantar la cabeza por encima de la rutina, mirar a su alrededor y verse a sí mismo y a su trabajo desde un lado. Teatros, música, conciertos, buenos libros y películas son obligatorios para el uso periódico. O una residencia de verano. O senderismo. En general, algo diferente al trabajo. De lo contrario, después de dos o tres años, el trabajo en cualquier caso dejará de ser una alegría.
En cuanto al trabajo, nadie se encargará de su motivación y carrera mejor que usted. Honestamente, no es que a nadie le importe mejor, a nadie le importa nada. Libros sobre especialidades, campos relacionados, conferencias, comunicación con colegas, mitaps: un movimiento que, como saben, es la vida.
Si siente que es hora de cambiar algo, puede comenzar con pequeños pasos. Para hacer esto, no necesita el permiso de arriba, un presupuesto o trabajar en una organización grande. De todos los pasos sobre los que escribí, fui arriba en una pequeña empresa, en equipos de dos a diez personas.
Unos cuantos libros buenos, muchas ganas y un poco de movimiento pueden marcar una gran diferencia. Buena suerte
Z.Y. Comparte tus experiencias y trucos en los comentarios. Desafortunadamente, Igor aún no está en Habré, estoy descargando karma para poder invitarlo. Mientras tanto, redirigiré sus preguntas a él, si surgen. Gracias por su interes