Atelier de contribution Go en Russie


Longtemps prévu d'envoyer un patch à Go, mais constamment repoussé? Face à des difficultés, ne savait pas par où commencer? Dans cet article, je décrirai comment nous avons mené l'atelier de contribution Go à Kazan, sur ses résultats, ainsi que sur les leçons que les organisateurs ont apprises.


Spoiler: il est prévu de répéter cet événement lorsque Go entre dans la phase de développement active (quitte l'état de gel de code). Voir les détails sous la coupe.


Qu'est-ce qu'un atelier de contribution Go?


De temps en temps, des réunions de programmeurs Go de différentes tailles ont lieu dans le monde entier, dont le but est d'étudier l'intérieur de Go et d'y envoyer leurs modifications. Tout a commencé avec GopherCon .


Quelqu'un vient aider les autres à comprendre le flux de travail, à détecter un problème et à le résoudre, puis à passer en revue et, idéalement, à arriver au point où le patch est injecté en amont . D'autres viennent en tant que "Premier contributeur".


Si vous êtes intéressé par l'un des éléments suivants, vous pourriez être intéressé à participer:


  • Plongez-vous dans les détails de bas niveau de la chaîne d'outils Go (compilateur, éditeur de liens, assembleur, ...)
  • Accélérez certaines fonctions de la bibliothèque standard ou du runtime
  • Ajoutez des exemples ou des tests manquants pour l'un des packages.
  • Refonte d'un code très effrayant
  • Améliorez la prise en charge d'une architecture ou d'un système d'exploitation plus rare (vous disposez d'un matériel et / ou d'un système d'exploitation)
  • Discutez avec des personnes qui contribuent à Go depuis longtemps

La liste n'est pas complète, tout le monde peut y trouver quelque chose.


Atelier en Russie


À un moment donné, j'ai décidé que je voulais participer à l'organisation d'un tel événement. Surtout, je voulais faire partie d'un cercle de personnes ayant des intérêts similaires.


Le programme préliminaire durait environ 6 à 10 heures (le meilleur et le pire des cas). Le hackathon avait l'air du format le plus approprié, mais il n'était pas possible de trouver des sponsors à ce moment-là. Mais il y avait une opportunité de dispenser des cours optionnels pour la plate-forme scientifique et pratique de l'IWMI & KFU , une fois par semaine pendant une heure et demie. Inconvénient évident: en raison des interruptions importantes entre les participations, vous devrez passer un peu plus de temps. Et pas de pizza. Soupir


De manière assez inattendue, je me suis avéré être un invité dans le podcast GolangShow (ép.119) , où j'ai laissé échapper l'idée de diriger quelque chose de similaire pour les étudiants. Un peu plus tard, Elena Grakhovats a créé la chaîne #kfu-go-2018 en marge de la communauté russophone Go . Non seulement les étudiants du KFU pouvaient y communiquer, mais aussi tous ceux qui souhaitaient participer à distance.


Après cela, les détails de la réunion ont été approuvés à l'université, des dates précises sont devenues connues. Au lieu d'un hackathon, ils ont obtenu un "cours de langage de programmation Go". Cela n'a pas beaucoup changé le contenu, l'objectif est resté le même et il était clairement décrit dans l' annonce .


Cela a été suivi d'une analyse du tracker à la recherche de tâches qui pourraient être effectuées dans le cadre de l'événement au moins partiellement (encore mieux - complètement).


Leçon n ° 1

En fait, il s'est avéré que la liste des tâches incluait celles qui étaient des intérêts ou que j'avais personnellement comprises. Cela a également été reconnu lors de la compilation de la liste, mais il est difficile de l'influencer.


Il serait peut-être préférable que cette liste soit composée de plusieurs personnes ayant des profils et des intérêts différents.


N'importe quel participant pouvait aller sur le tracker Go et choisir n'importe quoi, mais pour les tâches de la liste, les explications étaient prêtes, et pour certaines d'entre elles une solution partielle.


