oauth-init 0.8.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,536 @@
1
+ # Art of README
2
+
3
+ > Source: [hackergrrl/art-of-readme](https://github.com/hackergrrl/art-of-readme)
4
+
5
+ *This article can also be read in [Chinese](README-zh.md),
6
+ [Japanese](README-ja-JP.md),
7
+ [Brazilian Portuguese](README-pt-BR.md), [Spanish](README-es-ES.md),
8
+ [German](README-de-DE.md), [French](README-fr.md) and [Traditional Chinese](README-zh-TW.md).*
9
+
10
+ ## Etymology
11
+
12
+ Where does the term "README" come from?
13
+
14
+ The nomenclature dates back to *at least* the 1970s [and the
15
+ PDP-10](http://pdp-10.trailing-edge.com/decuslib10-04/01/43,50322/read.me.html),
16
+ though it may even harken back to the days of informative paper notes placed atop
17
+ stacks of punchcards, "READ ME!" scrawled on them, describing their use.
18
+
19
+ A reader<sup>[1](#footnote-1)</sup> suggested that the title README may be a playful nudge toward Lewis
20
+ Carroll's *Alice's Adventures in Wonderland*, which features a potion and a cake
21
+ labelled *"DRINK ME"* and *"EAT ME"*, respectively.
22
+
23
+ The pattern of README appearing in all-caps is a consistent facet throughout
24
+ history. In addition to the visual strikingness of using all-caps, UNIX systems
25
+ would sort capitals before lower case letters, conveniently putting the README
26
+ before the rest of the directory's content<sup>[2](#footnote-2)</sup>.
27
+
28
+ The intent is clear: *"This is important information for the user to read before
29
+ proceeding."* Let's explore together what constitutes "important information" in
30
+ this modern age.
31
+
32
+
33
+ ## For creators, for consumers
34
+
35
+ This is an article about READMEs. About what they do, why they are an absolute
36
+ necessity, and how to craft them well.
37
+
38
+ This is written for module creators, for as a builder of modules, your job is to
39
+ create something that will last. This is an inherent motivation, even if the
40
+ author has no intent of sharing their work. Once 6 months pass, a module without
41
+ documentation begins to look new and unfamiliar.
42
+
43
+ This is also written for module consumers, for every module author is also a
44
+ module consumer. Node has a very healthy degree of interdependency: no one lives
45
+ at the bottom of the dependency tree.
46
+
47
+ Despite being focused on Node, the author contends that its lessons apply
48
+ equally well to other programming ecosystems, as well.
49
+
50
+
51
+ ## Many modules: some good, some bad
52
+
53
+ The Node ecosystem is powered by its modules. [npm](https://npmjs.org) is the
54
+ magic that makes it all *go*. In the course of a week, Node developers evaluate
55
+ dozens of modules for inclusion in their projects. This is a great deal of power
56
+ being churned out on a daily basis, ripe for the plucking, just as fast as one
57
+ can write `npm install`.
58
+
59
+ Like any ecosystem that is extremely accessible, the quality bar varies. npm
60
+ does its best to nicely pack away all of these modules and ship them far and
61
+ wide. However, the tools found are widely varied: some are shining and new,
62
+ others broken and rusty, and still others are somewhere in between. There are
63
+ even some that we don't know what they do!
64
+
65
+ For modules, this can take the form of inaccurate or unhelpful names (any
66
+ guesses what the `fudge` module does?), no documentation, no tests, no source
67
+ code comments, or incomprehensible function names.
68
+
69
+ Many don't have an active maintainer. If a module has no human available to
70
+ answer questions and explain what a module does, combined with no remnants of
71
+ documentation left behind, a module becomes a bizarre alien artifact, unusable
72
+ and incomprehensible by the archaeologist-hackers of tomorrow.
73
+
74
+ For those modules that do have documentation, where do they fall on the quality
75
+ spectrum? Maybe it's just a one-liner description: `"sorts numbers by their hex
76
+ value"`. Maybe it's a snippet of example code. These are both improvements upon
77
+ nothing, but they tend to result in the worst-case scenario for a modern day
78
+ module spelunker: digging into the source code to try and understand how it
79
+ actually works. Writing excellent documentation is all about keeping the users
80
+ *out* of the source code by providing instructions sufficient to enjoy the
81
+ wonderful abstractions that your module brings.
82
+
83
+ Node has a "wide" ecosystem: it's largely made up of a very long list of
84
+ independent do-one-thing-well modules flying no flags but their own. There are
85
+ [exceptions](https://github.com/lodash/lodash), but despite these minor fiefdoms,
86
+ it is the single-purpose commoners who, given their larger numbers, truly rule the
87
+ Node kingdom.
88
+
89
+ This situation has a natural consequence: it can be hard to find *quality* modules
90
+ that do exactly what you want.
91
+
92
+ **This is okay**. Truly. A low bar to entry and a discoverability problem is
93
+ infinitely better than a culture problem, where only the privileged few may
94
+ participate.
95
+
96
+ Plus, discoverability -- as it turns out -- is easier to address.
97
+
98
+
99
+ ## All roads lead to README.md
100
+
101
+ The Node community has responded to the challenge of discoverability in
102
+ different ways.
103
+
104
+ Some experienced Node developers band together to create [curated
105
+ lists](https://github.com/sindresorhus/awesome-nodejs) of quality modules.
106
+ Developers leverage their many years examining hundreds of different modules to
107
+ share with newcomers the *crème de la crème*: the best modules in each category.
108
+ This might also take the form of RSS feeds and mailing lists of new modules deemed
109
+ to be useful by trusted community members.
110
+
111
+ How about the social graph? This idea spurred the creation of
112
+ [node-modules.com](http://node-modules.com/), a npm search replacement that
113
+ leverages your GitHub social graph to find modules your friends like or have
114
+ made.
115
+
116
+ Of course there is also npm's built-in [search](https://npmjs.org)
117
+ functionality: a safe default, and the usual port of entry for new developers.
118
+
119
+ No matter your approach, regardless whether a module spelunker enters the module
120
+ underground at [npmjs.org](https://npmjs.org),
121
+ [github.com](https://github.com), or somewhere else, this would-be user will
122
+ eventually end up staring your README square in the face. Since your users
123
+ will inevitably find themselves here, what can be done to make their first
124
+ impressions maximally effective?
125
+
126
+
127
+ ## Professional module spelunking
128
+
129
+ ### The README: Your one-stop shop
130
+
131
+ A README is a module consumer's first -- and maybe only -- look into your
132
+ creation. The consumer wants a module to fulfill their need, so you must explain
133
+ exactly what need your module fills, and how effectively it does so.
134
+
135
+ Your job is to
136
+
137
+ 1. tell them what it is (with context)
138
+ 2. show them what it looks like in action
139
+ 3. show them how they use it
140
+ 4. tell them any other relevant details
141
+
142
+ This is *your* job. It's up to the module creator to prove that their work is a
143
+ shining gem in the sea of slipshod modules. Since so many developers' eyes will
144
+ find their way to your README before anything else, quality here is your
145
+ public-facing measure of your work.
146
+
147
+
148
+ ### Brevity
149
+
150
+ The lack of a README is a powerful red flag, but even a lengthy README is not
151
+ indicative of there being high quality. The ideal README is as short as it can
152
+ be without being any shorter. Detailed documentation is good -- make separate
153
+ pages for it! -- but keep your README succinct.
154
+
155
+
156
+ ### Learn from the past
157
+
158
+ It is said that those who do not study their history are doomed to make its
159
+ mistakes again. Developers have been writing documentation for quite some number
160
+ of years. It would be wasteful to not look back a little bit and see what people
161
+ did right before Node.
162
+
163
+ Perl, for all of the flak it receives, is in some ways the spiritual grandparent
164
+ of Node. Both are high-level scripting languages, adopt many UNIX idioms, fuel
165
+ much of the internet, and both feature a wide module ecosystem.
166
+
167
+ It so turns out that the [monks](http://perlmonks.org) of the Perl community
168
+ indeed have a great deal of experience in writing [quality
169
+ READMEs](http://search.cpan.org/~kane/Archive-Tar/lib/Archive/Tar.pm). CPAN is a
170
+ wonderful resource that is worth reading through to learn more about a community
171
+ that wrote consistently high-calibre documentation.
172
+
173
+
174
+ ### No README? No abstraction
175
+
176
+ No README means developers will need to delve into your code in order to
177
+ understand it.
178
+
179
+ The Perl monks have wisdom to share on the matter:
180
+
181
+ > Your documentation is complete when someone can use your module without ever
182
+ > having to look at its code. This is very important. This makes it possible for
183
+ > you to separate your module's documented interface from its internal
184
+ > implementation (guts). This is good because it means that you are free to
185
+ > change the module's internals as long as the interface remains the same.
186
+ >
187
+ > Remember: the documentation, not the code, defines what a module does.
188
+ -- [Ken Williams](http://mathforum.org/ken/perl_modules.html#document)
189
+
190
+
191
+ ### Key elements
192
+
193
+ Once a README is located, the brave module spelunker must scan it to discern if
194
+ it matches the developer's needs. This becomes essentially a series of pattern
195
+ matching problems for their brain to solve, where each step takes them deeper
196
+ into the module and its details.
197
+
198
+ Let's say, for example, my search for a 2D collision detection module leads me
199
+ to [`collide-2d-aabb-aabb`](https://github.com/hackergrrl/collide-2d-aabb-aabb). I
200
+ begin to examine it from top to bottom:
201
+
202
+ 1. *Name* -- self-explanatory names are best. `collide-2d-aabb-aabb` sounds
203
+ promising, though it assumes I know what an "aabb" is. If the name sounds too
204
+ vague or unrelated, it may be a signal to move on.
205
+
206
+ 2. *One-liner* -- having a one-liner that describes the module is useful for
207
+ getting an idea of what the module does in slightly greater detail.
208
+ `collide-2d-aabb-aabb` says it
209
+
210
+ > Determines whether a moving axis-aligned bounding box (AABB) collides with
211
+ > other AABBs.
212
+
213
+ Awesome: it defines what an AABB is, and what the module does. Now to gauge how
214
+ well it'd fit into my code:
215
+
216
+ 3. *Usage* -- rather than starting to delve into the API docs, it'd be great to
217
+ see what the module looks like in action. I can quickly determine whether the
218
+ example JS fits the desired style and problem. People have lots of opinions
219
+ on things like promises/callbacks and ES6. If it does fit the bill, then I
220
+ can proceed to greater detail.
221
+
222
+ 4. *API* -- the name, description, and usage of this module all sound appealing
223
+ to me. I'm very likely to use this module at this point. I just need to scan
224
+ the API to make sure it does exactly what I need and that it will integrate
225
+ easily into my codebase. The API section ought to detail the module's objects
226
+ and functions, their signatures, return types, callbacks, and events in
227
+ detail. Types should be included where they aren't obvious. Caveats should be
228
+ made clear.
229
+
230
+ 5. *Installation* -- if I've read this far down, then I'm sold on trying out the
231
+ module. If there are nonstandard installation notes, here's where they'd go,
232
+ but even if it's just a regular `npm install`, I'd like to see that mentioned,
233
+ too. New users start using Node all the time, so having a link to npmjs.org
234
+ and an install command provides them the resources to figure out how Node
235
+ modules work.
236
+
237
+ 6. *License* -- most modules put this at the very bottom, but this might
238
+ actually be better to have higher up; you're likely to exclude a module VERY
239
+ quickly if it has a license incompatible with your work. I generally stick to
240
+ the MIT/BSD/X11/ISC flavours. If you have a non-permissive license, stick it
241
+ at the very top of the module to prevent any confusion.
242
+
243
+
244
+ ## Cognitive funneling
245
+
246
+ The ordering of the above was not chosen at random.
247
+
248
+ Module consumers use many modules, and need to look at many modules.
249
+
250
+ Once you've looked at hundreds of modules, you begin to notice that the mind
251
+ benefits from predictable patterns.
252
+
253
+ You also start to build out your own personal heuristic for what information you
254
+ want, and what red flags disqualify modules quickly.
255
+
256
+ Thus, it follows that in a README it is desirable to have:
257
+
258
+ 1. a predictable format
259
+ 2. certain key elements present
260
+
261
+ You don't need to use *this* format, but try to be consistent to save your users
262
+ precious cognitive cycles.
263
+
264
+ The ordering presented here is lovingly referred to as "cognitive funneling,"
265
+ and can be imagined as a funnel held upright, where the widest end contains the
266
+ broadest more pertinent details, and moving deeper down into the funnel presents
267
+ more specific details that are pertinent for only a reader who is interested
268
+ enough in your work to have reached that deeply in the document. Finally, the
269
+ bottom can be reserved for details only for those intrigued by the deeper
270
+ context of the work (background, credits, biblio, etc.).
271
+
272
+ Once again, the Perl monks have wisdom to share on the subject:
273
+
274
+ > The level of detail in Perl module documentation generally goes from
275
+ > less detailed to more detailed. Your SYNOPSIS section should
276
+ > contain a minimal example of use (perhaps as little as one line of
277
+ > code; skip the unusual use cases or anything not needed by most
278
+ > users); the DESCRIPTION should describe your module in broad terms,
279
+ > generally in just a few paragraphs; more detail of the module's
280
+ > routines or methods, lengthy code examples, or other in-depth
281
+ > material should be given in subsequent sections.
282
+ >
283
+ > Ideally, someone who's slightly familiar with your module should be
284
+ > able to refresh their memory without hitting "page down". As your
285
+ > reader continues through the document, they should receive a
286
+ > progressively greater amount of knowledge.
287
+ > -- from `perlmodstyle`
288
+
289
+
290
+ ## Care about people's time
291
+
292
+ Awesome; the ordering of these key elements should be decided by how quickly
293
+ they let someone 'short circuit' and bail on your module.
294
+
295
+ This sounds bleak, doesn't it? But think about it: your job, when you're doing
296
+ it with optimal altruism in mind, isn't to "sell" people on your work. It's to
297
+ let them evaluate what your creation does as objectively as possible, and decide
298
+ whether it meets their needs or not -- not to, say, maximize your downloads or
299
+ userbase.
300
+
301
+ This mindset doesn't appeal to everyone; it requires checking your ego at the
302
+ door and letting the work speak for itself as much as possible. Your only job is
303
+ to describe its promise as succinctly as you can, so module spelunkers can
304
+ either use your work when it's a fit, or move on to something else that does.
305
+
306
+
307
+ ## Call to arms!
308
+
309
+ Go forth, brave module spelunker, and make your work discoverable and usable
310
+ through excellent documentation!
311
+
312
+
313
+ ## Bonus: other good practices
314
+
315
+ Outside of the key points of the article, there are other practices you can
316
+ follow (or not follow) to raise your README's quality bar even further and
317
+ maximize its usefulness to others:
318
+
319
+ 1. Consider including a **Background** section if your module depends on
320
+ important but not widely known abstractions or other ecosystems. The function
321
+ of [`bisecting-between`](https://github.com/hackergrrl/bisecting-between) is not
322
+ immediately obvious from its name, so it has a detailed *Background* section
323
+ to define and link to the big concepts and abstractions one needs to
324
+ understand to use and grok it. This is also a great place to explain the
325
+ module's motivation if similar modules already exist on npm.
326
+
327
+ 2. Aggressively linkify! If you talk about other modules, ideas, or people, make
328
+ that reference text a link so that visitors can more easily grok your module
329
+ and the ideas it builds on. Few modules exist in a vacuum: all work comes
330
+ from other work, so it pays to help users follow your module's history and
331
+ inspiration.
332
+
333
+ 3. Include information on types of arguments and return parameters if it's not
334
+ obvious. Prefer convention wherever possible (`cb` probably means callback
335
+ function, `num` probably means a `Number`, etc.).
336
+
337
+ 4. Include the example code in **Usage** as a file in your repo -- maybe as
338
+ `example.js`. It's great to have README code that users can actually run if
339
+ they clone the repository.
340
+
341
+ 5. Be judicious in your use of badges. They're easy to
342
+ [abuse](https://github.com/angular/angular). They can also be a breeding
343
+ ground for bikeshedding and endless debate. They add visual noise to your
344
+ README and generally only function if the user is reading your Markdown in a
345
+ browser online, since the images are often hosted elsewhere on the
346
+ internet. For each badge, consider: "what real value is this badge providing
347
+ to the typical viewer of this README?" Do you have a CI badge to show build/test
348
+ status? This signal would better reach important parties by emailing
349
+ maintainers or automatically creating an issue. Always consider the
350
+ audience of the data in your README and ask yourself if there's a flow for
351
+ that data that can better reach its intended audience.
352
+
353
+ 6. API formatting is highly bikesheddable. Use whatever format you think is
354
+ clearest, but make sure your format expresses important subtleties:
355
+
356
+ a. which parameters are optional, and their defaults
357
+
358
+ b. type information, where it is not obvious from convention
359
+
360
+ c. for `opts` object parameters, all keys and values that are accepted
361
+
362
+ d. don't shy away from providing a tiny example of an API function's use if
363
+ it is not obvious or fully covered in the **Usage** section.
364
+ However, this can also be a strong signal that the function is too complex
365
+ and needs to be refactored, broken into smaller functions, or removed
366
+ altogether
367
+
368
+ e. aggressively linkify specialized terminology! In markdown you can keep
369
+ [footnotes](https://daringfireball.net/projects/markdown/syntax#link) at
370
+ the bottom of your document, so referring to them several times throughout
371
+ becomes cheap. Some of my personal preferences on API formatting can be
372
+ found
373
+ [here](https://github.com/hackergrrl/common-readme/blob/master/api_formatting.md)
374
+
375
+ 7. If your module is a small collection of stateless functions, having a
376
+ **Usage** section as a [Node REPL
377
+ session](https://github.com/hackergrrl/bisecting-between#example) of function
378
+ calls and results might communicate usage more clearly than a source code
379
+ file to run.
380
+
381
+ 8. If your module provides a CLI (command line interface) instead of (or in
382
+ addition to) a programmatic API, show usage examples as command invocations
383
+ and their output. If you create or modify a file, `cat` it to demonstrate
384
+ the change before and after.
385
+
386
+ 9. Don't forget to use `package.json`
387
+ [keywords](https://docs.npmjs.com/files/package.json#keywords) to direct
388
+ module spelunkers to your doorstep.
389
+
390
+ 10. The more you change your API, the more work you need to exert updating
391
+ documentation -- the implication here is that you should keep your APIs
392
+ small and concretely defined early on. Requirements change over time, but
393
+ instead of front-loading assumptions into the APIs of your modules, load
394
+ them up one level of abstraction: the module set itself. If the requirements
395
+ *do* change and 'do-one-concrete-thing' no longer makes sense, then simply
396
+ write a new module that does the thing you need. The 'do-one-concrete-thing'
397
+ module remains a valid and valuable model for the npm ecosystem, and your
398
+ course correction cost you nothing but a simple substitution of one module for
399
+ another.
400
+
401
+ 11. Finally, please remember that your version control repository and its
402
+ embedded README will outlive your [repository host](https://github.com) and
403
+ any of the things you hyperlink to -- especially images -- so *inline* anything
404
+ that is essential to future users grokking your work.
405
+
406
+
407
+ ## Bonus: *common-readme*
408
+
409
+ Not coincidentally, this is also the format used by
410
+ [**common-readme**](https://github.com/hackergrrl/common-readme), a set of README
411
+ guidelines and handy command-line generator. If you like what's written here,
412
+ you may save some time writing READMEs with `common-readme`. You'll find
413
+ real module examples with this format, too.
414
+
415
+ You may also enjoy
416
+ [standard-readme](https://github.com/richardlitt/standard-readme), which is a
417
+ more structured, lintable take on a common README format.
418
+
419
+
420
+ ## Bonus: Exemplars
421
+
422
+ Theory is well and good, but what do excellent READMEs look like? Here are some
423
+ that I think embody the principles of this article well:
424
+
425
+ - https://github.com/hackergrrl/ice-box
426
+ - https://github.com/substack/quote-stream
427
+ - https://github.com/feross/bittorrent-dht
428
+ - https://github.com/mikolalysenko/box-intersect
429
+ - https://github.com/freeman-lab/pixel-grid
430
+ - https://github.com/mafintosh/torrent-stream
431
+ - https://github.com/pull-stream/pull-stream
432
+ - https://github.com/substack/tape
433
+ - https://github.com/yoshuawuyts/vmd
434
+
435
+
436
+ ## Bonus: The README Checklist
437
+
438
+ A helpful checklist to gauge how your README is coming along:
439
+
440
+ - [ ] One-liner explaining the purpose of the module
441
+ - [ ] Necessary background context & links
442
+ - [ ] Potentially unfamiliar terms link to informative sources
443
+ - [ ] Clear, *runnable* example of usage
444
+ - [ ] Installation instructions
445
+ - [ ] Extensive API documentation
446
+ - [ ] Performs [cognitive funneling](https://github.com/hackergrrl/art-of-readme#cognitive-funneling)
447
+ - [ ] Caveats and limitations mentioned up-front
448
+ - [ ] Doesn't rely on images to relay critical information
449
+ - [ ] License
450
+
451
+
452
+ ## The author
453
+
454
+ Hi, I'm [Kira](http://kira.solar).
455
+
456
+ This little project began back in May in Berlin at squatconf, where I was
457
+ digging into how Perl monks write their documentation and also lamenting the
458
+ state of READMEs in the Node ecosystem. It spurred me to create
459
+ [common-readme](https://github.com/hackergrrl/common-readme). The "README Tips"
460
+ section overflowed with tips though, which I decided could be usefully collected
461
+ into an article about writing READMEs. Thus, Art of README was born!
462
+
463
+
464
+ ## Further Reading
465
+
466
+ - [README-Driven Development](http://tom.preston-werner.com/2010/08/23/readme-driven-development.html)
467
+ - [Documentation First](http://joeyh.name/blog/entry/documentation_first/)
468
+
469
+
470
+ ## Footnotes
471
+
472
+ 1. <a name="footnote-1"></a>Thanks,
473
+ [Sixes666](https://www.reddit.com/r/node/comments/55eto9/nodejs_the_art_of_readme/d8akpz6)!
474
+
475
+ 2. <a name="footnote-2"></a>See [The Jargon File](http://catb.org/~esr/jargon/html/R/README-file.html).
476
+ However, most systems today will not sort capitals before all lowercase
477
+ characters, reducing this convention's usefulness to just the visual
478
+ strikingness of all-caps.
479
+
480
+
481
+ ## Credits
482
+
483
+ A heartfelt thank you to [@mafintosh](https://github.com/mafintosh) and
484
+ [@feross](https://github.com/feross) for the encouragement I needed to get this
485
+ idea off the ground and start writing!
486
+
487
+ Thank you to the following awesome readers for noticing errors and sending me
488
+ PRs :heart: :
489
+
490
+ - [@ungoldman](https://github.com/ungoldman)
491
+ - [@boidolr](https://github.com/boidolr)
492
+ - [@imjoehaines](https://github.com/imjoehaines)
493
+ - [@radarhere](https://github.com/radarhere)
494
+ - [@joshmanders](https://github.com/joshmanders)
495
+ - [@ddbeck](https://github.com/ddbeck)
496
+ - [@RichardLitt](https://github.com/RichardLitt)
497
+ - [@StevenMaude](https://github.com/StevenMaude)
498
+ - [@KrishMunot](https://github.com/KrishMunot)
499
+ - [@chesterhow](https://github.com/chesterhow)
500
+ - [@sjsyrek](https://github.com/sjsyrek)
501
+ - [@thenickcox](https://github.com/thenickcox)
502
+
503
+ Thank you to [@qihaiyan](https://github.com/qihaiyan) for translating Art of
504
+ README to Chinese! The following users also made contributions:
505
+
506
+ - [@BrettDong](https://github.com/brettdong) for revising punctuation in Chinese version.
507
+ - [@Alex-fun](https://github.com/Alex-fun)
508
+ - [@HmyBmny](https://github.com/HmyBmny)
509
+ - [@vra](https://github.com/vra)
510
+
511
+ Thank you to [@lennonjesus](https://github.com/lennonjesus) for translating Art
512
+ of README to Brazilian Portuguese! The following users also made contributions:
513
+
514
+ - [@rectius](https://github.com/rectius)
515
+
516
+ Thank you to [@jabiinfante](https://github.com/jabiinfante) for translating Art
517
+ of README to Spanish!
518
+
519
+ Thank you to [@Ryuno-Ki](https://github.com/Ryuno-Ki) for translating Art of
520
+ README to German! The following users also made contributions:
521
+
522
+ - [@randomC0der](https://github.com/randomC0der)
523
+
524
+ Thank you to [@Manfred Madelaine](https://github.com/Manfred-Madelaine-pro) and
525
+ [@Ruben Madelaine](https://github.com/Ruben-Madelaine)
526
+ for translating Art of README to French!
527
+
528
+ ## Other Resources
529
+ Some readers have suggested other useful resources for README composition:
530
+ - [Software Release Practice](https://tldp.org/HOWTO/Software-Release-Practice-HOWTO/distpractice.html#readme)
531
+ - [GNU Releases](https://www.gnu.org/prep/standards/html_node/Releases.html#index-README-file)
532
+
533
+
534
+ ## License
535
+
536
+ [Creative Commons Attribution License](http://creativecommons.org/licenses/by/2.0/)
@@ -0,0 +1,119 @@
1
+ # Make a README
2
+
3
+ > Source: [makeareadme.com](https://www.makeareadme.com) by Danny Guo
4
+ >
5
+ > "Because no one can read your mind (yet)"
6
+
7
+ ## README 101
8
+
9
+ ### What is it?
10
+
11
+ A README is a text file that introduces and explains a project. It contains information that is commonly required to understand what the project is about.
12
+
13
+ ### Why should I make it?
14
+
15
+ It's an easy way to answer questions that your audience will likely have regarding how to install and use your project and also how to collaborate with you.
16
+
17
+ ### Who should make it?
18
+
19
+ Anyone who is working on a programming project, especially if you want others to use it or contribute.
20
+
21
+ ### When should I make it?
22
+
23
+ Definitely before you show a project to other people or make it public. You might want to get into the habit of making it the first file you create in a new project.
24
+
25
+ ### Where should I put it?
26
+
27
+ In the top level directory of the project. This is where someone who is new to your project will start out. Code hosting services such as GitHub, Bitbucket, and GitLab will also look for your README and display it along with the list of files and directories in your project.
28
+
29
+ ### How should I make it?
30
+
31
+ While READMEs can be written in any text file format, the most common one that is used nowadays is Markdown. It allows you to add some lightweight formatting. You can learn more about it at the [CommonMark website](https://commonmark.org/).
32
+
33
+ ## Suggestions for a Good README
34
+
35
+ Every project is different, so consider which of these sections apply to yours. Also keep in mind that while a README can be too long and detailed, **too long is better than too short**. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
36
+
37
+ ### Name
38
+
39
+ Choose a self-explaining name for your project.
40
+
41
+ ### Description
42
+
43
+ Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of **Features** or a **Background** subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
44
+
45
+ ### Badges
46
+
47
+ On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use [Shields.io](http://shields.io/) to add some to your README. Many services also have instructions for adding a badge.
48
+
49
+ ### Visuals
50
+
51
+ Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like [ttygif](https://github.com/icholy/ttygif) can help, but check out [Asciinema](https://asciinema.org/) for a more sophisticated method.
52
+
53
+ ### Installation
54
+
55
+ Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a **Requirements** subsection.
56
+
57
+ ### Usage
58
+
59
+ Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
60
+
61
+ ### Support
62
+
63
+ Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
64
+
65
+ ### Roadmap
66
+
67
+ If you have ideas for releases in the future, it is a good idea to list them in the README.
68
+
69
+ ### Contributing
70
+
71
+ State if you are open to contributions and what your requirements are for accepting them.
72
+
73
+ For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
74
+
75
+ You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
76
+
77
+ ### Authors and Acknowledgment
78
+
79
+ Show your appreciation to those who have contributed to the project.
80
+
81
+ ### License
82
+
83
+ For open source projects, say how it is licensed.
84
+
85
+ ### Project Status
86
+
87
+ If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
88
+
89
+ ## FAQ
90
+
91
+ ### Is there a standard README format?
92
+
93
+ Not all of the suggestions here will make sense for every project, so it's really up to the developers what information should be included in the README.
94
+
95
+ ### What should the README file be named?
96
+
97
+ `README.md` (or a different file extension if you choose to use a non-Markdown file format). It is traditionally uppercase so that it is more prominent, but it's not a big deal if you think it looks better lowercase.
98
+
99
+ ## What's Next?
100
+
101
+ ### More Documentation
102
+
103
+ A README is a crucial but basic way of documenting your project. While every project should at least have a README, more involved ones can also benefit from a wiki or a dedicated documentation website. Tools include:
104
+
105
+ - [Docusaurus](https://docusaurus.io/)
106
+ - [GitBook](https://www.gitbook.com/)
107
+ - [MkDocs](https://www.mkdocs.org/)
108
+ - [Read the Docs](https://readthedocs.org/)
109
+ - [Docsify](https://docsify.js.org/)
110
+
111
+ ### Changelog
112
+
113
+ A [changelog](https://en.wikipedia.org/wiki/Changelog) is another file that is very useful for programming projects. See [Keep a Changelog](http://keepachangelog.com/).
114
+
115
+ ### Contributing Guidelines
116
+
117
+ Just having a "Contributing" section in your README is a good start. Another approach is to split off your guidelines into their own file (`CONTRIBUTING.md`). If you use GitHub and have this file, then anyone who creates an issue or opens a pull request will get a link to it.
118
+
119
+ You can also create an issue template and a pull request template. These files give your users and collaborators templates to fill in with the information that you'll need to properly respond.