Je travaille avec javascript depuis 4 ans. Je suis très confiant quant à mes compétences en résolution de problèmes et je peux voir que la qualité de mon code s'améliore. J'essaie de rester à jour avec la communauté et je travaille actuellement avec ES2015 et React.js. Cependant, je sens que je ne peux pas du tout saisir les modèles de conception de programmation. Je sais où trouver des ressources à ce sujet et j'ai déjà lu des livres à ce sujet. Je compte sur mes collègues seniors pour prendre des décisions sur la structure du projet mais je n'ai aucun problème à y travailler.
Chaque fois que j'ai besoin de démarrer quelque chose par moi-même, je cherche ces deux chemins: Si j'utilise une grande bibliothèque / framework comme React.js, j'ai tendance à copier ce que fait la communauté; Si je suis sur quelque chose de plus petit, j'utiliserai le modèle de module. Je sais qu'une fois que je comprendrai mieux ce sujet, je pourrai prendre de meilleures décisions, mais pour l'instant je suis complètement perdu.
Dois-je rechercher une éducation supérieure à ce sujet? Ai-je besoin d'un mentor sur ce sujet? Suis-je juste stupide? Est-ce vraiment difficile à comprendre?
la source
Réponses:
Les modèles de conception de logiciels sont des solutions bien connues à des problèmes bien connus. La façon dont vous les comprenez est d'apprendre les modèles, de comprendre comment ils fonctionnent et de savoir quand il convient de les appliquer à la conception de votre logiciel.
La façon dont vous apprenez les modèles de conception de logiciels consiste à les étudier un par un. C'est un processus d'éducation continue. Si vous souhaitez réduire l'empreinte d'apprentissage, étudiez les modèles qui se rapportent directement aux technologies que vous utilisez actuellement.
Quelques informations importantes à savoir sur les modèles de conception:
Certains modèles de conception sont de nature architecturale. MVC et MVVM sont des exemples de tels modèles. Vous utilisez de tels modèles lorsque vous avez besoin des avantages organisationnels et structurels qu'ils fournissent.
Certains modèles de conception sont des solutions de contournement aux déficiences des langages de programmation. Vous n'aurez pas besoin de ces modèles si vous utilisez un langage de programmation plus expressif, mais souvent vous ne faites pas ce choix. La majorité des modèles du GoF sont dans cette catégorie .
Utilisez un modèle logiciel uniquement lorsque vous essayez de résoudre le problème que le modèle est spécifiquement conçu pour résoudre. Si vous écrivez une application en assemblant des modèles de logiciels, vous vous trompez.
Il n'y a pas de modèle logiciel existant pour chaque problème informatique existant. Si tel était le cas, la programmation ne serait qu'un exercice de correspondance de motifs.
Certains modèles sont en fait anti-modèles. La complexité supplémentaire que ces modèles introduisent l'emporte sur les avantages qu'ils offrent. Vous devrez décider par vous-même, modèle par modèle, lequel de ces modèles vous éviterez.
la source
L'approche de chacun en matière d'apprentissage est un peu différente, et je n'ai aucune idée de votre approche générale, mais je crois que vous vous rendez un mauvais service en vous qualifiant de "stupide".
Personnellement, d'après mes observations sur ce que beaucoup qualifieraient d'ingénieurs, de concepteurs de logiciels «réussis», tous ont un thème commun à leur apprentissage: «l'expérience». Je crois que c'est votre "éducation supérieure" et vous en apprendrez plus rapidement que d'acheter des tonnes de livres sur Amazon et de les lire (une mauvaise habitude).
Ainsi, par exemple, prenez un modèle GOF comme le modèle de commande et implémentez-le dans la langue de votre choix. Comprenez quels avantages cela vous apporte et quels sont les inconvénients. Les différents livres sur les modèles de conception vous l'expliqueront, mais je pense qu'il vaut mieux appliquer ces connaissances pratiquement et en tirer des leçons. Ne négligez pas le matériel de lecture, ils ont un but, mais le monde de l'informatique n'est guère un exercice de manuel. Cela étant dit, c'est mon opinion et ma vision du monde de l'informatique et en partie, représente ses propres difficultés au début de ma carrière en génie logiciel. En outre, un problème majeur que je vois, même avec des développeurs de logiciels très expérimentés, c'est l'impatience et l'oubli de profiter de ce qu'ils font. Alors, prenez votre temps avec ce que vous apprenez et n'oubliez pas d'apprécier réellement ce que vous faites, sinon pourquoi prendre la peine d'y consacrer du temps?
De plus, profitez de l'expérience pratique des autres. Il existe une pléthore de solutions open source, à la fois mauvaises et bonnes, et vous pouvez en tirer des leçons. Regardez comment ils ont appliqué des modèles et réfléchissez à la façon dont vous aborderiez le problème différemment.
Donc, mon conseil général est que si vous sentez que votre approche est mauvaise, changez-la. Regardez les gens autour de vous qui, selon vous, apprennent le matériel que vous pensez ne pas saisir et regardez ce qu'ils font ou même leur demandez.
la source
La réponse courte est que vous n'en avez pas besoin . Vous pouvez écrire du code sans eux. Comme Matthew l'a dit dans les commentaires, cela est particulièrement vrai en JavaScript où le langage est assez flexible et les projets ont tendance à être plus petits. Mais si vous programmez depuis 4 ans, j'ai du mal à croire que vous ne soyez pas tombé sur des choses répétitives ou maladroites. Ce sont ces zones que vous redécouvrez ou qui manquent de motifs de conception.
Exemple: le système d'événements JavaScript est souvent inadapté à la tâche à accomplir. Ne vous trouvez-vous jamais désireux de pouvoir combiner ou transformer des flux d'événements? Ou cette série d'événements étaient des valeurs de première classe à part entière? Vous avez besoin des modèles Mediator et / ou Observer. Besoin d'une liaison de données bidirectionnelle? Même histoire.
La hiérarchie fragile du prototype s'est abattue? Mixin / Trait / Subclass Factory patterns à la rescousse.
la source
Trouvez un mentor, quelqu'un avec une très bonne expérience pour apprendre. Posez-lui des questions, regardez son code, soumettez une révision de code et essayez de collaborer avec lui. C'est la meilleure façon d'améliorer vos compétences en codage.
supplémentaire:
Collaborez à un projet OSS simple que vous aimez
Lorsqu'il existe deux façons de résoudre le même problème, choisissez toujours le plus simple
Construisez une expérience supplémentaire avec des projets parallèles où vous êtes libre de faire toutes sortes d'erreurs étranges, et vous apprendrez le modèle de conception "à la dure" (tm)
la source