¿Quién es un programador moderno? Conocimiento profundo vs Visión amplia

9 septiembre
¿Quién es un programador moderno? Conocimiento profundo vs Visión amplia
¿Quién es un programador moderno? Conocimiento profundo vs Visión amplia

Llevo 35 años trabajando en IT y más de 20 de ellos en desarrollo de software, principalmente como coach. Durante este tiempo, brindé todo tipo de soportes: seguridad de la información; implementación de procesos con un profundo conocimiento del negocio del cliente; docencia, mentoría, formación y charlas. Y lo más importante, participé en la creación de equipos que pueden hacer casi cualquier cosa y disfrutan haciéndolo. Porque al equipo le gusta su trabajo y a sus miembros les gusta trabajar juntos.

A la hora de sentarme a escribir este artículo, recordé que había pasado mucho tiempo desde mi última entrevista. Y hablar es un proceso interesante: estimula las neuronas y, al mismo tiempo, es bueno para la autoestima. Entonces pensé: ¿por qué no auto-entrevistarme? Es conveniente, seguro y divertido, y lo suficientemente extraño como para interesarle a alguien. Y, por supuesto, ilustra mis propias habilidades universales: incluso en situaciones que no son estándar, puedo hacer y responder preguntas. Entonces, sentado cómodamente en mi hogar, me hice a mí mismo las siguientes preguntas.

- En base a tu experiencia ¿el interés por los especialistas universales es una tendencia de los últimos años?

- Es un poco más complicado que eso. Cuando hablamos de las diferencias entre los humanos y otras especies vivas, casi siempre nos viene a la mente la capacidad de manejar herramientas. Si bien una nutria puede romper una ostra con una piedra, fue nuestro ancestro lejano quien tomó el palo y determinó el futuro de todo el planeta. Porque ese palo era una herramienta universal: se podía usar de bastón, para alcanzar la fruta de un árbol, medir la profundidad de un charco, pinchar un hormiguero e incluso defenderse de un enemigo.

La modernización de ese palo dio lugar posteriormente a herramientas especializadas, como la lanza, pala, rastrillo, arco, entre otras, que podrían ser utilizados fácilmente por la misma persona para resolver problemas específicos: el especialista universal de su tiempo. Pero lo principal aquí siempre ha sido el cerebro humano, que permite aprender nuevos conocimientos, ampliar el rango de habilidades y obtener ventajas competitivas que son cruciales para una mayor supervivencia.

La especialización comenzó en la Era Industrial, especialmente con el advenimiento de la producción en masa. A una persona que se pasó toda la vida atornillando las patas de los sillones en una fábrica de muebles, una vez que la empresa cerró por no poder resistir a la competencia, le resultó extremadamente difícil encontrar trabajo.

En la historia de las TI, al principio, los lenguajes de programación eran como ese palo del hombre primitivo. Con la ayuda de códigos y ensambladores, fue posible demostrar todo lo que puede hacer una máquina de procesamiento de datos electrónicos. Sin embargo, trabajar con ellos tomó mucho tiempo y fue bastante inconveniente para el desarrollador. Por lo tanto, los lenguajes de alto nivel como PL, REXX y Fortran surgieron con bastante rapidez. Al mismo tiempo, no hay que olvidar que un lenguaje de programación es un lenguaje de comunicación como cualquier otro. Simplemente nos permite comunicarnos no solo entre nosotros, sino también con las máquinas. Esto significa que amplía el círculo de contactos, haciendo que nuestra capacidad de comunicación sea más universal.

- ¿Creés que la idea de la universalidad se relaciona estrechamente con la profesión del programador?

- Existen programadores de amplia experiencia que se suman a determinados proyectos con la perspectiva de continuar durante muchos años en un mismo sector, por ejemplo, el bancario. En esos casos, hay programas que pueden permanecer sin cambios durante mucho tiempo porque se adaptan a todos los que entran en contacto directo con ellos. En tal nicho, se puede codificar con relativa facilidad hasta alcanzar la edad jubilatoria. Pero, por un lado, el número de este tipo de trabajos es limitado y, por el otro, ¿es interesante hacer tal actividad? Incluso si una persona no le teme al aburrimiento y se siente más atraído por el sueldo (que suele ser la causa principal para dedicarse a una tecnología pasada de moda), ¿está preparado para correr el riesgo de no conseguir un nuevo trabajo, en caso de necesitarlo? Un programador con mucha experiencia y pocas posibilidades es el más extraño del mercado laboral. Puede inspirar simpatía, pero es muy raro que se los busque para sumarlos a los proyectos.

