The Spring Equinox and making (lots of) mistakes

Okay, so you can’t tell by the weather outside right now — freezing rain in Kingston for the past 24 hours — but since Sunday, March 20, we have officially returned to spring. (March 20 was also World Story-telling Day!)

March 20 was the Spring Equinox, also known as the Vernal Equinox if you want to be fancy. We have two equinoxes per year, in March and September, and on each of those days our sun shines nearly directly on the Equator. This means that on the equinoxes, day and night are virtually equal in length.

Equinoxes are heavy with symbolism. The Spring Equinox heralds our days finally thawing and growing longer than our nights. This means sunshine! Warmth! Hope! Flowers! Mud! (I genuinely love mud — no sarcasm here. Really. I mean it. Gosh, everything on the Internet sounds sarcastic, doesn’t it?)

What does this have to do with academics and mature students, you ask?

Well, one thing the equinox always reminds me is that my life (and probably yours, too, unless you are supremely lucky, in which case what is your secret?!) follows a pattern of good/bad, fortune/misfortune, happiness/sadness. And only two days of the entire year are actually fully balanced like that! The rest of the time, we are either leaning more towards one than the other. That’s just the way things go.

Here, where I am Supreme Narrator and Blog Overlord, it’s easy for me to ignore or hide the shadowy parts of my life. Many people do the same on Facebook, Twitter, and other social media:

But the Spring Equinox (and its sister, the Fall Equinox) always brings me home to realize all the unpleasant stuff has a place in my life, too. I re-read my blogs and noticed that I haven’t shared any unpleasantness yet. How’s that for balance?

So, here is a little academic unpleasantness (and how I cope with it).

In my current course, we have two midterms and a final exam. On Tuesday this week, we just wrote the second midterm. I left the midterm feeling great! In fact, I left also feeling pretty baffled by how great I felt — the midterm was very short, seemed pretty straight-forward, and many of us left the exam much earlier than the time allotted.

You can almost here the Jaws theme in the background, right?

Turns out I flubbed one of the questions (there were only three questions to begin with), and it was a totally avoidable mistake, too.

Being a perfectionist, little things like this can take a big toll on me. Even after literally decades as a student, I still sometimes have a tough time separating my self-worth from my academic performance. Almost every day I chat with students at Queen’s who face the same challenge — and I empathize so much, because I’m the same way!

So what do I do when it’s time to bounce back from a setback?

Try not to think about it for 24 hours. I find a good night’s sleep almost always makes me feel better. Also going out with friends and not talking about school, or going for a run or rock-climbing. I’ve flunked enough times — academically, personally, name an area of life and I’ve probably screwed it up at some point — that experience has shown me time will heal (or at least dull) almost everything.

Put it in perspective. Most academic setbacks don’t matter too much in the long run. In my example, this is just one test, in one course, out of an entire degree. True, sometimes a mistake may close some doors — medical school, for example — but the nice thing about life is that there are so many more options than we realize. If med school doesn’t work out, that’s not your last chance for a meaningful life.

Make it meaningful. Once the initial sting has subsided, I like to think about what I can learn from the mistake (if anything). In this case, I didn’t actually study very much for the midterm, and I especially forgot to review this particular concept. If I could go back in time, would I study more? … Maybe. I do work full-time, after all!

Remember mistakes are inevitable. Sometimes, just reminding myself that absolute perfection is an impossible goal — everyone will screw up sometime, somehow — is enough to restore my equilibrium. No one manages to get through a lifetime without making a ton of mistakes along the way.

So happy springtime! May we all make tons of mistakes this season so we can appreciate when we get it right even more.

How I solve small assignments in my computer science class

Millie chewed up some old headphones. She doesn't recommend listening to music while programming.
Millie does not recommend listening to music while programming, unfortunately. Too distracting.

Right now I’m enrolled in CISC 124, a first-year computer science course at Queen’s on object-oriented programming in Java. This is the third computer science course I’ve taken at a university level. In every course so far, instead of writing one massive essay at the end of term like in my past life of English literature, the professor requires us to write many small computer programs and submit those throughout the term. (There may also be midterms and exams, but those are not the purpose of today’s post!).

This week, I finished writing my fourth program for this course, and I want to share the strategies I’ve found helpful so far. Keep in mind that these strategies probably best apply to small programming assignments as opposed to actual projects, and I’m always learning more about the process!