La plupart du contenu généré pendant le cours est disponible dans le référentiel kfu-go-2018 . Vous pouvez également y trouver tasks.org .


Première rencontre


Des étudiants sont venus qui n'avaient jamais écrit sur Go. La plupart d'entre eux n'ont même pas entendu parler d'un tel langage de programmation.


Nous avons passé la moitié de la première leçon sur la construction de Go à partir de la source. Sur différents ordinateurs, il y en avait différents, y compris des problèmes inattendus. Différents systèmes d'exploitation, versions de compilateurs système (quelqu'un n'avait pas l'intention de passer à la version 1.4), etc. ./make.bash ( make.bat pour Windows) ne fonctionnait pas avec des erreurs différentes.


Lorsque la majorité avait un Go fonctionnel, notre premier Hello World était d' go tool compile message canonique dans la go tool compile lorsqu'un nouveau drapeau lui était passé.


90 minutes se sont écoulées: nous avons parlé de Go, l'avons comparé à C ++, compilé une chaîne d'outils, désassemblé le processus d'amorçage et mis en place un compilateur mis à jour.

Leçon n ° 2

Séparément, il convient de mentionner que Delus Farkhulin m'a aidé. Empiriquement révélé que plus de quatre personnes à diriger seul est très difficile. La situation est compliquée quand aucun des participants, à l'exception des mentors, ne connaît Go. Vous devez effectuer de nombreuses étapes supplémentaires. Cependant, si nous étions quatre, ce serait beaucoup plus facile (il y avait 15 étudiants).


Les premiers patchs du projet Go


Pour la deuxième leçon, l'objectif était d'aller directement à contribuer:


  • Nous avons convenu avec Daniel Martí qu'il sera disponible à l'heure convenue et pourra effectuer une révision (mettre +2 si le patch est trivial et correct).
  • Ilya Tokar a suggéré un référentiel à gratter où il est beaucoup plus facile d'envoyer le premier CL (liste de modifications). Vous permet d'essayer gerrit au travail sans risque de casser quelque chose.
  • Autocollants préparés pour la livraison à ceux qui ont réussi à injecter des correctifs dans Go.

Nous avons eu de la chance: le dépôt de scratch a été cassé. Quelqu'un a envoyé le mauvais code au référentiel et à cause de cela, les trybots (tests CI) ont toujours échoué. L'une des tâches que j'ai préparées consistait à corriger la cause de l'erreur de génération.


À la fin de la leçon, 6 correctifs ont été envoyés:
CL105415 , CL105395 , CL105356 , CL105416 , CL105355 , CL105375 .


Tout le monde a obtenu les autocollants.



180 minutes se sont écoulées: ils ont démantelé le processus de développement de Go, publié Google CLA à tout le monde, mis en place gerrit, envoyé des correctifs "hello world", réparé l'assemblage du référentiel à gratter, et l'un des participants a réussi à envoyer le correctif à golang / go (la fusion a eu lieu le même jour).

Leçon n ° 3

Pour de bons autocollants "à temps", vous devez contacter un fournisseur de confiance. Enregistrer aux points les plus proches où les autocollants peuvent être imprimés sans les couper n'est pas une bonne idée. Et vous ne pouvez pas combiner le logo gopher avec autre chose: un gopher avec un signe Intel à la main viole toutes les lois imaginables des autocollants.


Les autres classes ont été organisées selon un schéma plus souple. Nous sommes venus et avons travaillé sur nos tâches, avons échangé des expériences et nous nous sommes aidés. Presque toutes ces réunions ont envoyé plusieurs correctifs.


Puis vint le gel du code et le cours prit fin logiquement. À ce stade, 17 patchs ont été versés. Nous nous réunissons toujours le samedi et travaillons sur différents utilitaires Go ...



Les difficultés de la "deuxième étape"


