Pensar como programador — resolución de problemas
En algún momento habrán escuchado la frase:
“Todos deberían aprender a programar, les enseña a estructurar el pensamiento.” — Steve Jobs
Se preguntarán que significa, pensar como un programador.
Principalmente se refiere a resolver problemas de manera efectiva.
Su importancia
Todos tenemos problemas, grandes o pequeños. Normalmente los manejamos de manera aleatoria, usualmente nuestro acercamiento es:
Algunas veces tenemos suerte y lo resolvemos a la primera o a la segunda iteración, sin embargo no es la manera más eficiente.
Lo mejor es contar con una metodología y practicarla.
“Todos los empleadores priorizan las habilidades para resolver problemas.
La habilid para resolver problemas, es la calificación más importante que los empleadores buscan….aún más que la destreza en lenguajes de programación, debugging, y diseño de sistemas.
Demostrar el pensamiento computacional o la habilidad de descomponer un problema grande y/o complejo, es tan importante (si no más), como las habilidades técnicas requeridas en la descripción del trabajo.” — Hacker Rank (2018 Developer Skills Report)
Resolver problemas es una habilidad clave.
Contar con una metodología
Contar con una metodología, no significa que todos hagamos las cosas de la misma manera. Todos y cada uno de nosotros somos diferentes. Sin embargo, estaran de acuerdo con las siguientes citas:
“Contar con una buena teoría, es la mejor base para una buena práctica, te ayudará a llegar más lejos y más rápido.” — Blanca Pérez (mi madre)
El error más grande de los programadores, es concentrarse en la sintaxis de la programación, en vez de aprender a como resolver problemas. — V. Anton Spraul
Entonces, que hacer cuando encuentras un problema?
Paso 1 - Entender
Entender exactamente lo que se esta preguntando. La mayoría de los problemas son difíciles por que no los comprendemos (de ahí que este sea el primer paso).
Como saber cuando entiendes un problema? Cuando puedes explicarlo de manera sencilla :)
El acercamiento que utilizo, escribir el problema en papel, dibujarlo o contarselo a alguien.
“Si no puedes explicar algo en terminos sencillos, no lo entiendes” — Richard Feynman
Paso 2 — Planear
No te metas directamente a resolverlo sin tener un plan. Planifica tu solución, y escribela paso a paso.
En programación, significa no generar código inmediatamente. Date tiempo para analizar el problema y procesar la información en tu cerebro.
Preguntate:
Dado el input X, que pasos se necesitan para obtener Y?
Paso 3 — Dividir (o descomponer)
Pon atención, este es el paso más importante!
No intentes resolver el problema completo. En vez de eso, descompon el problema en sub-problemas. Estos sub-problemas son más fáciles de resolver.
Luego resuelvelos uno por uno, desde el más simple al más complejo.
- Comenzando por el que conoces su respuesta, o se acerca a la respuesta
- Luego por los sub-problemas que no dependen de otros para ser resueltos
Despues de resueltos, conecta los puntos, y voila! tendras la solución a tu problema original.
Esta técnica es fundamemntal para la resolución de problemas. Recuerdalo! (leelo nuevamemnte si es necesario).
Paso 4 — Debug
En este momento pensaras, que pasa si me atasco en un sub-problema?
Antes que nada, esta situación nos sucede a todos.
Los mejores programadores, tienden a ser más curiosos respecto de los problemas/errores/bugs, que a irritarse por los mismos.
Existen tres acciones que nos ayudan a resolver esta situación.
- Debug (ea)— Ir paso a paso a través de nuestra solución, intentando encontrar donde esta mal. Los programadores lo llaman “Debugging”. Textual, eso es todo lo que hace el debugging.
- Reevalua— Da un paso atrás. Mira el problema desde otra perspectiva. Hay algo que podamos abstraer para un acercamiento más genérico?
“Algunas veces nos perdemos en los detalles de un problema, que no vemos los principios generales que podrían resolver el problema a nivel general.” — C. Jordan Ball
Otra manera de re-evaluar es comenzar de nuevo. Borrar todo y comenzar con ojos frescos. No creeran lo efectivo que es esto!
3. Investiga — ooohh el buen Google ;) recuerda que muy probablemente, no eres la primera persona con ese problema, seguramente alguien ya lo resolvio. Busca la solución de esa persona, incluso si ya lo resolviste. Estoy seguro que podrás aprender de las soluciones de otras personas.
Advertencia: No busques la solución al problema principal, solo para las soluciones para los sub-problemas. Recuerda que si no batallas, por lo menos un poco, no aprenderas nada. Si no aprendes algo, habras perdido tu tiempo.
Práctica, práctica, práctica
No esperes ser experto despues de unos días. Si buscas ser bueno resolviendo problemas, resuelve muchos.
Práctica, práctica, prática, despues de un tiempo, podrás reconocer que un problema puede ser resuelto con …
Como practicar? hay muchas opciones, desde ajedrez, problemas de matemáticas, sudoku, Monopolio, video-juegos y más.
Existe un patrón en las personas exitosas, y son sus hábitos de practicar la “resolución de micro problemas”.
Lo que debes de hacer es buscar donde practicar. Algo que te permita resolver micro-problemas, idealmente algo que tu disfrutes ;)
Por ejemplo, retos de programación. Si estas en este mundo de la programación, trata de resolver por lo menos un reto de manera diaria en Coderbyte.
Conclusión
Ya sabes lo que significa pensar como programador, así como cultivar esta increible habilidad es fundamental para tu desarrollo personal y profesional.
“Cuando pensaste que sobrellevaste un obstaculo, otro aparece. Pero eso, es lo que hace de la vida interesante …
La vida es un proceso de pasar estos impedimentos — una serie de lineas fortificadas que debemos conquistar.
En cada ocasión, aprendes algo.
En cada ocasión ganas fuerza, sabiduria y perspectiva.
En cada ocasión, la competencia cae. Hasta que todo lo que queda eres tu, la mejor version de ti.” — Ryan Holiday (The Obstacle is the Way)
Ahora a resolver problemas!
Gracias por leerme! Si te gusto y te es útil compartelo! y dale un 👏 para que más personas vean este artículo.