¿Cuál es la forma estándar de resolver problemas?

La forma más básica de hacerlo (si no puede encontrar algo que ya haya resuelto el problema antes) es reducir el problema a problemas más pequeños. Para cada uno de estos, vea si puede idear algún algoritmo para lograrlo, si no reducirlo aún más. Continúe hasta que tenga todas las partes que puedan estipularse expresamente en algún algoritmo formal ejecutable en cualquier dispositivo que vaya a ejecutar.

Probemos con un problema aparentemente simple: por ejemplo, digamos que deseas que algún robot te prepare una taza de café instantáneo. Primera división: hierva agua, agregue café (y otros) en la taza, vierta agua, revuelva, ¿algo de leche?

¿El robot va a entender eso? Probablemente no. Así que tome cada turno … comencemos por hervir el agua … divídalo aún más: coloque el hervidor debajo del grifo, abra el grifo, cierre cuando haya suficiente agua, enchufe el hervidor, encienda, espere hasta que hierva.

Lo suficientemente lejos todavía? No, el robot ni siquiera entiende hervidor o grifo. Así que continúe, divida “Ponga el hervidor debajo del grifo”: Levante el hervidor de la mesa, gire el brazo para que el hervidor quede debajo del grifo. Aún más: abra la mano, mueva el brazo de manera que la mano esté alrededor del mango de la caldera, cierre la mano hasta que la presión sea suficiente, mueva la mano hacia arriba para levantar, …

Incluso eso no es exactamente suficiente todavía. Probablemente, la “mano abierta” probablemente sea un conjunto completo de instrucciones sobre a qué servos enviar la potencia. Además, en cada una de las divisiones, intente encontrar alguna otra cosa ya realizada que logre eso, aunque solo una le ahorre mucho tiempo, por ejemplo, alguien probablemente ya haya escrito algo para “mano cercana”.

¿Te dan la imagen? Algunas tareas pueden sonar “simples”, pero al diseñar un algoritmo para lograrlas (especialmente cuando dicho algo necesita ejecutarse a través de una computadora completamente “estúpida”) se vuelve cada vez más detallado y complejo. Cada subtarea individual es cada vez más simple en sí misma, pero crecen exponencialmente. Es por eso que la mayoría de los cursos comienzan con tareas verdaderamente simples y / o “estúpidas”; de lo contrario, este paso de traducción de problema a algoritmo podría llevar meses o años (no es una buena idea enseñarle a alguien).

Con experiencia, tiende a descubrir que comienza a saltar más rápidamente varias capas de división. También comienzas a recordar cosas que has hecho anteriormente, lo que significa que pierdes menos tiempo buscando posibles cosas prefabricadas (ya que probablemente las hiciste tú mismo antes).

No hay una forma estándar real de resolver problemas, ya que hay muchos tipos diferentes de problemas. Pero hay algunas cosas que son útiles.

Primero, vea si alguien sabe de una solución al problema. Si ya existe una solución y no hay alguna razón para que pueda usarla, entonces debe usar lo que funciona. Si este no es el caso, entonces pasamos a otras cosas.

Comience por tener un plan. Algún plan, cualquier plan siempre que sea un plan real. Debe probar algo y, si tiene un plan, puede observar lo que funciona y lo que no funciona mientras intenta implementarlo. Si ha encontrado un problema similar en el pasado, puede comenzar con lo que funcionó para eso.

Si su plan inicial falló, examine por qué falló. ¿Falló porque era el enfoque equivocado? ¿Falló porque el plan no se ejecutó correctamente? ¿Falló porque carecía de las herramientas / equipos / habilidades / cantidad de personas adecuadas para que su plan realmente funcione?

Evaluar lo que tiene la capacidad de cambiar. Si necesita una herramienta diferente, consígala. Si no puede obtenerlo, ¿qué puede sustituirlo? Si no puede ser sustituido, entonces, ¿qué puede cambiar en su plan para eliminar la necesidad de esa herramienta? Y aunque utilicé la herramienta como ejemplo aquí, cualquiera de las piezas de su plan puede sustituirse por herramienta.

Y una vez que haya hecho eso, intente nuevamente. Y sigue intentándolo. Toma consejos de otros. Adaptar. Pero sigue intentándolo. Pero tenga en cuenta que no todos los problemas tienen solución. Entonces, solo porque quieras resolver algo no significa que sucederá. Y todos estos consejos son ridículamente genéricos. Ciertos dominios problemáticos tendrán pasos mucho más específicos o tendrán diferentes necesidades y requisitos.