This will be a more informal brain-dump of my thoughts on how my GSoC project went. This was written around the same time as the more formal Final Report (i.e. before I've recieved my final evaluation), but I did wait to do a final pass and proofread until after the final evaluation. During the mentor's evaluation period, I took the first real break I've taken since around March or April, mostly so I could look at literally any other code at all. I've been tinkering with an RTS engine I've had on the backburner for a long time, as well as a very silly Python project that I'll probably make a post about soon.
In any case, I'm pleased to say that I passed my final evaluation! I have some additional awesome news. Just before my project ended, I recieved a surprise DM notifying me that a few people had nominated me for Rust Compiler Team membership! I accepted, and I'm very excited to keep contributing to Rust for the foreseeable future. It maybe sounds silly, but as someone who hasn't like... done a whole lot with their life, or had a whole lot of opportunities, seeing my name on the official website alongside the names of people whose blogs I've been reading for years made me tear up a little.
GSoC as a whole was a really enjoyable experience. It's still kindof wild to me that programs like that exist, but I'm very glad they do and that I was able to take part. Even outside of my own project, seeing the progress made on other projects was very cool. I didn't quite have the time to look at projects outside of the Rust organization, but it was still really neat to see what was going on outside of the Debuginfo Singularity. Some of them were infrastructure-based like mine, some were working on handy new features for the language, and others were more ecosystem related. The variety surprised me a bit, though I suppose it's easy to get tunnel-visioned when working on one part of the compiler for so long.
In any case, I want to reflect a did on how I think I did, and how I want to improve going forward.
What I did well
Writing this section is a bit hard, I've always been uncomfortable speaking positively about things I've done. My time competing in various games reinforced that, since I'm always focused on looking critically and objectively at my own (usually lackluster) performance to figure out what to fix for next time. Completely ignoring the things I did well probably isn't the healthiest mindset though, so I do want to take a second to acknowledge, mostly to myself, that I did good work.
My code quality was reasonably good, though it's obviously hard for me to gauge that super accurately. There were some hacks, and some Python Jank™, but overall it's fairly readable and sensible. I tried my best to include lots of comments on the minutae, since I'm often frustrated when those are missing in codebases I'm reading through. I'm happy with the debuginfo section of the rustc-dev-guide, though it'll need some updates fairly soon I think.
I've gotten a lot more comfortable with git. Prior to GSoC, I could rebase, pull, and push, and that was about it. During GSoC, I've had to fetch from non-origin/upstream remotes, undo some mistakes with reflog, dig through blames, and I've gotten plenty more practice with all the basics. I'm no expert by any means, but it's nice to feel a bit more familiarity with the tools I use. In that same vein, I also started using Linux more consistently, and I've gotten more comfortable there too (if only I could go back a year ago and tell myself that working in LLVM's repo is so much easier on Linux lol).
I've had to look into Rust's CI a little bit as well. Lots of it is still black magic to me, and I tend to have trouble reasoning about it since a lot of the logic is hidden behind a DSL that operates in env vars. It's sometimes really difficult to track down, statically, what a variable is set to. That said, I've gotten my bearings somewhat in the PR-CI and bors-job end of things, so I've been able to modify the jobs for my needs when necessary.
Overall planning and time management went okay, but not perfect. I didn't track my exact times, but I spent a good deal more than the "expected" 175 hours on this project (not that I'm complaining). Less of it than I expected was spent coding, and more went towards discussion and research. Digging around in LLDB's source code and running experiments to figure out why things would inexplicably not work on CI despite working locally, or not work in the test harness when they worked fine when run manually, ate up a lot of time. I wish I could have done more, though I think I'd still say that even if I had spent a thousand hours. It's always a delicate balance of doing what I can without negatively impacting my health, relationship, and job. I did what I could, I pushed myself at times, but the critical part of me will always think that I maybe could have pushed myself more.
What I want to improve on
I've always been a pretty independent person. I don't mind disappearing into the mountains for however long it takes to complete a task, and then showing up with a final product. If I don't know something, I research it and figure it out. If I can't figure it out, I do more research and chip away at it until I figure it out. Asking for help is usually the last resort. That's obviously not the most efficent way to handle a project that involves more than 1 person. I knew I would struggle with communication a bit before GSoC started. I did my best, but there's still room to improve. Checking in more, providing more frequent updates, asking more questions.
PR size is something I don't quite feel like I have a handle on. I think a lot of them were okay, but the major feature additions were definitely too large. Both mentors did an admirable job reviewing them, and caught a lot of small bugs, but ideally they would have had something more digestable to work with in the first place. In cases like this it feels difficult, because a lot of the "skeleton" of the project was done experimentally. During that experimentation, there were quite a number of points late in the processing pipeline where it boiled down to "if LLDB doesn't want to cooperate, we need to scrap almost everything and do it completely differently". That meant that, by the time I was reasonably confident that we wouldn't need to change anything major about the logic and representation, pretty much the whole framework was written out and it wasn't really a "skeleton" anymore.
I think one option would be to take the "finished" product and strip out everything except a tracer bullet, then submit that. At the time, it felt a bit silly because that adds extra work just to end up in the same place. Taking a step back though, I think my lack of experience reviewing other people's code is making me biased. Stripping the PR down would result in more work for me, but less work for the reviewer, and would probably lead to higher review quality. I'm sure over time, and with more experience from both sides of PR reviews, I'll get a better gauge on when the tradeoff is worth it.
Keeping organized was a bit of a struggle too. It affects things like how many PR's I feel comfortable having open at once, how willing I am to do siginficant work on to the next step while a bigger PR is still being discussed/reviewed, keeping track of priorities, all that kind of stuff. It's definitely better than it was prior to GSoC, but I still found myself getting a bit overwhelmed or slowing my pace more than I'm happy with.
I was never much of a note-taker in school. I'm able to keep quite a lot of state and context in my head, even across days, weeks, and months; constantly juggling it in my working memory alongside all the other things I need to keep track of in my daily life. "Juggling" is a pretty apt metaphor too, because I'm almost constantly cycling through each bit of info in my head to "refresh" it. It usually doesn't take much of my attention to do so, so it's not a huge deal, but when I strain my total juggling capacity it's not great. It leaves me constantly feeling stressed and overwhelemed, which negatively affects other parts of my life. I also tend to have a hard time stopping the juggling.
Writing blog posts helps, since I take the entirety of my current context, trim it down to the essentials, wrap it up with a neat bow, integrate it into my long-term... worldview? foundational understanding? intuition? I don't have a good word for it. Anyway, it usually requires a bit of intentionality. Typically I end up doing pretty large brain-dumps, so I can set everything down at once and make space for a brand new set of things. This works fairly well on a macro-scale, big projects like TypeSystemRust that take weeks or months of research on a topic completely new to me. What I'm not good at is setting down small bits and pieces on a day-to-day basis. My brain rationalizes it: "Well you're just gonna need it tomorrow anyway, why bother writing it down and then reading it again? And then you also have to worry about finding that information again if it's something from more than a few days ago. What a waste". Part of why I never wrote my 2nd GSoC blog post regarding error messages was that I just never felt I needed a brain-dump after the first one.
It's tough, because my brain isn't wrong. There are advantages to the way it chooses to operate, especially when it comes to this sort of thing. The context is a large collection of small facts about a complicated web of interdependent pieces, and those facts come from a myriad of different sources. Juggling that all in my head is something I can literally do, any random tidbit is right there when I need it, and I had the "excuse" to do it because GSoC was so important to me.
I've tried things like Obsidian, todo lists, and even just quick scribbles in a notebook. Bigger systems like Obsidian leave me feeling like I'm spending more time organizing the notes than I'm spending writing or reading the notes. I often end up forgetting to look back at todo lists and less formally organized notes. Iunno, it's tough. I'm not sure if I need to just force myself to use these tools anyway, or if there's something else I should try.
A bit of a tangent I suppose, but I've spent a lot of time reflecting on how my brain functions, trying to work around these sorts of problems, and it's not always the easiest or quickest thing to describe. Tl;dr I need to find some way to trick/convince my brain into thinking that it's worth the effort to write smaller, shorter-term notes rather than waiting a month (or more) and doing a giant brain dump.
There was another GSoC contributor, Adam Martinez, who posted literal daily updates for the full 3 months, detailing their progress, blockers, etc. It was incredibly impressive. I very strongly admire both the ability and the discipline necessary to do something like that. I don't know that I could ever get my brain to cooperate with me on that level, everyone's wired differently and all that, but even if I could manage it for short stints, or maybe updates every couple of days, I think I'd be satisfied.
You can be the master of your own destiny
About 4 years ago, in 2022, I had run out of things to occupy my time at my overnight job. I decided to try to make a career for myself, but I was fairly sure college wasn't a viable option for me. Instead, I bought some C++ textbooks and taught myself to code. While I quickly ditched C++'s awful dev UX for Python (and eventually Rust), it didn't take long for me to realize that I am incredibly passionate about computer science, and that I enjoy the act of programming a lot. It's a bit of a funny coincidence to me that I did a "final project" of sorts, 4 years after starting to learn; the same amount of time as if I'd just gone to college. Structurally, teaching myself was a much better fit, but I do remember thinking "4 years is too long" back then lol.
In early 2024, I recieved a call from my older sister at 2:00am. Since I work nights, I was up already, but it was unusual both that she would call me at all, and that she would call so late at night. She told me that our dad passed away unexpectedly at the age of 49 due to a stroke. The situation was complicated, but I chose to cut all contact with him several years prior to his death. The last time I had spoken with him, I was pretty directionless. During my teenage years, I dumped most of my time into Starcraft. I didn't have a career path in mind after highschool, and I was mostly resigned to just doing whatever menial work paid the bills. I think my older sister was in a similar boat. Since then, she's gone back to college and now works as an accountant, and I've done what I can to push myself towards a career in software development (despite the unfortunate industry conditions). I often find myself wondering if he had heard I was programming from other family members, and what he'd think of how far my sister and I have come since we graduated highschool.
Two and a half weeks after he passed, I turned 26. A thought I had then that I still haven't been able to shake is, "If I live as long as he did, my life is half over". I don't have the same chronic illnesses that lead to his stroke (probably), but I could also get hit by a bus tomorrow.
The natural followup is: "Am I happy with how I spent first half of my life?". The first 2 decades of my life were less than pleasant. If you had asked fresh-out-of-highschool-me, I would have said that what you, as a person, say and do doesn't matter. People will use any excuse to ignore you, belittle you, and remove your agency. I would have said that opportunities exist perpetually out of reach, and that to try is to be disappointed. Certainly more than a little edgy, but in fairness to my younger self, consider the circumstances that might lead someone to that conclusion.
I've been a much quieter person the past few years, for better and worse. I talk less, I socialize less, I offer my opinion less. When I do talk, I'm much more careful. I still have some hard days where I basically don't speak at all. This blog was, in part, an attempt to speak up more. Even the name of it, "Cracking the Shell", is a reference to that. I chose my screen name, "Walnut", when I was about 12 or 13. It wasn't originally meant to be about the food item, but it's funny how it ended up fitting anyway.
Through my blog post, more people were made aware of the debug info situation. That eventually lead to a Major Change Proposal to improve things, which lead to my participation in GSoC, which also lead to being nominated for the Compiler Team. It was a direct result of the effort I put in. Effort towards learning programming, effort researching LLDB and creating a TypeSystemRust, even the effort refining my writing back when I was kid and wanted to be a novelist. To some people, hopefully most people, that probably doesn't seem like a big deal. I've said it before, but growing up I had very few opportunities to feel like anything I did, or could do, was anything more than pissing in the wind. What I've realized is that "changing the world" is based on a false premise: that there is just one big world to change. In reality, there are uncountably many smaller worlds, where even a single phrase or gesture can completely alter its course. Those worlds are no less valuable for their size.
"Will I be happy with how I spend the second half of my life?"
I don't know, but I'm trying. So far, it's been better.
I don't intend this to be a pity party or some ultra-profound philosophising or whatever. A lot of what changed my mind, and what kept me from sliding back into my old mentality, was the visible impact of the kindness, compassion, and inclusivity of a number of individuals and communities I've encountered over the years. I have a cherished collection of little phrases and stories from people whose videos I've watched, whose blogs or comments I've read, whose desire to enrich world and the lives of the people around them is palpable. In the same way that their words and actions have helped me, my hope is that something I've said has resonated with some of you. To that end, to those of you who have so graciously read this far, I have a few little phrases to leave with you:
What you say and what you do matters.
You can be the master of your own destiny.