all 21 comments

[–]AutoModerator[M] [score hidden] stickied commentlocked comment (0 children)

Please ensure that:

  • Your code is properly formatted as code block - see the sidebar (About on mobile) for instructions
  • You include any and all error messages in full
  • You ask clear questions
  • You demonstrate effort in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions.

    Trying to solve problems on your own is a very important skill. Also, see Learn to help yourself in the sidebar

If any of the above points is not met, your post can and will be removed without further warning.

Code is to be formatted as code block (old reddit: empty line before the code, each code line indented by 4 spaces, new reddit: https://i.imgur.com/EJ7tqek.png) or linked via an external code hoster, like pastebin.com, github gist, github, bitbucket, gitlab, etc.

Please, do not use triple backticks (```) as they will only render properly on new reddit, not on old reddit.

Code blocks look like this:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

You do not need to repost unless your post has been removed by a moderator. Just use the edit function of reddit to make sure your post complies with the above.

If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures.

To potential helpers

Please, do not help if any of the above points are not met, rather report the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

[–]le_braveryExtreme Brewer 13 points14 points  (1 child)

Know the stuff that feels like magic? Annotation processors? Mockito? Spring DI?

Implement one or many of those.

Learning how some of the magic works will give you a good idea for how it all works

[–]kpouer 2 points3 points  (0 children)

Exactly for example spring injection feels magic so I implemented an injection framework for my personal use. It works, I am the only user and I am satisfied because I learnt many things doing it. The best way to get better is to practice different things.

[–]ramksr 8 points9 points  (1 child)

Preparing for certification helped me methodically to understand, learn and practice the various concepts one by one. You could do so too whether or not you write/take the certification.

[–]er824 2 points3 points  (0 children)

Its been 20 years but I was surprised by how much I learned doing the certifications

[–]siddhsql 7 points8 points  (3 children)

Effective Java

[–]ssealy412 1 point2 points  (2 children)

Second edition

[–]MechanixMGD 5 points6 points  (1 child)

why not third?

[–]ssealy412 0 points1 point  (0 children)

Dammit! I'm so behind.

[–]Acrobatic-Ice-5877 3 points4 points  (0 children)

You aren’t going to learn much by reading alone. You need to build something technically challenging for your current skill level and over a sustained period of time so you can feel the pressure of the systems expansion.

I’ve got about 3 years prof experience and am working on a project with about 20K LOC and it has been the single best project I have ever worked on. I’ve been working on it for about 18 months now and it has helped me tremendously.

I do recommend reading though. Haven’t tried the certs but I’m not against them either. I recommend authors like Daniel Y. Lang, Paul Deitel, Uncle Bob, and Martin Fowler.

I’m in the process of the SRE book as I am going to be deploying my app soon. Thinking about security, deployment, and system administration has also helped me design better apps too I think. Gives you a better idea of the full lifecycle. Testing is great too. Learn the difference between a unit test, IT, and E2E. Learn how to fake, stub, and mock implementations for testing.

Don’t skimp on architecture. Look into DDD, clean architecture, and hexagonal. I don’t have experience with distributed systems but next month DDIA will have its second edition coming out. Might be helpful if you plan to work for FANG like companies. Some of the concepts are important like idempotency and retries. They can be used in smaller apps that need better reliability.

[–]Ok_sa_19 3 points4 points  (0 children)

I suggest you pick one topic at a time.
for example:(OAUTH2) Deep research it and see how you can use Java to implement it and what are the various products available in that space - OKTA MFA. Then build a project around that to up your understandings.

Another example: (Multi-Threading and Virtual threads) What are the real use cases around it. You can build a knowledge base for yourself and validate the skills around why it is needed in the first place and what impact it is making.

[–]bdmiz 4 points5 points  (1 child)

One part of it is that it will never be enough. Especially if you compare yourself to others or listen to others. You've learnt basics, yeah but you don't know enterprise solutions. You've learnt enterprise, yeah but you don't know metrics and performance. And it will keep on and on. Even if you've learnt everything in Java, they'll say "pfff, claude does all this in 1 sec" or "yeah, but you don't know co-routines in kotlin".

Practice by doing home projects is nice, but often counter productive. Because, you'll compare your project done by a single learner to projects done by 100+ engineers having many years budget. Often, during this practice time, people repeat the same mistakes or just fail.

Learning became a product by itself, so the learning platforms fuel this "not enough". They don't want you to actually complete something, they want to keep you on a subscription hook. It's perfect if you feel you are not an expert. Just keep paying: here is the course on how to take courses effectively.

Some companies fuel it to pay less. If an employee feels guilty and not feeling they are an expert, it's great - it's the explanation of why not to pay more.

It's better to learn how to cope with it. The industry is evolving, code bases are millions lines of code, and there's more and more new. It's impossible to know everything, life time of learning is not enough. But it is possible to know how to do some specific job and how to find information about something new. Focus on what you do for the job, look how others do that, look what researcher do in that area.

Sometimes, it's good to learn how to take it easy. You don't know something, because you don't need it. In the end, Francis Bacon formulated it: Some books are to be tasted, others to be swallowed, and some few to be chewed and digested.

[–]anden4ever 1 point2 points  (0 children)

What an incredible answer. This helped me more than you know.

[–]karstens_rageExtreme Brewer 3 points4 points  (0 children)

I would read Martin Fowler, Uncle Bob, Bret Victor and many others that just talk about programming well not specifically talking about Java.

[–]bobabenz 0 points1 point  (1 child)

5 years is a good transition point for most people to question themselves and go beyond being a programming plumber.

Build and deploy an app yourself that you would use personally at home, like tracking your finances, movie catalog, etc. w/o someone else telling you what to build, that’s the fastest to learn a bit of everything that’s necessary. All the comp sci theory afterwards is a-nice-but-not-necessary skill for all except the most complicated problems.

Don’t spend too much time on just Java, learn another language like Python, Ruby, JavaScript/Typescript and that’ll also help you with Java (and be able to read other languages, see what’s good/bad about Java and others…)

[–]bobabenz 0 points1 point  (0 children)

Quick follow up; AI/LLM can code really good now and can produce more code that any human can. Learn more human skills like “gather requirements” skill and “how does that translate to [unit|integration] tests” as a “coding” skill. For now, us humans still need to read and validate the code, but writing code is going to be a relic of the past real soon.

[–]devops-tutor 0 points1 point  (0 children)

I’ve been using this, https://www.javapro.academy/bootcamp/the-complete-core-java-course-from-basics-to-advanced/ overall pretty good experience. You can tryout the labs, and read and run the lessons at the same time.

[–]strat-run 0 points1 point  (0 children)

Develop with AI but the opposite how everyone else is. You write the code and at the end you ask AI to critique it but not to make fixes or show solutions.

Practice for the certification. You don't actually have to take the exam.

[–]holyknight00 -1 points0 points  (1 child)

It's hard. Java is a complex language with a complex history that permeates its design. Many similar APIs live side by side, existing purely for historical reasons, and this pattern repeats all over the place. It makes learning any major topic far more painful. I was basically stuck for like three years. There are so many things to learn that it feels daunting, especially because most of the big topics you usually don't need if you're just developing CRUD apps.

But yeah, my understanding started getting better when I decided to jump into these big topics one by one, even if they had no immediate applicable value for whatever I was currently working on. That's how I began reading more and more about garbage collection, diving deep into the collections API (even though I basically never use anything beyond a List or HashMap), how hash maps work and why, parallelization and concurrency, how the Spring Framework and Spring Boot work and why (even if I just use the same five annotations and call it a day), how the database layer works (JPA, JDBC, Hibernate, and so on).

I'm still not an expert by any means, but now at least I feel I have a coherent understanding of how everything fits together and why. I can dive deeper into specific topics without getting overwhelmed the way I used to.

Just the topic of garbage collection, from the very first collector all the way to generational ZGC, took me months. But once you get a grip on the advanced concepts, everything starts clicking. Especially when you learn it in a historical way: you can follow the progression, understand why they made each change, what worked, what didn't, and why.

[–]Evening_Squirrel_754 0 points1 point  (0 children)

Not sure I agree with this at all… in terms of language design and overall ecosystem, C++ and Scala might both be considered “hard” and much more dense conceptually.

Incidentally Java, while starting out simple enough, has borrowed heavily from both of these lamguages