Piensa como un programador. Tutorial de resolución de problemas

imagen

Si está interesado en la programación, puede haber escuchado la frase:
"Todo el mundo necesita aprender programación porque te enseña a pensar".

- Steve Jobs

¿Quizás también se preguntó qué significa pensar como programador?

De hecho, estamos hablando de una forma más eficiente de resolver problemas.

Esta publicación tiene como objetivo enseñarte esto.

Después de leerlo, comprenderá con mayor precisión lo que debe hacerse para encontrar las mejores soluciones.

¿Por qué es esto importante?


La resolución de problemas es una habilidad básica.

Constantemente resolvemos problemas. Grande y pequeño ¿Cómo hacemos esto? A veces es bueno ... si tienes suerte.

Si no tiene un enfoque sistemático, probablemente resuelva los problemas de la siguiente manera (hice esto cuando recién comenzaba a codificar):

  1. probando una solución
  2. si no encaja, intente con otro,
  3. Si no funciona, repita el paso 2 hasta la victoria.

Puede que tengas suerte, ¡pero esta es la peor manera! Y puede llevar mucho tiempo.

La mejor manera:

  1. tener un enfoque sistemático
  2. Ponlo en práctica.

“La mayoría de los empleadores consideran que la capacidad de resolver problemas es más importante.

La capacidad de resolver problemas casi por unanimidad es la capacidad más importante que buscan los empleadores ... Más importante que el conocimiento de lenguajes de programación, depuración y diseño de sistemas.

Una demostración de pensamiento integrado y la capacidad de resolver grandes problemas complejos son tan valiosos (si no más) que las habilidades técnicas básicas necesarias para trabajar ".

- Hacker Rank ( Informe de habilidades de desarrollador 2018 )

Enfoque sistemático


Para encontrar el enfoque correcto, seguí los consejos del libro de Tim Ferriss sobre la enseñanza del Chef de 4 horas .

