Cómo planificar mejor al programar

Como han sugerido las otras respuestas, planifique primero en papel. Comience por pensar en el problema: qué tipo de cosas necesitará representar. Por ejemplo, estoy escribiendo un programa de ajedrez, así que necesito pensar en el juego en su conjunto, los jugadores, el tablero, las diversas piezas (peones, torres, caballeros, obispos, reina, rey) y los movimientos. Estos pueden ser la base de las clases: juego, jugador, tablero, etc. Puede decidir agregar clases adicionales; en mi caso, agregué Square (un tablero es una matriz 2D de cuadrados). Luego, piensa en lo que cada clase tiene que hacer y qué información debe comunicarse entre ellos. Intenta minimizar esta información. Por ejemplo, la Junta no necesita saber cómo se mueve un Obispo; en cambio, envía un movimiento propuesto a la instancia de Obispo apropiada, y el Obispo verifica el movimiento para ver si es diagonal, y lo rechaza si no. Sin embargo, debe haber un camino claro entre dónde está el Obispo y el destino. El obispo no sabe (y no debería) saber dónde están las otras piezas en el tablero, por lo que le pide al tablero que verifique si el camino está despejado. De esta manera, el tablero no necesita saber cómo se mueven los obispos, y los obispos no necesitan saber dónde están las otras piezas.

Todo este tipo de pensamiento lo haces en papel, todavía no hay código. Lo importante es tener una idea clara de alto nivel de cómo funcionará su programa; no tiene que obtener hasta el último detalle todavía. A estas alturas ya deberías tener una idea de los métodos que necesitas para cada clase, y la información que necesitas almacenar en cada instancia de la clase, por ejemplo, cada instancia de Peón necesita saber a qué jugador pertenece. Ahora puede colocar métodos vacíos que tengan las interfaces (nombres, parámetros, valores de retorno) que trabajó anteriormente. En esta etapa, me gusta escribir comentarios en cada método que describan lo que quiero que haga el método; esto me ayuda cuando realmente escribo el código. Luego, escriba cada método; es bueno si puede probar a medida que avanza. La mayoría de los lenguajes tienen un marco para las pruebas: estoy programando el programa de ajedrez en Ruby, usando un marco de prueba llamado RSpec.

Sea flexible: sus ideas originales pueden cambiar. No tenga miedo de inventar nuevas variables locales en un método según sea necesario, siempre que la interfaz del método permanezca igual, no causará problemas. Del mismo modo, agregar variables de instancia a una clase está bien, siempre y cuando se asegure de que se inicializan correctamente cuando se crea una instancia. Si encuentra que el código en un método se está volviendo desordenado, puede ser útil refactorizar el código, colocando parte del código en subrutinas separadas. Esto es especialmente útil para operaciones que tienden a repetirse.

Absolutamente. Aquí algunos consejos. La lista no es exhaustiva.

  1. Aprenda a usar los bucles y las estructuras de control correctamente. ¿Qué circunstancias dictan un ciclo for y qué instancias dictan un ciclo while? ¿Cuándo debería usar un if – else o cuándo debería usar un interruptor? Las cosas a lo largo de esta naturaleza son útiles para saber.
  2. Comprender las estructuras de datos. ¿Cuál es la ventaja de una matriz sobre un árbol? ¿Cuál es la desventaja de un árbol a una tabla hash? ¿Qué estructura de datos cumple con los requisitos de rendimiento y es más fácil de comunicar en mi situación particular? Aprenda a comparar los costos y beneficios de las diferentes estructuras de datos en sus programas.
  3. Siempre haga ejercicio (suponiendo que esté haciendo POO), el principio de RESPONSABILIDAD ÚNICA. Los objetos de Dios hacen que el código sea desordenado y difícil de depurar.
  4. Mantenga sus clases lo más simples posible. Utilice la herencia y la composición correctamente para reducir la duplicación de código.
  5. Comprenda las relaciones “Tiene un”, “Es un” y “Me gusta”.
  6. Acopla libremente tanto como puedas.
  7. Diseña una impresión azul para tu código. Dibujarlo Escribirlo. Y luego el código!
  8. Una vez que haya escrito su código, intente refactorizarlo en una solución más simple.
  9. Refactorizar de nuevo.
  10. Y otra vez.

Definitivamente sugeriría usar más papel. Antes de escribir cualquier código, piense en papel. Resolver el problema. Pruebe la solución ingenua, luego pase a la más optimizada. Nunca comience abriendo su IDE, comience a resolver el problema, solo para reiterar.

No hay una solución clara a lo que está preguntando, porque depende del problema que tenga ante usted. Al principio, puede tener 10 métodos en una clase, pero después de refactorizar, por ejemplo. más pensamiento, retoques y optimización, terminas con 5 o 12, ¡pero serán más claros, más simples y más elegantes!

¡Solo practica, piensa, piensa, piensa, escribe código, prueba cosas diferentes! ¡Llegarás ahí!

Siempre evite los métodos gigantescos. Si su código contiene muchas iteraciones y variables, debe identificar las responsabilidades en su código y dividirlas en varios métodos. Mejorará la legibilidad del código, el mantenimiento y su funcionalidad estará abierta a la extensión.

En primer lugar, piense en cada método desde el punto de vista de lo que está tratando de encapsular o representar. Expresa cada método como una oración.

A (nombre de objeto) debe poder hacer (nombre de método)

Un animal necesita poder moverse a una ubicación.

Un animal necesita poder moverse a una ubicación utilizando una dirección y distancia. Entonces necesito saber dónde termina.

se traducirá en algo como esto …

animal de clase pública
{
ubicación pública Ubicación {get; conjunto;}
Movimiento público vacío (ubicación loc) {
Ubicación = loc;
}
Movimiento de ubicación pública (Dirección d, Distancia l)
{
Ubicación = destino final (d, l);
ubicación de retorno;
}
}

Ahí está … puedes traducir la historia en código.

De hecho, no creo que pueda escribir su programa sin escribir y planificar su enfoque.

Si ya planificó lo que necesita, supongo que solo la experiencia puede ayudarlo a planificar mejor. siempre hay algo en lo que no pensaste o dónde falló tu lógica.

mantener limpio su código es otra cosa que puede hacerse independientemente de sus planes