During the JuliaCON diversity dinner there was the idea to lower the barrier-to-entry for contributing to Julia packages. Our breakout group (focused on mentees) identified that imposter syndrome and self-consciousness about code was the one of the big reasons why people don't contribute to their favorite packages. We'd like to help these people by allowing them to implement a PR in a low-stakes environment, where they could get some feedback and learn about the development process from a mentor. Enter: the permanently broken package.
Fixme.jl is a package containing a number of undesirabilities in the form of bugs, unoptimized code, lack of documentation and CI. The mentor can make a fork of this package and act as package maintainer, while mentees will learn about Julia, package development and community conduct by fixing these undesirabilities through the proper channel. The intent is to have this be as close to the real package development experience as possible. After completion, mentors can delete/revert their fork and create it anew to teach other mentees.
The target mentee audience for this project is those who:
For a mentee, they will learn how to:
Identify an error (a bug) in a package
What to do about filing an issue
Develop a package
Create a PR against their repo
Learn what tests are
Basics of improving "bad" functions
"Good" Coding Practices
Basics of GitHub Actions
Community Code of Conduct
A low-effort low-stakes environment. Make the package easy to understand for any background (e.g. a sorting package or the like). Make it so that most issues can be fixed (and have their fixes checked) in a very reasonable amount of time.
Make it as close to the real thing as possible: provide some instructions, or list some issues in the README, but have the mentees actually file a Github issue, make a PR, have the code review stage, merge into mainโฆ
Make it modular, not everybody is interested in/knowledgeable about CI, or some other topics so make them optional.
assignment
here) and do
trial
starting at your assignment branch so you can test whether you came up with a good assignment.trial
branch can be considered main
, so you should make a branch myfix
and merge that into trial
after you're done.trial
and myfix
(if not done so already)assignment
(Steps don't need to be exactly in order here)
Have the mentee accelerate a slow function. The cause of this function being slow can be allocations, globals, type instability, preferably a mix of them
f0
f1
: a more efficient implementation of f0
f1
f1
f2
โฆ to possibly fix multiple speed issuesI'm not quite sure how some of these steps should be tackled as an assignment. In my experience it's the PR reviewer who usually asks for more documentation so I'm putting this on the mentor but I'm open to other workflows. Most essential is having people get familiar with function/struct documentation strings and Documenter.jl.