Merci beaucoup pour cette réponse. =)
Je t'en prie.
Une petite question préliminaire : quel est l'intérêt de concevoir un programme ? Est-ce que ça permet considérablement de l'améliorer - plus clair, plus simple à maintenir, plus simple à étendre… - ?
Eh bien, qu'obtiens-tu à écrire le plan d'une dissertation avant de la rédiger ? À dessiner le croquis d'une maquette avant de la construire ?
En réfléchissant préalablement à ton programme, tu peux résoudre un certain nombre de problèmes qui ne dépendent pas directement du codage : quelles fonctionnalités implémenter (ou non) ? Comment découper ton programme ? Comment les différentes parties vont interagir ? Quelles structures de données choisir ? Quels algorithmes choisir ?
Toutes ces questions sont à la fois importantes et difficiles, d'autant plus difficiles que ton projet est ambitieux. Tu as besoin d'une vision d'ensemble de ton logiciel pour y répondre efficacement. Lorsque tu programmes, tu es concentré sur le bout de code que tu es en train d'écrire maintenant, tu n'as pas l'intégralité des sources en tête. Il est donc très difficile (voire impossible) de répondre à ces interrogations cruciales pendant l'implémentation.
À l'inverse, si tu t'occupes de toute la partie « découpage/choix des structures de données/choix des algorithmes » avant de programmer, tu n'as plus à y réfléchir au moment où tu tapes le code. Tu as donc plus « d'énergie mentale » à consacrer à l'implémentation (code propre, écriture des tests, écriture de la doc, etc.).
Au final, tu obtiens un code source de meilleure qualité, plus simple, clair et lisible, avec probablement une meilleure maintenabilité et extensibilité (si tu as fait attention à ces points lors de la conception). Ça peut donc valoir le coup de s'y pencher, oui.
Concernant la conception, ma méthode perso est la suivante : j'imagine que je doive expliquer le logiciel à un ami. L'idée, c'est que mon ami va devoir écrire le code de A à Z, sans que je puisse l'aider. Je dois donc lui donner tous les détails importants pour que le résultat final corresponde à mon souhait de départ.
J'ai lu les liens que tu as postés et j'ai essayé de m'imaginer devoir coder le logiciel. En premier lieu, ton objectif me paraît bien expliqué, on voit bien où l'on va. Le découpage en modules est également clair, il semble bien adapté à la résolution du problème que tu te poses. Jusque là, je dirais que c'est un bon début.
Maintenant, imagine que tu diriges 7 programmeurs et que chacun d'entre eux doive implémenter l'un des 7 modules. Que leur expliquerais-tu ? Il faudrait commencer par définir précisément le but de chaque module, éventuellement en donnant une API publique (avec force de commentaires). En suite, tu peux expliquer les grandes lignes de l'implémentation, notamment les bibliothèques, structures de données et algorithmes utilisés. Pas besoin d'aller jusqu'au pseudo-code ni jusqu'au diagramme de classes pour le moment, fais au feeling pour le niveau de détails. Garde juste à l'esprit que tu t'adresses (pour l'exercice) à un autre programmeur, pas à toi.
N'hésite pas à nous (j'ose espérer ne pas être seul à répondre à ce topic ) faire part de tes difficultés, les points où tu n'es pas sûr de toi, etc.