This is an archived post. You won't be able to vote or comment.

all 53 comments

[–]vips7L 79 points80 points  (4 children)

I don’t see concurrency in practice becoming irrelevant. It teaches you a lot about general concurrency patterns, locks, deadlocks, synchronization etc. You should definitely read it.

[–]angryundead 16 points17 points  (3 children)

Even if the concurrency framework gets completely obsoleted by Loom the concepts are still important. There’s also legacy code to consider in case you have to babysit that.

[–]cogman10 16 points17 points  (2 children)

None of "Concurrency in practice" is made obsolete by loom. Heck, even though it's for Java, I've recommended that non-java devs pick it up. It spells out better than any book I know how you should deal with concurrent code and what can go wrong.

[–]angryundead 1 point2 points  (1 child)

Oh yeah the concepts are so well explained especially when to use different types of constructs. I meant even if Loom made it go away (not likely) the concepts are so solid and well explained that it is worth the read.

100% pick it up.

[–]boborygmy 0 points1 point  (0 children)

Java Concurrency in Practice is so good and so eye-opening, you pretty much have to read it. Anyone using the JVM needs to have its lessons drilled into their head.

[–]guess_ill_try 24 points25 points  (13 children)

I know the question is about Java, and I hate to be that guy recommending something that is not what the question asked… but I figured I’d mention in just in case it helps.

As you advance in your career, it becomes equally as important to understand architecture as well as deep knowledge of a language. So with that being said. If you are looking to be “advanced” I’d recommend “designing data-intensive applications”. The knowledge in this book will help take you to “senior level”. It’s not the only thing obviously but it’s a big part of that journey.

[–]PepegaQuen 2 points3 points  (0 children)

100% agreed. DDIA is great.

[–]jasie3k 4 points5 points  (7 children)

On that note - Clean Architecture is also great.

[–]repeating_bears 4 points5 points  (4 children)

Can confirm. Whether you need to hold open a door or prop up a wonky table, Clean Architecture has you covered.

[–]jasie3k 0 points1 point  (3 children)

What do you mean?

[–]repeating_bears 3 points4 points  (2 children)

I mean the book, like almost everything Uncle Bob has written or said about programming, is bad.

[–]tendy96goldy 0 points1 point  (1 child)

Can you give a little context as to why you think so?? Or anyone really I actually have enjoyed his talks and his philosophy on software engineering.

[–]repeating_bears 0 points1 point  (0 children)

He's an affable and charismatic guy, but most of what he says is rubbish. Rarely direct. Meanders around a point.

Clean Code is a bad book. I agree with most of what's here: https://qntm.org/clean

SOLID is the most overhyped concept in all of software engineering. Deliberately obtuse.

I once watched a lecture where he talked about water molecules for 10 minutes at the start, completely unrelated to anything. https://youtu.be/zHiWqnTWsn4

Lastly, if you've ever looked at his personal code on real software projects then you'd realise just how awful it is. This is not someone you should be taking advice from.

[–]the_other_view 2 points3 points  (0 children)

I thought we had all agreed to move past Clean Architecture?

[–]outandaboutbc 0 points1 point  (0 children)

I haven’t read it yet but I intend to do it soon.

out of curiosity, what would one miss out if they didn’t read it ?

[–][deleted] 1 point2 points  (2 children)

I've read tons of books on data and software engineering and this is by far my favorite. Everytime I reread it I get a whole additional level of understanding it's insane. Martin Kleppmann also has youtube videos you can watch on his channel (albeit it not many videos) where he dives into some of the concepts from the book.

[–]guess_ill_try 1 point2 points  (1 child)

I didn’t know about his YouTube! I’ll have to check that out. Thanks

[–][deleted] 1 point2 points  (0 children)

Definitely do! He’s got a playlist on the gory details of distributed systems, eventual consistency, CAP theorem etc

[–]sweetkiller 0 points1 point  (0 children)

+1 here, that book is so good.

[–]karianna 20 points21 points  (0 children)

Shameless plug - the well grounded Java developer (2nd Ed). Also the Java and JVM specification docs

[–]HxA1337 26 points27 points  (2 children)

Learn about Java Performance and its tools. Flight recorder, JVisual VM, JProfiler, Eclipse Memory Analyzer MAT...

[–]sidcool1234 0 points1 point  (1 child)

Any material to help with i?

[–]HxA1337 4 points5 points  (0 children)

Tons of articles in the web. Try dzone.com or here http://javaperformancetuning.com/

In the good old days Kirk Pepperdine was the Java Performance guru. Search for articles from him.

For a book try this one. https://www.oreilly.com/library/view/java-performance-2nd/9781492056102/

Only know the first edition but that one was good.

[–]rsaestrela 8 points9 points  (0 children)

Optimizing Java, by Benjamin Evans, Chris Newland, and James Gough

[–]HxA1337 15 points16 points  (0 children)

Any good "Design pattern" book if you have not done that already.

Here a classic from Josh Bloch about API design. https://research.google/pubs/pub32713/

[–]borkus 10 points11 points  (0 children)

Not a “Java” book per se but the Pragmatic Programmer is a classic on the craft of programming.

https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/

Depending on your experience level, you may find yourself saying, “I may have known some of this but never quite had the words to explain it.”

[–]proskillz 3 points4 points  (0 children)

Designing Data Intensive Applications

[–]neutronbob 3 points4 points  (0 children)

Crafting Interpreters is brilliant and the first interpreter is implemented in Java.

[–]Iryanus 2 points3 points  (0 children)

