Mi pesar por toda mi carrera como programador

En primer lugar, me llamé "ingeniero de software"





Del traductor:

Nosotros, que cortamos simples piedras, siempre debemos estar imaginando catedrales. Nosotros, que cortamos piedras simples, siempre deberíamos ver catedrales detrás de ellas. Todos recordamos esta maravillosa cita del libro de Andrew Hunt “The Pragmatist Programmer. El camino del aprendiz al maestro ". La publicación a continuación, en mi opinión, trata sobre esto. Su autor, líder técnico y arquitecto Dave Taubler, habla de cómo se desarrolló su carrera y su visión sobre su trabajo en general: desde la decepción en el marketing hasta lo que llegó hoy, muchos años después. El autor comparte algunas recomendaciones que considera útiles para el desarrollo profesional y, como está escrito en el título, habla de lo que cambiaría en su propia carrera si pudiera.



Mi carrera no comenzó en el desarrollo de software, sino en marketing. Soy una persona creativa y pensé que el arte de las consignas y las armonías me vendría bien. Pero el mundo del marketing ha resultado ser más mecánico de lo que imaginaba. Sorprendentemente (o quizás no sorprendentemente) me di cuenta de que la programación, hasta ese momento un hobby, me dio la energía creativa que ansiaba. Entonces, después de un par de trabajos en marketing, encontré un trabajo en desarrollo web. Este trabajo fue el comienzo de mi carrera como ingeniero de software, desde entonces no he vuelto al marketing.



La profesión fue genial. Ella pagaba bien, por supuesto, y mantuve mi trabajo durante la recesión económica. El desarrollo web me permitió trabajar con diferentes empresas y conocer gente maravillosa. Y seamos realistas, codificar es divertido, así que no me arrepiento de nada. Pero todavía hay algo de lo que me arrepiento. A saber:



Me gustaría no verme a mí mismo como un "ingeniero de software".


No estoy hablando de llamarte "programador" o "arquitecto de software" o lo que sea; específicamente estas dos palabras no me molestan mucho. Quiero decir, lamento haber definido todo mi propósito profesional en la vida para diseñar software y escribir código. ¿Por qué? En realidad, hay varias razones.



Pensé en mí mismo como un obstáculo a eliminar



Solía ​​pensar en mí mismo como un interruptor [aprox. transl. - por supuesto, el habilitador es "una persona o cosa que hace posible algo": una persona o cosa que hace posible algo. Pero en este caso, el autor lamentablemente habla de sí mismo como un elemento de una cadena, lo que significa que este tipo de literalismo es apropiado aquí, refleja claramente el estado de ánimo y la intención de lo dicho], eslabón necesario en la cadena de desarrollo del producto que traduce conceptos en realidad. Esto es tan importante para los negocios como el agua para la vida. Pero últimamente ya no estoy tan seguro de esa autodeterminación.



Piense en cómo funciona el desarrollo de productos. A alguien se le ocurre una gran idea. Por ejemplo, proporcione financiación a las personas que no puedan obtener un préstamo o ayude a los artesanos a vender su trabajo en línea. Pero para convertir una idea en realidad, el autor de la idea necesita a alguien más que tenga la experiencia y las habilidades para hacer realidad la idea. Aquí es donde entro como ingeniero de software. Solo pagame y contribuiré a tu idea. ¿Correcto? Si. Excepto por lo que me di cuenta: no soy realmente un asistente. Soy un estorbo. Soy lo que realmente se interpone entre la idea y su encarnación. Qué necesita ser eliminado. En otras palabras: crees que quieren¿La gente contrata a otra persona para implementar ideas? Si pudieran, digamos, simplemente presionar un botón ... ¿no elegirían un botón en su lugar?



Por supuesto, no existe tal botón. Todavía no. Pero la industria avanza lentamente hacia eso. Hace mucho tiempo, para hacer un sitio web sencillo, tenías que contratar a alguien como yo. Y ahora, con herramientas como Wix, casi cualquier persona puede arrastrar y soltar su camino a un sitio bastante avanzado ... ¡No se requiere programador! Las plataformas de desarrollo de código bajo también reducen la necesidad de ingenieros de software.



