Je vois quelques problèmes sérieux avec cette question. Commençons.
Comment arrêter de perdre du temps à concevoir architechture
Cette question est plutôt chargée. En outre, vous ne concevez pas d' architecture. Vous architecte . L'architecture et la conception sont des activités complémentaires et connexes, mais ne sont pas identiques, même si elles peuvent se chevaucher.
De même, de la même manière, il est possible de perdre du temps en architecture (en sur-architecture), mais aussi en sur-conception et en sur-codage (en codant des éléments de manière beaucoup plus complexe que nécessaire, ou en omettant code pour les choses qui sont nécessaires.)
Une architecture appropriée vise à éviter ce gaspillage dans le codage Il le fait en limitant, en limitant et en documentant les différentes manières dont un système complexe doit être 1) conçu, 2) codé et testé, 3) livré, 4) maintenu, 5) se remettre de l’échec et 6) finalement mis hors service.
Mon expérience a été que les gens qui aiment juste coder, codent sans penser à la façon dont un système doit fonctionner et être maintenu sur le long terme, passant à la prochaine pomme de terre chaude laissant une pauvre âme pour maintenir un golem laid.
Mais je m'égare ...
C'est la chose la plus simple : pour les systèmes assez simples, l'architecture est évidente et provient de pratiques de conception et de mise en œuvre saines.
Ce n'est que pour les grands systèmes qui impliquent un assez grand nombre de personnes ou un logiciel au niveau du système qui effectue des tâches très complexes qui nécessitent une architecture explicite.
Je suis récemment diplômé de l'université et j'ai commencé à travailler en tant que programmeur. Je ne trouve pas difficile de résoudre des problèmes "techniques" ou de procéder à un débogage, ce que je dirais a une solution.
C’est le minimum requis pour cette profession, et je suis heureux que vous n’ayez aucun problème à les exercer (je serais inquiet si vous le faisiez.)
Mais il semble y avoir une classe de problèmes qui n'ont pas une solution
C’est le pain quotidien de notre profession, le type de problèmes pour lesquels les employeurs sont disposés à payer nos salaires (généralement) bien supérieurs à la moyenne.
En fait, les problèmes qui méritent d’être résolus sont ceux qui peuvent avoir plus d’une solution. Les problèmes du monde réel, ils sont comme ça. Et le monde a besoin de notre expertise, en tant que développeur de logiciels, pour proposer des compromis acceptables.
- des choses comme l'architecture logicielle.
L’architecture des choses est une caractéristique inévitable des systèmes complexes, qu’ils soient virtuels / logiciels ou dans le monde concret. Chaque système qui fonctionne, qui prend des entrées et produit des sorties, sera complexe et aura une architecture.
Lorsque nous développons des logiciels pour de tels systèmes (un système bancaire, un système de surveillance de la consommation, un système de vente de billets, etc.), nous visons à produire un logiciel qui imite les fonctions et les exigences d'un tel système.
Nous ne pouvons simplement pas simplement nous en servir et coder le style cow-boy. Nous avons besoin d'une sorte d'architecture. Cela est particulièrement vrai si le projet nécessite des dizaines d'ingénieurs, voire davantage.
Ces choses me troublent et me causent une grande détresse.
C'est ok. Ce n'est pas une matière facile à apprendre ou à enseigner, non sans beaucoup de pratique.
Je passe des heures et des heures à essayer de décider comment "architecter" mes programmes et systèmes. Par exemple, est-ce que je divise cette logique en 1 ou 2 classes, comment puis-je nommer les classes, devrais-je rendre cela privé ou public? Je veux juste créer le programme, l'architecture soit maudite.
Malheureusement, ce n'est pas l'architecture logicielle.
Ce n'est même pas la conception, mais juste le codage. Je ferai quelques suggestions au bas de cet article.
Comment puis-je passer plus rapidement de la phase d'architecture et de la phase de codage et de débogage que j'apprécie ?
J'ai du mal à trouver un moyen de répondre à cette question, car c'est plutôt émotionnel.
Essayons-nous de faire un travail ou essayons-nous simplement de profiter de la pratique? C'est formidable quand les deux ne font qu'un, mais dans la vie réelle, ils ne le sont souvent pas.
C'est formidable de faire des choses qui nous plaisent, mais dans un métier aussi complexe que le nôtre, se concentrer uniquement sur ce qui nous passionne ne nous incite pas à mener une carrière fructueuse.
Vous ne progresserez pas, vous ne mûrirez pas ou n'acquerrez pas de nouvelles connaissances.
Il y a ce dicton dans l'armée, "embrasse le sucer."
D'autres phrases ont le même conseil. "Si ça ne craint pas, ça n'en vaut pas la peine" et mon préféré: "Si ça craint (et c'est important), continuez jusqu'à ce que ça arrête de sucer."
Mes recommandations:
Il me semble que vous avez encore du mal à comprendre les différences entre
le codage (comment coder vos classes, modules ou non, conventions de nommage, visibilité d'accès, champ d'application, etc.),
la conception (combien de niveaux, front-end / back-end / db, comment chacun communique, ce qui se passe où) et les décisions d'architecture implicites découlant de la conception de systèmes simples,
architecture (comme dans les systèmes complexes nécessitant des milliers, voire des centaines de milliers d'heures de travail.)
Je vous suggère donc de vous plonger profondément dans le premier sujet (codage) pour le porter au prochain niveau.
Code propre
"Clean Code" de Robert "Oncle Bob" Martin est un bon point de départ.
Cohésion du logiciel
De plus, je vous suggérerais de vous familiariser avec une métrique logicielle spécifique orientée objet appelée LCOM ou plutôt LCOM4.
Cela peut devenir assez mathématique et ce n’est pas une solution à toute épreuve, mais votre objectif devrait être de comprendre et de détecter de façon empirique (ou si vous le voulez bien) si une classe est cohérente ou si elle manque de cohésion.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Principes logiciels
Cela va de pair avec le "principe de responsabilité unique" ou SRY que nous devrions tous connaître. SRY est l’un des 5 "SOLID" que nous devons tous connaître si nous voulons devenir compétents en codage.
À mesure que nous progressons dans les principes SOLID, nous devons également nous familiariser avec les principes "GRASP" , qui régissent ou plutôt guident la manière dont nous codons les classes.
Livres supplémentaires
Enfin, je suggérerais également ce qui suit:
"Refactoring" de Martin Fowler et Ken Beck serait le prochain livre que je lirais dans cette liste.
"Conception par contrat, par exemple" de Richard Mitchell, Jim McKim et Bertrand Meyer (le dernier de la renommée d'Eiffel.) Ce livre est épuisé, mais vous pouvez en trouver des exemplaires bon marché sur Amazon.
Avec cela, vous devriez avoir une bonne idée de la façon de commencer à coder et à concevoir, et avec de la pratique, de déplacer et de maîtriser (ou au moins de saisir) l’architecture logicielle.
Je suis sûr qu'il y aura d'autres professionnels qui ajouteront, soustraireont ou s'opposeront à ces suggestions. Ils proposeront d'autres suggestions, probablement validées par leur propre expérience.
Tout ce que je peux dire, c'est ceci: il n'y a pas de raccourci.
Bonne chance.