blog.karenying.com
blog.karenying.com

Quarantine Day 259: Princeton CS Senior Takes the AP CS Exam

Did I get a 5? My ex-Facebook, ex-Google, ex-Airbnb, ex-boyfriend grades it

Nov 29, 20206 min read

ap logo

When I was a high school senior, I was part of the first Honors Coding class my school offered. Belmont High didn’t have AP CS until after I graduated.

Coding H was a joke of a class that culminated in a final Arduino project. Mine was a “robot” that played one of three Christmas jingles depending on how loud you screamed at it.

I honestly didn’t see CS as an interesting major/career path at that time. Four years later — I run a tech blog and will be a full-time SWE post-grad. How the turn tables.

So for shits and gigs, I decided I would take the AP Computer Science A Exam with zero preparation.

Expectations

I took Princeton’s COS 126 — Computer Science: An Interdisciplinary Approach — my freshman fall. I’m imagining the AP CS exam to cover most of the material from this course.

Throwback to this recruiting season when I got asked what are the four fundamental principles of Object Oriented Programming and I could only name abstraction 🙃

So that pretty much sums up how much I absorbed from COS 126.

From my understanding, the exam is only in Java. Despite Java still being listed on my resume under Skills > Languages, I haven’t touched it in almost two years 🤭 There’s a Java Quick Reference page attached to the exam. I’m not brushing up on Java syntax or properties, and have not looked at a single example question before I take the exam.

The format is as such — both sections are weighted 50% and 90 minutes each:

  • 40 multiple choice (MC)
  • 4 free response (FR)

Unfortunately, there aren’t full past exams released online (MC is always missing). I found a practice exam instead. I’ll be typing into the PDF and making comments as I go. Since this is a practice exam, there isn’t any info on scoring/curving. We will see how I do and try to estimate my score.

Exam Day

Checklist for success:

  • Review the material the night before ❌
  • Get a full night’s rest ❌
  • Eat a solid breakfast ✅
  • Wear comfortable clothes ✅

Let’s get this 🥖

Multiple Choice

MC felt like a goddammed marathon.

I had my guard up for every question. I double and tripled checked my logic because I didn’t wanna get bamboozled. I left a couple of hard/tedious ones to revisit.

The quick reference sheet definitely came in handy.

dis me POV: you’re my laptop watching me trying to context switch between ArrayList and List

Some comments I wrote while taking:

oh no
does casting to an int truncate??
I think so…
if not I’m literally inting

said outloud: oh my god
just wrote out a truth table to confirm that !&& = ||
*attempts*
lmao this isn’t ans isn’t on there let’s try again
ok turns out I read my truth table wrong and !&& != || :( let’s try applying the ! to both sides
*attempts again*
ok at least this answer is on there lmfao
*gets it wrong*

wait what’s the diff between interface and class oh no

omg is this what constructors are supposed to look like

*attempts*
rip this isn’t on there uh
lemme come back to this if I have time
*revisits*
aight take two
*attempts again*
FUCK why is this still not an answer
*attempt #3*
alright we’re just gonna guess

Overall, it just felt really long and my brain became increasingly fried. Some questions were definitely tricky!

Free Response

I forgot you had to write actual Java for this section. I briefly questioned why Java was still on my resume before I started the FR and sent up a prayer to the semicolon gods.

Thankfully, the MC eased me into remembering how freaking verbose the language is. I mostly code in JavaScript nowadays which is syntactically similar-ish to Java? I’ve also been writing C for OS which also definitely helped (Java is a descendant).

This section was way easier for me than MC. I barely had time to check my work for MC but I finished FR with 38 minutes to spare. I pretty much knew how to go about the solutions once I understood the prompts. I would say these were on the same level, if not easier than LeetCode easys. The hardest part was the amount of words I had to read.

Results

I scored 36/40 on MC and 35/36 on FR — which is around ~93.6% on the exam. I would say that’s pretty solidly a 5 on any curve 🎉

I had ex-Facebook, ex-Google, ex-Airbnb (read: a real sOfTwArE eNgiNeEr) … also my ex, Victor Zhou, comment on my results. Check out the marked up exam here. Clean version of the exam is here.

  • Blue: me during exam
  • Red: me grading
  • Green: Vic commenting after

Multiple Choice

I missed 4 MC.

  • #16: definitely just careless
  • #19: I suck at boolean operators and logic
  • #22: didn’t realize that when a subclass is declared as its parent class, it can only call parent methods, and not its own methods damn
  • #23: I misread a for loop bound rip and rode the struggle 🚌 three times

Free Response

Vic told me that nested methods in Java is not a thing:

im pretty sure this doesn’t even come close to compiling

Unclear if I would lose points for that.

The only point I would have lost otherwise is when I divided a double by an int (4) instead of a double (4.0) 🤦🏻‍♀️ ugh strong typed languages.

Compared to the sample solutions, mine were a bit tidier/easier to read because I made sure to create helper methods and proper variable names whenever possible. Perhaps Java will not be ceremoniously yeeted off my resume after all.

Conclusion

I said to Vic:

The exam was way easier than I thought and my results are less interesting than I hoped

to which he replied:

yeah seems like a 5 told u this was gonna be super ez

and that pretty much summarizes this experiment.

Thanks for reading!