Incluso los propios lenguajes de programación se están simplificando gradualmente (aunque lentamente); escribir se vuelve más fácil. Después de todo, ¿de qué sirve un lenguaje de programación si no es cerrar la brecha entre las instrucciones humanas y cómo la computadora ejecuta las instrucciones? No me malentiendas. No creo que la demanda de ingenieros de software desaparezca pronto. Pero ... ¿dotarse de habilidades que están perdiendo valor gradualmente? Una carrera así empezó a parecerme poco fiable. Y eso me llevó a mi segundo problema:



Desarrollé un cinismo injustificado



Cuando comencé, Java era un producto nuevo de moda. Así que me sumergí de lleno en él. Y recuerdo a algunos programadores acérrimos de C y C ++ que odiaban absolutamente Java. Por supuesto que tenían razones. Pero me parecía que estas razones en muchos casos simplemente estaban enmascarando la amenaza existencial que sentían los programadores. La capacidad de programar les resultó muy difícil. Luego vino Java, que eliminó muchas de las dificultades de C y C ++. De repente resultó que toda una serie de nuevos programadores podían hacer su trabajo.



Avance rápido unos años cuando comencé a sentir que estaba en la piel de estos programadores. Reflexivamente, encontré y acentué fallas en cualquier lenguaje o tecnología que supuestamente eran más simples de lo que sabía. Por supuesto, tuve y mis razones para hacer esto. Pero a menudo se parecían más a racionalizaciones que se crean más tarde. Entonces que me paso Ha pasado mucho tiempo desde que eché raíces en mi conjunto favorito de herramientas de programación y no quise dejarlo. Mi objetivo no era aplicar la tecnología para resolver problemas, sino aplicar habilidades específicas de desarrollo de software que ya había perfeccionado. “Si estas habilidades se vuelven innecesarias, mis metas tampoco serán necesarias”, pensé. Y entonces construí un muro defensivo por cinismo. El mismo sobre el que en otros programadores, hace muchos años, me preguntaba.



El punto es que mantener ese cinismo en uno mismo puede ser estresante y agotador. De hecho, noté un círculo vicioso: cuanto más me defiendo de mis propias habilidades, menos quiero aprender cosas nuevas.



Limité mis horizontes profesionales



He trabajado en muchas industrias a lo largo de mi carrera. Redes sociales, transmisión de música, tecnología financiera (fintech) e incluso edición de fotografías. Aunque tengo experiencia en muchas industrias, no siempre estoy bien versado en un área en particular. Al mismo tiempo, noté que algunos de mis compañeros ingenieros permanecieron en la misma industria a lo largo de sus carreras. Un colega, por ejemplo, tenía pasión por la fotografía, por lo que se especializó en software de edición de fotografías. Otros colegas han dedicado toda su carrera a la tecnología financiera.



El caso es que, en primer lugar, estaban interesados ​​en sus industrias. La programación era simplemente un medio por el cual mis colegas participaban en sus industrias y se ganaban la vida.



Al principio me pareció un poco extraño. Si escribe código, me preguntaba, ¿no debería definirse como ingeniero de software? Por supuesto, me esforzaría por estudiar cualquier área en la que opera mi empresa actual. Pero a menudo pensé que era un mal necesario y que debería prestar más atención para perfeccionar mis habilidades técnicas. Entonces, ¿por qué importa? Por supuesto, muchos ingenieros han disfrutado de carreras exitosas que se enfocan casi exclusivamente en software y tecnología, ¿no es así?



Crecimiento profesional



En retrospectiva, me di cuenta de que parte del problema era cómo pensaba. Cuando pensaba en mi papel en el trabajo como programador, solía estar de acuerdo. Otras personas conocen el negocio , lo definí yo mismo, y por eso pueden priorizar el trabajo de mi equipo . Estaba en la empresa solo para hacer mi trabajo. Mientras me concentraba en el desarrollo de software, rara vez se me ocurría que tenía mayores aspiraciones.



