Sitemap

Cómo pensar como un programador: lecciones de resolución de problemas

7 min readAug 17, 2018
Press enter or click to view image in full size
Por Richard Reis

Si está interesado en la programación, es posible que haya visto esta cita antes:

“Todos en este país deberían aprender a programar una computadora, porque te enseña a pensar”. Steve Jobs

Probablemente también se preguntó qué significa, exactamente, pensar como un programador. ¿ Y cómo lo haces?

Básicamente, se trata de una forma más efectiva de resolver problemas .

En esta publicación, mi objetivo es enseñarte de esa manera.

Al final, sabrá exactamente qué pasos tomar para resolver mejor el problema.

¿Porque es esto importante?

La resolución de problemas es la meta-habilidad.

Todos tenemos problemas. Grande y pequeño. Cómo lidiamos con ellos es a veces, bueno … bastante aleatorio.

A menos que tenga un sistema, esta es probablemente la forma en que “resuelve” los problemas (que es lo que hice cuando comencé a codificar):

  1. Prueba una solución.
  2. Si eso no funciona, prueba con otro.
  3. Si eso no funciona, repite el paso 2 hasta que tengas suerte.

Mira, a veces tienes suerte. ¡Pero esa es la peor forma de resolver problemas! Y es una enorme y enorme pérdida de tiempo.

La mejor manera implica a) tener un marco yb) practicarlo.

“Casi todos los empleadores priorizan las habilidades de resolución de problemas primero.

Las habilidades de resolución de problemas son casi unánimemente la cualificación más importante que buscan los empleadores … más que el dominio de los lenguajes de programación, la depuración y el diseño del sistema.

Demostrar el pensamiento computacional o la capacidad de analizar problemas grandes y complejos es tan valioso (si no más) que las habilidades técnicas básicas requeridas para un trabajo “. — Hacker Rank ( 2018 Developer Skills Report )

Tener un marco

Para encontrar el marco adecuado, seguí los consejos del libro sobre aprendizaje de Tim Ferriss, “ The 4-Hour Chef “.

Me llevó a entrevistar a dos personas realmente impresionantes: C. Jordan Ball (ocupa el primer o segundo lugar entre los más de 65,000 usuarios en Coderbyte ) y V. Anton Spraul (autor del libro “ Piensa como un programador: una introducción a la resolución creativa de problemas” “).

Les hice las mismas preguntas, ¿y adivinen qué? ¡Sus respuestas fueron bastante similares!

Pronto, tú también los conocerás.

Sidenote: esto no significa que hicieron todo de la misma manera. Todos son diferentes. Serás diferente. Pero si comienzas con principios que todos estamos de acuerdo en que son buenos, vas a ir mucho más rápido.

“El mayor error que veo que hacen los nuevos programadores es centrarse en aprender la sintaxis en lugar de aprender a resolver los problemas”. — V. Anton Spraul

Entonces, ¿qué deberías hacer cuando te encuentres con un problema nuevo?

Estos son los pasos:

1. Comprender

Sepa exactamente lo que se está preguntando. La mayoría de los problemas difíciles son difíciles porque no los entiendes (de ahí que este sea el primer paso).

¿Cómo saber cuándo entiendes un problema? Cuando puedes explicarlo en inglés simple.

¿Te acuerdas de estar atascado en un problema, empiezas a explicarlo y ves instantáneamente agujeros en la lógica que no veías antes?

La mayoría de los programadores conocen este sentimiento.

Es por eso que debe escribir su problema, garabatear un diagrama, o contarle a alguien sobre eso (o cosa … algunas personas usan un pato de goma ).

“Si no puedes explicar algo en términos simples, no lo entiendes”. Richard Feynman

2. Plan

No se meta directamente en la solución sin un plan (y de alguna manera espere que pueda abrirse paso a través de ella). ¡Planifica tu solución!

Nada puede ayudarlo si no puede anotar los pasos exactos.

En la programación, esto significa que no comiences a piratear de inmediato. Dale tiempo a tu cerebro para analizar el problema y procesar la información.

Para obtener un buen plan, responda esta pregunta:

“Dada la entrada X, ¿cuáles son los pasos necesarios para devolver la salida Y?”

Nota: Los programadores tienen una gran herramienta para ayudarlos con esto … ¡Comentarios!

3. Divide

Presta atención. Este es el paso más importante de todos.

No trates de resolver un gran problema. Llorarás.

En cambio, divídalo en sub-problemas. Estos sub-problemas son mucho más fáciles de resolver.

Luego, resuelve cada sub-problema uno por uno. Comienza con lo más simple. Lo más simple significa que conoce la respuesta (o está más cerca de esa respuesta).

Después de eso, lo más simple significa que este sub-problema que se está resolviendo no depende de que otros se resuelvan.

Una vez que haya resuelto cada sub-problema, conecte los puntos.

Conectar todas sus “sub-soluciones” le dará la solución al problema original. ¡Felicidades!

Esta técnica es una piedra angular de la resolución de problemas. Recuérdelo (lea este paso nuevamente, si es necesario).

“Si pudiera enseñarle a cada programador principiante una habilidad para resolver problemas, sería la ‘técnica para reducir el problema’.

Por ejemplo, supongamos que es un programador nuevo y se le pide que escriba un programa que lea diez números y sepa cuál es el tercero más alto. Para un programador completamente nuevo, puede ser una tarea difícil, aunque solo requiera una sintaxis básica de programación.

Si estás atascado, debes reducir el problema a algo más simple. En lugar del tercer número más alto, ¿qué hay de encontrar el más alto general? ¿Todavía es demasiado duro? ¿Qué hay de encontrar el mayor de solo tres números? ¿O el mayor de dos?

