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.
- ¿Cuál es una manera sencilla de encontrar big-O, big-Theta y big-Omega para una función determinada?
- ¿Cuáles son las buenas implementaciones de búfer circular sin bloqueo en Java?
- Cómo resolver el problema ADDGP en SPOJ
- ¿Podemos diseñar un algoritmo de aprendizaje automático para resolver la programación competitiva?
- ¿ISRO emplea el aprendizaje automático en alguno de sus sistemas de trabajo actuales?
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.