Pero para ir más allá del rol de un ingeniero senior, necesitamos entender el negocio. Independientemente de si estamos siguiendo la ruta del Gerente / Director o del Ingeniero / Arquitecto en Jefe, comenzaremos a tomar decisiones de alto nivel en nombre de la empresa. Es comprensible que, cuando asumí por primera vez un puesto de liderazgo, me incomodara concentrarme en cuestiones comerciales. Pero cuando me acostumbré a pensar en nombre del negocio, me sentí libre. Fue como descubrir un nuevo conjunto de habilidades. Si apunta aún más alto, la atención se centra aún más en el negocio. La experiencia de los ingenieros en la industria se vuelve vital. ¿Y esos colegas míos de los que te hablé? Muchos de ellos dejaron el mundo de la ingeniería por completo y fueron promovidos en los negocios. Algunos más tarde se fueron para fundar sus nuevas empresas en tecnología financiera.



Felicidad profesional



Por mucho que disfruto de la codificación, me resultó difícil mantener la pasión por escribir código día tras día. Para ser verdaderamente feliz en su carrera, es importante saber que es importante ver el panorama general de cómo mi trabajo está cambiando el mundo para mejor.



Además, me gustaría hacer lo que han hecho algunos de mis colegas, que es dar un paso atrás y comprender lo que realmente valoro en este mundo. Mucho es importante para mí: la música, la educación, el cambio climático, etc. Si pudiera volver atrás y cambiar algo en mi carrera, esto es lo que cambiaría: decidiría cuáles son mis valores y qué problemas quiero resolver. resolver en este mundo. Y luego aplicaría todas mis habilidades, técnicas y no técnicas, para resolver estos problemas.



Cómo ir más allá de la ingeniería de software



Es posible que esta historia no resuene con todos los que escriben software para ganarse la vida. Hay muchos lectores que aman su industria más que su lenguaje de programación. ¿Quién se siente lo suficientemente cómodo saltando de C # a JavaScript y de allí a Go? Quien sin problemas renuncia a lo que ya ha aprendido cuando la solución parece más fácil. Pero si esta historia te resuena, sigue leyendo. Con el tiempo, he cambiado mi actitud hacia mi carrera y no hay ninguna razón por la que tú no puedas hacer lo mismo. A continuación se presentan algunos consejos que encuentro útiles.



Sumérgete en otras tecnologías



¿Qué curará nuestra renuencia a desprendernos de la tecnología a la que estamos acostumbrados y en la que confiamos? Inmersión en otras tecnologías. La forma más sencilla de hacer esta inmersión es en un proyecto paralelo: el software que creamos nosotros mismos cuando terminan las horas de trabajo. Lo principal es sumergirnos profundamente en un idioma que no conocemos. Estoy hablando de dos cosas:



  • Elegir un idioma completamente diferente fuera de nuestra zona de confort. Por ejemplo, si se siente cómodo con Java, no se limite a cambiar a Kotlin; pruebe Go, Python, Rust o NodeJS en su lugar.
  • Sobre la definición de complejo en el sentido de completar el proyecto No trabajes solo con el tutorial. Fíjate un objetivo elevado que te hará realmente aprender el idioma para lograrlo.


De hecho, haz que tu objetivo sea aprender un nuevo idioma tan bien que puedas conseguir un trabajo con ese idioma por dinero. Eso hice hace muchos años. Yo era un arquitecto de software enfocado en el backend de Java. Pero como proyecto paralelo, ayudé a un amigo a crear una aplicación para iOS y una aplicación de escritorio para Mac. Esto me dio las habilidades para unirme más tarde a una conocida compañía de transmisión de música para ayudarlos a crear una aplicación para iOS.



Necesita algo más que diferentes lenguajes de programación: necesita sumergirse en herramientas que sean independientes del lenguaje. Por ejemplo, me ensucié las manos tanto como sea posible en Docker y Kubernetes. A medida que mejoraba cada vez más en el despliegue y la orquestación de imágenes, me preocupaba menos por lo que había en esas imágenes.



O tomemos las tecnologías en la nube. En el pasado, minimicé el papel de las tecnologías sin servidor porque no tenía experiencia con ellas. Pero por última vez también los he abrazado. Por ejemplo, en un trabajo reciente, intenté implementar AWS Lambda en nuestra arquitectura de microservicios. Y trabajó en un proyecto paralelo en el que se utilizan ampliamente las funciones de GCP Cloud Functions.



