Google Summer of Code was hands down the most exciting opportunity and, in hindsight, the most formative experience in my software development journey.
Multiple factors contributed to me considering this adventure so highly:
-
First and foremost, I had the opportunity to work on open source software.
This totally shifted my attitude towards the project¹: rather than feeling like a hamster in a wheel that fuels a machine that sells my product to make way more money than I’m paid, I crafted a tool that’s free for anybody to use. What “anybody” does with that, which could be money down the line, is more detached from what I crafted than it is for the hamster.
I do think that the difference between those two perspectives hinges on a peculiar aspect of my project, as per the next point.
-
I had the opportunity to design and implement a feature that would help other programmers, including myself. (Here is the final summary of the project, to know more about the tech side of it.)
This, on one hand, relieved me from the hamster-in-the-wheel feeling I mentioned earlier, because I was just creating a piece of software that would (at least slightly) improve the life of other people writing software; on the other hand, it meant I was conversing with people that feel similar needs, if not the same, as I do; people with which misunderstandings are much harder to occur, because the two of you have another language at your disposal to make your brains communicate effectively, and that’s the language of the software developer; not Haskell or any other programming language, but just the way we software developers think of problems and solutions.
-
The fact that the language was Haskell, a purely functional programming language, makes that “language of the software developer” even more powerful, because by studying and learning Haskell, that language gets enriched with terminology which is not fuzzy as in other languages, but fairly precise, rooted on mathematical foundations.
Probably such enrichment is due more to the functional nature of Haskell than to Haskell itself, but surely Haskell forces you more than other languages do, to think in those terms, because it’s purely functional.
-
I had the opportunity to write real Haskell code that was shipped soon after I coded it, and that is already used by other people. And this doesn’t just mean that you start getting feedback right after the project is out. It happens earlier, as soon as you let people know you’re working on it, even when you’re still in a work-in-progress phase, as you can see from the comments/answers to this post on Discourse.
This was in spite of all the times I was asked by colleagues and friends “what is Haskell even used for?”, while I was pouring as much as I could of my after-work evenings into LYAH and RWH, barely 6 years ago.
-
I had the opportunity to collaborate with brilliant people that directed me, through their feedback, to do a great job, writing modern and beautiful Haskell code!
There was a previous time I worked on a Haskell project end-to-end, but that was a solo adventure relegated to the spare time I could afford to spend on coding². I learned a lot, yes, and I know that because I completed the project and, according to Hackage, at least over 250 people have downloaded it since. But despite all the questions I asked on StackOverlow to understand and overcome the many difficulties I stumbled on, I never really had the opportunity to have my code systematically and repeatedly reviewed by somebody known to be expert in the field.
This time I could ask targeted, or sometimes even vague, questions to somebody who knew the big picture and could therefore provide “context-sensitive answers”, so to speak. More generally I could discuss, rather than just shoot one question after another, sadly keeping the burden of making the right decisions all on me. This time I was guided to make best decisions, or at least to know where my decision lied on the spectrum between the best and the worst possible choices one could imagine.
At the end of such a great adventure, I feel I am to some extent a better programmer than I was, and, most importantly, a much more self-confident one.
And such a self-confidence, still during the project, translated into more enthusiasm poured into open source; indeed, before officially finishing my project, I started looking around for other opportunities to contribute to open source, totally unrelated to HLS, and that’s how I came up with these:
-
… which came out clean and nice thanks to my improvement to the
bricklibrary, that I was suggested to address as preparatory work for the GHCup change; -
and even a PR to a Rust project! Coincidentally, it enables the same feature, in a totally different program, as PRs 1 and 2.
As I said, I wasn’t new to open source, but I surely was much more “shy”, so to speak. GSoC, through the human and technical interactions it fosters, has powered me with enthusiasm and self-confidence that really is at the basis of professional growth.
So what’s next for me?
In the near future, I’m looking forward to MuniHac 2026, where I’ll meet great Haskell programmers in person, including one of my mentors, @fendor.
In a hopefully-not-far future, I hope to be hired as a Haskell developer; in the meanwhile, for that purpose, I’m planning to pour my energies into becoming a better and better Haskell programmer by participating and contributing to HLS and other open source projects.
¹ I must stress that such a shift is not grounded in the identity tout court between “open source” and “unpaid”, firstly because GSoC comes with a stipend, secondly because my mentors are employees who make a living at least partly out of working on open source projects, like GHC or HLS itself.
² I mean, given I was a C++ software developer full-time, I already coded most of my days and day, so there were also non-coding duties and much needed laisure activities I should dedicate my time to.