Reddit reviews Concurrent Programming in Java: Design Principles and Pattern, 2nd Edition
We found 5 Reddit comments about Concurrent Programming in Java: Design Principles and Pattern, 2nd Edition. Here are the top ones, ranked by their Reddit score.
Java is a shared-memory concurrency heavyweight in its own right, mostly thanks to the tireless efforts of Doug Lea (required reading: Concurrent Programming in Java) and some of the more legitimately awesome aspects of the JVM and its ever-improving concurrent garbage collectors, which enable some really sophisticated safe algorithms that require RCU in non-managed languages like C or C++ (or Rust). By comparison, outside of its very strong green threading support, Go is a relative lightweight.
The problem with concurrency in Java--and Go, and most of the other languages that provide shared-memory concurrency--is that for all their library and language sophistication and all the performance potential, the actual memory model that supports it is totally unfriendly to humans. In a concurrent environment in these languages, you have to be constantly referring to the documentation and considering the structure of your program to make sure you know what types are threadsafe, when it matters, and what to do about it. You end up needing to keep the entire structure of your program in your head at all times, because if you mess up even once you'll experience mystifying bugs with no obvious way of tracing them back to their source. And even if you do get everything right, you can never be really sure that that seemingly innocent change you're about to push up didn't break everything all over again.
Don't get me wrong. Data race safety isn't exactly the holy grail of concurrent programming, and Rust still leaves you exposed to other types of race conditions, deadlock, and livelock. What it does address are the insidious, hard to fix, baffling, how-can-that-even-happen-must-be-cosmic-rays bugs and let you worry about the actual problem you're trying to solve, and higher-level details like protocols, instead of wasting most of your mental resources keeping Chapter 17 of the Java specification and the entire Java collections library in your head while you try to figure out whether you needed a lock there after all (you may never know, but you end up adding it just in case). And the Java Heisenbugs become memory safety and security issues in C++. What I love about Rust is that I can use efficient concurrent idioms (don't have to just give up and use channels for everything) without having to be a robot with inhuman precision and an eidetic memory.
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
In the example of bridge building, I consider trade school to be more than sufficient.
The problem with just learning from a book, in my experience, is that you generally lose the perspective a qualified instructor delivers along with the knowledge in the book.
One of my favorite professors wrote this book on concurrent programming in Java. The book was required reading for the class. It was a great book, and I learned a lot from it, but it was minute compared to what I learned from my professor himself.
On the subject page for HIT3697 Advanced .NET Programming under 'Study Resources', the textbook specified for the subject is Concurrent Programming in Java™: Design Principles and Pattern, 2nd Edition.
I'm not sure I can find the book, all I could find was this which was published in 1999