Todos los demás programadores operan en diferentes condiciones: deben mantenerse aprendiendo constantemente: o tendrán que profundizar su conocimiento en la especialización elegida inicialmente, cuyas herramientas cambian drásticamente (un ejemplo: C, C ++, C #, Golang), o mirar a su alrededor con cuidado. Lo mejor es hacer ambas cosas.

Una vez que comprenda cómo funciona el programa -desde presionar Enter hasta guardar información en la base de datos- será mucho más fácil detectar errores en su código. Una vez que comprenda cómo funciona el negocio del cliente y por qué estamos desarrollando un nuevo sistema, será mucho más fácil detectar inconsistencias lógicas y sugerir formas de mejorar el producto de salida. Las personas que sean buenas en eso, serán las más populares en cualquier proyecto, especialmente si utiliza herramientas avanzadas.

Las tecnologías mismas se están desarrollando ahora hacia el sincretismo, la intersección densa e incluso la fusión parcial de diferentes direcciones. Tomemos, por ejemplo, MLOps: combinación de tecnologías y enfoques de Machine Learning para implementar modelos desarrollados en procesos comerciales. Es muy importante que esta nueva área específica busque la forma de organizar la cooperación entre representantes comerciales, matemáticos, especialistas en ML e ingenieros IT. Esto no sería posible si no hablaran todos el mismo idioma, es decir, no dominaran las disciplinas relacionadas con su principal especialización. Hoy en día, un especialista debe ser bueno en al menos tres áreas (además de la especialización con la que llegó al proyecto, la que ya domina); debe ser capaz de comprender tanto su terminología, como mentalidad. ¿Es interesante trabajar en un proyecto MLOps? No creo que muchas personas rechacen esa oportunidad. ¿Se contratará a una persona que no esté preparada para ampliar sus competencias? Es poco probable, incluso si esa persona ha sido durante mucho tiempo un profesional brillante en su estrecho nicho.

Pero debo decir que esta no es una característica específica de TI. Toda la ciencia moderna opera en una intersección de disciplinas que se entrelazan, interactúan y se complementan entre sí. Astrofísica, bioquímica, geografía histórica. La arqueología ha estado estrechamente relacionada durante mucho tiempo con la etnología y la genética. El uso simultáneo de conocimientos de diferentes campos ayuda a realizar descubrimientos nuevos, a veces inesperados.

- Entonces resulta que la universalidad es, principalmente, tener habilidad de entender a colegas de otras especializaciones ¿es así?

- En general, la programación está mucho más cerca de la lingüística que de las disciplinas clásicas de la ingeniería. Esto es muy evidente en la interacción entre ingenieros y empresas. Todos sabemos que los clientes no acuden a nosotros para, digamos, migrar su sistema a una nueva plataforma tecnológica. Su requerimiento, en cambio, es poder procesar más información, reducir el tiempo de inactividad o atender a más usuarios. Si se asume una tarea puramente técnica, se puede crear un producto de calidad pero que el cliente no necesita en absoluto.

Por lo tanto, la máxima eficiencia se logra cuando cada miembro del equipo comprende no solo lo que está haciendo en el proyecto, sino también por qué lo está haciendo. Por regla general, no es posible sin comprender el área de dominio, es decir, la esencia del negocio del cliente. Esto significa que ya se requiere una cierta universalidad de conocimiento del programador.

- ¿Todos necesitan saber lo suficiente sobre tecnología y negocios?

- ¿DEBEN saberlo? No. Pero es extremadamente útil para trabajar, comunicarse con colegas y comprender lo que está sucediendo en diferentes niveles. Una especialización importante comenzó con la escisión del rol de los administradores de bases de datos. Era la primera vez que necesitábamos personas que tuvieran un conocimiento profundo de los aspectos específicos de la creación de scripts y la configuración de DBMS de diferentes proveedores. Sin embargo, esta especialización fracasó. Y tan pronto como salió el DBA, muchos desarrolladores dijeron que podían escribir el código como quisieran porque el administrador vendría y optimizaría todo, pero luego se cansaron de responder la pregunta "¿por qué mi consulta SQL es tan lenta?"

Esta extraña situación se resolvió con una decisión firme: el desarrollador de backend debe comprender todas las características principales de la base de datos para la que está escribiendo consultas SQL. En estos días, es decente acercarse al DBA solo con problemas menores que a menudo requieren una investigación separada para la cual las personas simplemente no tienen tiempo, y los administradores de bases de datos regresan con una solución específica para un problema específico, que podría haber estado relacionado, por ejemplo, con la configuración a nivel del sistema de archivos o con la creación de índices de clúster. Pero para que esto funcione, los programadores tienen que aprender las características dialécticas del idioma particular que hablan los administradores de la base de datos.

Lo mismo sucedió al dividir el desarrollo en áreas frontend y backend. La especialización siempre permite profundizar en un tema, pero reducir la visión tiene un alto precio: la comunicación con personas de otras especializaciones se vuelve más difícil. Una de las manifestaciones modelo de universalidad es fullstack. Si alguien quiere comprender mejor cómo funciona la arquitectura en su conjunto o, por el contrario, comprender cómo el usuario interactúa con el sistema, probablemente le permitirá prescindir de "traductores" costosos e inconvenientes, incluso si la persona sigue trabajando principalmente como desarrollador frontend o backend. Aquí llegamos a un punto vital: escribir un código que funcione de manera óptima es mucho más divertido que escribir un código que funcione normal.

- ¿Quién puede llamarse a sí mismo un especialista universal?

- El especialista universal no es una persona que ha dominado otra tecnología desconocida para él. Por el contrario, sigue las tendencias modernas y está dispuesto constantemente a invertir tiempo, atención y energía en aprender cosas nuevas. Si hablamos de un área de negocio basada en dominios, diferentes proyectos pueden requerir un nivel completamente diferente de compromiso y comprensión de los procesos del cliente. Esto no es nada nuevo. Siempre se ha asumido que, si no sos solo un codificador sino un desarrollador, necesitarás conocer el área temática tanto como continuar tu desarrollo en el mundo de la tecnología. No se trata de conocer dos, tres o cinco lenguajes, enfoques o métodos de programación. La universalidad es, ante todo, la capacidad de aprender constantemente.

Por ejemplo, en DataArt, tenemos un grupo de investigación de IA. Es una comunidad abierta donde personas de diversas industrias y antecedentes profesionales debaten cómo aplicar la IA en el lugar de trabajo. Vienen y hablan, incluso si su campo no tiene nada que ver con la IA en este momento. Esta ampliación de sus conocimientos les permite pensar fuera de la caja en el futuro.

Si elegiste una dirección e ingresaste en un gran proyecto en el que tenés la intención de pasar mucho tiempo, vale la pena mirar las tecnologías que pueden ser útiles para el mismo. Pero tarde o temprano, todos los proyectos terminan y deberías preguntarte "¿qué quiero hacer después?"

Por ejemplo, DataArt ha desarrollado una mesa especial para facilitarle a los profesionales la búsqueda de nuevas áreas de desarrollo técnico. Esto les permite determinar el nivel de conectividad entre las nuevas tecnologías y las tecnologías que ya conocen, una estimación aproximada del tiempo que tendrán que dedicar al estudio de un nuevo campo y proporciona un conjunto recomendado de cursos.

La formación no es una pérdida de tiempo, sino una inversión en su forma más pura. Siempre existe el riesgo de que esa inversión no dé sus frutos, pero si no se invierte, directamente no obtendrá nada. Es necesario mirar el mercado y las tendencias, así como diversificar el paquete de inversión para reducir el riesgo. Sin embargo, la historia de vida de cada uno a menudo dicta en qué dirección debe moverse. Aquí hay un ejemplo realmente reciente: uno de nuestros desarrolladores de frontend tomó el backend y después de 3-4 meses fue invitado a unirse al proyecto como fullstack, con un aumento salarial significativo. Pero debido a que también pasó mucho tiempo trabajando en equipo y ordenando el proyecto (¡no era alguien a quien no le importara!), seis meses después le ofrecieron convertirse en líder de equipo. Lo importante siempre es seguir aprendiendo.

Está claro que cada persona tiene recursos limitados de tiempo y energía, por eso deberás escucharte a vos mismo: ¿estás listo para asumir la carga adicional y podés estudiar con regularidad? A veces tendrás que admitir que estás cansado y necesitas un descanso, al menos por un tiempo. Un zapatero que hace sandalias no necesita ser pintor, pero si aprende a coser botas, tendrá demanda durante todo el año. La dificultad para ampliar un conjunto de habilidades probablemente será menor que si se dedica tiempo a algo completamente desconocido.

Por cierto, no me gusta el término "reentrenamiento" que se utiliza frecuentemente, como si el conocimiento antiguo hubiera desaparecido y el nuevo se hubiera escrito en su lugar. Esto es fundamentalmente incorrecto: para los generalistas, su pericia crece cada vez y la experiencia que acumulan sirve para un futuro mejor. Por tanto, es más adecuado hablar de "formación extra". Al mismo tiempo, nada impide profundizar conocimientos dentro de la especialización principal: los programadores valiosos son expertos reconocidos en su campo y pueden hablar fácilmente con especialistas de especialidades afines y saber mucho sobre su área. Incluso si no están tan inmersos en el tema como en su propia especialización principal.

- ¿Es posible probar la propia versatilidad?

- En primer lugar, para entender una nueva tecnología, es necesario que resolver algún problema real con ella. Puede ser un proyecto bajo la supervisión de un especialista, un proyecto paralelo o incluso una tarea práctica dentro de un curso. En cuanto al alcance de los intereses, solo basta con mirar lo que se ha estado aprendiendo recientemente, qué libros y artículos se han leído.

Los especialistas universales también se interesan por el mercado, hacen que las vacaciones o licencia de alguno de los miembros del equipo no detenga el proyecto y son buenos para encontrar problemas. Después de completar el proyecto, es mucho más fácil continuar con ese empleado ofreciéndole una nueva tarea. Pero también es importante que cualquier especialista con una gama bastante amplia de habilidades, pueda elegir el proyecto más interesante por sí mismo. Esto abre amplias oportunidades de mejora y, por lo tanto, la persona puede centrarse en una nueva área de conocimiento, simplemente gracias a una mente bien entrenada.

- ¿Se siguen solicitando especialistas con un perfil más estrecho?

- En este punto, me gustaría llamar la atención sobre la sutil distinción entre los conceptos de artesano y maestro. Ambos son necesarios e importantes. Existen uno al lado del otro y a menudo se complementan entre sí. Aquí hay algunas definiciones que acabo de recoger de Internet, que creo que reflejan bien la diferencia entre ellas:

El maestro es un creador y trata su trabajo con amor. Esta creatividad le trae no solo alegría, sino también preguntas difíciles y una dolorosa búsqueda de respuestas a ellas.

El artesano es un contratista de clase alta que regularmente hace el trabajo que le gusta. Disfruta de este trabajo, pero no crea nada.

Son los maestros, no los artesanos, quienes siempre han contribuido al desarrollo de la humanidad en todas las esferas de actividad. 

En mi opinión, muchos especialistas modernos de perfil estrecho inicialmente eligen TI como oficio. Porque es una industria prometedora, de moda o simplemente rentable. Pero la velocidad del cambio en esta área es tal, que el simple hecho de atornillar las patas en los sillones nunca funciona. Cuando dominás un marco, aparece otro. Como resultado, la propia naturaleza del trabajo nos hace aprender constantemente. Hacia el desarrollo y el dominio.

***

Estoy muy satisfecho con la conversación detallada que tuve conmigo mismo. ¿Y vos? ¿Creés en la universalidad? ¿O quizás es mejor navegar en un barco sólido y estable? ¿Quizás alguien haya descubierto una tercera opción?