Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The introduction of my way to learn Go together...

The introduction of my way to learn Go together with Go community

I will share how I had chosen to learn Go together with my Go community, keeping in mind the advantages and disadvantages in each case, based on my learning curve from when I first started learning Go. I will explain the advantages and disadvantages in each case through practical experience.

https://gocon.jp/2022spring/sessions/a14-s/

Naoki Sega

April 23, 2022
Tweet

More Decks by Naoki Sega

Other Decks in Programming

Transcript

  1. Agenda The introduction of my way to learn Go together

    with Go community Go Conference 2022 Spring @nsega
  2. 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.
  3. Agenda • My background • My learning approach with Go

    communities • The introduction of my tips • Conclusion
  4. 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
  5. 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
  6. 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
  7. • 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
  8. 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
  9. 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.
  10. 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
  11. 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.
  12. 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
  13. • 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
  14. 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.
  15. 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
  16. 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 )
  17. 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
  18. • 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