My last Java certification is the SCJP 6 from 2010, so when the OCP 17 came out, I thought it high time for a refresher. I am setting aside an hour every day when I’m at my brightest, which is after coffee and before breakfast. I’ll share my personal study tips later, but it’s more credible if I first pass the exam. So, I found another topic to distract me from my studies that I want to dwell on. It’s the effect that modern IDEs and resources like Stack Overflow are having on our brains. Once you dig into the 900+ pages of schoolwork that is the OCP Study Guide, you’re painfully reminded that they have been making us lazy and maybe even a bit stupid.
Granted, the sheer number of facts to digest would have been less overwhelming if I had kept up more closely with the state of the art over the last decade. Several new features have been added, of whose existence I was at best only aware. After fifteen years of using Java, you tend to rely on tried and tested ways, for which there is no excuse of course. It’s a classic example of not sharpening the saw, so shame on me.
You’re forgiven for not knowing how to obtain a scheduled thread pool executor by heart, but it’s also much more basic stuff we keep forgetting just as easily. Our IDEs are too helpful. Experience doesn’t count for much. Long exposure without the inclination (or need) to absorb amounts to zero learning. I cannot tell you my mother’s cellphone number, even though it’s staring me in the face whenever I tap it in my favorites. I have no need or wish to remember it. Therefore, I take my time to let the OCP subject matter sink in slowly, at a pace of an hour a day. During these sessions, I have a flashcard app handy for questions to my future self and an IntelliJ window to play around with the code from the book.
We’re Spoiled Beyond Belief
Some of these spot-the-error snippets are real brain teasers. Don’t copy and paste them into the IDE before you’ve worked out the answer, because the IDE beats you to it. Anything that won’t compile is flagged and nicely explained, plus all manner of bad habits, code smells, and likely runtime errors. It’s getting impossible to write bad code – only joking. But we are spoiled beyond belief. Each new IntelliJ release frees us more of the need to think for ourselves; or should that be robbed of the need?
The power of modern IDEs to deal with huge code bases that would be impossible to manage otherwise is a blessing. It’s almost the mental equivalent of digging a hole with a hand shovel compared to sitting behind the controls of a Caterpillar monster, but let’s not stretch the analogy. Sure, it’s better to mechanize slow, arduous, and backbreaking labor. Most of the IDE features we love are labor-saving, rather than creativity-enhancing. However, an hour saved in that way is not automatically converted into more creativity.
Writing lines of code (let alone designing architectures) is still a creative act that requires judgment and intuition that the IDE can’t help you with. It can wave red flags using metrics like class/method size, coupling, and cyclomatic complexity, but it won’t stop you from making a sticky bowl of spaghetti. How’s that? Navigating a huge repository without an indexed search is not only painful, but it’s also impossible. It’s great that you can jump from anywhere to anywhere, but with good isolation and loose coupling, you wouldn’t need to. Poor code that is only (barely) manageable with brute force search has no right to exist. It’s exactly because IDEs are so great at locating the proverbial needle in a haystack that a lot of terrible code is produced.
Can You Still Use a Paper Map?
Some seasoned developers pooh-pooh the OCP’s usefulness because it does not test your design acumen, only your skills at solving far-fetched puzzles as a human compiler. I disagree. Picking apart educational code samples sharpens your mind. The OCP no more turns you into a human compiler than primary school writing and arithmetic turns our children into little spell checkers or abacuses. This is just basic stuff you should know. Nobody’s expecting you to dump an optimized merge sort algorithm on a whiteboard, but neither should you be completely clueless without autocomplete or real-time error highlighting.
The more tedious brain work you offload to the machine, the more those mental skills atrophy. Can you find your way around central London/Paris/Amsterdam with only a paper map? I can’t anymore, and I’m not happy about it. As you lose the appetite for rote learning, you lose the capacity to absorb new facts, and more is lost than just data points. Intuition and judgment grow and mature from the knowledge you have amassed and consolidated, but only if you give it time to stick. Mastery of a foreign language is a good example. Depending on your aptitude and motivation you can make simple conversation within months, but to have a near-native intuition of linguistic nuances takes many years of dedicated effort. Exposure is not enough.
When Everything Is Handed to You…
There’s something about the slow, clumsy hassle of looking up a word in a dictionary that makes it superior to a Siri query: you try harder to commit it to memory because it’s annoying to look it up a second or third time. I don’t believe digital gadgetry would have much improved my vocabulary or fluency when I started my English degree in 1990 and all we had were books. When everything is handed to you, it’s only worth as much as the time put in, according to philosopher Miranda Lambert.
The human body is an energy-saving device. It doesn’t like to expend unnecessary effort, whether physical or mental. Brains and biceps burn the same calories, by the way. Yes, remembering the options of common Docker commands is dry, but is it so arduous that you must always rely on Google instead of your own brain? It’s paradoxical too, because the desire to excel at something difficult and not very useful (like competitive memory), is also a very human trait. We wouldn’t have had the Apollo missions if our species’ tendency was only about saving energy.
General-purpose AI still hasn’t made your job redundant, but it won’t hurt to be prepared. Don’t give in to the lure of the machine too readily. George Orwell already warned us in 1937:
And yet so long as the railways exist, one has got to travel by train — or by car or aeroplane. Here am I, forty miles from London. When I want to go up to London why do I not pack my luggage on to a mule and set out on foot, making a two days of it? Because, with the Green Line buses whizzing past me every ten minutes, such a journey would be intolerably irksome. [..] No human being ever wants to do anything in a more cumbrous way than is necessary.
– From The Road to Wigan Pier