Intern 2021: Google!
This summer I'm going to be working as an intern with the Blockly team at Google. If you've read my other blog posts, you're probably familiar with Blockly, but for those who haven't: Blockly is a library that allows developers to include blocks-based coding editors in their webpages. It is heavily used in CS education, as well as enterprise no-code applications.
My project for this summer will be upgrading the serialization system. It may not seem like the flashiest project, but it's something I've wanted to do for a long time and I am super stoked about it!
Before I go any further, I'd like to give a big thank you to all the people that helped me get this internship, especially the Blockly team. They put in referrals for me, walked me through the process, and helped me in so many other ways. Their experience was genuinely invaluable. I'm going to work my hardest this summer so I can make the most of this wonderful opportunity I've been given!
My mentors for this summer are Abby Schmiedt and Maribeth Bottorff.
Abby joined the Blockly team just a few months after I discovered it, and she has touched almost every part of the system. She has done a lot of work to make Blockly more accessible. For example, she created the themes system, which allows you to change the colors of Blockly to make it easier for color blind people to use. And she developed a keyboard navigation system, which can be used to create a screen reader for blind people. She also recently redesigned the toolbox system, to make it more customizable.
Maribeth joined the Blockly team more recently, but she's already doing really cool stuff. She revamped the context menu system so that you can easily register and unregister new options (something that has been badly needed!) And she built a continuous toolbox plugin (like the toolbox that Scratch has) based on Abby's toolbox redesign.
Both of them are really smart, talented people, so I'm sure I'm going to learn a lot from them!
Plus I'll be working with the other people on the Blockly team and meeting new people in engEDU. I think it's going to be a full and fun summer!
My project for this summer is going to be upgrading Blockly's serialization system. The current system works pretty well, but it is still based on XML, which is a large and bloated format. It's also not possible for plugins to add data to the serialized state, which is going to become a problem as plugins become more popular.
As such the goals of this project are:
- Add support for custom serializers. This means that you will be able to create a serializer that outputs JSON, MessagePack, CBOR, Protobuf, etc.
- Make the system extensible. This means that plugins will be able to save their state, and append it to the other serialized data.
- Maybe add versioning? If there's time I'd like to add support for App Inventor style versioning of your blocks language. And if there's not, I want to make sure it can be added easily in the future.
Plus the Blockly team has some other activities planned for me, like participating in a week of bug bash, learning about the release process, and (at my request) getting to practice giving PR reviews!
It may seem like a lot, but I'm confident I can have something working by the end of the summer =)
As I'm thinking about my goals for the project, I'm also thinking about my personal goals for the summer.
My theme for this year is the Year of the Long Term. I've been trying to focus less on questions like "Did I have a productive day?" and "Did I have a well rounded week?", and focus more on questions like "Am I growing as a person this year?", "Am I creating a life that I want to live?", and "What can I do to get closer to that life?"
As such, one of things I've been thinking about a lot is being a team player. In my mind, a team player is someone who doesn't constrain the people around them, and maybe even elevates them. I think that someone like that can thrive in any environment, because they can create a more productive space, and they know how to rely on others. Being able to thrive in any environment seems like good Long Term thinking, so this is something that I'd like to work on this summer.
So while my career focus this summer is going to be creating a rad serialization system, my personal focus is going to be on the questions:
- Where can I learn?
- What can I bring?
- How can I support those around me?
I'm going to try to keep up with these approximately bi-weekly like I did for GSoC, but we'll see how it goes!
And I'd also like to thank the Blockly team once again. I think it's going to be an awesome summer, and I know I'm going to learn a lot. I just hope I can give back as much as they've given to me =)