Rewrite the instructions

In CISC 124, the assignment prompts tend to be pretty wordy. I like to read through the prompt and actually re-write what’s important on a separate piece of paper. I tend to do this in a visual way; I use mindmaps to signify the relationships between different classes and methods (the ignorant student’s version of UML!), and I create tables that compare the purpose of each method if some of them are pretty similar. I need to be able to explain, in my own words, what the program I’ve been assigned to write actually has to accomplish.

This step is less important for simple assignments that I can immediately wrap my head around, but for assignments with parts or algorithms that I’m not 100% on yet, I find this step is surprisingly helpful. I’ve come to realize that I am very bad at mental visualization, so verbalizing in words and writing things down is a lot easier for me than trying to imagine mentally. (I learned a lot more about visualization from The Mind’s Eye by Oliver Sacks — very cool, check it out.)

Shuffle a deck of cards in your hands

Okay, this is maybe one of the weirder strategies I’ve come up with. I mentioned above that I find visualization pretty difficult. This makes imagining even basic search algorithms tricky for me. The best way I found to combat this, weirdly enough, was to pretend that I was actually holding a deck of cards (a real-world array!) in my hands and sorting them according to the algorithm. This helped me articulate what was actually happening in the algorithm so that I could then write it in a program.

When I first started using nested for loops, I used this same method. I never actually needed to hold objects in my hands for it to work; it was enough to move my hands around and pretend I was shuffling things. I found this physicality a lot easier than completely imagining what was going on. I think this is why I find math so much easier to do on paper than in my head.

Code with a plan

When I first started writing these assignments, I’d often dive right into the coding part without taking some time to plan the program’s structure. Now that we’ve covered polymorphism in CISC 124, though, I find it much more helpful to plan out the program in advance — how will I break down the methods, classes and variables in a way that makes sense. I normally do this on a piece of paper. This helps me avoid a lot of refactoring or debugging from careless, avoidable errors.

On my latest assignment, it was extremely satisfying that I was able to compile and run the whole program successfully after just one go, passing all my tests. The saying is “measure twice, cut once,” and it applies equally to coding!

Move from top to bottom

When I want to work a little more quickly, sometimes I’ll cheat by doing the planning directly in the .java files as opposed to a piece of paper. I’ll create all the headers for the classes and methods, and include in comments what each one should take as a parameter and what it should return. Then I can start filling in the blanks.

There is something very pleasing about finishing up a program’s skeleton like this! I always got a similar feeling when I finished outlining a paper, but before I started writing it. It’s sort of like, “Okay, the assignment is now basically written, right?” You get a nice sense of the assignment as a whole, and filling in the gaps doesn’t seem as tall of an order anymore.

Talk to yourself if you get stuck

Sometimes, despite all my planning, I’ll still get a little stuck on something. This normally happens when it’s a concept I didn’t pay much attention to in-class (likely because I was tired, thinking about something else, or missed the lecture for work). My go-to solution for this is always to talk out loud to myself. I do this for math problems, too. Starting at a point in the program where I feel confident in my code, I’ll talk myself through what is happening.

Sometimes, it’s the syntax that throws me off instead of the concept (a prime example is Comparators from this past week). In cases like that, I’ll talk out loud in pseudo-code about what I want the program to do, write down that articulation, and then look through the professor’s sample code or lecture slides for something that looks like it might be able to accomplish (or be tweaked to accomplish) my end goal.

So far, at least, this has always worked. I’ve come to rely on this a lot in my darkest coding moments.

Revisit the assignment instructions

Whenever I finish the assignment, I have a little dance party with the dog. But I don’t stop there. I always make sure to look back at the assignment instructions, and this time I treat the instructions as if it’s a checklist. After every sentence, I ask myself “Did I do this in the assignment?” If I’m at all unsure, I review what I wrote and revise as needed.

The more complicated the assignments get, the more this step becomes essential — it’s very easy to miss something small. For example, in this latest assignment, there was one little sentence toward the end that said all our variables should be private or protected. Easy to miss — but very important!

I haven’t done much research into why these strategies work for me. I think it has something to do with the limitations of working memory and my personal coping mechanisms for being terrible at mental visualization. Maybe that’s a blog post for another time.

On another note, I’m sorry I missed a blog last week! The week flew by and I forgot all about my commitment to a weekly blog.