En général, je fais une analyse suffisante du domaine du problème sur le papier/le tableau blanc pour avoir une compréhension suffisante du domaine du problème pour commencer à écrire du code. Je dessine rarement des diagrammes d'implémentation ou de classe sur papier. Une technique clé que j'ai trouvée pour obtenir une meilleure conception est de ne pas trop s'attacher au code que vous écrivez. Si je ne l'aime pas, je le supprime, le renomme, le déplace et le remanie jusqu'à ce qu'il exprime une solution suffisamment bonne à ce que j'essaie de résoudre. Cela vous semble facile ? Pas du tout ! Mais avec de bons outils de "codage", l'écriture du code n'est pas l'effort principal. Écrire un peu, remanier, supprimer, écrire à nouveau...
Un bon design ne commence presque jamais par être bon. Il évolue vers le bien. En acceptant cela, il est plus facile de travailler par petites étapes sans être frustré parce que le design n'est pas "parfait". Pour que ce processus fonctionne, vous devez cependant posséder de bonnes compétences en matière de conception. Le fait est que même d'excellents designers ne réussissent pas du premier coup.
Souvent, je pensais avoir compris le domaine du problème quand j'ai commencé, mais ce n'était pas le cas. Je retourne alors au tableau blanc, je parle à quelqu'un ou je me documente sur le domaine du problème si je me rends compte que je ne le comprends pas assez bien. Je retourne ensuite au code.
C'est un processus très itératif.
Une question intéressante à se poser lorsqu'on aborde la façon dont les programmeurs pensent, est de savoir comment ils ont développé leur mode de pensée. Personnellement, ma façon de penser a évolué au fil des ans, mais quelques événements ont eu une profonde influence sur ma façon de développer des logiciels. Le plus important d'entre eux a été de concevoir des logiciels avec des personnes qui sont des concepteurs experts. Rien ne m'a plus influencé que de passer des itérations avec de grands concepteurs. Un autre événement qui a influencé, et influence toujours, ma façon de penser est le retour en arrière et l'examen d'un logiciel que j'ai écrit il y a quelque temps.