Si alguna vez has mirado las descripciones de trabajo para personas que desarrollen código, a menudo notaras una falta de correspondencia en la forma en que se crean los puestos en todas las empresas. La mayoría de las veces, veras un título de trabajo que indica que la empresa está buscando contratar a un ‘programador’, ‘desarrollador’ o ‘ingeniero’. La mayoría de las veces: estas publicaciones las realiza alguien de recursos humanos que a menudo no se ocupa de ninguno de los aspectos técnicos del trabajo, y realmente no piensa en la connotación que cada palabra proporciona.
Al fin y al cabo, para las personas de esta profesión; siempre que demuestre ser efectivo en su puesto, la etiqueta que RH le ha asignado tiene muy poco significado y también puede usar estas palabras indistintamente. Pero como profesional técnico, ¡tal vez la connotación detrás de estas palabras tenga mucho significado para ti!
¿Cuál es la diferencia entre estos tres términos íntimamente relacionadas? Este es un tema que ha estado en debate durante años. Hay algunos matices en la definición auto descrita de todos, sin embargo, el comportamiento central de estos tres roles ha sido bastante estable en comparación con la perspectiva de todos.
El programador
Descubrirás que los comportamientos típicos de un programador están relacionados con ver una tarea servil o repetitiva y tratar de automatizarla.
Los programadores generalmente trabajan con un lenguaje y crean software que realizará una tarea. El código del software en sí suele estar muy inflado y puede estar lleno de antipatrones, pero aún así hace el trabajo. Por lo general, un programador puede escribir código con el lenguaje que elija, pero no comprende realmente la forma más efectiva de escribir su código. También puede faltar mucha de la semántica necesaria para colaborar en un entorno en el que varias personas contribuyen al mismo código base.
Sin embargo, esto no significa que los programadores sean ‘incompetentes’. A veces, no necesita una solución altamente escalable y extremadamente extensible; es posible que solo necesite algo que simplemente funcione . Es posible que la solución no funcione después de unos 6 meses, pero una solución que tomó de 10 a 20 minutos y mejoró la productividad o ahorró tiempo durante 6 meses sigue siendo una hazaña invaluable; y ser capaz de crear eso es una habilidad impresionante.
Los programadores son, literalmente, solo la punta del iceberg (o triángulo invertido) y la ‘programación‘ es una habilidad efectiva que no requiere ningún entrenamiento o estudio intenso para aprender.
El desarrollador
Es algo común que un desarrollador pase horas o días escribiendo código y finalmente salga del aislamiento para prepararse para enviar su trabajo. Luego se les dice que va a necesitar algunos cambios…
Los desarrolladores de software suelen trabajar rápido. Por lo general, conocen bien su pila, tienen una buena comprensión de su(s) lenguaje(s) de elección y saben cómo implementar diseños e ideas con código. Si necesita software; un desarrollador obtendrá resultados e incluso estará listo para repetir esos resultados durante la vida útil del software.
Los desarrolladores de software son muy completos y, por lo general, se mantienen actualizados con las tendencias actuales, como nuevas funciones de lenguaje, marcos o herramientas de desarrollo. Al igual que un programador, a menudo buscan automatizar su propio comportamiento a través de herramientas y bibliotecas para poder desarrollarse aún más rápido.
Entonces, ¿por qué querrías un ingeniero cuando solo puedes conseguir un desarrollador? La respuesta es simple, el desarrollador necesita una dirección técnica consistente. Muchas veces necesita ser explícito sobre lo que quiere del software. Por ejemplo, digamos que desea crear un sitio web para vender DVD a personas de todo el mundo. Le dirán que «no hay problema», cree una aplicación de reacción, conecte/cree un backend y obtenga un sitio web que permita a las personas hacer clic en el DVD que desean y luego se lo enviarán. Luego lo mirarás en el teléfono y dirás, «¿por qué se ve así?». Bueno, eso es porque no dijiste que querías que fuera compatible con dispositivos móviles.
Los desarrolladores son muy capaces; pero a menos que esté con ellos en cada paso del proceso de desarrollo, a menudo se desarrollan a un ritmo tan rápido que no piensan en ningún caso extremo. Su código a menudo necesitará una gran cantidad de refactorización y si su código no se verifica durante demasiado tiempo, se quedará con montañas de deuda técnica. Puede mirar el código de un desarrollador y decir, «¿pero por qué puso todo esto aquí?» o «¿por qué empezaste a usar camel case y luego cambiaste a kebab case mid function?». Los desarrolladores a menudo no se preocupan por el futuro y se centran principalmente en proporcionar resultados para el presente.
El ingeniero
Cuando acude a un ingeniero con un problema, a veces no le dará una respuesta inmediata. Le darán de 3 a 4 soluciones diferentes con ventajas y desventajas para cada estrategia e incluso lo ayudarán a tomar la mejor decisión entre las opciones.
El alcance del ingeniero de software es la totalidad del triángulo invertido. Se espera que tengan las mismas capacidades de programador y desarrollador; además de necesitar traer su propio conjunto de habilidades único. Puede pensar que un ingeniero de software es un experto absoluto en lenguajes de programación, pero a menudo un ingeniero pasará más tiempo mirando la documentación que un desarrollador.
Los ingenieros de software no evitan los problemas, los diseccionan. Toman un problema, luego crean subproblemas y más subproblemas, luego resuelven cada uno de ellos utilizando su gran experiencia y arsenal de teorías de Ciencias de la Computación, como el tan odiado tema de ‘Estructuras de datos y algoritmos’.
A los ingenieros de software les encanta la idea de la escalabilidad. Si alguna vez escuchas a un ingeniero de software presentar una idea y preguntarles «¿pero es escalable?» es muy probable que los vea hacer una pausa por un momento, luego le dará varias formas en que puede escalar y en qué medida. No necesitan memorizar las funciones y los métodos de un lenguaje porque saben exactamente cómo necesitarían manipular la estructura de datos con la que están trabajando, y saben exactamente cómo encontrar ese método en los documentos de un lenguaje.
Los ingenieros de software a menudo colaboran mucho y trabajan para definir cualquier caso límite posible, y tratan de anticipar todos los posibles errores que podrían enfrentar incluso antes de escribir cualquier código. Para ir un paso más allá, los ingenieros de software escribirán un código que pruebe el código que están escribiendo. Esto garantiza que puedan aislar inmediatamente un problema y enviar código de manera más segura.
Las habilidades de diseño de sistemas de un ingeniero de software pueden ser terriblemente buenas. A menudo, pueden traducir sistemas simples que podemos comunicar entre nosotros como humanos (como un juego de pacman), a una traducción que una computadora puede entender.
Puedo seguir y seguir sobre la amplitud y profundidad de los talentos y responsabilidades de un ingeniero de software, pero prefiero hablar sobre la desventaja de trabajar con un ingeniero de software, que es: ¡Son costosos! Como deberían ser; estas son personas que pueden ejecutar ideas en una infraestructura infinitamente escalable y extensible. El desarrollo con un ingeniero de software puede ser mucho más lento, especialmente al principio. Con el tiempo, un ingeniero de software puede construirle una infraestructura técnica tan sólida que puede aumentar la velocidad de desarrollo a velocidades que sorprenderán incluso a los accionistas.
Convertirse en ingeniero de software es difícil, porque es mucho más que aprender los entresijos de un lenguaje. Hay conceptos que necesitan ser entendidos y aplicados apropiadamente en cada escenario. Debe demostrar que puede manejar el diseño de sistemas de forma independiente y poder comunicar bien sus soluciones a través de la documentación y la comunicación directa cuando colabora. Los ingenieros de software saben que no saben todo, pero también saben que pueden aprender cualquier cosa.
Si bien RR. HH. puede tenerlo como un código de trabajo que no refleja su capacidad, es de esperar que pueda usar este triángulo para determinar dónde se encuentra y dónde le gustaría estar.