Développeur de logiciels Meta Skills

Apprendre des livres sur la correction et la reconnaissance des formes



Quelques réflexions sur la façon de bien construire un logiciel.

Récemment, un ami a posé des questions sur les compétences spécifiques des développeurs de logiciels.

Quelles sont les compétences uniques que pratiquent les praticiens du développement?

Sur la base de mon expérience, j'ai formé l'opinion suivante. L'idée que j'ai réalisée au fil du temps est que j'aime la méta-programmation. L'apprentissage des métacompétences, ou comment faire ce que nous faisons mieux, implique la lecture de nombreux livres bien connus, en tenant compte du contexte.
J'ai pris des exemples concrets de ce que j'ai lu au fil des ans, je les ai appliqués à mes propres observations dans ce domaine et j'ai répondu de la manière la plus pragmatique.

À mon avis, si vous pensez universellement, je dirais que c'est la pratique de la correction et de la reconnaissance des formes * . Voici quelques-unes des compétences propres aux développeurs de logiciels.

Exactitude


La justesse est étroitement liée à la manière et aux raisons pour lesquelles nous faisons les choses de cette manière, et non autrement. Dans les entreprises, cela est le plus étroitement lié à l'exactitude de la tâche qu'une entreprise doit résoudre pour ses clients. Un logiciel bien écrit adhère à la même pensée.

L'exactitude est considérée dans le développement comme la façon dont elle est «comment» afin qu'une solution d'entreprise puisse continuer à résoudre des tâches avec un haut niveau de fiabilité et d'efficacité. Ce processus est un équilibre entre stratégie (conception) et tactique (exécution).

Une étude de ce qu'est ce «comment» dans le vide est mieux représentée dans la quatrième partie du premier chapitre de Programming Pearls - Writing Correct Programs .

... le maintien d'un code simple est généralement la clé de l'exactitude.
- John Bentley

Reconnaissance de formes


La reconnaissance des formes est fortement liée à l' organisation de cette exactitude en créant les abstractions et les limites des composants nécessaires.

La reconnaissance des formes conduit au concept de réutilisation pour moduler et isoler le code. Nous suivons la duplication, trouvons les zones qui peuvent être réutilisées et repensons les parties complexes du code. C'est ce que les développeurs de logiciels font bien. Nous suivons les détails très attentivement. Nous reconnaissons la connaissance telle qu'elle est créée à maintes reprises. Et puis nous simplifions.

La reconnaissance des formes est discutée dans la communauté et il existe de nombreuses sources où vous pouvez lire sur les méthodes de reconnaissance. J'ai appris cela dans le deuxième chapitre de The Pragmatic Programmer - The Evils Of Duplication ( The Pragmatic Programmer - The Evil of Duplication).

Rendez-le facile à réutiliser. Ne répétez pas.
- Andrew Hunt et Dave Thomas

Observation intéressante


Dès que j'ai donné cette réponse, mon ami a posé une contre-question.

Si l'exactitude et la reconnaissance des formes sont ces compétences, comment les apprenez-vous?

Bien sûr, ma réponse était assez simple:

Trouvez ces livres, configurez votre environnement et étudiez des exemples. Définissez vos attentes d'apprentissage et appliquez ces méta-compétences tout en apportant de la valeur à votre entreprise. Pourquoi? La complexité C'est le meilleur investissement que je connaisse dans la formation à la maîtrise. Cela rend également les développeurs plus confiants au fil du temps.

Ma croissance s'est centrée sur ces livres et sur ces compétences spécifiques. Mais cela m'a fait réaliser qu'il existe plusieurs compétences qui contribuent de manière significative aux métacompétences, en plus d'effectuer directement le travail. Je me suis intéressé à la terminologie de la méta. Mon travail sur la décomposition des tâches (correction) et l'organisation (reconnaissance des formes) n'a pas trouvé d'application au moment de leur publication. Et à peu près au même moment, je pensais écrire cet article sur les méta-compétences.

Un professeur de l'Université de Stanford a enseigné un cours de méta-compétences, ce qui a conduit à la rédaction d'un livre dans lequel il a inclus certains des résultats de son cours. J'ai été choqué quand j'ai découvert qu'il avait la même attitude envers la question que la mienne. Par conséquent, j'ai acheté un livre et je l'ai lu avec enthousiasme. Chapter Treize, A Philosophy Of System Design .

Les développeurs sont généralement très concentrés sur les détails. Nous aimons les détails et nous aimons en gérer beaucoup; ceci est important pour être un bon ingénieur spécialisé. Cependant, les bons développeurs de logiciels peuvent également prendre un peu de recul par rapport aux détails et penser au système à un niveau supérieur.
- John Ousterhout **

Conclusion


À mon avis, l' exactitude et la reconnaissance des formes sont des compétences *** que les développeurs de logiciels doivent apprendre et développer par eux-mêmes. En conséquence, la qualité du logiciel s'améliore. Toutes les autres compétences uniques peuvent très bien s'appuyer sur ce qui précède. J'invite les autres à partager des exemples de méta-compétences qu'ils ont développées au fil du temps.

Dans l'ensemble, l'exactitude et la reconnaissance des modèles sont liées au résultat de la complexité (également connue sous le nom de charge cognitive). Il doit y avoir un moyen d'équilibrer les deux facteurs avec compétence pour réduire la complexité. C'est pourquoi je considère ces compétences comme l'essence principale de tout ce que nous faisons.



* Ce qui est intéressant, c'est l'exactitude et la reconnaissance des modèles qui sont fortement liés par les pratiques autour de l'apprentissage automatique.
** Si vous voulez en savoir plus sur ce que fait John, regardez sa vidéo .
*** Les ingénieurs doivent également pratiquer un niveau élevé de formation et de communication. Ces concepts ne sont pas propres au logiciel, mais sont fortement associés aux sciences.

Article original

Source: https://habr.com/ru/post/fr420923/


All Articles