Found in 8 comments on Hacker News
hackrnews · 2016-09-03 · Original thread
'Adaptive Code' by Gary McLean Hall is an informative read on modern software design, its both concise and well-written https://www.amazon.com/Adaptive-Code-via-principles-Develope...

note, that a second edition is scheduled for release Jan/2017 https://www.amazon.com/Adaptive-Code-principles-Developer-Pr...

I would also recommend 'Effective Java' by Josh Bloch https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/03...

you'll find the advice given in both immediately applicable

klaaspieter · 2014-07-03 · Original thread
Yes. I believe such a book exists (or should at least) for every language as well.

Effective Java — http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp...

POODR (Ruby) — http://www.poodr.com/

Javascript the good parts — http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockfor...

There is of course also the gang of 4 language agnostic classic on design patterns http://www.amazon.com/Design-Patterns-Elements-Reusable-Obje...

saryant · 2014-05-30 · Original thread
Already been written, though not updated for Java 8:

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp...

reginaldo · 2012-03-25 · Original thread
Not true. You'll get, for instance, people who read Effective Java [1], by Joshua Bloch (who is, IMHO, THE man when it comes to java), and remembered the PECS mnemonics. PECS stands for producer-extends, consumer-super.

So, to cite the textbook example, say you are implementing a Stack<E>. It will probably have the methods:

  public void push(E element);
  public E pop();
and, for convenience:

  public void pushAll(Iterable<? extends E> elements);
  public void popAll(Collection<? super E> destination);
The pushAll has "? extends" because the elements Iterable will "produce" elements for the stack. The popAll has super because the destination Collection will "consume" elements from the stack. It is not that hard, is it? Let's note that guard-of-terra is talking about proficiency, not mere familiarity. I believe reading "Effective Java" is a nice way to get closer to the proficient level.

Let it be noted that this whole mess exists because generics in Java were implemented with type erasure so their introduction wouldn't break legacy code. I personally think this was a bad idea, but it does show that when a language is evolving, there are a bunch of constraints the designers must be aware of.

[1] http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp...

rattab · 2011-07-30 · Original thread
I don't know how relevant it is for mobile development but I'd recommend Effective Java by Joshua Bloch (http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/032...). It's essentially the equivalent of Effective C++ for Java and it does a good job of explaining how to properly use the language. It also contains quite a few general programming advises which are applicable to other languages. Just keep in mind that it assumes that you already know the language and have a bit of experience under your belt.
acangiano · 2010-07-12 · Original thread
Effective Java (2nd Edition) by Joshua Bloch: http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/032...

It's not for beginner Java programmers, but if you have experience in other similar programming languages you may get away with it.

pbnaidu · 2008-06-18 · Original thread
I would also read Effective Java along with Struts related text book. Here's the link to the book http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/032...

Fresh book recommendations delivered straight to your inbox every Thursday.