Slide 1

Slide 1 text

Agenda The introduction of my way to learn Go together with Go community Go Conference 2022 Spring @nsega

Slide 2

Slide 2 text

About me ● Naoki Sega (@nsega) ● Backend Engineer in Mercari US since Dec 2021. ○ Joined Mercari JP in Nov 2018. ● mercari.go Organizer. ● Go: 3+ years experience ● My current interests: Go, GCP, Kubernetes, Microservices, CNCF Products.

Slide 3

Slide 3 text

Agenda Agenda

Slide 4

Slide 4 text

Agenda ● My background ● My learning approach with Go communities ● The introduction of my tips ● Conclusion

Slide 5

Slide 5 text

Agenda My background

Slide 6

Slide 6 text

My background ● PHP, Java ● Experience developing and operating in large-scale service ● Experience with GCP, AWS, and On-premises ● More than 10+ years experience in Backend/Infra Engineer

Slide 7

Slide 7 text

Agenda My learning approach with Go communities

Slide 8

Slide 8 text

OUTPUT INPUT PROCESS My Learning approach - Overview Phase 1 Getting Started Phase 2 More practical Phase 3 Practice, practice, and practice Phase 4: Contribute to Community, OSS products Code Code, Docs Code, Docs Code, Docs

Slide 9

Slide 9 text

Learning curve ( Phase 1 )

Slide 10

Slide 10 text

Input phase. Main activities are mainly input. ● Input ○ A Tour of Go ○ The Go Programming Language Specification ○ Packages ( Standard Library) ○ The Go Playground ● Output ○ Code Phase 1 : Getting Started

Slide 11

Slide 11 text

● Community, Conference ○ Go Conference ( Attendee ) ○ golang.tokyo ( Attendee ) ○ mercari.go ( Attendee ) ○ Go Friday ( Attendee ) * Internal ● Pros/Cons ○ [+] The official documents and the Go Playground are informative. ○ [+] Many active community support us. ○ [-] Many things we have to remembers. Phase 1 : Getting Started

Slide 12

Slide 12 text

Learning curve ( Phase 2 )

Slide 13

Slide 13 text

A phase is in more practical. Get experience of practical things. ● Input ○ Effective Go ○ Code Review Comments ○ Go に入ってはGoに従え ○ Practical Go: Real world advice for writing maintainable Go programs ○ Uber Go Style Guide ● Output ○ Code (Production Code ), Docs (Design Doc, Blog entry) Phase 2 : More practical

Slide 14

Slide 14 text

Phase 2 : More practical ● Community, Conference ○ Go Conference ( Attendee ) ○ GopherCon ( Attendee ) ○ mercari.go ( Attendee, Speaker ) ○ Go Friday ( Attendee, Speaker ) * Internal ● Pros/Cons ○ [+] Official documents are always informative. Firstly, look for the official docs. ○ [+] Hear practical experience from speakers, attendees in Community. ○ [-] Increase practical issues, such as how to maintain it efficiently.

Slide 15

Slide 15 text

Learning curve ( Phase 3 )

Slide 16

Slide 16 text

An exponential phase. Start linking to many pieces of your mind as a practice. ● Input ○ Looking for Issues/PRs in OSS products written in Go. ( e.g. kubernetes/kubernetes, cloud.google.com/go, CNCF products ) ○ Code reading Go. ○ High Performance Go Workshop ● Output ○ Code (Production Code, Library, etc), Docs (Design Doc, article, etc) Phase 3: Practice, practice, practice

Slide 17

Slide 17 text

Phase 3: Practice, practice, practice ● Community, Conference ○ Go Conference ( Attendee ) ○ GopherCon ( Attendee ) ○ mercari.go ( Speaker, Organizer ) ○ Go Friday ( Attendee, Speaker ) * Internal ● Pros/Cons ○ [+] Reading issues/PRs of OSS products are reasonable. ○ [+] Get many feedback from Community as a speaker. ○ [-] Domain specific and complexed issues.

Slide 18

Slide 18 text

Learning curve ( Phase 4 )

Slide 19

Slide 19 text

An asymptotic phase. Findings new things you’ve never known. ● Input ○ GitHub Issues / PRs in Go or OSS products written in GO ○ Golang Weekly - a weekly newsletter ○ The Go Blog ○ research!rsc ● Output ○ Code (Production Code, PRs to OSS, etc), Docs (Design Doc, Issues, etc) Phase 4: Contribute to community, OSS products

Slide 20

Slide 20 text

● Community, Conference ○ Go Conference ( Attendee, Speaker ) ○ GopherCon ( Attendee ) ○ mercari.go ( Organizer ) ○ Go Friday ( Attendee, Speaker ) * Internal ● Pros/Cons ○ [+] Reading issues/PRs of OSS products are reasonable. ○ [+] Get many feedback from Community as a Speaker/Organizer. ○ [-] Start realizing own strengths and weaknesses. Phase 4: Contribute to community, OSS products

Slide 21

Slide 21 text

From the perspective of Community Role Expectation ( Will ) Attendees ● Hear something from Speakers. ● Solve something they have. ● Ask Speakers questions. Speakers ● Share something with Attendees. ● Put into words in your own understanding. ● Receive feedback from Attendees, Organizers. Organizers ● Return technology and adoption cases to the community. ● Provide an environment where engineers(Attendees, Speakers) can continuously input, output, and play an active role.

Slide 22

Slide 22 text

From the perspective of Community Output target ● Recommended Practices ● Adoption cases ● A product update (e.g., recent changes, feature enhancements, or bug fixes) ● Encourage others to challenge ● Meet a person who stimulates you

Slide 23

Slide 23 text

Learning curve ( accelerated )

Slide 24

Slide 24 text

Agenda The Introduction of my tips

Slide 25

Slide 25 text

Linter used to flag programming errors, bugs, stylistic errors and suspicious constructs. Using Linter checks make the code review and test processes more efficient by yourself. ● golangci-lint ○ A Go linters aggregator. ○ https://github.com/golangci/golangci-lint ● reviewdog ○ A code review dog who keeps your codebase healthy. ○ https://github.com/reviewdog/reviewdog Tips 1:Linter ( a static code analysis )

Slide 26

Slide 26 text

Code reading with code search will support you encouraging code reuse, finding code examples, increasing efficiency, addressing security risks, and more. ● Sourcegraph ○ Find things across all of codebases faster ○ https://sourcegraph.com/search e.g. Explore Kubernetes repositories on GitHub ● Google Open Source/Code Search ○ Find things across Go codebase ○ https://cs.opensource.google/go Tips 2: Code reading with code search

Slide 27

Slide 27 text

Agenda Conclusion

Slide 28

Slide 28 text

● Implement INPUT → PROCESS → OUTPUT cycle repeatedly. ● Learning is an endless process. Keep learning with Go community and enjoy the process. ● Contribute to Go community and OSS proactively. Conclusion

Slide 29

Slide 29 text

Agenda We’re hiring! https://careers.mercari.com/search-jobs/?cat=mercari-inc-us-company

Slide 30

Slide 30 text

Agenda Fin