Does the OCP Exam Still Make Sense?
Oracle's tough OCP 17 exam is about much more than Java knowledge. It's a sobering reminder of how dependent we have become on our favorite (AI) tools.
Join the DZone community and get the full member experience.Join For Free
Much has been written about the impact of AI tooling on software development, or indeed on any creative endeavor. Some of those blogs may already be written by AI, who knows? If the benefits for mundane coding tasks today are any foretaste of what lies ahead, I dare not contemplate what the next year will bring, let alone the next decade. I’m not overly worried. The price of job security was always continuous upgrading of your skillset - which is why I’m studying for the Oracle Certified Professional Java SE 17 developer exam. The OCP is reassuringly and infuriatingly old-school. It grills you on arrays, shorts, ObjectOutputStream, the flip bit operator ~, and much you’re probably not going to write or encounter. What is the point? I’ll tell you.
On the one hand, the programming profession has changed beyond recognition from when I started in 1999 and long before that. I look forward to veteran Jim Highsmith’s upcoming book Wild West to Agile. It’s supposed to be liberally sprinkled with personal anecdotes from the era of punch cards and overnight compiles. The teasers remind me of the classic Four Yorkshiremen sketch by Monty Python, boasting how tough they had it. “We lived eighteen to a room! – Luxury! We lived in a septic tank.”
On the other hand, much less has changed at the level of methods and classes or loops and logic, despite the mushrooming complexity and range of APIs and tooling. Real language innovations are rare and the challenges for learners remain the same. Autocomplete doesn’t make understanding a tail recursive function any easier, but before Stack Overflow, it made sense to memorize such common patterns, because it was too much bother to look them up. It still makes sense.
Professor Dijkstra Would Not Approve of Copilot
You can safely assume that a famous Turing award winner like Edsger Dijkstra (1930-2002), would have been horrified by GitHub Copilot. He preferred doing his mathematical proofs on a blackboard and believed that software engineering had little to do with academic computer science and that the latter was not even about computers. After all, we don’t call a surgeon’s work "knife-science."
Studying for the OCP means honing your Spartan mindset. Taking it unprepared, even as an experienced developer, is a waste of money. You will fail. Because it’s not a test of your design intuitions or clean coding hygiene. It calls on your knowledge of arcane details and APIs, but even more on your short-term memory skills to grasp some quite insane code. Boy, have these skills gone rusty! I wrote earlier that IntelliJ has made us all a bit stupid and it’s true.
I’m still making plenty of mistakes. Factual knowledge gaps don’t trip me up anymore, but the time constraint does. The two-minute average you can spend on each question is tight. Yes, there are short questions requiring a single answer, but they don’t offset the ones with convoluted sample code, where you rack your brains for five minutes over the effect of changing one statement and fail to spot the missing semicolon after a switch expression, so the whole mess would never compile.
Three Reasons Not To Bother
There are reasons not to bother with this self-torture, but there’s a flavor of cognitive dissonance to them. They’re attractive to let yourself off the hook.
First, what’s the point of playing human compiler and virtual machine over code samples that solve no real-world task and are only designed to confuse? The point is to train your mind muscles, to sharpen the saw. Nobody disputes that IDEs and their real-time compilation warnings are a great productivity boost. Nobody edits a big Java project in a plaintext editor. That would be inefficient and error-prone. But you want to know what you’re doing and at least understand the warnings. I don’t do dumbbell exercises for the sake of dumbbell exercises. I do them so I can still lift my own groceries when I retire.
Secondly, neither this OCP nor any of its predecessors teach you how to write clean code, much less design a complex product. It has nothing to say about testing. It’s a thorough foundation of the language toolkit, but no more. Calling the exam inadequate for that reason is a strawman argument. You pooh-pooh it for not teaching you something it never claimed to teach you in the first place. If you take an advanced French grammar course, it won’t teach you how to write a novel either.
A third bone of contention is the OCP’s focus on little-used and legacy features. Who uses serializable object streams when the whole world has been using JSON for years? Well, there’s an awful lot of twenty-year-old, pre-version 5 legacy around, and you shouldn’t be taken aback by it. Also, in the makers’ defense: deprecated features or ways of working do eventually make their way to the exit. The SCJP 6 I took in 2010 had some tough questions on low-level thread handling, all of which are now abstracted behind the concurrency API. We can expect arrays to go the same way, but no time soon.
To Be Continued
I have much more to say on each of the topics I raised, so I want to make this a series of blogs. I want to explore and explain my personal motivations throughout the process and hope to share useful advice on how to make the journey a success. The aim is not cramming to get a certificate and promptly forget what you learned. You’re not in high school. The aim is to respect the importance of certain mental skills we shouldn’t allow to get rusty. This will make you a better and happier software developer.
I have the following topics in mind for the next months.
- Motivation and the "okay point." Do you enjoy learning for learning’s sake, or is it a means to an end? If so, you will master the bare minimum you need to get the job done and give up once you reach the okay point. This happens to seniors, especially when they are burdened with many non-coding tasks.
- The only effective way to learn is to make it fun, compelling, and practical. Always learn with the IDE at your side and disable all the clever assistants.
- I’m compiling a collection of mnemonics and rhymes, which I hope to expand. When it comes to remembering, the sillier and crazier the better – actually, the lewder the better, but I’ll leave that to your own imagination.
Opinions expressed by DZone contributors are their own.