Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Learning by Contributing
Search
Nathan Youngman
April 26, 2014
Technology
1
75
Learning by Contributing
Lightning talk at GopherCon 2014 on what I've learned by contributing to open source Go projects.
Nathan Youngman
April 26, 2014
Tweet
Share
More Decks by Nathan Youngman
See All by Nathan Youngman
The Healthy Programmer
nathany
2
110
Go and Node.js: a comparison
nathany
1
220
Diet Hacks
nathany
2
370
Go 1.6 and HTTP/2
nathany
3
140
Upgrading Rails Redux
nathany
1
94
GopherCon recap
nathany
0
180
Go Functions
nathany
0
100
Go Arrays & Slices
nathany
0
150
Go Types
nathany
2
130
Other Decks in Technology
See All in Technology
Observability — Extending Into Incident Response
nari_ex
1
540
知覚とデザイン
rinchoku
1
610
AIプロダクトのプロンプト実践テクニック / Practical Techniques for AI Product Prompts
saka2jp
0
120
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
300
個人でデジタル庁の デザインシステムをVue.jsで 作っている話
nishiharatsubasa
3
5.2k
AI-Readyを目指した非構造化データのメダリオンアーキテクチャ
r_miura
1
340
様々なファイルシステム
sat
PRO
0
260
猫でもわかるAmazon Q Developer CLI 解体新書
kentapapa
1
120
ハノーファーメッセ2025で見た生成AI活用ユースケース.pdf
hamadakoji
1
490
AI時代の開発を加速する組織づくり - ブログでは書けなかったリアル
hiro8ma
2
330
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
160
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
150
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.8k
Done Done
chrislema
185
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
How to Think Like a Performance Engineer
csswizardry
27
2.1k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Side Projects
sachag
455
43k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Designing for humans not robots
tammielis
254
26k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The World Runs on Bad Software
bkeepers
PRO
72
11k
Transcript
! Learning by Contributing @nathany
Open Source
None
howeyc/fsnotify • Used by: • revel • jkl • gin
• countless others…
Learning Adapter OS inotify Linux, Android kqueue BSD, OS X,
iOS ReadDirectoryChangesW Windows File Event Notifications (FEN) Solaris 11 FSEvents OS X fanotify Linux
Oh. Windows. Testing on multiple platforms. https://github.com/gophertown/vagrant-gopher
Backwards compatibility
Code style pathsToRemove := make([]string, 0) ! “Just write: !
var pathsToRemove []string” - iant! https://code.google.com/p/go-wiki/wiki/CodeReviewComments
Effective use of the standard library ! atomic.AddInt32(&c.val, 1) !
“use ioutil.TempDir to create a unique root for this test run” - dfc!
Naming things func validateFlags() error “notice that the purpose of
this is to set up state; the validation is secondary. it's misnamed.” - r
Error messages "phrasing: say what's wrong, not how to fix
it.” ! return fmt.Errorf("unexpected argument provided”) “this isn't quite right. "extra argument"? "too many arguments"?” - r
– rsc “The goal here should be to expose the
minimal necessary functionality that lets people build useful things…” API design
– rsc “The problem with callbacks is that you now
have to worry about user code blocking (or panicking) a library goroutine. ! A channel is a much better separation.” I hadn’t considered…
– rsc “There is no testing benefit here to the
interface over a simple struct with only public fields.” Keep it simple
–Chad Fowler “Pick an open source project that you admire
and whose developers appear to be at that "next level" you’re looking to reach.”
exercism.io
@nathany http://edmontongo.org/