Jamming with squirrels at the Global Game Jam 2017

I wrote my last exam yesterday (April 25) and fully intended to write a new blog (seeing as it’s so out of date) … only to realize I drafted this one some time ago, but never published!

Tomorrow I’ll write about my experiences at nwHacks, preparing for co-op applications, and a term 2 review of the BCS program. Hope you find this helpful, future BCSers!

Squirrel Adventure screenshot
Our plucky protagonist perches on a platform, pondering what to plunder next. (It accidentally became alliterative and then I just went for it.)

I’ve officially completed my second hackathon! The Global Game Jam — I was at the one in Vancouver — is an amazing, 48-hour game dev bonanza in which artists, devs, designers, you-name-it all come together for a glorious weekend of coffee, coding, and calamity. (Calamity, like when my team and I realized that our game’s baddies defied the laws of physics and started flying uncontrollably around the screen when we accidentally adjusted the gravity settings.)

This hackathon was so. much. fun. A friend from the BCS program and I formed a team along with two other UBC students we randomly met in the registration line-up. None of us had much programming experience, the two other students weren’t even majoring in CS, but it was “ride or die” from about 7pm on Friday night until Sunday at 3pm.

We settled on using JavaScript and the Phaser game dev framework using the JetBrains WebStorm IDE. Phaser is a free open source HTML5 game dev framework that has a pretty fantastic community and regular newsletter that I’ve been reading ever since. They also have many cool, actual game examples of Phaser features, like how to use sprites, create scenes, do fun things with their arcade physics, and much more. I found these examples, and their quick tutorial, an intuitive and inspiring way to get to know the framework … at first. Unfortunately, Phaser’s biggest flaw is that its official documentation is quite sparse. Want to look up a method to see what it does and what its parameters are? Cool! Find it in the docs! … But frequently the docs would only give you the name of the method and the names of its parameters — no description of what it was for, what the parameters or options meant, etc. It made debugging a pretty frustrating experience at times — we essentially learned the entire platform by looking at the given examples and experimenting a lot.

The other downside to Phaser was that basically everyone else at the hackathon opted to use the Unity game engine instead, so we couldn’t ask others for help. There was one other group that used Phaser (and they came up with a fantastic and hilarious multiplayer game called Whales Hate Birds), but they were also new to the framework and, in fact, made up of fellow BCS students! So while we chatted a bit, we couldn’t help each other too much since both of our groups were new to Phaser.

On the other hand, I feel comfortable enough in Phaser — and its online community is friendly enough — that I think I could make my own game by myself now, which is neat! I don’t think of myself as a gamer (in spite of many years in middle and high school avoiding my problems with MMORPGs …), but game development requires such a fun combination of creativity, technical skill, and story-telling that I really got addicted. If I meet any artsy/designer friends in Vancouver (I now realize that good art and design is the key to a polished game — we had to get our sprite sheets from the web), I would totally make a game as a fun personal project.

The most fun part of all, though, was getting to know the other hackathon attendees and feeling inspired by their amazing creations. 48 hours allowed us enough time to mingle and explore other projects, and wow — they were all so cool! One game required the player to use the pitch/tone of their voice to navigate the character. Another game was a sumo wrestling simulation where the players had to shift their weight on a balance board to ‘bump’ off their opponent. A few teams also played with some neat virtual reality hardware. Everybody was so creative and had so much fun; the jam’s theme was “waves,” so some people ran with that, but others just did their own thing and rocked it anyway (like we did). There’s something really special about a ton of people giving up a whole weekend to create stuff with the sole purpose of spreading joy and silliness.

What was our game, you ask? We called it Squirrel Adventure: you play a perky little squirrel just trying to collect some acorns on UBC’s Main Mall (the busiest road on campus) while evil cyclists and longboarders are hellbent on running you over during classroom rush hour. In theory, sounds pretty cool; in practice, our graphics were preeeetty amateur since we didn’t have an artist, and our game mechanics accidentally turned into “Super Mario 2D platformer” because that was the easiest to implement. We bit off way more than we could chew!

Fortunately, my team decided to stay healthy and fresh, so we always went to bed at decent times and ate regularly. Other teams stayed overnight (I don’t think I could handle that). This meant I was ready to start up at school the following week without lagging too much.

We didn’t manage to deploy the game, so I can’t share it with you yet, although one of my team members and I plan to figure that out after we’re done our exams in April. Overall, I learned a lot more about JavaScript, working in a team of programmers, version control using git, and the importance of “planning first, coding later” (learned that the hard way this time around). I definitely plan on returning to Vancouver Game Jam 2018 — hopefully with a bigger skill set and maybe even a sleeping bag!

My very first hackathon: UBC Local Hack Day

After a wicked snow day resulting in a cancelled final exam, the unexpectedly highest GPA of my life (so much for “not being a math person”), and abandoning my darling doggo to a Vancouver kennel (my heart breaks for her), I am finally nestled in snowy Ontario with family for a short winter break. I promised in my last post that I would write a little more often while I had the chance, so I thought I’d share my experiences at my very first hackathon, UBC’s Local Hack Day on December 3, 2016.

UBC Local Hack Day is part of the Major League Hacking (MLH) Local Hack Days happening worldwide. Instead of the more typical grungy 24- or 48-hour coding sprint, MLH Local Hack Days are a humane 12 hours long — much better! The organizers provided us with free snacks and pizza, and I even got some shiny new stickers for my laptop:

GitHub and MLH stickers on my laptop.
Sweet stickery swag.

Major League Hacking (MLH) encourages high schools and universities around the world to organize their own Local Hack Day, and UBC hosted one of them. At the same time that I was plunking away at my laptop in Vancouver, BC, students all over the world were doing the same thing. MLH representatives were at some of the larger schools — I think they were in New York, for example — interviewing attendees and generally sharing upbeat quotations and photos. It was pretty fun and lighthearted.

I had the option of joining a team and presenting my final project at the end of the hackathon, but I chose not to. Part of the Hack Day’s appeal was its non-competitive, celebratory and beginner-friendly atmosphere — I wanted the chance to hunker down and work on a personal project in a dedicated environment, without any pressure to actually finish, so that I could continue working on it post-hackathon (indeed, I’ve spent most of today working on it! More on this later.). The introductory speeches included quite a lot of talk about the MLH code of conduct and kindness, which I appreciated.

A few speakers stopped by. Susan Ibach, a Tech Evangelist from Microsoft, was back to talk about Azure and, like the last time I saw her speak, was pretty hilarious. Some students from the UBC Game Developers’ Association gave a helpful talk about version control and GitHub.

In hindsight, I feel like I could have gotten even more out of the event, but I just got too excited by, well, coding. Instead of taking the time to learn from the talks, or chat with the professional mentors, I put my head down and worked for about 11 hours straight. My head was spinning by the end! I think an important aspect of these events, especially since I wasn’t aiming to win a competition, is simply found in the networking. I completely missed that part.

My biggest regret is not staying to hear my peers’ presentations, but I just couldn’t tolerate sitting in that auditorium any longer. Hack Day went from 9am to 9pm; I left at around 7:45pm, right before the presentations began. I needed a break (and a shower).

My next hackathon is the Vancouver Game Jam in January, which is more traditional in length (48 hours!) and definitely team-based. I hope to learn a lot at this one since I’ve never actually developed a game before, but after my experience at UBC Local Hack Day, I also know the importance of taking regular breaks.

“This would probably be easier for you to learn if you were younger.”

My preschool teacher and I. It's all been downhill from there.
My preschool teacher and I. It’s all been downhill from here.

The original plan was to blog about my goals for the summer, but I bring to you an important message on ageism instead!

Ageism:  stereotyping and discriminating against individuals or groups on the basis of their age. (Wikipedia)

Yesterday, someone questioned my ability to learn a new concept because of my age.

The person who made this remark is someone I’ve known for the past year or so and have met several times. It’s not like this was just some random person on the street. They’re a fellow computer science student (traditionally aged) at Queen’s — in fact, normally we agree on many things, like combating prejudice in the tech field.

Anyway, they were trying to teach me the difference between functional and imperative programming. I didn’t catch on and asked a question to clarify.

They replied, “This would probably be easier for you to learn if you were younger.”

(Sidenote: I am always suspicious of a teacher who blames their student’s inability to learn instead of examining their own teaching practice.)

The real surprise here is that I hadn’t encountered overt ageism until yesterday, even if this particular example of ageism was small and kind of hilarious instead of tragic. I can’t control what other people think about my decrepit age, but to any mature student reading this, I’ve got a message for you:

Don’t believe the haters. Believe in yourself!

Age-related cognitive decline is a lot more complicated than the media (and 20-year-old comp sci students) would have you think.

For example, check out “The Role of Aging in Adult Learning” by David L. Crawford at the Johns Hopkins School of Education:

Using a longitudinal study over a period of several decades, Schaie (1994) noted that scores on primary mental abilities improved gradually until about age forty at which time the abilities tend to stabilize until approximately age sixty. The decreases are small until the mid seventies at which time scores are usually measurably lower than they were in the mid twenties. Therefore, when a composite measure of mental abilities is used, learning ability does not decrease until the sixth or even seventh decade for most individuals. The significance of this seminal study seems to be that noticeable overall mental decline in the primary abilities does not generally occur until later in life.

We don’t have to start worrying until our mid-70s!

And while I haven’t read Timothy A. Salthouse’s Major Issues in Cognitive Aging, it’s now on my to-read list because of this lovely quotation (found in Amanda Enayati’s “The aging brain: Why getting older just might be awesome”):

Although there is no shortage of opinions about cognitive aging, it sometimes seems that relatively few of the claims are based on well-established empirical evidence … assertions about cognitive aging may be influenced as much by the authors’ preconceptions and attitudes as by systematic evaluations of empirical research.

In her article, Enayati summarizes Salthouse’s points: “[He] goes on to make two more significant observations about cognitive aging: Discoveries of decline in the laboratory do not necessarily correlate to success out in the real world, and there is often considerable variation among different people of the same age.”

Look, even if this myth of significant cognitive decline starting, apparently, in our early twenties was true (which it isn’t!), does it even matter? I believe our life experience, emotional intelligence, self-awareness, and sense of perspective grant us more than enough wisdom so that, on balance, we are going to do just fine.

So don’t let the haters get you down — even if it’s just a silly little throwaway comment over coffee. Don’t believe a word of it. If you’re on the fence right now and wondering if you’re too old to go back to school — well, take it from me: You are never too old to learn! Don’t let anyone tell you otherwise.

And if anyone does tell you otherwise, the correct response is always, “Yeah, imagine how much smarter I’d be than you if I were your age!”

Then you can listen to some sassy Lily Allen to get you back in the right frame of mind.