When it comes to Google Summer of Code, we have a bunch of constraints that make it easier to pick out great projects:
- Time is limited. Only about 12 weeks.
- API design takes a couple years to learn, so it is not an ideal project when someone is new and time constrained.
- Students may not finish everything, so the expected results should be valuable even if not everything is completed.
I have outlined a bunch of good community projects, but I want to highlight a few that are ideal for GSoC.
Package Search
The search feature of package.elm-lang.org is quite rudimentary. Community members have already created “type search” like this which is really cool, but I think we would benefit from a more traditional search feature as well. I outline some ideas for this right here.
In the end we’d want this service to live on its own server, so if it goes down, it does not take down the package website. It would also take in JSON and give out JSON, so the scope is limited to writing servers, which can be a great learning experience.
These natural constraints make it a great GSoC project. If the project is incomplete, nothing is blocked. In every case the community learns if full-text search is valuable, and if so, how much it costs. And perhaps the project will inspire collaborators or competitors!
Exploratory Compiler and Optimization Work
There are a few projects that require a stronger background in compilers and programming languages. I think these would be great for older undergrads, masters students, and PhD students. The project page lists exploring monomorphization and exploring WebAssembly. Both of these projects are primarily exploratory. In other words, a big part of the results would be a well-written literature review, so even if the technical artifacts are not perfect, they get things going.
I think there are a bunch of more sophisticated control flow analyses that could be interesting to look into. Maybe that means figuring out test coverage statically or trying to augment elmjutsu to suggest fancier expressions based on types. So if you see:
longestName : List User -> Int
longestName users =
users
|> List.map .name
|> ...
In the ...
we know we want to get from List String
to Int
so we can suggest functions like List.length
. Perhaps we can rank suggestions based on which file or package they live in.
Point is, these are projects that push the Elm community in interesting directions, they have a large learning component for both the student and community, and you can achieve a great deal before much coordination is needed. For masters and PhD students, there are ways to fit projects like this into a broader research agenda, but we will have a strong preference for projects that (1) do not require language changes and (2) can reasonably expect a concrete result.
For folks with the background for this, I encourage you to talk to the creators of projects like elm-test, elm-format, elmjutsu, and sketch-n-sketch to learn what kind of analyses would be most useful in practice.
Mentorship
I have created two collaborative resources for mentorship and support:
The #gsoc channel on the Elm slack. If you want to help students refine projects, keep an eye on it! Once there are accepted projects, I want that channel to be a place for students, mentors, and knowledgeable community members to work together. This way we can quickly learn from the student’s project and they learn from our collective expertise.
The mentor wiki. Students will also have a specific mentor that will meet with them at least once a week. I think finding a match between interests, knowledge, and personalities is important, so please add your information if you are interested in being a mentor. Obviously not everyone can do it, but I think it makes sense to have a bunch of folks willing to help.
Thanks and Good Luck
First, thank you to the folks who helped out with the Google Summer of Code application. I really appreciate your support!
Second, I am excited to see what kind of proposals we get. Hopefully this blog post helps you refine your ideas into something ambitious and practical!