Hace un tiempo, mi amiga Mey me preguntó mi opinión sobre los bootcamps de programación, esos cursos que te prometen en unos pocos meses enseñarte todo lo necesario para incorporarte en el mercado laboral, e incluso algunos te garantizan empleo.
En su día le respondí con mi opinión a Mey por privado, pero a raíz de un reciente tweet de Ana, he decidido que sería buena idea hacer pública mi opinión completa sobre ello.
⚠️ Advertencia
Yo nunca he cursado un bootcamp de programación, lo que sé de ellos es lo que he visto de temario desde fuera, y lo he podido hablar con algunas personas que sí lo han cursado. A raíz de ello, es posible que la información que haya en este post pueda ser inexacta. También hay que tener en cuenta que no todos los bootcamps son iguales, y esto puede aplicarse a cada uno en mayor o menor medida.
⚠️ Advertencia 2
Todo lo que expongo en esta entrada es opinión y debe de tratarse como tal. No soy un portador de la verdad y estoy abierto a debate en los comentarios.
¿Qué es un bootcamp?
Aunque no hay una definición exacta, para esta entrada vamos a entenderlo como un programa de formación intensivo, de una duración de menos de un año (generalmente, de tres a seis meses) de forma práctica. La idea detrás del bootcamp es "nos saltamos la parte más teórica y aburrida y vamos directamente a enseñarte las tecnologías que piden las empresas".
¿Cómo se articulan los bootcamps?
La mayor parte de los bootcamps a los que les he echado el ojo, prometen enseñar desarrollo web en menos de un año. Generalmente dedicando un mes a aprender HTML, CSS y JavaScript (muy superficialmente), y el resto a enseñar alguna tecnología como React o Angular (también superficialmente). También he visto otros orientados a Machine Learning o desarrollo móvil, con una estructura de aprendizaje similar.
Después de ello, te meten en una bolsa de trabajo de empresas que trabajan con la tecnología cursada y que muchas veces suelen contratarte.
¿Cuál es mi opinión?
Mala. Mi opinión sobre los bootcamps, es mala. Vamos a entrar más en detalle sobre ello.
Primero, aprender requiere tiempo. Es imposible profundizar en las bases de lo que se está enseñando en tan poco tiempo, es por ello por lo que muchos bootcamps se saltan la parte teórica para ir directamente a la práctica con una tecnología en concreto.
Por poner un ejemplo, te enseñan que en Angular puedes puedes escribir una clase que llame a un backend, ponerle el atributo @Injectable()
e inyectarla en el constructor de tu componente, pero no te explican qué es el patrón de inyección de dependencias, por qué estás inyectando el servicio en el constructor, ni qué aporta hacer esto así. Simplemente te dicen "en Angular se hace así, y así se hará en la empresa a la que vayas".
¿Qué problema tiene esto?
El principal problema de esto es que, aunque puedes aprender a utilizar un framework en poco tiempo, e incluso ser productivo con él, sacar las castañas del fuego a una empresa que trabaje con él y todo eso, no profundizas en los conceptos que hay por detrás, haciendo que su uso sea algo prácticamente "mágico" y sin entender que está pasando por detrás. El framework se convierta en una herramienta mágica que no sabes cómo funciona.
El día que Angular (o el framework de turno que corresponda) pase de moda y lo usado por esas empresas sea otra cosa nueva, entonces tendrás un problema importante para actualizarte. El día que tu proyecto requiera de una característica que el framework no pueda resolver por sí mismo y tengas que entrar en algo de más bajo nivel, tendrás un problema para tratar con ello. Es un caso de un clásico refrán: pan para hoy, hambre para mañana.
Hace un tiempo tuve esta conversación por Twitter con Kony Pyon sobre esto mismo, la importancia de conocer lo que hay por debajo de la herramienta mágica que usas, de forma que puedas verla "menos mágica".
¿Pueden salir buenos programadores de los bootcamps?
Por supuesto que sí. Personalmente he conocido dos personas que les apasiona el desarrollo, que se han formado en un bootcamp. Pero estoy bastante seguro de que estas personas, al ser realmente apasionados, han aprendido gran parte de los fundamentos por su cuenta. Esta gente se ha formado por sí misma mucho más allá de los límites del propio Bootcamp.
¿Y los precios?
Ana, en su propio tweet dice que todos los bootcamps que ha visto cuestan entre 4000 € y 7000 € y que esto le parece una burrada. Esto ya depende de la valoración de cada uno del dinero, pero teniendo en cuenta que te añaden a una bolsa de empleo, quizás no sea algo tan caro. Encontrar tu primer empleo es difícil, y esta puede ser una buena forma de acceder a él y obtener la experiencia que necesitarías para acceder a otros puestos. Si vas a optar por esta opción, te recomendaría encarecidamente aprender toda esa aburrida teoría que se va a saltar el bootcamp por tu propia cuenta.
Hay 2 comentarios en esta entrada. Pulsa aquí para comentar desde GitHub.
Un poco sobre mí: comencé a programar por curiosidad, investigué qué fue lo primero que pensé que sería hacker (no lo soy :c), el lenguaje que dimos fue Java, comenzó los primeros días de clases no entendia nada porque no practicaba, tenía momentos donde me decia que esto no es para mi. bueno hoy sigo programando y no me aburro, practico casi 12 o 15 horas diarias.
Diría que los BootCamps son útiles para una persona que quiere aprender, además de practicar para dominar el idioma, esto requiere tiempo y paciencia.
Saludo.
Además, los blogs que lees son interesantes, le daré una lectura.
Hola @NicolayDecaro, cuando estás aprendiendo, practicar es muy importante. Si te gusta Java, la web Acepta el Reto tiene ejercicios de algoritmia con un juez automático que están muy bien para practicar durante el aprendizaje.
Lo que quiero decir con este artículo, es que más allá de hacer únicamente practica, es muy importante conocer toda la teoría que hay debajo, o simplemente estarás escribiendo código que tal vez funcione, pero no sepas el por qué, convirtiendo la programación en una profesión de prueba y error.
Bueno, he aquí mi humilde opinión sobre el tema:
Pues estoy de acuerdo parcialmente, la verdad.
En cuanto al tiempo sí, aprender requiere mucho tiempo, da igual sobre qué aprendas.
En cuanto a entrar en materia, considero que no puedes aprenderlo TODO (como sinónimo de "en profundidad") y menos de todo (como sinónimo de "variedad de conceptos").
Tomo como ejemplo lo que comentabas con Kony, no hace falta que sepas cómo se dibuja internamente un cubo para poder usar Unity al igual que no necesitas sabes cómo se analizan los tokens o se procesan los lenguajes de programación para poder programar con C#.
De la misma forma, el problema que comentas
“El día que Angular (o el framework de turno que corresponda) pase de moda y lo usado por esas empresas sea otra cosa nueva, entonces tendrás un problema importante para actualizarte”
, no creo que sea tan crudo como lo planteas, al fin y al cabo, estamos en la era de la información y es relativamente fácil aprender todos estos conceptos de forma autodidacta.Considero que, donde más vas a aprender, es trabajando, de la misma forma que ni en la carrera ni en el ciclo formativo se explican ciertas cosas que acabas aprendiendo de esta forma, trabajando, no puedes saber de todo por simple límite de tiempo y esfuerzo.
En cuanto al precio, personalmente me parece caro, no sé hasta qué punto meterte en una bolsa de empresas lo justifique.
En cuanto a los patrones de diseño, es una carencia que no entiendo. Son super importantes y, por cierto, tampoco las comentan ni en el ciclo ni en la carrera o se dan muy superficialmente.
Muy interesante el tema
Siento el enorme comentario 😜
Hola Javi,
Aprender de todo, es un imposible (al menos profundizando en ello), pero considero que sí es posible especializarte en algo y profundizar en eso en lo que te especializas, en mi caso, en el desarrollo de software. Voy a ir respondiendo cada tema por separado.
Tema de Unity
Empezando por el tema de Unity, es obvio que no necesitas saber como como funciona OpenGL para poner un cubo en Unity, pero no deja de ser cierto, que cuando lo conoces, la herramientas deja de ser una varita mágica, y te sientes más seguro y confortable trabajando con ella.
Kony dijo que cuando aparecen problemas que no puedes llegar a tratar con Unity, te toca conocer algo del API gráfica (la cual además, es otra abstracción más sobre la GPU). Yo, lo cierto es que no tengo experiencia con game engines y no sé a qué problemas en concreto se refiere Kony, pero estoy casi seguro de que lo dijo porque le ha pasado.
Voy a ver si soy capaz de hacerle llegar esta conversación para ver si puede contarnos que problemas tuvo, dado que ella tiene mucha más experiencia que yo con Unity. (sorry Kony por molestarte por Discord, Twitter o donde sea que te pille).
Sobre el aprendizaje y las bases
Sobre el tema de los problemas de aprendizaje y las bases, voy a poner un ejemplo con algo que no tiene nada que ver con el desarrollo de software:
https://youtu.be/QglHPJmQUd4?t=65
En este vídeo, Andrea nos da una serie de consejos que ella utilizó para aprender inglés, y el primero de ellos es la base. Sí, puedes aprender sin conocer la gramática a base de ver muchas series en inglés (el equivalente a trabajar muchos años), pero cuando te topas con algo que se sale de lo común, no entiendes lo que ocurre, porque lo has aprendido "de memoria".
Y por supuesto, estoy de acuerdo en que la experiencia laboral es muy importante (de ahí vienen prácticamente el 100% de mis conocimientos), pero para canalizar correctamente la experiencia, necesitas una base. Por poner un ejemplo, tuve un compañero de trabajo que tras cinco años trabajando con PHP, definía el programar como "escribir comandos que hacen cosas" y decía que el lenguaje "te tenía que proporcionar esos comandos". Le pregunté si sería capaz de conectar un lenguaje de programación que no te diese "los comandos"
mysql_connect()
o equivalente a una base de datos mysql y me dijo que era imposible. Obviamente, desconocía que es un socket TCP y como se establece la comunicación, desconocía que con la especificación de mysql en la mano, es posible en PHP implementar tu propia funciónmysql_connect()
sin que te la proporcione el lenguaje. Y sí, es posible hacer cosas sin tener las bases, este tipo hacía aplicaciones funcionales, que han sacada a la empresa las castañas del fuego, y que a día de hoy se siguen utilizando en producción.Y sobre la utilizad de las bases para aprender nuevas tecnologías, frameworks, librerías, game engines, etc., estas tecnologías se basan de alguna forma en conceptos teóricos, que cuando los conoces, te es mucho más sencillo aprender a utilizar estas tecnologías. Por poner varios ejemplos, Unity se basa en el patrón de diseño ECS, Laravel se basa en los patrones de inyección de dependencias, fachada y active record. Entity Framework implementa los patrones unit of work y repository. Conocer previamente ECS te hará aprender Unity de forma más eficaz, conocer el patrón active record, te hará aprender Laravel de forma más eficaz, etc.
@belen-albeza lo expone en este tweet.
Sobre el aprendizaje autodidacta, por supuesto que los conocimientos se pueden obtener de forma autodidacta. Yo no estudié ingeniería informática, por lo que todos mis conocimientos de las bases y fundamentos son completamente autodidactas. Desde aquí animo a todo el mundo a aprender por su propia cuenta. Personalmente, no me considero ingeniero de software, pero no considero que un ingeniero tenga que tener sí o sí un papelito firmado por el Rey que diga que lo es, para ser considerado como tal.
Sobre el precio
Y sobre el precio de los bootcamps, es lo que he dicho previamente en el post, todo depende del valor que cada uno le dee. Si considera que el bootcamp es más valioso que la cuantía monetaria, entonces lo pagará, si considera más valiosa la cuantía monetaria, entonces no lo pagará. Para mi, no tiene ningún valor, pues no creo que pueda aportarme nada, pero para alguien sin experiencia, tal vez sea muy valioso.