Reduzca el problema hasta el punto en que sepa cómo resolverlo y escriba la solución. A continuación, amplíe el problema ligeramente y vuelva a escribir la solución para que coincida, y continúe hasta que vuelva al punto de partida. “- V. Anton Spraul

4. ¿Atascado?

Por ahora, probablemente estés sentado allí pensando “Hola Richard … Eso es genial y todo, ¿pero qué pasa si estoy atascado y ni siquiera puedo resolver un sub-problema?”

Primero, respira profundo. En segundo lugar, eso es justo.

No te preocupes, amigo. Esto le sucede a todos!

La diferencia es que los mejores programadores / solucionadores de problemas son más curiosos sobre errores / errores que irritados.

De hecho, aquí hay tres cosas que debes probar cuando te enfrentas a un whammy:

  • Depuración: vaya paso a paso a través de su solución tratando de encontrar dónde salió mal. Los programadores llaman a esto depuración(de hecho, esto es todo lo que hace un depurador).

“El arte de la depuración es descubrir lo que realmente le dijiste a tu programa que hiciera, en lugar de lo que pensabas que le pedías que hicieras”. — Andrew Singer

  • Reevaluar: dar un paso atrás. Mira el problema desde otra perspectiva. ¿Hay algo que pueda resumirse en un enfoque más general?

“A veces nos perdemos tanto en los detalles de un problema que pasamos por alto los principios generales que resolverían el problema a un nivel más general. […]

El ejemplo clásico de esto, por supuesto, es la suma de una larga lista de enteros consecutivos, 1 + 2 + 3 + … + n, que un Gauss muy joven reconoció rápidamente simplemente n (n + 1) / 2, evitando así el esfuerzo de tener que hacer la adición. “- C. Jordan Ball

Sidenote: Otra forma de volver a evaluar está comenzando de nuevo. Borre todo y comience nuevamente con ojos nuevos. Lo digo en serio. Estarás estupefacto por lo efectivo que es esto.

  • Investigación: Ahh, bueno viejo Google. Lo leíste bien. No importa qué problema tengas, alguien probablemente lo haya resuelto. Encuentra esa persona / solución. De hecho, ¡hazlo incluso si resolvieras el problema! (Puedes aprender mucho de las soluciones de otras personas).

Advertencia: no busque una solución al gran problema. Solo busque soluciones a sub-problemas. ¿Por qué? Porque a menos que luches (aunque sea un poco), no aprenderás nada. Si no aprendes nada, pierdes tu tiempo.

Práctica

No esperes ser genial después de solo una semana. Si quieres ser un buen solucionador de problemas, ¡resuelve muchos problemas!

Práctica. Práctica. Práctica. Solo será cuestión de tiempo antes de que reconozca que “este problema podría resolverse fácilmente con <insertar concepto aquí>”.

¿Cómo practicar? Hay opciones fuera del wazoo!

Rompecabezas de ajedrez, problemas de matemáticas, Sudoku, Go, Monopoly, videojuegos, cryptokitties, bla … bla … bla ….

De hecho, un patrón común entre las personas exitosas es su hábito de practicar la “resolución de micro problemas”. Por ejemplo, Peter Thiel juega al ajedrez, y Elon Musk juega videojuegos.

“Byron Reeves dijo ‘si quieres ver cómo se verá el liderazgo empresarial en tres a cinco años, mira lo que está sucediendo en los juegos en línea’.

Avance rápido hasta hoy. Elon [Musk], Reid [Hoffman], Mark Zuckerberg y muchos otros dicen que los juegos han sido fundamentales para su éxito en la construcción de sus empresas “. — Mary Meeker ( informe de tendencias de Internet 2017 )

¿Esto significa que solo debes jugar videojuegos? De ningún modo.

Pero, ¿de qué se tratan los videojuegos? Así es, ¡resolución de problemas!

Entonces, lo que debes hacer es encontrar una salida para practicar. Algo que te permite resolver muchos micro-problemas (idealmente, algo que disfrutas).

Por ejemplo, disfruto codificando desafíos. Todos los días, trato de resolver al menos un desafío (generalmente en Coderbyte ).

Como dije, todos los problemas comparten patrones similares.

Conclusión

¡Eso es todo amigos!

Ahora, sabes mejor lo que significa “pensar como un programador”.

También sabe que la resolución de problemas es una habilidad increíble para cultivar (la meta-habilidad).

Como si eso no fuera suficiente, ¡note cómo usted también sabe qué hacer para practicar sus habilidades para resolver problemas!

Uf … Muy bien, ¿verdad?

Finalmente, deseo que encuentres muchos problemas.

Lo leíste bien. ¡Al menos ahora sabes cómo resolverlos! (también, aprenderá que con cada solución, mejora).

“Justo cuando crees que has navegado con éxito un obstáculo, surge otro. Pero eso es lo que mantiene la vida interesante. […]

La vida es un proceso de romper estos impedimentos, una serie de líneas fortificadas que debemos superar.

Cada vez, aprenderás algo.

Cada vez, desarrollarás fuerza, sabiduría y perspectiva.

Cada vez, cae un poco más de la competencia. Hasta que todo lo que queda es usted: la mejor versión de usted. “- Ryan Holiday ( The Obstacle is the Way )

Ahora, ve a resolver algunos problemas!

Y la mejor de las suertes 🙂

Además, todo el conocimiento de programación que he adquirido en tan poco tiempo no hubiera sucedido sin la Escuela Lambda . No puedo agradecerles / recomendarlos lo suficiente.

¡Gracias por leer! 😊 Si lo disfrutó, pruebe cuántas veces puede golpear 👏 en 5 segundos. Es un gran ejercicio cardiovascular para sus dedos Y ayudará a otras personas a ver la historia.

--

--

Responses (1)