De entre los valores que tenemos en decide4AI, hay uno al que damos especial importancia: la excelencia.
Según el Diccionario de la Real Academia Española la definición de excelencia es: «Superior calidad o bondad que hace digno de singular aprecio y estimación algo». Definitivamente es necesario concretar un poco más. Con esta definición, ninguna persona de decide4AI podría saber qué se espera exactamente de ella cuando le decimos que la excelencia es un valor clave para la compañía.
Por esto es importante aclarar qué consideramos en decide4AI como excelencia en el ámbito del Desarrollo del Software, y qué pedimos a nuestros empleados ubicando este valor como piedra angular de nuestra compañía.
Para nosotros la excelencia, en lo que se refiere al desarrollo del software, puede concretarse en los siguientes aspectos:
- Maestría / Conocimiento
- Pasión / Orgullo
- Honestidad / Humildad
No creemos en el concepto habitual (al menos en España) del ‘programador’, como persona que no tiene que entender nada y sólo debe leer un diseño (escrito por un ‘diseñador’) y transformarlo en líneas de código. Es imposible desarrollar un software de calidad de esta manera.
Para nosotros el único perfil válido es el del desarrollador, y no el del programador (concepto que queda bastante bien definido en este artículo). Y un desarrollador de verdad debe tener la excelencia como una de sus principales cualidades.
Maestría / Conocimiento
Una de las patas que soportan la excelencia en general, y en el mundo del software en particular, es el conocimiento. El software es una disciplina del conocimiento realmente vasta, no sólo por la cantidad y variedad de distintos paradigmas y lenguajes de programación que existen, sino también por las distintas metodologías, patrones de diseño, frameworks, entornos de desarrollo, buenas prácticas, etc. Dominarlos todos es imposible (¿o no?), pero tampoco es necesario hacerlo para ser un desarrollador excelente. Ahora bien, lo que sí es necesario es, al menos, dominar los que se utilizan:
Lenguajes de Programación
Para ser un desarrollador excelente tienes que dominar los lenguajes de programación que utilizas. Y no nos olvidemos de que dominar un lenguaje no consiste sólo en dominar su sintaxis. Para dominar un lenguaje debes tener al menos nociones básicas sobre su entorno de ejecución y su compilador (en caso de tenerlo). Además, será necesario conocer las librerías más populares escritas para este lenguaje, así como las buenas prácticas definidas para el mismo. Habrá que conocer también las herramientas más populares para garantizar la calidad del código. Y a esto, sumarle muchas horas de trabajo. No nos olvidemos de que el desarrollo del software es una artesanía, y que, por lo tanto, no se aprende en los libros, sino con la experiencia.
Contextos Metodológicos
También es imprescindible para alcanzar la excelencia como desarrollador, conocer el detalle del contexto metodológico en el que se trabaja. Creemos que un buen desarrollador debe de saber adaptarse al contexto metodológico en el que se encuentre, ya sea una metodología en cascada o iterativa, o bien nos encontremos en un entorno a-metodológico o ágil.
Un buen desarrollador tiene que aportar valor en cualquier contexto, si bien es cierto que lo tiene más fácil en unos que en otros. Para ello tiene que conocer en detalle todos los artefactos que se utilizan en su contexto metodológico, de cara a ser capaz de comprender el proyecto en un sentido amplio.
Patrones de Diseño, Frameworks, librerías
Un buen desarrollador debe de conocer en profundidad los patrones de diseño que utiliza. Creemos que no es necesario conocer todos los patrones de diseño en profundidad, pero es importante tener una idea de lo que cada uno hace de modo que se tenga una mínima intuición de cuándo será necesario utilizarlos. Pero lo que sí que es cierto es que, a la hora de decidir utilizar uno de ellos, es imprescindible entenderlo y conocerlo en profundidad.
Un buen desarrollador antes de utilizar cualquier librería o framework, tendría que haber hecho lo mismo de forma manual. Hay que eliminar el concepto de ‘magia’ del software. El software no tiene vida propia, todo lo que hace está escrito en líneas de código, y si vas a apoyarte en alguna librería o framework para simplificarte la vida (cosa que recomiendo), antes tienes que entender en profundidad lo que hace esta librería y, si es posible, cómo lo hace. Todo para intentar eliminar el factor ‘magia’ del software, y evitar decir frases como «me da excepción» o «me dice que…». ¿Cómo que una excepción? ¿Qué excepción? ¿Dónde se produce? En cuanto se empieza a no entender, todo se convierte en magia. La actitud de todo buen desarrollador tiene que ser la de entender lo que está pasando, y esto se consigue entendiendo en profundidad todas las partes que componen tu software.
Entornos de Desarrollo
¿Quién puede decir que es un buen artesano si no es un experto en la utilización de sus herramientas de trabajo? Lo mismo ocurre con el software, no se puede ser un buen desarrollador si no se domina(n) la(s) herramienta(s) de desarrollo.
Uno de los factores esenciales de la productividad en el desarrollo del software es la selección y el manejo de las herramientas de apoyo. Así programes con vi, emacs, Eclipse, MS Visual Studio o el Notepad, si quieres ser un buen desarrollador, tienes que dominar tu herramienta. Una vez has buscado en un menú tres veces una misma cosa, ¿por qué no te aprendes el atajo (shortcut)? Un desarrollador excelente tiene que dominar las herramientas que utiliza. Sean las que sean.
Pasión / Orgullo
El desarrollo del software es divertido. Nada menos. Es posible pasarse (muchas) horas disfrutando desarrollando software. Días incluso. Los buenos desarrolladores disfrutan con su trabajo. Les gusta programar. De pequeños todos jugábamos con piezas de Lego e intentábamos hacer construcciones, siempre limitados por la cantidad y forma de las piezas que teníamos y hasta donde llegara nuestra imaginación. En el mundo del software, la primera limitación no existe. Con un portátil más o menos moderno podemos construir prácticamente cualquier cosa. Podemos dar rienda suelta a nuestra imaginación y hacer cosas de las que sentirnos orgullosos. El desarrollo del software puede llegar a ser algo apasionante.
Sentir esta pasión, este orgullo por el producto de tu trabajo, es necesario para ser un desarrollador excelente. Creemos que el código que una persona escribe es un reflejo de sí mismo, y de las ganas que está poniendo en su trabajo. En la Biografía de Steve Jobs de Walter Isaacson, nos cuenta una de las enseñanzas que su padre adoptivo, Paul Jobs, le transmitió: Cuando fabricaba un mueble, ponía madera de la misma calidad en la parte del frente como en la de atrás. Decía que había que poner el mismo cuidado tanto en las partes que se ven como en las que no se ven. Esta enseñanza la aplicó Seteve Jobs durante toda su vida, y tiene una aplicación idéntica a la excelencia en el desarrollo del software: Hay que cuidar tanto las partes que no se ven como las que se ven. Hay que hacer el software de modo que nos sintamos orgullosos del mismo, tanto por fuera como por dentro. Un desarrollador excelente disfruta enseñando las ‘tripas’ de su software, mostrando las técnicas que ha utilizado, y la manera en la que ha resuelto las complejidades. Un buen desarrollador se siente orgulloso de su trabajo y, como mínimo, no es consciente de nada que merezca la pena mejorar.
No puedes ser un carpintero excelente si no te apasiona la carpintería. Del mismo modo no puedes ser un desarrollador excelente si no te apasiona la programación. Así de simple. Es esta pasión la que te llevará a aprender todos los días, la que te despertará la curiosidad por cada novedad, en definitiva, que te empujará a ser cada vez mejor.
Honestidad / Humildad
Un desarrollador, para ser excelente, tiene que mejorar cada día. No hay un lugar llamado ‘excelencia’ en el que un desarrollador se pueda acomodar una vez ha llegado. La excelencia es un camino, no un lugar. El mundo del software evoluciona constantemente, y es necesario aprender cada día cosas nuevas para mantenerse en esta zona de la ‘excelencia’.
Pero para aprender, para mejorar cada día, es necesario ser humilde. El que piensa que lo sabe todo, no aprende más. Es necesario ser consciente de tu ignorancia para sentir la motivación de aprender más. Y para esto es útil una buena dosis de humildad. Cuanto más sabes, más consciente eres de lo que te queda por aprender.
Por otra parte, otro factor importante del desarrollador excelente es la honestidad: No se puede saber de todo, y no debería de ser un problema reconocer que no se sabe de algo. Ser un desarrollador excelente implica valorar el conocimiento y la experiencia, tanto el tuyo como el de los demás. Por eso hay que saber cuándo se sabe algo, y por lo tanto se puede aportar conocimiento; y cuándo no se sabe, y conviene más escuchar y aprender.
Y dicho esto, ¿en decide4AI somos excelentes?
Pues la respuesta es que estamos en el camino y lo intentamos en cada proyecto en el que trabajamos. Intentamos ser cada día mejores. Intentamos poner en valor los principios mencionados en este post, e intentamos que las personas que componen decide4AI sean excelentes en acto o potencia.
Podemos afirmar que ponemos un especial cuidado en la calidad de todo el software que producimos y que potenciamos y valoramos la excelencia por encima de todas las cosas.
Con esto, ¿llegaremos algún día a ser excelentes? Quizás no, pero como dijimos anteriormente en el artículo, la excelencia no es un estado, sino un camino, y es el camino que intentamos seguir en decide4AI.
¿Quieres conocer más sobre nosotros o nuestros valores? ¿Te interesa formar parte del equipo?
Si quieres saber más sobre decide4AI, y mantenerte al tanto de futuros webinar o acciones, síguenos en las redes sociales (Linkedin, Twitter, Youtube).