Premièrement, je me rends compte que cette question peut être quelque peu longue et vague et je m'en excuse. C'est probablement un problème de base avec un nom court pour quiconque "l'a compris", mais comme je me trouve à ce sujet manquant, je vous prie de bien vouloir me décrire le problème.
Je fais de la programmation de cette façon ou de l'autre depuis que j'ai environ 11 ans. Cela signifie que j'ai surtout tout appris moi-même depuis le début. J'ai reçu une formation technique, mais pas strictement en informatique (j'ai obtenu un diplôme en génie photonique). Nous avions des cours de programmation bien sûr, mais c'était surtout des trucs de base pour moi et je n'ai pas appris beaucoup de nouvelles choses. J'ai continué à m'instruire en cours de route pour le plaisir et j'ai toujours su que je poursuivrais une carrière dans la programmation, mais tous mes projets étaient assez petits à l'époque. Je n'ai eu aucun mal à les garder à l'esprit et à les entretenir.
Maintenant, je me retrouve à la tête d'une équipe, mais pas dans un environnement d'entreprise - je travaille pour l'université en développant des logiciels scientifiques (en C ++) pour des applications d'ingénierie. Soudain, le projet prend de l'ampleur (relativement) grand et j'ai du mal à m'en occuper la plupart du temps. Je perds beaucoup de temps et d'efforts sur deux choses principalement:
- Quand je dois revenir sur une section de code sur laquelle je n'ai pas travaillé depuis un moment, j'ai du mal à me souvenir comment cela a fonctionné. Je passe beaucoup de temps à revoir les fichiers d'en-tête des classes pertinentes et à lire les commentaires que j'ai placés en cours de route dans les fichiers source. J'aimerais qu'il y ait une forme de "schéma" que je pourrais entrevoir et retrouver l'image plus facilement;
- Lorsque j'introduis des changements, je réalise parfois à mi-chemin que ce que j'essaie de faire va casser les choses ailleurs (ou pire, cela n'apparaît que lors de l'exécution comme une surprise). Je reviens et commence à le faire différemment, seulement pour découvrir que j'ai négligé l'influence sur un autre composant. Je souhaite qu'il y ait un "diagramme d'architecture" où je pourrais voir comment les choses se font, comment ce que j'essaie de faire va influencer d'autres composants et un moyen pour moi de planifier en détail avant de commencer à implémenter des changements.
La plupart des gens avec qui je travaille ont des histoires similaires aux miennes - une forte orientation technique et parfois de grandes compétences, mais sans aucun moyen d'organiser leur travail. Cependant, leurs projets sont généralement beaucoup plus petits que les miens, donc ils se débrouillent d'une manière ou d'une autre. Quoi qu'il en soit, cela signifie pour moi que je suis seul et que je n'ai personne pour apprendre les bonnes pratiques.
J'ai suivi un cours de troisième cycle en gestion informatique et bien que je trouve cela très satisfaisant, il est principalement destiné aux non-programmeurs, enseignant les méthodologies de gestion de projet, les estimations de budget / calendrier, l'architecture d'entreprise, etc. - pas la conception et la planification de logiciels en tant que telles. Ça va, j'essaie d'apprendre ça aussi. Bien sûr, certains outils (comme UML) et les types de processus de développement de logiciels (cascade, itératifs, agiles ...) ont été introduits, mais évidemment pas en détail et j'ai du mal à décider ce que je devrais choisir et utiliser ( et dans quelle mesure).
J'ai lu de nombreuses questions et réponses sur la conception de logiciels sur SO - il y en a beaucoup sur le faire en utilisant tel ou tel outil ou méthodologie particulier, et si j'étais convaincu que la documentation UML résoudrait mes problèmes - je la ramasserais et commencez à l'utiliser. Mais certaines personnes ne jurent que par cela, d'autres disent que c'est inutile. Je cherche une réponse à un niveau d'abstraction plus élevé - existe-t-il des moyens de résoudre les deux problèmes que j'ai, et comment le faites-vous personnellement? Que dois-je apprendre pour pouvoir le faire, éventuellement sans être lié à un outil particulier? Celles-ci vont et viennent de style de temps en temps, et je m'attends à ce que leur applicabilité varie en fonction du type de projet.
Merci beaucoup d'avoir lu, je n'ai pas pu dire ce que je veux dire plus brièvement (manque d'expérience en conception de logiciels et de vocabulaire).