[Architecture] Documentation scolaire et bibliographie
Bonjour,
venant de passer il y a peu une certification OCPJP, je m'intéresse aujourd'hui à l'OCMJD (Java Developer).
Vu que je fais tout ça en autodidacte fauché, j'ai préféré éviter les cours Oracle hors de prix et ai suivi les conseils glanés ici ou là sur le net : je me suis procuré le livre SCJD Exam with J2SE 5 de Monkhouse et Camerlengo.
L'ouvrage est très intéressant, tient effectivement ses promesses et prépare correctement au SCJD autour de J2SE 5... sauf que moi je vise l'OCMJD à l'ère de Java 8 !
Outre la différence de JDK entre l'exam de Sun traité dans le livre et l'exam d'Oracle que je vise, j'ai l'impression que ce livre présente une méthodologie un peu désuète et obsolète - bien que suffisante pour l'examen - , dite "en cascade".
Loin de moi l'idée de dénigrer cette méthode ! J'ai seulement cherché à m'informer des autres méthodes susceptibles de pouvoir me servir dans un hypothétique avenir d'architecte logiciel... et là ... c'est le drame.
J'ai beau user mon clavier en harcelant Google, je ne trouve aucun site, aucun ouvrage, aucun document enseignant clairement et pédagogiquement une méthodologie complète pour la conception ! Ô désespoir ! :)
Je suis bien entendu tombé sur des classiques traitant des Design Patterns ("Big Four" et Head First, entre autres), sur des moins classiques abordant l'organisation de projet avec SCRUM et XP, sur des PowerPoints égarés traitant de truc conceptuels comme MVC, MVVM, et autres sigles...
Tous ces "outils", ces "patterns", toutes ces "méthodes", son intéressants individuellement mais beaucoup se contredisent ou se combinent très mal, d'après ce que j'en ai compris.
En bref, j'ai l'impression d'être dans un milieu où règne un jargon confus, où tout le monde parle en sigles et en concepts flous qui changent de définition avec le temps et le contexte, et où tout le monde avance un peu à l'aveugle en apprenant sur le tas.
Voici donc enfin ma question :
* Existe-t-il quelque part, dans la bibliothèque perdue d'une université abandonnée ou dans le coffre fort de Bill Gates, un livre ou un fascicule s'intitulant sobrement "L'architecture logicielle" et détaillant pas à pas et sans langage d'avocat une méthodologie universelle permettant de faire passer un logiciel de l'état de "vision" à l'état de "déploiement" de manière à ce qu'il soit le plus robuste, stable, flexible et fonctionnel possible ?
De mes recherches, j'ai retenu les méthodes agiles - et notamment SCRUM - qui proposent un déroulement temporel précis et clair du cycle de vie d'un projet. Mais SCRUM laisse l'équipe libre de définir l'architecture sprint après sprint, release après release... OK, mais ça me dit pas comment !
J'ai retenu aussi, bien sûr, les célèbres Design Patterns bien utiles (même si j'avoue ne pas savoir quand ni comment m'en servir). J'ai bien compris qu'il s'agissait "d'identités remarquables" de la programmation : elle permettent de simplifier l'entité (a + b)² en l'entité a² + 2ab + b², en quelque sorte, mais comment je sais que pour faire ce qu'il a à faire, mon logiciel doit contenir cette entité ?!?
J'ai vu passer aussi un bon gros zilliard de sous-disciplines de l'architecture logicielle ("Business Architecture", "Information Architecture", etc.). Pas de quoi définir l'architecture comme unité...
Je suis peut-être trop attaché au formalisme et peut-être qu'une telle méthodologie n'a pas lieu d'être dans cette discipline, mais j'avoue être surpris de ne pas avoir pu trouver facilement de telle documentation.
Merci d'avance pour les efforts que vous ferez pour reformuler ma conception peut-être erronée de l'architecture logicielle et me mettre sur la voie des œuvres qui permettent de faire de moi un tueur en la matière :p.
Cordialement.
(désolé pour le double post...)
Wow.
Je viens de regarder la vidéo de la conférence de Martin et de lire son article "the Clean Architecture"... même s'il n'y a pas de méthodologie précise livrée avec, ça range déjà pas mal de chose dans les idées que je me faisais de tout ça.
Dans sa conférence, il explique bien comment, finalement, tous ces "modèles" et ces "méthodes" dont on parlait plus tôt ne sont que des tentatives des développeurs d'adapter dans l'urgence une architecture simple (comme définie par le modèle "Entity-Interactor-Boundary" de Jacobson) aux changements brutaux qu'ont représenté l'arrivée du web et la dématérialisation des données.
Enfin, au moins pour ce qui concerne l'OO. Mais je suppose que le modèle est adaptable au non-OO puisque les données y sont plus "simples" (les adapters travaillent moins, voire pas du tout). Ça ressemble donc au type de "méta-modèle" que je cherchais !
Dans son blog, il précise et généralise encore plus en insistant sur le principe de dépendance. Son modèle de "Clean Architecture" me parait, au coup d'oeil, particulièrement efficace pour la sécurisation des entités (encapsulées dans la couche applicative), pour la sécurisation du traitement (encapsulé dans la couche des interfaces), pour la modularité, pour le multi-plateforme...
A y repenser, les design patterns sont des cas particuliers où appliquer une ou deux des règles du "SOLID". Son modèle, lui, applique les cinq principes en même temps à chaque couche. C'est en ça qu'il est plus fondamental que ces patterns et que tous les modèles "rustines" qui me déplaisent tant.
Pour en extraire grossièrement des méthodologies de développement :
- soit par couche : de la couche la plus centrale (entité) jusqu'à atteindre les couches externes (GUI, DB), tous les use-cases en même temps. Ce qui est lourd pour la conception initiale.
- soit par quartier/use-case : toutes les couches sont développées en même temps mais seulement pour ce qui concerne le use-case. Ça revient à la méthode des stories.
Dans les deux cas, une schématisation globale des couches, des entités, des use-cases, des adapters, des interfaces attendus sur le logiciel pendant la période préparatoire d'un projet permet de dégager assez clairement et rapidement les modules/packages/flows dès le départ.
Dans les deux cas aussi, la modularité permet d'ajouter des use-cases en cours de route et permet donc le développement par itération sans mauvaise surprise pour l'architecture générale.
Dans les deux cas enfin, le première chose à faire est de définir clairement les entités.
La petite subtilité du modèle, qui va en gêner beaucoup je pense, c'est qu'il faut tout faire pour se passer des frameworks.
Bref, ça me parait très prometteur tout ça. Merci de me l'avoir fait découvrir ! Je fonce lire le bouquin maintenant :D