Cuanto más me sumergía en las nuevas tecnologías, más liberado me sentía. Ya no me sentía obligado a ciertas habilidades, pero sentía más flexibilidad y preparación para resolver problemas utilizando las herramientas más apropiadas disponibles.



Concéntrese en el panorama general del diseño



Como muchos ingenieros de software, comencé a prestar menos atención a la programación práctica y me enfoqué más en problemas generales. Gestionar a otros ingenieros y centrarme en la arquitectura me ayudó a deshacerme de mi tiempo personal invirtiendo en algunas de las tecnologías que el equipo estaba usando. Además, este enfoque permite centrarse en otras áreas del negocio. Recientemente formé parte de un equipo multifuncional que encabezó una iniciativa de nuevos productos. Dicho esto, pasé más tiempo trabajando con gerentes de producto y diseñadores que estaban involucrados en el desarrollo de productos que trabajando con código.



Una pequeña advertencia. Como jefe del departamento de ingeniería, siempre es importante para mí no perder de vista las tecnologías que utiliza el equipo, estar al menos un poco al tanto. Por supuesto, es posible que nuestro equipo desee utilizar idiomas y herramientas que vayan más allá de sus habilidades personales. No está mal; más bien, es una gran oportunidad para aprender del equipo. Y créeme, al equipo le encantará si les damos la oportunidad de enseñarnos algo.



Conviértete en un hombre de ideas



Anteriormente, presenté una vista simplificada de cómo nacen los productos. Alguien tiene una idea y otra la implementa. Entonces pensé: qué ser un desarrollador, ¿por qué no convertirme en autor de una idea?



Proyectos secundarios



Hasta ahora, el objetivo de mis proyectos paralelos ha sido mantenerme al día con mis habilidades de ingeniería existentes o aprender nuevas tecnologías. En esencia, estos proyectos constituyeron los ejercicios glorificados de Hello World.



Ahora empiezo con la idea misma. Se me ocurre algo que creo que será útil, pero idealmente será algo nuevo. A veces es una idea que puede convertirse en un producto. En otros casos, esta idea solo me es útil. El caso es que me centro principalmente en la idea.



Luego, me desafío a mí mismo para encontrar la mejor manera de hacer realidad esa idea. Quizás la implementación esté relacionada con la escritura de una aplicación monolítica en Java. O tal vez sea una interfaz de JavaScript / React, soportada principalmente por servicios en la nube y unida con un poco de código Go. Quizás estemos hablando de tareas que no tienen nada que ver con la programación.



En el trabajo



También comencé a ejercitar este sentido común en el trabajo. Érase una vez, estaba buscando proyectos en los que pudiera usar mis habilidades específicas de programación. Después de todo, fui contratado por estas habilidades especiales, ¿verdad? Pero poco a poco me di cuenta de que me contrataban principalmente para resolver los problemas de la organización. Así que comencé a buscar los problemas que más necesitaban una solución y descubrí cómo resolverlos. En muchos casos, la solución está relacionada con el software. Pero comencé a disfrutar los tiempos en los que la decisión no estaba relacionada con el software, porque en esos días estaba expandiendo mi alcance y cruzando fronteras, enfocándome más en el lado comercial de las cosas.



¿Es más fácil decirlo que hacerlo? Tal vez. Por supuesto, esto depende de la voluntad de nuestro empleador de renunciar a la programación a un ritmo muy rápido. Pero he descubierto que muchas empresas están más que felices cuando los ingenieros quieren tomar la iniciativa para resolver problemas que van más allá del ámbito de la escritura de software. ¿Y si nuestra empresa no apoya la iniciativa? Entonces recuerde que somos ingenieros de software ... Podemos permitirnos ser un poco exigentes con las personas para las que trabajamos.



Si desea sumergirse en otras tecnologías, como aconseja el autor de la publicación, entonces, por nuestra parte, estamos listos para ayudar con nuestro conocimiento, mentores experimentados y apoyo. Será difícil, pero interesante. Y no se olvide del código de promoción siempre activo HABR, que agregará un 10% al descuento en el banner.





Otras profesiones y cursos
PROFESIÓN
















imagen



All Articles