5/14/2020 update: College Board contacted me to remove all copyright materials so some links might be dead 😬
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.
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!