Hi Everyone
I'm sharing with all of you that I passed both OCP8 and OCP17 exams. I passed OCP8 on November 14, 2024 and passed OCP17 exam on November19,2024.
I'll honestly share my experience regarding preparation and exam in this post. I'll try my best to keep it to the point and as relevant as possible
for the users of this forum. It can be a bit lengthy post but trust me new test takers will find some relevant info.
My Background: I've a computer science background but due to my negligent career related decisions, I didn't look up for jobs in IT field.
I didn't take career related decisions with consciousness and planning. So, as a result I ended up working in unrelated field to my education (as a pharmacy technician).
I had java OCA certification in 2019 and after that I sidelined my technical studies and job search efforts in IT industry. So, I had been working in pharmacy since mid of 2019.
Some personal life events happened in December 2023 last year and I made up my mind and took a conscious decision to look for an employment in my field of study and clear the long pending OCP8 certification alongside.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A lot of time had been passed since 2019 and java had evolved a lot since I left the books. I initially studied half-mindedly for around 2 months along with full time job and aiming for OCP8 in February 2024 but failed that exam.
Reasons of my first OCP8 exam failure:
Inadequate/shallow level preparation for OCP8 objectivesRookie level test taking skillsUnable to manage test anxiety and lost track of time
So, in March 2024, I decided to give all in to java learning and exam preparation. I made it my utmost important goal and started preparing towards it. I prepared with job till July 2024 but left pharmacy job in July 2024 and committed fully towrards job searching in IT and learning java.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Initial challenges I faced in language learning:
I had lots and lots of questions in my head about why something works/behave in a particular way or you can say how language concepts work internally?
Since, I was dedicately learning a coding language for the first time, everything felt daunting and overwhelming initially. I was even struggling with very basic concepts of java like type casting in interfaces, basic OOPS concepts etc. Collectors API was a whole different universe. Nested and local types felt intimidating
So, there're two paths now-either fight or flight. I had already taken second option as I explained above while choosing career field. I persisted this time and consistently studied daily without a day off. My goal was to thoroughly understand the language concepts to build a considerable foundation for coding and development skills and improve it incrementally.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Topics that took my most effort and time:
Generics in java: This topic gave me the hardest time. It had a steep learning curve especially when one is weak in language basics. From being near zero in this topic , I reached to a point to comfortably code and read java API and Stackoverflow posts involving nested generic code. I read online articles about generics, bounded types and after spending some frustrated hours over months things finally started making sense to me in generics. Point is - keep trying , never quit, try alternative resources, take notes, revise , repeat.
https://angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
( very good resource to understand overriding/overloading related concepts in java generics)
Understanding method references (both bounded and unbounded): Took me some effort to get my head around it. I wasn't able to understand how method argument and target type is being passed behind the scenes. Read a lot of Stackoverflow posts and online articles about it ,but when we learn the concept and hit that Eureka moment we can apply it confidently in coding.
Modules/ Modular JDK concepts: They were intimidating in the beginning but then I loved them. Services, modular jars, ServiceLoader API. I wrote and read code examples to try various services related modular concepts.
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
(very good resource for understanding module concepts with web links to all the JEPs)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
My exam preparation strategy:
First OCP8 failure taught me 2 important things which I'll follow for any time based technical exam in my life:
I need to do justice with all questions in terms of timeSecond, I need to develop coding MCQ solving skills with accuracy for that I need to work on java basicsKnowing how to program in java is one thing and performing under pressure with blazing speed code reading is another skill
So, I started working on it by solving java MCQs daily. I used to
put up a timer and start solving MCQs daily.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Resources I followed:
I relied more on internet resources like JLS, javadoc, JEPs, online coding forums reason- I had lots of questions and my basics were weak in language. So, following any standard exam preparation book like most users on this forum didn't help me much.
I had lack of industrial coding experience but put many hours day and night to up my level in java with determination. I believed I may not have the "natural" learning instincts towards coding but I had the will and determination to improve my situation. That determination motivated me daily to overcome all the challenges in learning java. I believe with self-discipline and determination we can learn any skill in this world if we put in enough efforts and hours towards it. Human mind is very powerful and has lots of untapped potential.
Below is the list that I followed, it's neither absolute nor exhaustive. Everyone can add/remove based upon their preferences. All a person needs to start learning java
is a good working PC/laptop, any one good reference book and a focussed and determined mind.That's it.
OCP book by Jeanne Boyarsky and Scott Selikoff (I followed for File I/O, NIO and modules chapters, I liked the casual teaching style of authors)
OCP 17/21 book by Hanumant Deshmukh ( This book is jam packed with basic concepts of java; very useful for beginners; must read)
Enthuware OCP8 and OCP17 mock exams ( Do they need intro best and to the point)
OCP 17 Mock exams by Udayan Khattry on Udemy (Java Certification (1Z0-829) Topic-wise Tests Part-1 and Part-2) ( Quality content and questions for preparation)
I solved any possible java MCQ I can find/download from internet in test/timed environment to train myself in performing under time pressure
coderanch.com ( The site admins are super friendly to java beginners in terms of responding to queries. I posted some queries and everyone helped me graciously. I'll give back to coderanch community by contributing whatever I've learned so far. I really appreciate your help )
JavaDoc and JLS ( This is the holy book, best friend, soulmate, buddy for a java coder/learner)
I want to specifically give a shout out to this youtube channel:
my name is GYAN (Youtube handle:@mynameisGYAN). It has awesome java content for beginner to intermediate learners. Very thorough, teaching the language core concepts and quality content. No timepass, no bluff---just pure knowledge sharing. Especially videos on Generics and Multithreading programming are of very good quality and to the point.
OCP17 practice book of 1000 questions by Scott and Jeanne ( some questions are really good and thoughtful but some are unnecessarily tricky)
-------------------------------------------------------------
Mistakes I made/ Things that didn't help me: : You can save time by avoiding some or possibly all of these:
Breaking consistency in studiesProcrastination in preparation / Putting off important things for futureWishful thinking without a strategy and appropriate planNot taking notes of my mistakes Not revising my notes Not practicing solving MCQs in time constrained environmentNot coding in java right from the beginning of preparation ( merely reading language syntax is counterproductive and defeats the purpose of learning; aim should be to use the language daily in delivering meaningful use cases)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Things that indirectly helped me:
Not sticking to the exam objectives
I believe exam objectives are broad; my learning style is to build basic concepts; so it triggered a chain reaction of concept learning for me; to learn about the "effect" I had to learn the "cause" first and it lead to increase of my preparation time.
For example: exam objectives say "Use Generics/ Wildcards": It indirectly requires the understanding of "type erasure in java" which entails " use of bridge methods by compiler" which further entails "Type parameters and their scopes" which further entails " Intersection types"---it's a chain of concepts and everything is interlinked. If any one piece of puzzle is missing then concepts will be shaky and one can't confidently answer the question on method overloading and overriding without knowing type erasure. Without knowing the right tool/language construct for the required job how can one even code a solution?
Furthermore, generics are scattered all over in javadoc and I believe without knowing why exactly they're required one can't get full value out of javadoc.
Another example, in exam objectives it says "using textblocks" which indirectly entails knowledge of escape sequences, escape characters, character lierals, whitespace characters, difference in line terminator characters in windows and Linux platform. I mean everything is interlinked.
Another example, in objective "performing reduction of parallel streams" which entails knowing about spliterators and stream characteristics and how encounter order of different collections affect parallel processing in streams.point is --everything is interlinked.
One last example, exam objective of " declaring nested class objects" can go quite heavyweight very quickly due to the addition of Sealed types, Record classes, Local enum classes and flexibilities allowed in Java 16 in terms of declaration of static members in nested types.
Furthermore, topic of "nested types" entails knowledge of concepts like Canonical names of types, Fully qualified and simple names of java types, Qualified this and Qualified super concepts. I mean everything is interlinked. For me, personally, like Maths problems, it's like all or none
approach; either you know the complete concept or you know half-concept (which is a recipe of hidden bug and failure at some time in future)
Nested types and method overloading is embedded all over in javadoc.
Things that helped me in building java basics and clearing OCP exams: Everyone has their individual learning styles. Please introspect and assess accordingly.
Writing numerous coding examples/use cases by myself to understand the API and language behaviorReading JEPs on Modules, Modular architecture, instanceof pattern matching, sealed types, Record classesReading JLS sections selectively for language syntax and rulesReading/understanding java code in problem context/meaningful use-case context on online forums (Stackoverflow/coderanch/Reddit)Taking coding notes and revising them regularly to familiarize with language Coding daily in java (This is absolutely must to build muscle memory in language syntax and API usage)Reading countless javadoc pages and method API descriptions
My strategy in exam preparation and during attempting exam questions: I'm sharing these tips as a java beginner not as a professional java developer, since this exam has variety of test takers of all sort of professional backgrounds.
If you've coded enough java examples while preparing, read java code on Stackoverflow posts and solved enough MCQs in a timed environment; you develop a skill to quickly read java code in exam.
If you've thoroughly understood java core concepts like type casting, Generics, OOPS concepts, runtime method dispatching, compiler's algorithm to select appropriate methods AKA static bindng,JVM runtime class and insatance initialization mechanism---then you will easily smell wrong java syntax by merely seeing it in exam options and thus eliminating wrong answers.
Don't trust the mind. Test the mind. Give it code to solve, MCQs to figure out and see its response under time constraint. Benchmark the score and see where the trajectory of preparation is leading. Consistent good scores in random tests on random days say themselves a lot about one's preparation. Numbers never lie.
When I solved MCQs during preparation, I divided 90 minutes to 3 chunks of 30 minutes each. I had set a mental goal of solving
at least 19-20 questions in first 30 minutes with as much accuracy as possible. It used to help me in getting a head start and slow down gradually in next remaining 1 hour so that I still have 8-9 minutes in the end to review questions I marked. It helped me keep track of time. There will always be an inherent tendency to answer a question incorrectly in exam despite knowing the concept due to exam stress, time , inability to recall API at right moment, but that's OK. That's why mock exams are for -to minimize that tendency but it will always be there. Exams are exams. We adapt, we train accordingly.
***Both OCP8 and OCP17 are code heavy. Code is jam packed in snippets especially in OCP17. There were long coding snippets at the start of my OCP17 exam. One need to be fast and accurate at the same time. Quick API recall and mental code execution is a skill that comes with practice. So, especially for beginners like me ,read and write enough java code at home to train your eyes not to get bogged down when clock is ticking on your head unless you're a professional software developer with some experience.***
Practice writing code a lot. It has no match. Literally, no match. I initially used notepad and cmd to code and understand modules. I wanted to train my brain to learn command line switches related to modules, JDEPS, JLink and jar files. It was fun. I also learned about jar creation, jar decompression and jar manifest files indirectly while learning modular jars. Gradually, I shifted to IntelliJ reason- it was more efficient and provided option to hover and read javadoc right way thus saving time. One hour of mindful coding with focus is better than reading online articles on java or watching youtube videos (without quality content) on java.
I believe reading java certification prepartion books and knowing java syntax/rules is necessary but not sufficient to clear the exam and build the concepts. Only when we start typing code, we come to realize our false positives in learning. It's important to test ourselves frequently to know what we think we know but actually we either don't know or half-know. Only when weird Runtime exceptions and compiler
errors are slapped on our face; we tend to know the gaps in our knowledge and do efforts look for missing pieces of puzzle/answers online. It helps in solidifying learning and retaining concepts longer.
Then there comes a point in learning when that blinking little cursor on Intellij console, every whitespace character, comma, dot, semi-colon start to talk to you (kidding but you got the feeling) you feel like crossing that threshold point or plateau in learning, after which things/concepts tend to become very very niche/specific, you feel like having some control and command over the language use and you've enough test data from mock exams to backup your thought ( atleast 80-85% score in mock exams). Now you're ready to put your hard earned money and book the official exam.
Be honest to oneself, we know honestly where we need to work upon whether in studies or in life in general. I tried to fix one thing a day or atleast one can take an honest small little step towards fixing something. then inch by inch , day by day things start to fall into their place. Persist, resist and never give up. Scores may be bad in one mock exam on any random day. But ultimately we learned something out of it. Things change, stick to the path of honesty and truth. Only truth prevails. Enjoy learning while preparing. Not everyone gets a chance to learn
and study on mother earth. Happy learning and coding