Lange geplant, einen Patch an Go zu senden, aber ständig verschoben? Wussten Sie angesichts von Schwierigkeiten nicht, wo Sie anfangen sollen? In diesem Artikel werde ich beschreiben, wie wir den Go-Beitragsworkshop in Kasan durchgeführt haben, über seine Ergebnisse sowie über die Lehren, die die Organisatoren gezogen haben.
Spoiler: Es ist geplant, dieses Ereignis zu wiederholen, wenn Go in die aktive Entwicklungsphase geht (verlässt den Code-Freeze-Status). Siehe Details unter dem Schnitt.
Was ist ein Go-Beitragsworkshop?
Von Zeit zu Zeit finden weltweit Treffen von Go-Programmierern unterschiedlicher Größe statt, deren Ziel es ist, die Innenseiten von Go zu untersuchen und ihre Änderungen an Go zu senden. Alles begann mit GopherCon .
Jemand kommt, um anderen zu helfen, den Workflow herauszufinden, ein Problem aufzugreifen und es zu lösen, dann eine Überprüfung durchzugehen und im Idealfall den Punkt zu erreichen, an dem der Patch in den Upstream injiziert wird. Andere kommen als "First Time Contributor".
Wenn Sie an einem der folgenden Themen interessiert sind, könnten Sie an einer Teilnahme interessiert sein:
- Tauchen Sie ein in die einfachen Details der Go-Toolchain (Compiler, Linker, Assembler, ...).
- Beschleunigen Sie einige Funktionen aus der Standardbibliothek oder der Laufzeit
- Fügen Sie fehlende Beispiele oder Tests für eines der Pakete hinzu.
- Refactor einige sehr beängstigende Code
- Verbessern Sie die Unterstützung für eine seltenere Architektur oder ein selteneres Betriebssystem (Sie haben Hardware und / oder Betriebssystem)
- Chatten Sie mit Leuten, die schon lange zu Go beigetragen haben
Die Liste ist nicht vollständig, jeder kann etwas darin finden.
Workshop in Russland
Irgendwann beschloss ich, an der Organisation einer solchen Veranstaltung mitzuwirken. Vor allem wollte ich in einem Kreis von Menschen mit ähnlichen Interessen sein.
Das vorläufige Programm dauerte ungefähr 6-10 Stunden (der beste und der schlechteste Fallbereich). Der Hackathon sah nach dem am besten geeigneten Format aus, aber es war zu diesem Zeitpunkt nicht möglich, Sponsoren zu finden. Es bestand jedoch die Möglichkeit, einmal pro Woche anderthalb Stunden lang optionale Kurse für die wissenschaftliche und praktische Plattform von IWMI & KFU durchzuführen. Offensichtlicher Nachteil: Aufgrund der großen Pausen zwischen den Teilnehmern müssten Sie etwas mehr Zeit aufwenden. Und keine Pizza. Seufz
Ganz unerwartet stellte sich heraus, dass ich Gast im GolangShow-Podcast (Folge 119) war , in dem ich mich über die Idee lustig machte , etwas Ähnliches für Studenten durchzuführen . Wenig später schuf Elena Grakhovats den Kanal #kfu-go-2018
in der #kfu-go-2018
der russischsprachigen Community Go . Dort konnten nicht nur KFU-Studierende kommunizieren, sondern auch alle, die sich für eine Remote-Teilnahme interessierten.
Danach wurden die Details des Treffens an der Universität genehmigt, bestimmte Termine wurden bekannt. Anstelle eines Hackathons erhielten sie einen "Go-Programmiersprachenkurs". Dies änderte den Inhalt nicht wesentlich, das Ziel blieb das gleiche und es wurde in der Ankündigung klar beschrieben.
Es folgte ein Scan des Trackers auf der Suche nach Aufgaben, die im Rahmen der Veranstaltung zumindest teilweise (noch besser - vollständig) ausgeführt werden konnten.
Lektion Nr. 1Tatsächlich stellte sich heraus, dass die Liste der Aufgaben diejenigen enthielt, die Interessen waren oder die ich persönlich verstand. Dies wurde auch bei der Erstellung der Liste erkannt, ist jedoch schwer zu beeinflussen.
Vielleicht wäre es besser, wenn diese Liste aus mehreren Personen mit unterschiedlichen Profilen und Interessen bestehen würde.
Jeder Teilnehmer konnte zum Go-Tracker gehen und alles auswählen, aber für die Aufgaben aus der Liste waren Erklärungen bereit und für einige von ihnen eine Teillösung.
Der größte Teil des Inhalts, der während des Kurses generiert wurde, ist im kfu-go-2018- Repository verfügbar. Dort finden Sie auch task.org .
Erstes Treffen
Es kamen Studenten, die zuvor noch nicht auf Go geschrieben hatten. Die meisten von ihnen haben noch nicht einmal von einer solchen Programmiersprache gehört.
Wir haben die Hälfte der ersten Lektion damit verbracht, Go aus der Quelle zu bauen. Auf verschiedenen Computern gab es verschiedene, einschließlich unerwarteter Probleme. Verschiedene Betriebssysteme, Versionen von System-Compilern (jemand hatte nicht vor, Go 1.4 zu verwenden) und so weiter. ./make.bash
( make.bat
für Windows) funktionierte nicht mit unterschiedlichen Fehlern.
Wenn die Mehrheit ein funktionierendes Go hatte, bestand unsere erste Hello World darin go tool compile
kanonische Nachricht in der go tool compile
wenn ein neues Flag an sie übergeben wurde.
90 Minuten vergingen: Wir sprachen über Go, verglichen es mit C ++, kompilierten eine Toolchain, zerlegten den Bootstrap-Prozess und stellten einen aktualisierten Compiler zusammen.
Lektion Nr. 2Unabhängig davon ist es erwähnenswert, dass Delus Farkhulin mir geholfen hat. Empirisch ergab sich, dass es sehr schwierig ist, mehr als vier Personen alleine zu führen. Die Situation ist kompliziert, wenn keiner der Teilnehmer außer den Mentoren Go kennt. Sie müssen viele zusätzliche Schritte ausführen. Wenn wir jedoch zu viert wären, wäre es viel einfacher (es gab 15 Studenten).
Die ersten Patches im Go-Projekt
In der zweiten Lektion war das Ziel, direkt zum Beitrag beizutragen:
- Wir haben mit Daniel Martí vereinbart, dass es zum vereinbarten Zeitpunkt verfügbar sein und eine Überprüfung durchführen kann (setzen Sie +2, wenn der Patch trivial und korrekt ist).
- Ilya Tokar schlug ein Scratch- Repository vor, in dem es viel einfacher ist, die erste CL (Änderungsliste) zu senden. Ermöglicht es Ihnen, Gerrit bei der Arbeit auszuprobieren, ohne das Risiko einzugehen , etwas zu beschädigen .
- Vorbereitete Aufkleber für die Lieferung an diejenigen, die erfolgreich Patches in Go injiziert haben.
Wir hatten Glück: Das Scratch-Repository war kaputt. Jemand hat den falschen Code an das Repository gesendet, und aus diesem Grund sind Trybots (CI-Tests) immer fehlgeschlagen. Eine der Aufgaben, die ich vorbereitet habe, war es, die Ursache für den Build-Fehler zu beheben.
Am Ende der Lektion wurden 6 Patches gesendet:
CL105415 , CL105395 , CL105356 , CL105416 , CL105355 , CL105375 .
Jeder hat die Aufkleber bekommen.

