Recientemente nos han hecho esta pregunta: ¿Y qué se encuentran las empresas en los programadores que salen de ISDI Coders?
La respuesta puede ser sencilla: entregamos al mercado programadores (sí, junior) que comprendan la importancia de realizar código mantenible, escalable y legible. Están “diseñados” para entrar a trabajar en equipos modernos de desarrollo de software.
Pero bajemos más al detalle. Decirlo es gratis, así que explicaremos cómo lo hacemos #factaNonVerba.
La razón fundacional de la escuela es la empleabilidad (en posiciones técnicas, si no no vale) de nuestros estudiantes. Quien entra a la escuela tiene que terminar trabajando como developer. Desde este enfoque, hoy tenemos alumnos que han entrado como programadores juniors en empresas como: Fotocasa, Atrápalo, eDreams, Rakuten, Signaturit, Softonic, Seat: Code, Deporvillage, Colvin, Promofarma, Domestika, Trovit, Coches.net… lo que sería la gran industria online del país. Tenemos alumnos que más adelante han accedido a posiciones en los equipos de desarrollo de empresas del nivel de InfoJobs, Wallapop, Codurance, Nestlé, AXA, BP, y un larguísimo etcétera, algunos ocupando posiciones de Tech Lead solo tres o cuatro años después de haber salido de nuestra escuela.
Si el temario de ISDI Coders es el mismo que la mayoría de escuelas, ¿qué hace tan distintos a sus estudiantes? A continuación detallamos qué es lo que encuentran las empresas cuando contratan a nuestros estudiantes.
Tenemos que escribir código para humanos
Históricamente los proyectos finales son estéticamente mejorables 🤷🏻♂️ Lo sabemos, pero preferimos dedicar horas a otros aspectos que a cultivar su gusto por el diseño. Es en la maquetación pixel-perfect donde tienen que sobresalir, usando herramientas como Grid, Flex-box, etc. Además tienen que usar una metodología correcta (BEM) para que su CSS sea mucho mejor.
El 99% de las pruebas técnicas para acceder a una empresa que tocan HTML y CSS buscan ver el nivel de maquetación, no de diseño. Por suerte, en sus empresas siempre contarán con equipos que diseñan las interficies y el trabajo de nuestros alumnos es maquetarlo a la perfección para cualquier dispositivo. Para ello tienen que dominar las técnicas responsive que hacen que un diseño se adapte al dispositivo del usuario.
Somos obsesivos en el estilo de programación. Un código no puede “oler a junior”. Usamos herramientas como ESLint, Prettier y SonarQube para que para que el código tenga consistencia y no haya code-smells. Todo aquello que les ayude a que cualquiera pueda añadir funcionalidades sobre el código sin tener que deshacer un nudo o intentar comprender la lógica que se ha seguido.
También tenemos que pensar en que son humanos quienes usan nuestras aplicaciones. Tenemos que dar feedback al usuario en cualquier interacción que tenga con nuestro código: cuando se ha creado con éxito una cuenta, cuando ha habido algún error, cuando falta algún dato, etc. Tenemos que hacer que nuestros alumnos no piensen solo en el código que hacen sino en la experiencia de quienes van a trabajar sobre él o usar el producto resultante.
Su código es fácil de mantener y hacer crecer
La primera “asignatura” en el curso es Github. Allí empezamos a inculcar a los alumnos que cualquier persona tiene que ser capaz de entender la narrativa de la evolución que ha seguido el proceso de desarrollo. Cada contribución al código tiene que ser pequeña para facilitar las revisiones posteriores de código.
Desde 2018 hemos usado arquitecturas distintas para organizar los flujos de información. Desde 2020 implantamos Redux y actualmente trabajamos con Custom Hooks para crear la arquitectura FLUX. Las tecnologías pueden cambiar, pero lo importante es que nuestros estudiantes comprendan la necesidad de arquitecturar bien los flujos de información. Eso hace, de nuevo, que sus aplicaciones sean mucho más modulares y escalables.
La arquitectura (organización) la inculcamos en muchos otros aspectos más allá de los event handlers, los dispatchers, los action creators, etc. Somos muy insistentes en la importancia de los detalles como la estructura de carpetas. El código de nuestros estudiantes está modularizado y ordenado de forma que es muy sencillo trabajar -ellos o cualquiera de sus compañeros de trabajo- en cualquiera de sus partes.
Typescript es otra de las herramientas que utilizamos para asegurar el código más robusto e iterable posible. Este super-set de Javascript añade complejidad en el proceso de aprendizaje (“oooooootra forma de escribir lo mismo”, dicen los alumnos) pero nos ayuda a reducir mucho el número de errores que se encuentran en el proceso de desarrollo y nos permite avanzar más deprisa a medio plazo.
Testing: código que funciona como esperamos
El testing es una de las características que más nos destaca como escuela. Desde la segunda semana de curso, donde entramos en Javascript a fondo, ya hacemos test unitario con Jest. Cuando llegamos a Node (cinco semanas después) nuestros alumnos ya han testeado desde un método de Javascript hasta reducers de Redux, siempre pensando en el usuario (BDD). Han mockeado APIs, formularios (y mil otras cosas), y les hemos pedido un 100% de coverage con tests que nos den confianza (no vale expect true to be true). Sabemos que en sus empresas no van a mockear tanto o conseguir coverages del 100%, pero hacerlo en la escuela les enseña muchísimo sobre testing y “les curte”.
Aquí, otra vez, la legibilidad vuelve a aparecer. Sus tests no son jeroglíficos sino que usan lenguaje comprensible aunque no hayas testeado nunca (sintaxis Gherkin). Además de conseguir robustez en sus entregas, es mucho más sencillo para sus compañeros poder seguir la lógica.
Mentalidad de entrega frecuente de valor e integración continua
Algo que duele mucho a los estudiantes son los filtros que ponemos para que solo llegue a producción un código bien hecho (lo que se conoce como CI/CD o Entrega, Integración y Despliegue Continuos). Automatizamos los filtros que velan por esa calidad a través de workflows de Github Actions y el Quality Gate de SonarQube. Los alumnos comprenden muy pronto la importancia de hacer contribuciones pequeñas y frecuentes, revisando cada entrega.
Vaya si lo entienden. Si no, su código no sube a producción.
Capacidad enorme de trabajo
Hacer una aplicación web que funcione puede ser sencillo, pero no queremos “solo” eso. En nuestros estudiantes trabajamos para inculcarles la mentalidad correcta para valorar la calidad del código, entender los beneficios de la usabilidad, legibilidad, modularización, la buena arquitectura y la mentalidad de CI/CD. Con esta mentalidad, en menos de tres semanas, son capaces de realizar una aplicación completa (frontend y backend). Los hacemos de forma individual para que todos tengan que trabajar en todos los aspectos de la aplicación y poder defenderse con soltura en las entrevistas de trabajo. Además ven las implicaciones que tiene un código concreto en el resto de elementos de una aplicación.
Las herramientas y metodologías que usamos hacen que la carga lectiva de nuestros cursos sea muy alta pero, una vez dominadas, les permite desarrollar a gran velocidad y un gran margen de confianza. En el fondo, lo que busca cualquier empresa: desarrolladores que entreguen la mayor cantidad de código legible, mantenible y escalable.
Capacidad de saltar rápidamente a nuevas tecnologías
Nos hemos encontrado muchas veces con alumnos que, en los mismos proyectos finales, aprenden e implementan soluciones en otras tecnologías. Como ejemplo hemos visto proyectos en Angular (sobretodo en Madrid) , Vue o React Native; hemos visto chats con sockets; SSR con NextJS; Docker; etc. En algunas ocasiones, en los proyectos finales, hemos podido ver incluso tests de integración o end-to-end (Cypress) sin que esto forme parte del temario de la escuela.
Conseguimos esto porqué el curso busca que comprendan en profundidad las herramientas y las tecnologías. Además, les hemos hecho perder el miedo a enfrentarse a nuevas materias… y se han dado cuenta que son capaces de hacerlo.
Además, les acompañamos hasta que son seniors
Después de su paso por nuestros cursos de entrada a la profesión, les ofrecemos cursos que les acompañan más allá en el tiempo. Después del curso 1.0 (Bootcamp presencial o cursos online) les llevamos hasta las profundidades de Javascript con un curso 1.5 (gestión de grandes asincronías, estructuras de datos, etc). Cuando tienen más de tres años de experiencia (y dependiendo del tipo de experiencia que han obtenido) les ofrecemos el curso de nivel 2, donde les llevamos a conocer a fondo la aplicación de los principios SOLID al código, arquitectura e infraestructura: TDD, los patrones de diseño, la mentalidad de DevOps y las capacidades para impactar en sus departamentos o incluso a nivel de negocio. Todo esto, diseñado de la mano de las mejores empresas de nuestro país, que necesita buenos programadores de forma desesperada.