December 2022, just before Christmas. My wife asks me what gift I'd like to receive this year.
- Hmm, dunno. Maybe I could start learning programming? I've heard about this cool course with a lot of practical tasks. You can get it for me.
September 16th, 2024. I have just signed a contract for the junior java developer position. Life is good.
---
Let me tell you a story of my adventure which started right here and ended up as told above. But first things first.
Born in 1985, Polish. My first touch with the code happened in high school, it was Pascal. I thought it was interesting and considered studying CS, but for some convoluted reasons I chose Mechanical Engineering instead. That was the time when I practiced some C++.. and then I quit programming for 15 years. After my graduation I traveled a lot, worked here and there, finally ended up in China teaching English for a living.
It was a nice time, but (due to the pandemic) I had to return to Poland where my former job wasn't as promising and I had to think about the alternative. It was Java.
---
Dec 2022 till Sept 2024 makes 22 months, nearly 2 years. Why did it take so long? - you could ask.
Well, when I was doing my first steps here I was reading other success stories about people who found their jobs around level 20 and thought I could do the same.. but this train has already departed.
You know, not so long ago, there was a period where companies were fighting for programmers, even beginners. Not anymore though. You've got to show some real skill, passion and persistence to get your first job these days. Only knowing the programming language won't suffice.
What else then?
---
Honestly, it took me exactly 12 months to get from level 1 to level 41 in CodeGym. Of course, there were weeks when I was studying every day, but there were months when I didn't have time for a single task too. Life.
After completing this course I made 2 independent projects: a simple puzzle-like game and an app to help evaluating IT job candidates. Both in pure Java (with Swing for visuals). I placed them in my CV and started applying..
It was such a waste of time! One month, 150 resumes sent and not a single interview!
So what to do?
---
Since I've already been there, let me sell you a few tips what you should do after finishing this course:
1. Socialize
Use social networks (LinkedIn, Facebook groups, local Discord channels for devs) to collect contacts, especially other Java developers and recruiters which can share some valuable insight or hiring info. The sooner you start this, the more recognizable you get when you begin applying.
2. Write and independent project.
Just for yourself, to conclude the study, to prove yourself. Think about something, code it, make it work. No hints from John Squirrels and his crew, no peeking at the correct answers. Only you and the IDE (...and Chat GPT but don't rely too much on it for your own sake). If you haven't played with Git yet, do it now - learn how to set up a repository, commit/push changes, merge branches and resolve conflicts.
3. Switch to Udemy
Since CG is done, find another source of knowledge. YouTube is ok, but I often find it difficult to search for really valuable content in the ocean of crap. Udemy suits me much better, you pay for the course = you can expect higher quality. It ain't much, discounts are common, for $9.99 you can get many great courses. Start with Spring Boot.
4. Before you send your first resume
Familiarize yourself with:
- Design patterns
- Popular Algorithms
- SQL
- Testing (JUnit, Mockito)
- REST
- Spring Boot & Hibernate
- Kafka & RabbitMQ
- Docker
- Kubernetes
- CI/CD
- Cloud services (eg. AWS)
- Architecture (MVC, Ports&Adapters, microservice)
It seems a lot but remember: you don't need to be an expert in this. Each subject requires a few-hours Udemy/YT course and some practice. The items above occur often in job requirements so you'll be able to apply with more confidence.
5. Read
Sitting at the computer for hours can be fatiguing, so find another ways of study. There are a few books I can recommend to get familiar with:
- Head First Design patterns (Eric Freeman, Elisabeth Robson)
- Head First SQL (Lynn Beighley)
- Clean code, The clean coder (Robert C. Martin)
- Effective Java (Joshua Bloch)
- Grokking algorithms (Aditya Bhargava)
- The Phoenix Project (Kevin Behr, Gene Kim)
The above are informative AND interesting too (in opposite to "Thinking in Java" which I am still struggling with).
6. Start a "real" project
The next step is to include the knowledge you acquired in something you can show in your resume. The more unique idea for the project the better, try to stand out from all the CRUD and To_do_lists made by other applicants. Use various technologies. In my case I used:
- Git/GitHub + Jira for work management
- Java 21 + Spring Boot
- Hexagonal architecture with Gradle modules
- Hibernate + Postgres SQL
- REST API + Swagger documentation
- Keycloak for auth
- Docker + Docker Compose
- Deployed on AWS EC2 Instance
- Spock and Postman for testing
Fun fact: I didn't even finish this project before I got hired! Just start doing it and once you have something to share, begin applying. Apply and develop simultaneously.
7. Prepare a good resume
One of fellow devs which I found on LinkedIn shared his personal project: a webapp for easy resume creation (greatresume.app). It is a real GOLD as it allows to quickly prepare and alter your resume. And you will send a lot of them which, believe me, takes shitload of time. Use Chat GPT to generate your bio and project description, include technologies you're familiar with and any other valuable assests you have.
Keep applying (even for mid/senior positions, they may need a rookie too) and don't give up. My count closed at 438 (including these 150 premature applications mentioned earlier), and I was sending about 10 per day. It's a game of numbers.
---
To conclude this lengthy article let me describe a day from my work as a junior engineer:
I get up, help my wife send kids to preschool, make myself a breakfast and eat it while checking work mails. Yup, working from home is the best!
Oh, I got a mail from a senior dev from my team that my yesterday merge request was rejected due to some PMD errors in GitLab pipeline - I left a few unused imports. Classic me. Quick fix, commit, push and done.
Let's check what task do I have for today.. Hmm, I need to prepare an endpoint for one service method, add few RestAssured tests and update the documentation. Ok, let's check the code first.
At 10AM break, we have a kanban meeting. Team leader does some small talk, then describes current problems. Something with Kafka synchronization issues and virtual threads. I don't get it all yet but every day is a step closer to understanding.
After the meeting I do my task, but at 12AM have a Spanish class, free learning lanuages is one of the benefits in my company.
Around 2PM s colleague from another team asks me to help with testing some function I implemented earlier, she's not sure about the JSON structre and valid testing data.
I've finished the task for today, I pushed it and I'm waiting for code review. In this free time I am watching an Udemy course on cryptography, my next job is something about some eliptic curve and I have absolutely no idea what's that.
At 4PM I get the kids from preschool and we're going at the swimming pool together. Yup, flexible working hours are the best!
In the evening, I check the code review and get advice to extract some code I placed in RestController to a separate Factory class, everything else is ok. Fix, git add, git commit, git push and the work for today is done.
---
So, to sum up:
- Am I glad I started learning Java?
- Definitely, it's the best job I've had so far!
- Is programming for anyone?
- Definitely.. NOT. Don't start this if you're here only for the money. It's not an easy way.
- Am I afraid AI will replace me?
- If AI replaces programmers, no other job will be safe either.
- Is CodeGym a good place to start?
- Well, you can begin with Udemy which will be cheaper (but far less efficient), or private mentors (the fastest but the most expensive, and you need to know someone you can trust). Still, considering value/cost ratio I can't see a better way to start your adventure with Java other than here.
GO TO FULL VERSION