Sentirse estúpido como ingeniero de software profesional temprano | Autor: Sherry Yuan | Noviembre de 2021
Pasaste medio día en un error antes de pedir ayuda a un compañero de equipo más veterano. Lo miran, hacen clic un poco en el código base, cambian uno de los parámetros que pasa y luego lo arreglan en 10 minutos. Fue entonces cuando comenzó el síndrome del impostor, al menos para mí: «Eso es demasiado obvio. ¿Por qué no puedo resolverlo? ¿Soy lo suficientemente inteligente como para ser programador?»
Muchos no ingenieros, studelectróniconts y los primeros ingenieros profesionales se convertirán en buenos programadores e «inteligentes» juntos. Escuché a mis amigos decir «No soy lo suficientemente inteligente para ser programador» y «Él es un ingeniero de software; ¡debe ser muy inteligente!». A menudo escucho «inteligencia» relacionada con la ingeniería de software, lo que me hace sentir muy extraño. Porque después de trabajar en la industria durante algunos años, obviamente hay muchas otras habilidades involucradas: trabajo en equipo, coaching y gestión del tiempo, por nombrar algunas. Pero en este artículo, ignoraré todos estos y solo compartiré mis puntos de vista sobre la inteligencia como concepto; ¿qué significa ser inteligente de todos modos?
En 1963, un psicólogo llamado Raymond Cattell propuso dos formas de inteligencia muy diferentes, a saber, la fluidez y la cristalinidad. Cuando la gente dice «inteligencia» en el contexto de la programación, suele pensar en inteligencia fluida, la capacidad de utilizar el razonamiento abstracto para resolver nuevos problemas. Los ejemplos de inteligencia fluida incluyen la resolución de acertijos y la visualización de patrones en estadísticas.
Pero el problema es que el problema en el que está atrapado puede no ser un problema completamente nuevo para sus compañeros de equipo senior. Lo más probable es que hayan encontrado problemas similares antes y hayan recordado y aplicado las soluciones que encontraron la última vez. Esta es la inteligencia cristalina, una base de conocimiento de hechos y procedimientos que una persona ha aprendido. Otros ejemplos son el vocabulario y la memorización de citas de sus películas favoritas. Aunque la inteligencia fluida alcanza su punto máximo en los años 20, la inteligencia cristalina aumenta con la edad y la experiencia a lo largo de la edad adulta.
Otro ejemplo que podría considerar la inteligencia fluida: sus compañeros de equipo más avanzados integraron una nueva biblioteca que acortó el tiempo de carga de la pantalla en 5 segundos. Sus documentos de diseño y solicitudes de extracción parecen muy complicados. ¿Saben cómo hacerlo porque son inteligentes? Bueno, es posible que no se les ocurra esta idea simplemente a través de mucho razonamiento abstracto inteligente. Han pasado años comprendiendo los factores sutiles que pueden afectar el tiempo de carga y es posible que hayan investigado mucho sobre las bibliotecas que agregaron. Es principalmente inteligencia cristalina, más un poco de inteligencia fluida para sintetizar todo. Cuanto más tiempo trabaje como ingeniero de software, menor será la frecuencia de encontrar nuevos problemas.
La idea inteligente de los ingenieros de software, cuando la inteligencia es sinónimo de inteligencia fluida, puede ser más perjudicial para los grupos subrepresentados en la tecnología, porque muchos de ellos no tienen tiempo suficiente para acumular conocimientos y experiencia en programación. Según la encuesta de desarrolladores de StackOverflow de 2020, las mujeres escriben la primera línea de código en promedio 1,7 años más tarde que los hombres. Puede ser tan flexible como sus compañeros, pero ponerse al día en términos de inteligencia cristalina (esto ignora todas las demás características y habilidades involucradas en la ingeniería de software). Sin embargo, a medida que usted y sus compañeros adquieren experiencia en programación a tiempo completo en su carrera, de hecho, ellos escriben su primer Python println(“Hello world”)
Se volverá cada vez menos importante.
Es posible que parte del trabajo realizado por ingenieros superiores aún esté más allá de su capacidad, pero si continúa trabajando y aprendiendo a través de proyectos más desafiantes, eventualmente alcanzará su objetivo. Esta comprensión ayuda a aliviar parte de mi síndrome del impostor.
He encontrado los siguientes métodos para ayudar a agregar más conocimientos de ingeniería de software a su inteligencia cristalina:
- ¡Escribe más código! Si realmente te gusta trabajar en un proyecto paralelo, genial, pero si no te gusta, entonces no hay presión, el proyecto de trabajo es suficiente para acumular conocimientos.
- Tómese una hora para aprender sobre su IDE. Los IDE modernos son muy poderosos, y aprender los atajos de navegación y las herramientas de depuración significa que podrá escribir, depurar y comprender el código más rápido. Por ejemplo, en este discurso de Android Dev Summit, aprendí que los puntos de interrupción condicionales y las etiquetas de variables de Android Studio tuvieron un gran impacto en mi velocidad de trabajo.
- Los discursos y los artículos son excelentes recursos con los que los ingenieros experimentados pueden compartir su sabiduría. La gran cantidad de videos y artículos sobre un solo tema puede ser abrumadora y la calidad varía ampliamente. En caso de duda, le sugiero que revise el contenido de conferencias o empresas conocidas, ya que suelen tener un proceso de revisión para garantizar un contenido de alta calidad. También puede pedir sugerencias a sus compañeros de equipo.
- Los cursos en línea son excelentes para comprender conceptos de nivel superior. Aprendí más sobre el sistema Gradle en este curso gratuito de Udacity, en lugar de copiar y pegar ciegamente los comandos de Stack Overflow cada vez que fallaba la sincronización de Gradle durante tres años.
- Investigue la base de código en la que está trabajando. Hasta que vea ejemplos específicos en el código, los patrones arquitectónicos y los conceptos de diseño de sistemas generalmente no se hacen clic en realidad.
- Si necesita pedirle a un miembro del equipo con más experiencia que corrija el error, asegúrese de comprender la solución y la causa raíz. De esta manera, puede corregir errores con causas potenciales similares usted mismo en el futuro.
- Descubra cómo sus compañeros de equipo encontraron soluciones. Cuando los dos estén programando en pareja, preste atención a cómo exploran la base de código y qué recursos consultan, y haga preguntas para comprender su proceso de pensamiento. StackOverflow es obvio, pero tal vez conozcan otro sitio web que contenga buena documentación sobre la biblioteca específica que usa su equipo.
- ¡Haz una revisión de código! Y hágalos fuera de la navegación en bruto y LGTM. Las solicitudes de extracción de muchos de sus compañeros de equipo serán soluciones a problemas que aún no ha encontrado. Al comprender sus métodos, cuando encuentre problemas similares, ya existen soluciones en su base de datos de conocimientos. Incluso si este no es un problema nuevo para usted, siempre es interesante ver cómo otros lo resuelven, y las discusiones que pueden surgir durante el proceso de revisión del código son excelentes oportunidades de aprendizaje. Si encuentra algo poco claro, haga preguntas. No se avergüence de estar confundido; para los autores, esta es en realidad una señal útil de que es posible que deseen volver a verificar esa parte del código en busca de errores, o refactorizarlo para mayor claridad.
Eso es todo por ahora, ¡gracias por leer!