Lecciones aprendidas como ingeniero de software de nivel de entrada
Publicado: 2022-08-30Si me hubieras preguntado hace un año qué hacía un ingeniero de software, habría dicho algo como "resolver problemas a través del código". Es una respuesta simple que apunta a cómo se evalúa el trabajo que producimos. Para los ingenieros en equipos orientados al producto, estos problemas podrían incluir cómo implementar una nueva función que los clientes han estado solicitando o cómo mejorar el rendimiento de las funciones existentes.
Si me haces la misma pregunta hoy, te daría una respuesta ligeramente diferente. Los ingenieros de software tienen la tarea de resolver los problemas correctos a través del código y, cuando se resuelven de manera efectiva, logran los objetivos comerciales. Averiguar qué problemas resolver y cómo resolverlos es la parte más importante de ser un desarrollador, siendo secundarios los detalles reales de implementación.
Mi camino a la ingeniería de software
Me interesé en la programación después de tomar una clase en Upperline Code el verano anterior a mi primer año de universidad. Obtuve esta oportunidad a través de un programa de preparación universitaria y profesional del que formé parte llamado The Opportunity Network.
Upperline Code fue mi primera introducción a la programación, y rápidamente me di cuenta de que estaba interesado en aprender a programar. Más tarde ese verano, recibí mi paquete de inscripción de Notre Dame y me cambié de la Facultad de Artes y Letras a la Facultad de Ingeniería para poder especializarme en Ciencias de la Computación (CS).
Algunos de mis cursos favoritos de CS fueron Diseño/Análisis de algoritmos, Computación en la nube y Desafíos de programación. Los problemas fueron interesantes y los profesores fueron excelentes para presentar nuevas ideas y explicar conceptos.
A lo largo de la licenciatura, supe que quería trabajar como ingeniero de software y utilizar las habilidades técnicas que adquirí. Afortunadamente, el verano anterior a mi último año, tuve la oportunidad de hacer una pasantía como ingeniero de software en Kantata y programar en pareja con otros ingenieros para ayudar a ofrecer funciones.
Mi experiencia de pasantía, junto con las charlas de ánimo de mis profesores, me dieron la confianza para no conformarme con ningún otro puesto cuando comencé a solicitar empleo. Después de pasar mucho tiempo en horas de oficina, me gradué en 2021 con un título en informática y acepté una oferta para ser ingeniero de software asociado aquí en Sprout Social.
Instalarse en Sprout Social
Parte de ser nuevo en el puesto y nuevo en la empresa fue tener que desarrollar habilidades generales de ingeniería de software y conocimiento de dominio específico de Sprout. Descubrí que las tareas que requerían conocimientos generales de programación para comprender eran las más fáciles de resolver para mí. Sin embargo, las tareas que requerían el conocimiento de la arquitectura de Sprout me llevaron tiempo y tuve que confiar en mi equipo para obtener ayuda. Si bien hay algunos problemas que puede resolver leyendo la documentación en línea, no siempre puede encontrar información que sea relevante para el trabajo que está haciendo; poder pedir orientación a otros es crucial.
Una de las primeras cosas que me llamó la atención cuando me uní a Sprout fue cuán colaborativo es el proceso de desarrollo. Sabía que se necesitaban equipos completos para desarrollar funciones, pero no sabía cómo se veía eso en la práctica. Rápidamente me di cuenta de que lanzar una característica exitosa requería que muchas personas en diferentes roles trabajaran juntas, desde gerentes de producto que definían los requisitos del proyecto hasta diseñadores que creaban maquetas e ingenieros que implementaban características. La colaboración no era algo opcional, sino una necesidad para lograr los objetivos de nuestro equipo.
Aprender a navegar a través de las diversas bases de código y construir un modelo mental de cómo los diferentes servicios interactuaban entre sí fue una curva de aprendizaje pronunciada. Dado que el negocio principal de Sprout es el software, su arquitectura está fuertemente determinada por sus requisitos comerciales. A medida que avanzaba, tenía que estar al tanto de los problemas comerciales que los desarrolladores estaban tratando de resolver y por qué se tomaron decisiones arquitectónicas anteriores.
Inicialmente, me intimidaba un poco que las solicitudes de incorporación de cambios requirieran revisiones antes de que pudieran fusionarse con el código base. Comprender que el objetivo principal de las revisiones de código es compartir conocimientos y mantener los estándares del código ayudó a cambiar mi perspectiva.
Pasar por revisiones de código me ha ayudado a mejorar mis habilidades técnicas y a mejorar la calidad de mis solicitudes de incorporación de cambios. Ha sido muy útil que mis compañeros me den consejos sobre qué cambiar, me presenten nuevos patrones y me indiquen áreas relevantes de la base de código. Leer las solicitudes de extracción de otros ingenieros también me ha brindado una valiosa visibilidad de otros servicios en los que no estoy trabajando directamente.
Tus experiencias previas importan
Prevalece la idea de que a medida que ingresas a nuevas etapas en la vida, tus experiencias anteriores ya no importan. Una vez que ingresas a la universidad, tus experiencias en la escuela secundaria ya no importan. Una vez que ingresa a la fuerza laboral, sus experiencias universitarias ya no importan.
Pero algo que a menudo se pasa por alto es que nuestras experiencias, conocimientos y hábitos tienen un efecto combinado. Por lo general, solo podemos lograr cosas nuevas gracias al trabajo que hemos hecho antes. El conocimiento y las habilidades que obtuve anteriormente han influido en gran medida en la forma en que abordo los nuevos desafíos como ingeniero de software de nivel de entrada.
Las clases durante la licenciatura que tuvieron el impacto más directo en mi trabajo diario en Sprout fueron Desafíos de programación y Conceptos de bases de datos. El primero me enseñó cómo dividir grandes problemas en partes más pequeñas para resolverlos de manera más eficiente. Me ayudó a ser más intencional sobre cómo estructuré mi código y mejoré la legibilidad de mi código.
Conceptos de bases de datos me enseñó conceptos fundamentales de bases de datos relacionales y cubrió temas como el diseño de esquemas de bases de datos y SQL. Aprendí a escribir consultas, lo cual ha sido de gran utilidad ya que frecuentemente necesito consultar nuestras bases de datos para resolver problemas o responder preguntas.
Las oportunidades que tuve fuera del salón de clases fueron igualmente valiosas. Java no era un lenguaje que se cubriera en la mayoría de mis cursos, sin embargo, tuve la oportunidad de trabajar en él para un proyecto empresarial que estaba liderando uno de mis profesores. Obtuve experiencia práctica escribiendo Java, trabajando con bases de datos MySQL y creando imágenes de Docker. Aprender Java fue especialmente útil ya que la mayoría de los servicios de Sprout están escritos en él.
Hay muchas otras habilidades que obtuve durante mi tiempo en la licenciatura que doy por sentadas, como navegar por la línea de comandos y comprender los conceptos básicos de programación. Es un error común pensar que, dado que la mayoría de los temas que se cubren en la licenciatura son de naturaleza teórica, no lo prepararán para las carreras de ingeniería de software. Sin embargo, creo que es todo lo contrario: las habilidades que aprendes en la licenciatura importan, incluso si no son directamente aplicables a tu trabajo diario.
La informática es un campo extremadamente amplio.
CS cubre una variedad de especializaciones como inteligencia artificial, aprendizaje automático y ciencia de datos. La experiencia que obtiene en la licenciatura sirve como conocimiento fundamental que puede servirle bien en una variedad de roles de nivel de entrada que no son exclusivos de la ingeniería de software. Dar el salto de la licenciatura a un puesto de tiempo completo brinda la oportunidad de explorar qué tipo de rol y especialidad es el más adecuado para usted.
Si está buscando comenzar una carrera en ingeniería de software, Sprout es un excelente lugar para comenzar.