Cómo enseñarse a sí mismo informática: El viaje de 100 horas de un desarrollador
Me he preguntado durante bastante tiempo: ¿sólo conocer los fundamentos de la informática ayuda a ser mejor desarrollador? Y ¿podría aportar valor a un desarrollador?
Si tú también te haces estas preguntas y no quieres invertir tiempo (todavía) en aprender informática, aquí tienes la historia de mi experiencia. En este artículo, responderé a las siguientes preguntas:
- ¿Por qué aprender informática?
- ¿Cuál fue mi plan de estudio?
- ¿Qué recursos utilicé?
- ¿Aprendí algo útil que pueda trasladar a mi día a día como desarrollador?
Empecé con esta fantástica lista de recursos: teach yourself computer science. Básicamente es una guía sobre cómo estudiar informática como ingeniero de software, sin gastar mucho dinero intentando entrar en el MIT.
Entonces, ¿por qué aprender informática por ti mismo?
Esa es una pregunta simple pero importante: ¿por qué lo haríamos en primer lugar?
Para cada proyecto que requiere una buena cantidad de motivación, intento primero definir objetivos adecuados:
- Ser capaz de aprender un nuevo lenguaje / una nueva tecnología más rápidamente al conocer algunos conceptos básicos que puedes aplicar a cada lenguaje / tecnología.
- Mejorar mi comprensión de los niveles de abstracción más bajos. Entender un poco mejor «cómo funciona bajo el capó» podría mejorar mi comprensión y, por lo tanto, mi eficiencia para la resolución de errores o el diseño de algoritmos.
- Mejorar mis habilidades de razonamiento lógico para hacer mi código más lógico también.
- Creo que la comprensión de los conceptos subyacentes es una clave para innovar en el campo del desarrollo.
- Entender la historia de la industria: por qué estamos donde estamos ahora, qué podemos hacer para mejorar el mundo de la informática
Informática 101: el plan de estudio
No me interesa intentar leer todos los libros sobre informática. Al menos debería proporcionarme alguna sensación de comprensión.
Por eso mi plan de estudio se centró en la retención de la memoria, la comprensión y la construcción de una referencia rápida sobre lo que he aprendido, para poder volver a ello fácilmente.
- Estudié unas 2 o 3 horas cada semana, dependiendo de mis prioridades. No quería hacer demasiado y sentirme quemado y harto de la informática. Lo más importante para mí era estudiar de forma regular, independientemente de la cantidad de tiempo. Debía ser algo que me gustara hacer.
- Mientras estudiaba material nuevo, escribía resúmenes sobre él en forma de mapas mentales. Esto tiene dos ventajas: escribir ayuda a recordar lo que aprendí y puedo recordar fácilmente algunos conceptos clave cuando los necesito, en poco tiempo.
- Mi tiempo de estudio se divide en dos categorías:
- Aprendizaje nuevo (nuevo capítulo de un libro, ver un nuevo curso en vídeo, hacer ejemplos y ejercicios)
- Lo que yo llamo «recuerdo de la base de conocimientos». Es principalmente hacer (más) ejercicios sobre el nuevo material que he leído / visto la semana anterior, leer mis mapas mentales, y tratar de recordar lo que escribí en él.
- Respecto a los ejercicios, trato de no pasar más de 30min en cada uno de ellos. El objetivo es esforzarse lo suficiente como para recordar el concepto pero no demasiado como para sentirse quemado. Es un equilibrio delicado.
- Intento rehacer algunos ejercicios que no pude hacer la primera vez, días (incluso semanas) después de los diferentes intentos, para ver si mi comprensión mejoró.
Estoy intentando aplicar algunos principios de aprendizaje activo haciendo todos los ejercicios que puedo, y haciéndome preguntas mientras repaso mis mapas mentales.
Revisar lo que he aprendido de una semana a otra es muy, muy beneficioso para mejorar mi retención de memoria y mi comprensión.
Lo que he hecho hasta ahora
Aquí lo que he hecho precisamente durante estas (casi) 100 horas de estudio de informática, en orden cronológico.
I. Programación (32 horas 55m)
El artículo titulado «enséñate informática» especificaba que debía seguir «aproximadamente» el orden de estudio que proponen, empezando por el campo de la programación.
Recurso principal: Estructura e Interpretación de Programas de Ordenador (SICP)
Este libro es considerado por muchos como la biblia que todo desarrollador debe leer. Es gratuito y puedes encontrar las mejores versiones en epub y PDF aquí.
Puedes encontrar las soluciones de los ejercicios aquí.
Yo conseguí hacer casi todos los ejercicios hasta 1.2.5 Greatest Common Divisors
.
Recurso complementario: Vídeos de Berkeley
Los vídeos están disponibles aquí. Los apuntes del curso están aquí. Si buscas algún ejemplo de examen de Berkeley, está aquí.
Son un muy buen complemento al libro: se explican los conceptos sin preguntarte demasiado por las Matemáticas, a diferencia del libro. Si quieres estudiar el SICP pero tu formación matemática no es lo suficientemente sólida, simplemente sigue este curso. Mis apuntes y ejercicios están aquí.
Lo que he aprendido del SICP hasta ahora
- El principio de este libro es muy interesante para entender realmente las raíces de la programación funcional y las recursiones.
- Define un montón de términos que los programadores usan a diario, de una manera muy precisa. Perfecto para ser aún más preciso durante las discusiones técnicas.
- El libro empujó mis habilidades analíticas y de resolución de problemas con sus ejercicios.
- El libro me enseñó los fundamentos de la lógica, una habilidad muy buena para tener como desarrollador. Al fin y al cabo, nuestro trabajo se basa en una lógica adecuada.
- Lógica proposicional con cuantificadores y regla de inferencia. Básicamente es la forma de escribir enunciados lógicos, verificando que los enunciados lógicos tienen sentido y probando sus valores de verdad.
- Básicos de conjuntos y teoría de grafos, gracias a los vídeos. Es muy interesante y es bastante útil para muchas cosas: máquinas de estado, redes…
- Las tablas de verdad pueden ser muy útiles para ordenar sentencias condicionales complejas o refactorizarlas.
- Recientemente he podido aplicar las leyes de DeMorgan para mejorar la legibilidad de algunas sentencias condicionales.
- Expresar especificaciones confusas y cortas con predicados, conjunciones y disyunciones (el lenguaje de la lógica proposicional) puede mostrar contradicciones y los detalles que faltan. Puede resumir de forma muy sucinta especificaciones complejas de forma precisa. Puede ser un buen puente entre las especificaciones y el propio código.
- Entender cómo escribir una prueba matemática es difícil, sobre todo cuando nadie puede ayudarte o corregir tu prueba.
- Todavía me faltaban algunos fundamentos en Matemáticas, especialmente necesarios para los vídeos del MIT.
- Mis habilidades de cálculo mental mejoraron muy bien. Si tienes dificultades para calcular rápidamente porcentajes o incluso hacer multiplicaciones sencillas sin calculadora, este curso te ayudará mucho.
- Básicos para manipular fracciones, exponentes, raíces cuadradas, logaritmos y demás.
- Ser capaz de calcular mentalmente es muy útil para muchas cosas en la vida real. Calcular rápidamente promociones, más o menos lo que costará un carrito de la compra lleno…
- Puedo aplicar todos estos conocimientos mientras estudio informática.
- I. Matemáticas Básicas
- II. Matemáticas Discretas
- III. SICP
- Lo poco que sé de ella ya me ha ayudado bastante en mi vida diaria de desarrollador.
- Siento (y he leído) que es una base para cualquier otro campo de la informática.
- ¡Disfruto estudiándola! De nuevo, es un componente esencial para mantenerme motivado.
¿Qué puedo usar en la vida real?
Toda la discusión sobre recursividad en el libro me ayudó bastante a escribirlos fácilmente. Es un tema que siempre me ha costado un poco. Ahora es pan comido pasar por cualquier problema que quiera resolver con recursividad.
¿Qué dificultades encontré?
Este libro no es para los que odian las matemáticas. Está escrito para estudiantes del MIT que ya tienen bastantes conocimientos matemáticos. Sin estos conocimientos previos, los ejercicios pueden ser bastante difíciles y frustrantes en algunos momentos.
Esto fue la causa de otro problema: pasé demasiado tiempo en los ejercicios. Podía resolver la mayoría de ellos pero me llevaba horas en algunos casos.
Decidí a partir de ahí que no dedicaría más de 30 minutos a los ejercicios para mantener la frustración baja sin descartar el enorme beneficio de hacerlos.
II. Matemáticas discretas (50 horas)
Cuanto más leía el SICP, más difíciles me parecían los ejercicios, sobre todo porque trataba algunos conceptos matemáticos que desconocía. Por ello, decidí pasar página y empezar a estudiar la Mathematics
asignatura.
Recurso principal: Matemática discreta y sus aplicaciones
Enseñarse informática aconseja leer los apuntes de clase de László Lovász, disponibles gratuitamente aquí como documento ps. Lo he convertido a PDF aquí para los que no sepan lo que es un documento ps. Yo tampoco lo sabía.
Sin embargo, he elegido otro recurso principal de estudio, aparentemente más amigable para los principiantes: Matemáticas discretas y su aplicación, de Kenneth H. Rosen. Es un libro bastante grande, bastante económico en sus primeras ediciones.
En 50 horas pude terminar el primer capítulo (lógica proposicional) y lograr 54 ejercicios.
Recurso complementario: MIT 6.042J mathematics for computer science, Fall 2010
Estos vídeos del MIT son cursos más avanzados sobre Matemáticas Discretas. De nuevo, suponen que se sabe bastante de Matemáticas. No obstante, son muy interesantes aunque a mí me costó seguirlos.
En el peor de los casos al menos te dará una buena visión de lo que es la Matemática Discreta.
Un profesor (Tom Leighton) tiene mejores habilidades docentes que otros. Sin embargo, todos tienen un conocimiento muy profundo de sus respectivas materias.
Lo que he aprendido hasta ahora
¿Qué puedo usar en la vida real?
¿Qué dificultades encontré?
III. Vuelta a los fundamentos de las matemáticas (11 horas 15)
Después de tener algunos otros problemas (menores) con mis conocimientos de Matemáticas en Matemáticas Discretas, decidí volver a lo básico.
Otra razón importante que guió mi elección: me gustaba mucho hacer algo de Matemáticas. Sin eso, no habría seguido estudiando informática.
No te confundas: las Matemáticas relacionadas con la informática son diferentes a las que estudiaste (y quizás odiaste) en el colegio. Te aconsejo que lo intentes.
En ese momento decidí alternar el estudio de las Matemáticas Discretas con las básicas.
Recurso principal: Cómo aprender aritmética básica rápidamente
Este vídeo de 4 horas está realmente bien para refrescar un montón de cosas, desde las sumas y el producto pasando por los porcentajes, exponentes, logaritmos… Abarca mucho terreno muy rápidamente con un montón de ejercicios.
Los consejos que se dan son muy buenos también para entender y resolver los problemas básicos rápidamente.
Puedes ver en youtube un avance de una hora del vídeo. Si te gusta, puedes comprarlo en Vimeo.
Lo que he aprendido hasta ahora
¿Qué puedo usar en la vida real?
¿Qué dificultades encontré?
Después de estudiar el SICP y Matemáticas Discretas, fue muy relajante entender finalmente todo con un poco de trabajo. No tuve muchas dificultades.
Mis consejos para los principiantes en informática
Si pudiera volver al principio de esta aventura, habría estudiado las diferentes asignaturas en este orden:
Hubiera estudiado en paralelo las Matemáticas Básicas y las Matemáticas Discretas y luego hubiera pasado al SICP, tratando de obtener los conocimientos de Matemáticas que aún me faltaban por el camino.
Continuaré aprendiendo los fundamentos de las Matemáticas y la Matemática Discreta durante al menos 150 horas:
En resumen: una muy buena experiencia, que subyace a muchas de mis debilidades pero que también me ha enseñado fundamentos sólidos que me faltaban.
Ten en cuenta, sin embargo, que si esperas ser un súper mago de la programación estudiando ciencias de la computación, podrías decepcionarte. La informática es difícil de estudiar. Tiene fuertes vertientes teóricas y aunque yo ya le encontré alguna utilidad en mi trabajo diario, no es para nada alucinante.
Pasar por este camino pide trabajo, paciencia y dedicación. Tener objetivos claros, un plan de estudio concreto y disfrutar del proceso son obligatorios.
Este artículo fue escrito por Matthieu Cneude y fue publicado originalmente en The Valuable Dev, un blog centrado en los conceptos importantes y atemporales del desarrollo de software. Puedes leer el artículo aquí.
Publicado el 1 de octubre de 2020 – 12:46 UTC