domingo, 7 de octubre de 2018

El desarrollador, la empresa y la sociabilidad

Es común tener la imagen típica del desarrollador de software introvertido, con problemas para comunicarse apropiadamente, también es común el programador, que sin ser tímido, decide aislarse del resto del equipo para centrase únicamente en su trabajo. En ambos casos esa percepción y comportamiento es completamente erróneo, además de inservible tanto para las necesidades de la empresa, como para las necesidades mismas del desarrollador.

Los motivos para que se de esta imagen, y este comportamiento son diversos, en parte es porque clásicamente esta profesión es difícil de comprender para no los no introducidos en ella. si bien uno puede generar empatía, por ejemplo, con el trabajo un medico aunque no se fuera ducho en su profesión, no pasa pasaba lo mismo con el desarrollo de software. No se alcanzaba a comprender que era exactamente la construcción de sistemas, lo cual creaba una brecha entre el desarrollador del software y los consumidores de dicho software, esto es incluso a nivel empresarial y social. Mientras que es fácil establecer un entendimiento claro sobre las necesidades de un puesto de trabajo cualquiera entre empleado y empleador, no ocurría los mismo cuando el empleado es desarrollador y el empleador no (y esto era así en ambas direcciones).


El acercamiento general de la tecnología a la sociedad dado en los últimos años, y representado sobre todo por el uso de los teléfonos inteligentes (sorprendentemente por encima incluso de las necesidades de la informática en forma laboral), ha contribuido a que la brecha se disminuya en cierta forma, si bien no hay un entendimiento completo, si queda claro que se necesita de la capacidades de un desarrollador de software, o por lo menos del desarrollo de software en sí.

Desde el punto de vista de la misma profesión, creo que académicamente se fomenta la parte poco social e introvertida del desarrollo de software. Esta carrera requiere grandes dosis de introspección, es necesario dedicarle horas, trabajo y esfuerzo de forma individual, pero también es cierto que a nivel universitario, se enseñan a comprender las soluciones, antes de plantear los problemas, se enseña antes a programar, que a saber por qué se programa. En la carrera se instituye el uso de las matemáticas y de la lógica, como un eje central en el desarrollo de software, y esto se mantiene como un mantra posteriormente. Si bien las matemáticas y la lógica son importantes, no dejan de ser herramientas a usar, sin embargo el saber reconocer necesidades, a trabajar e interactuar correctamente en un equipo de trabajo, son habilidades que no se establecen apropiadamente en ámbito universitario.

Un ejemplo de lo anterior son la enseñanza de las base de datos. Las base de datos tiene una importancia empresarial enorme y digamos que son un solución directa para un problema en especifico, sin embargo quedan pobremente explicadas en la mayoría de las carreras universitarias. Cada vez que entrevisto a un candidato para un puesto de trabajo, el punto débil son las base de datos. Los nuevos programadores no comprende el alcance y la necesidades del uso de las base de datos, e incluso programadores veteranos, tratan a la base de datos como si fuera programación imperativa y estructura, en lugar de ser declarativa y lógica, llenando un sinfín de procedimientos almacenados con lógica de negocio, y teniendo graves temas de ineficiencia al acceder a los datos. En estos casos tanto la parte matemática/lógica como la parte de base de datos están explicadas (en distintas asignaturas), pero al no establecida y identificada correctamente la necesidad, no sirve la explicación de lo uno o de lo otro.

Ya en un ámbito empresarial el desarrollo de software puede encontrarse con las siguientes circunstancias:

  •  Poco entendimiento de los procesos y necesidades empresarial.
  •  poco entendimiento de la empresa sobre el rol de desarrollador de sistemas.
  •  Poca interacción y compresión de su propio equipo de trabajo


Más concretamente la asocialidad y falta de iteración personal del desarrollador pueden generar los siguientes problemas:

  • No entender claramente las requisitos del software a desarrollar, creando soluciones técnicamente correctas pero que no resuelven ningún problema real, con lo que se alagara la construcción del sistema de forma sustancial y se reducirá la calidad de este.
  • Fallar en su capacidad de negociación, lo cual encararía a dos escenarios:

    • Problemas para negociar tiempos, recursos y alcancen en sus proyectos, lo que acarreara retrasos, e inconformidad en el cliente y en la misma empresa.
    • Problemas para negociar un salario adecuado. no sabrá valoran adecuadamente cuánto vale su trabajo, aceptando una retribución inferior a la se merece. Este tema es más profundo de lo que parece, por que crea un precedente en mercado, si los desarrolladores de software no sabe negociar apropiadamente su salario, su precio o valoración bajara. Esto quiere decir que el sueldo que pueden cobrar los desarrolladores de software bajara en su conjunto, por que las empresas podrán pagar menos dinero para contratar a un programador (es como querer algo por un precio justo, cuando otra persona lo está regalando)

Los siguientes consejos pudieran ser útiles:

Es importante participar en la reuniones. A veces los desarrolladores adoptan una actitud pasiva esperando recibir instrucciones, sin saber muy bien porque están en una reunión en particular. En el mejor de los casos se quedan esperando a que alguien le ceda la palabra para poder intervenir. Es necesario que el desarrollado se “ceda” la palabra al es mismo, que busque activamente su participación, que exprese sus ideas y sus inquietudes sin que nadie se las pregunte, es completamente necesaria y beneficiosa la participación del desarrollo en la reuniones, y eso es algo que solo el mismo desarrollador (y nadie mas) puede provocar.

No solo hay que hacer un buen trabajo, tenemos que promocionar nuestro trabajo, hacer relevante nuestro trabajo, “No basta con ser bueno, hay que parecerlo”. frecuentemente los desarrolladores que realizan un trabajo de calidad, esperan que su trabajo hable por sí solo, lo cual generalmente no pasa. Un desarrollo de calidad no solo implica la resolución de las necesidades presentes sino estar preparado para solucionar las futuras (debe ser escalable), y eso algo que no se percibe inmediatamente, es algo que se tiene que se debe explicar (y vender correctamente).

también es necesario que realice actividades fuera de la oficina que le ayuden a socializar con los mismos compañeros, pueden ser deportes (como futbol o tenis), o algún otro tipo de actividad alejado de las computadores. En cualquier caso es muy recomendable hacer algún tipo de ejercicio físico, esto ayudara a desentrenarse y cuidar la salud (Es mejor tener un condicionamiento físico adecuado que nos ayude tanto a mantenernos despiertos, como a dormir cuando debamos, que a atiborrarnos de café o bebidas con cafeína, que solo nos alteran el sueño y el estado de ánimo).

Como conclusión, la proactividad es el elemento clave, un desarrollador debe ser el que inicie el proceso a su propio crecimiento, debe saber (y buscar) interactuar empresarialmente. Es muy raro se den oportunidad, por si solas, el desarrollador debe fabricar las suyas.