Hice unas preguntas y respuestas el otro día, y una de las preguntas fue
"Como salir del eterno hago proyecto / codeacademy a cosas más interesantes?" ... no estoy 100% seguro de lo que significa, pero lo voy a tomar como una
oportunidad para rantear sobre algo que me importa y que está (me parece) vagamente conectado.
Tal vez te sientas como que estás atrapado en un ciclo de aprender algo,
usarlo en un proyecto de juguete y después ... ¿qué? ¿aprendés otra cosa?
¿Y hacés otro proyectito? ¿Y seguís así?
¿Y sentís que eso carece de significado y no te da sensación de logro,
no te motiva y en general que estás condenado a ser un newbie para
siempre?
Bueno, si es así ... cuchá, cuchá ...
Tus prooyectos de juguete se sienten insignificantes porque no son reales.
¿Esa sensación? Es tu programador interior diciéndote que te dejes de pavear
y empieces de una vez por todas a programar en serio. Y te voy a dar un plan
para que lo hagas.
PASO 1: Buscá algo que querés que tu compu haga pero que tu compu no hace.
¿Querés que tus videos de youtube aparezcan en tu blog?
¿Querés saber cuántos Robertos nacieron en 1934 en Argentina?
Bueno, amigo imaginario, después de encontrar algo así, podés pasar al paso 2.
Supongamos por ahora que decidiste implementar "una cosa" que espante los
pajaritos que te despiertan cada mañana en esta eterna pesadilla en la que
todos vivimos de ahora en más para siempre.
PASO 2: Decidí algunos detalles básicos de tu meta
Esto se llama un proyecto. Implementar algoritmos de ordenamiento no es
un proyecto, es un ejercicio. Implementar la versión 200 de un chat usando
websockets para tu "portfolio" no es un proyecto, es solamente un apéndice
aburrido de tu currículum.
Un proyecto es una meta. Un proyecto es "¡Quiero que mi compu haga ESTO y en el sagrado nombre de Marcos Mundstock, voy a hacer el esfuerzo para obligarla!"
Entonces, quiero algo que cuando detecta pájaros cantando haga ruido para
espantarlos.
- Escucha buscandoo ruidos.
- Decide si son ruidos pajarescos.
- Responde con un ruido desagradable para emplumados.
PASO 3: Convencéte de que es una cosa que una compu puede hacer.
Porque bueno, las compus pueden hacer muchas cosas, pero no pueden hacer todo. Entonces, hay que hacer un rápido "reality check". Rápido, porque
no queremos perder más de media hora en esto y porque no es lo importante.
- ¿Las compus pueden escuchar sonidos? ✔
- ¿Las compus pueden hacer ruido? ✔
- ¿Los sonidos espantan pájaro? ✔
- ¿Puede una compu decidir si un ruido es un pájaro o no? ... ¿capaz que sí? Las he visto hacer cosas más raras.
PASO 4: Encontrar un mecanismo semi-coherente para implementarlo.
Puede ser muy vago. Tipo "sí, puedo usar esta API de Google y este trapo
rejilla viejo". Una vaga idea.
- Implementar algo que escuche ruidos.
- Algo en el medio que decida si un ruido es de un pájaro
- Que la detección de ruido "dispare" otro código
- Código que haga ruido
PASO 5: Describir la versión más estúpida que puedas imaginar
¿Queremos hacer un detector de pájaros? Empecemos con un detector de ruidos.
O más bien, busquemos algo que pueda reaccionar cuando tu micrófono detecta ruidos. O aunque sea una biblioteca que te de acceso a tu micrófono.
- Buscar una biblioteca para leer sonido del micrófono
- Detectar ruido
- Buscar biblioteca para hacer ruido
- Hacer ruido
- Conectar las dos mitades
PASO 6: Poné el culo en la silla e implementá la versión estúpida
Hacélo RÁPIDO. Si planeás demasiado no vas a hacer más que planear mucho. Querés
ser un programador, no un PM. Me pregunto como sería la versión PM de este
rant.
PASO 7: Mostrále la versión estúpida a alguien que respetes y escuchá.
Si, esta parte de miedito, pero programar es, en gran parte, acerca de personas.
Mostrarle cosas a personas, escuchar a personas, entender que es lo que esas
personas realmente están tratando de decir, y cosas así.
Así que: mostráselo a alguien. Escuchá. Tomá decisiones acerca de si hiciste
lo correcto en los pasos 3 y 4. Tal vez ajustá un poco tu objetivo.
PASO 8: repetir pasos 5 a 7 con una versión ligeramente menos idiota
Repetir hasta que llegues a algo que no tenés idea de como hacer.
En este caso probablemente sea "decidir si eso es un pájaro".
PASO 9: buscá ayuda
Pregunt;a. De nuevo: programar es mayormente acerca de gente. En este
caso, vas a practicar "pedir ayuda". No querés que te digan cómo se hace
(o capaz que sí?) pero este es un paso crítico.
Podés terminar en varios escenarios.
- Lo resolviste.
- Decidiste que es imposible.
- Es posible pero no tenés idea cómo.
¡Si lo resolviste, no hay problema! Volvé al paso 5 y seguí hasta que estés
conforme con el proyecto y aprendiste algo nuevo. ¡Felicitaciones!
Los otros dos escenarios te llevan a ...
PASO 10: trabáte
Si decidiste que es imposible, entonces aprendiste sobre un problema que
es, en este momento al menos, imposible. Dado que sos nuevo en esta clase
de cosas, es improbable que vos lo arregles, pero ... si realmente te
interesa este proyecto, tal vez te indique un nuevo tipo de csas que
te interese aprender.
¿No podemos decidir si un ruido es un pájaro? ¿Por qué? ¿Hay gente investigando
eso? ¿Con, ponéle, Machine Learning? Suena interesante ... normalmente los
ejemplos son con imágenes. ¿Hay trabajos interesantes para aplicarlo a audio?
¿Hay bibliotecas ya hechas? ¿Hay data sets? ¿Hay tutoriales? Y ahora
tenés algo nuevo para estudiar. Divertíte.
El tercer escenario es el complicado. Digamos que se puede hacer con ML
y que hay datasets de sonidos urbanos y de cantos de pájaro y que sabés que
se puede hacer, y entendés un poquito del tema, pero vos no sabés hacerlo.
Bueno, felicitaciones, has llegado al límite actual de tu incompetencia,
todo lo que tenés que hacer es achicarla un poco. Y así es la vida de un
programador.
¿Entonces, como te ayuda todo este laburo?
Estás aprendiendo cosas distintas que cuando hacías ejercicios.
- Aprendés a decidir qué hacer.
- Aprendés a pedir ayuda.
- Aprendés a presentar tu trabajo ante otros.
- Aprendés a procesar feedback.
- Aprendés a investigar tu espacio de problemas.
- Aprendés a partir un proyecto en tareas
- Aprendés a tomar decisiones.
Y sí, podés aprender una o dos cosas de programación.
Y tal vez (pero es improbable) espantes esos pájaros de mierda.
PD: https://github.com/karolpiczak/BADC-2017