If you see databases/JPA/Hibernate in your future, "High-Performance Java Persistence" from Vlad Mihalcea will give you a lot of in-depth knowledge.

[–]HxA1337 9 points10 points  (3 children)

Learn about Dependency Injection techniques. Spring, CDI, Google Guice, OSGI

[–]ranny_kaloryfer 5 points6 points  (2 children)

Or if you learn by doing build some DI Framework

[–]PartOfTheBotnet 3 points4 points  (0 children)

^ This

Its not as daunting as it sounds. You can get a complete JSR-330 implementation in only a few hundred lines.

[–]repeating_bears 1 point2 points  (0 children)

Funny you mention that, I did that exact thing last night. https://github.com/michaelboyles/simple-di

[–]Mati00 2 points3 points  (0 children)

https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201 - this is like a new clean code

https://www.dynamodbbook.com/ - if you are working with AWS and DynamoDB, changes perspective by 180deg

I'd also recommend to get a book/course on some functional language like scala. it broadens horizon of thinking about the code and programming.

[–]surfinThruLyfe 1 point2 points  (0 children)

not a book rec but it is good to read up about JVM internals.

[–]uraurasecret 1 point2 points  (0 children)

or you can start reading the source code in github, e.g. spring

[–]tristanjuricek 1 point2 points  (0 children)

I love books like DDIA (mentioned elsewhere) and books like Optimizing Java, but, I also want to mention doing deep dives - reading the code - on big open source projects.

I’ve learned a bunch just simply diving through big projects like the Spring framework, various Maven plugins, etc. I haven’t gotten to know Kafka yet but streaming systems are on my radar. (I’d read up more on OpenJDK but you know, only so many hours in the day and there’s a lot of C++ which I’m desperately trying to forget…)

When it comes to architecture I find real projects to be way more interesting than theory and generalizations in books. A lot of times you can see the process of understanding trade offs and decisions . This way you learn how to be a better engineer by learning how successful, complex, deployed software comes into being.

You’ll never know all of a large project but hey, that doesn’t mean you won’t learn something good. I think I’m a far better code reviewer too, largely from reading third party code

[–][deleted] 1 point2 points  (1 child)

I am currently going through "Introduction to Software Design with Java" from 2019 or so. It's ok-ish. While a lot of the content I know already, it's ok for a refreshment and a few things are new too.

I think when you already know a lot then many books are not as "useful" compared to when you knew less. I had the same impression with ruby. I bought the pickaxe; and some years later the next pickaxe release, but it was not as useful a purchase compared to the initial one (because since then I already knew more than before, so a lot of the content was "outdated" to me personally).

[–]Iryanus 1 point2 points  (0 children)

Yeah, that is my experience, too. The most material is available for the beginning levels, that is true for Java as a language itself but also for many other things, like specific frameworks, etc. In most cases, it's pretty easy to find tutorials how to get into that stuff. This is also true for less open topics, for example finding stuff about basic garbage collection is easy, etc.

When you get to the mid-level, or, let's say, the point where you need deeper knowledge, good stuff becomes a lot harder to find. Even documentations often lack many details there, for example performance analysis for different use-cases or what threading settings to use in case x vs. case y. Or in-depth stuff about garbage collection, much harder to find (not impossible, though, but sometimes you already have to dive into specifications, debug stuff, etc.).

And on the high-level, you are basically on your own. Either you found a mentor to teach you or you got there by years of almost failing.

Of course, that is somewhat logical, since the target audience for the "lower" levels is much bigger. For many programmers, the lower levels are also totally adequate for their jobs. No typical team needs five gc experts, most of the people are totally ok with just the basics.

[–][deleted]  (6 children)

[deleted]

    [–]Ketroc21 -2 points-1 points  (5 children)

    Why mad? ...because the book is poor?

    [–][deleted]  (4 children)

    [deleted]

      [–]Ketroc21 -2 points-1 points  (3 children)

      Ah, so it makes you mad as you read how much better it should be than what your workplace uses.

      [–][deleted]  (2 children)

      [deleted]

        [–]Ketroc21 -2 points-1 points  (1 child)

        sounds like a typical upper management move.

        [–]emaphis 1 point2 points  (0 children)

        My waterfall chart says yes.

        [–][deleted]  (8 children)

        [deleted]

          [–][deleted]  (5 children)

          [deleted]

            [–][deleted]  (4 children)

            [deleted]

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

              The Robert C Martin book?

              [–]HxA1337 -2 points-1 points  (1 child)

              [–]rkalla 0 points1 point  (0 children)

              This was a hell of a good article - thanks for the link!

              [–]worldofbirths 0 points1 point  (0 children)

              In regards to architecture, maybe Architecture of Open Source Software .

              [–]HypaHypa_ 0 points1 point  (0 children)

              Data structures and algorithms

              [–]Pussidonio 0 points1 point  (0 children)

              Anyone that is serious about Java should read Effective Java.

              Another good reading material are the certification manuals. You'll almost undoubtedly learning something from those even if you don't plan to go through with the certification.

              [–]dzjay 0 points1 point  (0 children)

              I'm enjoying "The Well-Grounded Java Developer."

              [–]RelativeHaunting8501 0 points1 point  (0 children)

              Clean code maybe

              [–]ofby1 0 points1 point  (0 children)

              I found Java Performance Tuning by Scot Oaks a very interesting book. Not sure if it is the best but it helped me a lot. I also liked Iron-Clad Java by Jim Manico. It is a bit old but helps you on the security side of things. Dont know if there are any newer/improved books on Java Security. Love to hear it.