103 lines
4.7 KiB
Markdown
103 lines
4.7 KiB
Markdown
|
#### *With great power comes great responsibility*
|
||
|
|
||
|
I was
|
||
|
[recently reminded](https://twitter.com/snoyberg/status/880637139574304769)
|
||
|
of a bit of a mantra that I had at LambdaConf this year in
|
||
|
discussions, and I decided to share it here. I received a bunch of
|
||
|
questions like these (I'd share the originals, but I have a terrible
|
||
|
memory):
|
||
|
|
||
|
* Why is there no tutorial for doing X?
|
||
|
* Why doesn't a library like Y exist?
|
||
|
* Why has no one created a mailing list/discussion forum/etc for topic
|
||
|
Z?
|
||
|
|
||
|
The answer to all of these is the same: __because you haven't done
|
||
|
it!__ And I don't mean that in the plural "you" or figuratively. The
|
||
|
one and only reason why things don't get done is because you,
|
||
|
personally, individually, have not done them.
|
||
|
|
||
|
This of course isn't literally true. There's a possibility that
|
||
|
someone else will step up to the plate first. And there are limited
|
||
|
numbers of hours in the day, and no one person can accomplish
|
||
|
everything. But this mindset is, in my opinion, the only correct one
|
||
|
to adopt if you want things to happen. It's your responsibility to do
|
||
|
it; don't wait for others to do it.
|
||
|
|
||
|
You may have some legitimate objections to this philosophy:
|
||
|
|
||
|
* *How can I write a tutorial, I don't understand how to accomplish
|
||
|
this?*
|
||
|
|
||
|
* Go ahead and write it as best you can, and ask people to review
|
||
|
it. People are usually quite happy to provide corrections and
|
||
|
advice.
|
||
|
* A streamlined way of doing this is to send a pull request to an
|
||
|
existing repo holding documentation (e.g.,
|
||
|
[haskell-lang](https://github.com/haskell-lang/haskell-lang#contributing-content)).
|
||
|
* Worst case scenario: ask questions. Encourage people to write up
|
||
|
answers. Volunteer to compose the answers into a coherent
|
||
|
document at the end. Even people not willing to participate in
|
||
|
writing a full tutorial themselves may be quite happy to answer
|
||
|
direct questions, especially knowing their work will be
|
||
|
preserved for others.
|
||
|
|
||
|
* *How can I write such a library, it's beyond my capabilities?*
|
||
|
|
||
|
* You'd be surprised about that. Give it a shot. Worst case
|
||
|
scenario: it'll be a learning experience and otherwise an epic
|
||
|
failure. Best case scenario: you succeed. Either way, it's a
|
||
|
win-win situation.
|
||
|
* Maybe your desired functionality fits into an existing
|
||
|
library. Library authors tend to be quite happy to review and
|
||
|
accept pull requests, and contributing an extra function can be
|
||
|
less intimidating than writing a new library. (But please
|
||
|
consider
|
||
|
[opening an issue first](/blog/2017/06/how-to-send-me-a-pull-request?preview=true).)
|
||
|
* And if you're certain you're not up to the task: try to
|
||
|
encourage others. You may not succeed. But try to make the case
|
||
|
for why this project is useful, interesting, necessary, or
|
||
|
whatever other adjectives you believe apply. Motivate people.
|
||
|
|
||
|
* *I'm not a community leader, how can I encourage discussions?*
|
||
|
|
||
|
* There's no such thing as an "official" community leader. There
|
||
|
are people with moderator access on some forums or control over
|
||
|
certain websites. But that's not what makes someone a leader. If
|
||
|
people want to hear what you have to say and join the
|
||
|
conversation, you're leading a conversation.
|
||
|
* Besides, you don't need to be a leader to start a discussion.
|
||
|
* A slight retraction to all of this: if a topic has already been
|
||
|
beaten to death, it's almost certainly not worth rehashing
|
||
|
it. Reraising controversial points constantly doesn't help
|
||
|
anyone.
|
||
|
|
||
|
* *It doesn't seem like the community agrees on this point, how can I advocate it?*
|
||
|
|
||
|
* Just because many people seem to be advocating X does not mean
|
||
|
that it is universally held. There are many reasons why X seems
|
||
|
to be the dominant viewpoint:
|
||
|
|
||
|
* People may be legitimately unaware of alternatives
|
||
|
* The people who disagree with X all think it's not worth
|
||
|
speaking against the "dominant" opinion
|
||
|
* The people who believe X are simply more passionate about it
|
||
|
than those that don't.
|
||
|
|
||
|
* So what if people disagree? Having healthy technical debate is a
|
||
|
_good thing_. There are at least three outcomes I can see from
|
||
|
such a debate:
|
||
|
|
||
|
* You realize you were wrong
|
||
|
* People disagreeing with you realize they were wrong
|
||
|
* Both sides continue with their beliefs, but have a deeper
|
||
|
understanding of both their positions and the alternatives
|
||
|
|
||
|
* But again, try to avoid beating a topic to death
|
||
|
|
||
|
I don't know if people outside the Haskell world experience this as
|
||
|
much as we do. But I've certainly seen a strong sentiment of "not
|
||
|
being worthy" or some other such idea. It's rubbish. Join the
|
||
|
conversation, lead the way, make things happen. The world will be
|
||
|
better for it.
|