180 Minuten vergingen: Sie zerlegten den Go-Entwicklungsprozess, gaben die Google-CLA an alle weiter, richteten Gerrit ein, sendeten "Hallo Welt" -Patches, reparierten die Scratch-Repository-Assembly und einer der Teilnehmer schaffte es, den Patch an golang / go zu senden (Zusammenführung erfolgte am selben Tag).
Lektion Nr. 3Für gute Aufkleber "pünktlich" müssen Sie sich an einen vertrauenswürdigen Lieferanten wenden. Das Speichern an den nächstgelegenen Stellen, an denen Aufkleber ohne Schneiden gedruckt werden können, ist keine gute Idee. Und Sie können das Gopher-Logo mit nichts anderem kombinieren: Ein Gopher mit einem Intel-Zeichen in der Hand verstößt gegen alle denkbaren Gesetze von Aufklebern.
Die übrigen Klassen wurden nach einem lockeren Schema abgehalten. Wir kamen und arbeiteten an unseren Aufgaben, tauschten Erfahrungen aus und halfen uns gegenseitig. Fast jedes dieser Treffen schickte mehrere Patches.
Dann kam das Einfrieren des Codes und der Kurs endete logisch. Zu diesem Zeitpunkt wurden 17 Pflaster gegossen. Samstags treffen wir uns immer noch und arbeiten an verschiedenen Go-Dienstprogrammen ...

