|
| 1 | +<!DOCTYPE html> |
| 2 | +<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> |
| 3 | +<head> |
| 4 | + <meta charset="utf-8" /> |
| 5 | + <meta name="generator" content="pandoc" /> |
| 6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
| 7 | + <title>The Contributor Competition</title> |
| 8 | +</head> |
| 9 | +<body> |
| 10 | +<h1 id="the-contributor-competition">The Contributor Competition</h1> |
| 11 | +<p><br></p> |
| 12 | +<div style="text-align: center;"> |
| 13 | +<p><img src="images/ruin_sword.jpg" /></p> |
| 14 | +</div> |
| 15 | +<h4 |
| 16 | +id="open-source-projects-compete-for-contributors.-how-can-you-win">Open |
| 17 | +source projects compete for contributors. How can you win?</h4> |
| 18 | +<hr> |
| 19 | +<h2 id="a-case-study.">A case study.</h2> |
| 20 | +<hr> |
| 21 | +<p> Python and Julia are programming languages that fill a very |
| 22 | +similar niche. They're both dynamic scripting languages popular in the |
| 23 | +scientific computing space. People use them to replace Matlab and R. Why |
| 24 | +is Julia languishing, while Python is flourishing?</p> |
| 25 | +<br> |
| 26 | +<div style="text-align: center;"> |
| 27 | +<p><img src="images/Python_vs_Julia.png" /></p> |
| 28 | +</div> |
| 29 | +<p><br></p> |
| 30 | +<p> Julia has been relatively successful at attracting users. Most CS |
| 31 | +students that I went to college with learned Julia. But very few have |
| 32 | +been convinced to become contributors. I was curious, so I looked at the |
| 33 | +recent PRs. I was looking for a PR from someone not in the Julia |
| 34 | +programming language organization. I found one. It was the 63rd PR I |
| 35 | +looked at. A prolific contributor who wasn't technically in the |
| 36 | +organization, but had contributed all over the Julia package ecosystem. |
| 37 | +I scrolled through a few more pages, but couldn't find a name that I |
| 38 | +didn't recognize. The Julia community is very tight-knit and |
| 39 | +insular.</p> |
| 40 | +<p> I did the same for Python. The fourth PR from the top was a first |
| 41 | +time contributor. The Julia organization on Github has 187 members. |
| 42 | +Python has by far more users, but only 129 members. Anyway, this is |
| 43 | +circumstantial evidence that doesn't prove anything. But something is |
| 44 | +going on here.</p> |
| 45 | +<p> No language is "better" than another. Usually these comparisons |
| 46 | +are an excercise in tribalism. But bear with me here. Let's look at only |
| 47 | +the technology. In a vaccum, Julia just seems "better" than Python.</p> |
| 48 | +<p> It's faster. It automatically deduces types, then uses them to |
| 49 | +jit compile using LLVM ORC. You can compile a function and read the |
| 50 | +assembly. It has perhaps (tied with ipython) the best REPL in the world, |
| 51 | +built into the base language. It solves the <a |
| 52 | +href="https://en.wikipedia.org/wiki/Expression_problem">expression |
| 53 | +problem</a>, which python cannot. It has a more principled package |
| 54 | +manager. You can run Julia code on the GPU. The compiler is extensible. |
| 55 | +Very fancy. It's a complex and incredible marvel of engineering. It has |
| 56 | +everything going for it, from a technical perspective.</p> |
| 57 | +<p> Why, then, does Julia not attract contributors? Surely all of |
| 58 | +that should make people want to work on it, right?</p> |
| 59 | +<h2 id="the-problem">The problem</h2> |
| 60 | +<hr> |
| 61 | +<p> Yeah, no. here's the problem. None of that matters. Nobody |
| 62 | +cares.</p> |
| 63 | +<p> Fundamentally, what contributors want is to solve their own |
| 64 | +problems and optimize their own experience. They are selfish. They think |
| 65 | +about how to use the project to accomplish their own goals. They don't |
| 66 | +care about the maintainer's problems as much as the maintainer may hope. |
| 67 | +Especially if they cannot at a glance understand those problems. Julia |
| 68 | +is too complicated to contribute to without sacrifice. I know, because I |
| 69 | +have sacrificed.</p> |
| 70 | +<p> Potential contributors may support your mission, but they won't |
| 71 | +sacrifice anything for it. They have a very short attention span. They |
| 72 | +want to contribute so that they can avoid pain, not take on more pain. |
| 73 | +If they can't immediately solve their problem, they will leave. They'll |
| 74 | +find a workaround without upstreaming a fix, or they will just find some |
| 75 | +other project. The only way to get someone to sacrifice for your cause |
| 76 | +is to pay them, or offer some other incentive. Nobody wants to clean up |
| 77 | +your mess for you.</p> |
| 78 | +<p> I consider Julia to be a cautionary tale. I've had multiple |
| 79 | +conversations with the maintainers to the effect of "We have a long list |
| 80 | +of good first issues, why is nobody picking them up? We have like three |
| 81 | +hundred of them! Fix our type inference bugs! Debug our segfaults! Why |
| 82 | +are there no new contributors?" They forget that nobody wants to do |
| 83 | +that. People have their own problems to deal with.</p> |
| 84 | +<h2 id="the-solution">The Solution</h2> |
| 85 | +<hr> |
| 86 | +<p> The solution is to drastically lower the barrier to entry while |
| 87 | +making the project as useful as possible. That way, useful contributions |
| 88 | +to your project will not require much sacrifice. The risk (wasted time) |
| 89 | +vs reward (features merged) calculation becomes more favorable. Then |
| 90 | +maybe some of those short term contributors will keep using your project |
| 91 | +and turn into long term contributors and maintainers. People that you |
| 92 | +can design new features with, who can review your code and point out |
| 93 | +conceptual issues.</p> |
| 94 | +<p> It's actually not enough to lower the barrier to entry. You need |
| 95 | +to make sure that people know that it's low. This is more important than |
| 96 | +it actually being low. Frequent communication is key. If people know |
| 97 | +that they can go on discord for help implementing a feature and expect |
| 98 | +that it will be approved and merged within a day, then who wouldn't want |
| 99 | +to contribute? But if you need to find someone willing to review your PR |
| 100 | +and you haven't already befriended a maintainer, and you're not sure if |
| 101 | +you can even understand the code in the first place, then maybe not.</p> |
| 102 | +<h1 id="actionable-advice.">Actionable advice.</h1> |
| 103 | +<hr> |
| 104 | +<p><br></p> |
| 105 | +<div style="text-align: center;"> |
| 106 | +<p><img src="images/Haruhi_Thumbs_Up.jpg" /></p> |
| 107 | +</div> |
| 108 | +</body> |
| 109 | +</html> |
0 commit comments