¿Cuáles son buenas maneras de encontrar el algoritmo y el cálculo necesarios? Normalmente no necesito pensarlo, pero recientemente, estoy luchando con ellos.

La parte de “y cálculo” de su pregunta me preocupa de que haya algún contexto aquí que no reconozco. Pero voy a dar un giro aquí sobre cómo crear un programa de computadora.

Tu “pero recientemente” me hace preguntarme qué es diferente últimamente. ¿Estás tratando de abordar problemas fundamentalmente más difíciles? Algo no es lo mismo. Espero que no sea algo como que recientemente haya comenzado a beber alcohol con más frecuencia. (Mi compañero de cuarto de la universidad no estaría de acuerdo, pero mi propia experiencia es que un par de copas con la cena puede hacer que la programación sea mucho más difícil esa noche).

Raramente se le pedirá que cree un algoritmo fundamental desde cero. Fuera de una situación de prueba, el mundo es más “libro abierto”, por lo que puede ver implementaciones de referencia de los fundamentos. El desafío al crear un programa de computadora es descubrir qué algoritmos fundamentales necesita unir para resolver el problema en cuestión. Algunos problemas son computacionalmente “difíciles” y es posible que deba conformarse con resultados aproximados. Como Howard Spin señala en su respuesta, ayuda mucho si al menos puede reconocer los componentes de su problema como correspondientes a algún problema clásico para saber qué libro buscar para los enfoques adecuados.

Si sabe cómo calcular “a mano” una respuesta para al menos pequeños conjuntos de entrada, puede obtener información “codificando” sus pasos manuales, pero tenga cuidado con las cosas que se comportan mal a medida que aumenta el tamaño de los datos.

A menudo puedo identificar partes fáciles que “sé” cómo hacer. Eso puede reducir el problema restante a la misteriosa parte “difícil”. Intente reconocer cuál es el problema central en su núcleo. Por ejemplo, si puede encontrar una manera de verlo como un problema de “programación lineal”, puede buscar cómo resolver esos problemas en lugar de volver a derivar el método simplex desde cero. Con suerte y búsquedas en la web, incluso puede encontrar un módulo de biblioteca que puede utilizar para hacer el trabajo pesado.

No todo es ordenar y buscar, por lo que un curso sobre “técnicas de optimización” (cosas como programación lineal, programación dinámica, etc.) puede ser útil. Del mismo modo, un curso (o 2 o 3) sobre “inteligencia artificial” puede equiparlo con algunas ideas nuevas sobre cómo abordar problemas desafiantes. Los cursos de estadística y matemáticas también pueden darle herramientas para usar en algunas clases de problemas. Se necesitará mucho más que un curso de “programación” de 6 meses para enfrentar grandes y difíciles problemas.

A medida que programa programas cada vez más grandes, la “arquitectura” de su solución se vuelve muy importante, en parte para administrar la complejidad de cada pieza que tiene que desarrollar y depurar, y en parte al permitirle explotar la responsabilidad de algunos de los pozos. piezas suficientes para los compañeros de trabajo.

Debe poder describir las interfaces y las estructuras de datos para que las distintas piezas puedan probarse individualmente y luego reunirse para crear una solución de trabajo. Las probabilidades son que su primer intento no será perfecto, por lo que desea un diseño que sea “ágil”, uno en el que pueda rehacer partes de la implementación para mejorarla sin tener que tirar todo y comenzar de nuevo. (Habrá días en que la elección correcta resulte ser “tirar todo y comenzar de nuevo”, pero el diseño anterior no era un buen diseño si nada de la iteración del diseño anterior es salvable y útil en la próxima iteración. Con suerte, usted Mejoraré los fundamentos de la próxima iteración de diseño). Las buenas decisiones provienen de la experiencia. La experiencia proviene de malas decisiones.

Gracias por el A2A. Esta era una pregunta muy abierta, así que te he dado una respuesta bastante abierta. Espero que te haya ayudado a descubrir qué más necesitas aprender para abordar los problemas de programación que actualmente te preocupan. Si he entendido mal la intención de su pregunta, mis disculpas. Aclare lo que está buscando y veré si puedo abordar más específicamente lo que pretendía preguntar.

Esa es una pregunta terriblemente genérica, y creo que es imposible responder bien sin más especificidad por parte del autor de la pregunta.

En general, determine cuál es el dominio de su problema. ¿Es un problema de clasificación? ¿Un mejor problema de ruta? ¿Un problema de programación O / S? ¿Un problema de base de datos? Obviamente, podría seguir y seguir. Una vez que determine el dominio de su problema, estará listo para comenzar a investigar soluciones anteriores relevantes para ese dominio.