Die Schwierigkeiten des "zweiten Schrittes"
Der einfachste Weg war, den ersten Schritt zu machen. Für diejenigen, die sich nicht sicher sind, mit Git zu arbeiten, ist das Scratch-Repository eine großartige Lösung.
Es war nicht allzu schwierig, Aufgaben mit minimalem Volumen zu finden, für die kein großer Kontext erforderlich war. Hier half eine Vielzahl von Linter. Führen Sie " gometalinter --enable-all
" für das Paket von GOROOT
und wählen Sie aus, was GOROOT
.
Bei Aufgaben, die eine Stufe höher waren, war es schwieriger. Es war schwierig für mich, dies vorzuschlagen, aber es war schwierig für sie, dies zu wählen. Gleichzeitig bestand das Verständnis, dass wir der Korrektur von Linterwarnungen bereits entwachsen waren (d. H. Die Herausforderung verschwand, für ein produktives Training war es notwendig, nach neuen Arten von Aufgaben zu suchen).
Theoretisch besteht eine gute Aufgabe der zweiten Ebene darin, die Tests in Go zu verbessern: die Abdeckung erhöhen, Benchmarks hinzufügen oder verfeinern, nicht ganz korrekte oder deaktivierte Tests korrigieren, Regressionstests überprüfen und vieles mehr. Dies erfordert ein gewisses Eintauchen in das Testpaket, aber der Umfang der Änderungen ist minimal und es ist einfach genug, das Ergebnis zu überprüfen. Aber nicht jeder arbeitet gerne mit Tests.
Beispiele dafür, was sie als Aufgaben der 2. Ebene übernommen haben:
- encoding / json: Füge den vollständigen Pfad zum Feld in UnmarshalTypeError hinzu (
#22369
) - Zeit: Zeit optimieren.Zeit.Sub und Zeit.Seit (
#17858
) - cmd / compile: Vermeiden Sie langsame Versionen von LEA-Anweisungen auf x86 (
#21735
).
Wir haben sie näher am Code-Einfrieren gestartet, sodass wir keine Zeit hatten, es zu beenden: Es gab 2 Samstage für 90 Minuten, aber das ist nicht genug. Darüber hinaus haben alle an ihrer Aufgabe gearbeitet. Vielleicht wäre es einfacher, wenn mindestens zwei Personen in Teams aufgeteilt würden. Beispiel: Im Fall von Ausgabe 21735 können Sie verschiedene Hypothesen parallel überprüfen und verschiedene Teile des Compilers parallel studieren und dann Wissen austauschen .
Lektion Nr. 4Vor allem lohnt es sich, auf diesen Teil, die unvermeidliche Vertiefung und die darauf folgenden Probleme zu achten. Ich bezweifle, dass es Leute gibt, die alle Teile von Go so gut kennen, dass sie bei jeder Wahl helfen können. Auch hier kommt es auf den Mangel an verschiedenen Experten an.
Workshop v2
Einige der oben beschriebenen Probleme würden durch ein alternatives Format gelöst, wenn eine komplexere Aufgabe nicht innerhalb von drei Wochen gelöst werden müsste. Der nächste Workshop sollte in Form einer kontinuierlichen Veranstaltung stattfinden, mindestens 4-5 Stunden, idealerweise mit einer Pause und länger.
Normalerweise beinhaltet das Hackathon-Format auch eine gewisse Vorbereitung der Teilnehmer vor dem Start, nämlich die Wahl der Aufgabe und eine vorläufige Beschreibung der Lösungsmöglichkeiten, die Bildung von Teams. Dies kann auch dazu beitragen, die Anzahl erfolgreicher Beiträge zu erhöhen.
Wir brauchen mehr Mentoren, die den Teilnehmern helfen können, Probleme in Echtzeit auszuwählen und zu lösen.
Die Wahl einer Stadt hängt von der Anzahl der Teilnehmer und ihrer geografischen Verteilung ab. Vier Optionen sind mir am nächsten: Moskau, Innopolis, Kasan, Nischni Nowgorod.
Abschließend
Es ist nicht notwendig, zu solchen Hackathons zu kommen, um einen Beitrag zu Go zu leisten. Ein motivierendes Beispiel wäre Marcos Artikel How new to Go . In einem Unternehmen mit denselben interessierten Personen ist es jedoch einfacher, die anfänglichen Beschwerden und Verwirrungen zu überwinden und von Anfang bis Ende zu gehen.
Wenn Ihnen dieses Thema nicht gleichgültig ist, bleiben Sie dran und schauen Sie sich golang-ru.slack an . Die nächste Phase der aktiven Entwicklung von Go beginnt im August 2018 : nicht zu weit entfernt, um es zu vergessen, und nicht zu nah, um keine Zeit zu haben, sich gut vorzubereiten.
Bonusmaterialien für Anfänger
Kommende Veranstaltungen