Le moyen le plus simple était de faire le premier pas. Pour ceux qui ne sont pas sûrs de travailler avec git, le dépôt de scratch est une excellente solution.


Il n'était pas trop difficile de trouver des tâches d'un volume minimal et ne nécessitant pas un contexte large. Une variété de linter a aidé ici. Exécutez " gometalinter --enable-all " sur le package de GOROOT et choisissez ce que vous GOROOT corriger.


C'était plus difficile avec des tâches d'un niveau supérieur. C'était difficile pour moi de suggérer cela, mais c'était difficile pour eux de choisir cela. En même temps, il était entendu que nous avions déjà dépassé la correction des avertissements de linter (c'est-à-dire que le défi avait disparu, pour une formation productive, il était nécessaire de rechercher de nouveaux types de tâches).


En théorie, une bonne tâche de deuxième niveau consiste à améliorer les tests dans Go: augmenter la couverture, ajouter ou affiner des repères, corriger des tests pas tout à fait corrects ou désactivés, vérifier les tests de régression, etc. Cela nécessite une certaine immersion dans le package de test, mais la portée du changement sera minime et il est assez facile de vérifier le résultat. Mais tout le monde n'aime pas travailler avec des tests.


Exemples de ce qu'ils ont réussi à prendre comme tâches du 2e niveau:


  1. encoding / json: ajoutez le chemin complet au champ dans UnmarshalTypeError ( #22369 )
  2. time: optimise time.Time.Sub et time.Since ( #17858 )
  3. cmd / compile: évitez les versions lentes des instructions LEA sur x86 ( #21735 )

Nous les avons rapprochés du gel de code, nous n'avons donc pas eu le temps de le terminer: il y avait 2 samedis pendant 90 minutes, mais ce n'est pas suffisant. De plus, chacun a travaillé sur sa tâche. Il serait peut-être plus facile si au moins deux personnes se divisent en équipes, par exemple, dans le cas du problème 2135 , vous pouvez vérifier différentes hypothèses en parallèle et étudier différentes parties du compilateur en parallèle, puis partager les connaissances.


Leçon n ° 4

Surtout, il convient de prêter attention à cette partie particulière, à l'approfondissement inévitable et aux problèmes qui en découlent. Je doute qu'il y ait des gens qui connaissent toutes les parties de Go au point de pouvoir soutenir n'importe quel choix, donc là encore tout se résume à un manque d'experts différents.


Atelier v2


Certains des problèmes décrits ci-dessus seraient résolus par un autre format, lorsqu'une tâche plus complexe ne nécessiterait pas sa solution dans les trois semaines. Le prochain atelier devrait se tenir sous la forme d'un événement continu, au moins pendant 4-5 heures, et idéalement avec une pause et plus longtemps.


Habituellement, le format hackathon implique également une certaine préparation des participants avant le départ, à savoir le choix de la tâche et une description préliminaire des moyens de la résoudre, la formation d'équipes. Cela peut également aider à augmenter le nombre de contributions réussies.


Nous avons besoin de plus de mentors qui peuvent aider les participants à sélectionner et à résoudre les problèmes en temps réel.


Le choix d'une ville dépend du nombre de participants et de leur répartition géographique. Quatre options sont les plus proches de moi: Moscou, Innopolis, Kazan, Nizhny Novgorod.


En conclusion


Il n’est pas nécessaire de venir à de tels hackathons pour commencer à contribuer à Go, un exemple motivant serait l’article de Marco, How new to Go contribue . Cependant, dans une entreprise des mêmes personnes intéressées, il est plus facile de surmonter l'inconfort et la confusion initiaux, d'aller du début à la fin.


Si vous n'êtes pas indifférent à ce sujet, restez à l'écoute, regardez golang-ru.slack . La prochaine période de développement actif de Go commence en août 2018 : pas trop loin pour l'oublier, et pas trop près pour ne pas avoir le temps de bien se préparer.


Matériaux bonus pour les contributeurs débutants



Évènements à venir


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


All Articles