Esto me llevó a una entrevista con dos personas realmente impresionantes: C. Jordan Ball (clasificado 1º o 2º de 65,000 usuarios de Coderbyte ) y V. Anton Spraul (autor de Think of it as a Programmer. Enfoque creativo para crear código. ").

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

Pronto los reconocerás también.

Nota: esto no significa que todos hagan lo mismo. Son personas diferentes, y tú eres diferente de ellos. Pero si comienza con los principios básicos correctos, el resultado será mucho mejor y mucho más rápido.
"El error más grave que veo con los programadores jóvenes es centrarse en la sintaxis de aprendizaje, en lugar de aprender a resolver problemas".

- V. Anton Spraul

Entonces, ¿qué hacer cuando te enfrentas a un nuevo desafío?

Veamos los pasos:

1. Entendiendo


Comprende qué es exactamente lo que hay que hacer. La mayoría de las tareas son difíciles porque no las comprende (por eso este es el primer paso).

¿Cómo sabes que entiendes la esencia del problema? Intenta explicarlo en lenguaje sencillo.

Recuerda el caso cuando estabas obsesionado con una tarea y comenzaste a explicártelo a ti mismo. En este punto, aparecen errores lógicos que no has visto antes.

La mayoría de los programadores conocen este sentimiento.

Es por eso que debe describir su tarea, dibujar un diagrama o contarle a alguien sobre esto (algunos usan un pato de goma ).
"Si no puedes explicar algo en un lenguaje simple, entonces no lo entiendes".

- Richard Feynman

2. Planificación


No comience a resolver un problema sin un plan, con la esperanza de no confundirse con él. ¡Planifica tu decisión!

En programación, no tienes que seguir adelante. Déle tiempo a su cerebro para analizar y procesar información.

Para obtener un buen plan, respóndete una pregunta simple:

"Al aplicar a la entrada X, ¿qué pasos se deben tomar para obtener Y en la salida?"

Nota: los programadores tienen una gran herramienta para esto. Comentarios!

3. Descomposición


Este es el paso más importante. Ten cuidado

No intentes resolver un gran problema.

En cambio, divídalo en subtareas. Resolverlos será mucho más fácil.

Luego resuelve las subtareas, comenzando por la más simple. Cuando la tarea parece simple, significa que conoce la respuesta (o está cerca de ella).

Resuelva cada subtarea independientemente de las demás y combine los resultados después de la solución.

La combinación de todas las pequeñas tareas le dará la solución al original.
Felicidades

Este método es la piedra angular de la resolución de problemas. Recuerde esto (vuelva a leer este paso si es necesario).
Si pudiera enseñar a cada joven programador cómo resolver problemas, reduciría la cantidad de deuda técnica.

Suponga que desea escribir un programa que tome 10 dígitos y devuelva el tercero más grande. Para un principiante, esta puede ser una tarea desalentadora, aunque solo requiere el conocimiento de la sintaxis básica.

Si está atascado, entonces necesita simplificar. En lugar del tercer número más grande, ¿qué tal encontrar el más grande? ¿Todavía demasiado complicado? ¿Cómo encontrar el mayor de los tres números? ¿O más de los dos?

Reduzca el problema hasta que comprenda cómo resolverlo. Registra la decisión. Luego expanda la tarea hasta que regrese a la pregunta inicial.

- V. Anton Spraul

4. ¿Atascado?


Ahora probablemente esté sentado y pensando: "Oye, todo esto es genial, pero ¿y si no puedo resolver este problema?"

Primero respira hondo. No te preocupes ¡Le pasa a todos!

La única diferencia es que los mejores programadores corrigieron errores y resolvieron problemas con interés, no con molestias.

De hecho, aquí hay tres cosas que debe intentar hacer cuando se encuentre con dificultades:

  1. Depuración Verifique paso a paso dónde puede estar equivocado en su decisión. Los programadores llaman a esto depuración.
    "El arte de la depuración es descubrir la diferencia entre lo que escribió en el programa y lo que quería escribir"

    - Andrew Singer
  2. Cambio de enfoque. Retrocede un paso. Mira la tarea desde un ángulo diferente. ¿Es posible ignorar la implementación y aplicar un enfoque más general?
    “A veces entramos en tantos detalles que no tenemos en cuenta los principios generales con los que podemos resolver el problema a un nivel superior. [...]

    Un ejemplo clásico de esto, por supuesto, es la suma de una larga lista de enteros consecutivos 1 + 2 + 3 + ... + n, que el joven Gauss calculó fácilmente usando la fórmula n (n + 1) / 2, evitando los problemas asociados con el aumento del número de elementos "

    - C. Jordan Ball

    Nota: A veces es mejor eliminar todo y comenzar de nuevo con nuevas fuerzas. Lo digo en serio Te sorprenderá lo efectivo que puede ser.
  3. Investigación. Oh, buen viejo Google . No importa cuál sea su tarea, lo más probable es que alguien ya la haya resuelto antes que usted. Encuentra a esta persona o solución. Hazlo incluso si lo descubres tú mismo. Puedes aprender mucho de otras personas.

    Precaución: no busque una solución a un gran problema. Busque soluciones solo para subtareas pequeñas. Por qué Si no te esfuerzas (al menos un poco), entonces no aprenderás nada nuevo. Si no aprendiste nada, perdiste el tiempo.

Practica


No esperes convertirte en profesional en una semana. ¡Para resolver bien los problemas, necesita resolver muchos problemas!

Practica Practica Y practica de nuevo. Solo con el tiempo podrá decir: "Este problema se puede resolver fácilmente con la ayuda de <sustituir su solución aquí>".

¿Cómo entrenar? ¡Hay opciones interesantes!

Rompecabezas de ajedrez, problemas matemáticos, sudoku, go, monopolio, videojuegos, etc.

De hecho, la práctica común entre las personas exitosas es su hábito de "resolver microtask". Por ejemplo, Peter Thiel juega ajedrez y Elon Musk juega videojuegos.

Byron Reeves dijo: "Si quieres ver cómo pueden verse los líderes empresariales en tres o cinco años, mira los juegos en línea".

Avance rápido Elon Musk, Reid Hoffman, Mark Zuckerberg y muchos otros dicen que los juegos fueron fundamentales para su éxito en la creación de sus empresas.

- Mary Meeker ( informe de tendencias de internet de 2017 )

¿Esto significa que solo debes jugar juegos? Por supuesto que no.

¿Pero cuál es la esencia de la mayoría de los juegos? Así es, en la resolución de problemas!

Entonces, ¿qué debe ser en ejercicios prácticos. Algo que le permitirá resolver muchas micro tareas (e idealmente le gustará).

Por ejemplo, me gusta programar tareas. Y todos los días trato de resolver al menos uno (principalmente en Coderbyte ).

Como dije, todas las tareas tienen modelos de solución similares.

Conclusión


Eso es todo!

Ahora ya sabes lo que significa pensar como un programador.

También sabe que la resolución de problemas es una habilidad increíble (básica) que debe desarrollarse.

¡Presta atención, ahora también sabes cómo practicar tus habilidades para resolver problemas!

Finalmente, quiero que enfrentes muchos desafíos.
“Cuando crees que has superado con éxito un obstáculo, aparece otro. Pero esto es lo que hace la vida interesante. [...]

La vida es el proceso de superar obstáculos, fortificaciones a través de las cuales debemos romper.

Cada vez que aprendes algo nuevo.

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

Cada vez habrá menos competencia. Y al final, solo quedará su versión mejorada ".

- Ryan Holiday ( El obstáculo es el camino )

¡Ahora ve a resolver los problemas!

¡Y que la suerte te acompañe!

Un agradecimiento especial a C. Jordan Ball y V. Anton Spraul. Por los útiles consejos que dieron.

Además, no podría haber adquirido mi conocimiento de programación tan rápido sin Lambda School . No puedo agradecerles ni recomendarlos.

Source: https://habr.com/ru/post/es422543/


All Articles