Panasonic Youth rob sanheim writes about software, business, ruby, music, stuff and things



Posted
6 February 2006 @ 2pm

Tagged
Agile, Books, Java, Less Code, Object Oriented, Patterns, Rails, Ruby

Discuss

Five books every Java developer must own

Update: Welcome, Javalobby readers! You might be interested in the followup to this post. Thanks for the great feedback and suggestions.

  • Pragmatic Programmer by Andrew Hunt and David Thomas
    This is absolutely required reading for any software developer, regardless of language. If you are lost when people are talking about “keeping it DRY” or the danger of broken windows, you need this book.
  • Effective Java by Joshua Bloch
    Effective Java is absolutely crucial if you create any APIs, and if you ever see public class... you are writing APIs, whether its for a team of one or one thousand. Bloch covers issues
    Effective Java Programming Language Guidelike immutability, properly implementing equals and hashCode, the benefits of composition over inheritance, and the value of static factory methods. He talks about all sort of common beginner mistakes such as using interfaces for constants, using float or double when you need absolute precision, overuse of Strings, and crappy singleton implementations. After you’ve read this, listen to the JavaPosse interview with Bloch to hear how about a possible second edition and take a look at Java Puzzlers for fun gotchas found in Java.
  • Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley Professional Computing Series)Design Patterns by the GoF
    Design Patterns is by the Gang of Four (GOF) is often lauded as a classic read for anyone doing OO development, whether the language be Smalltalk, C++, or Java. If you aren’t familiar with Design Patterns but have been doing OO for awhile, you have already been using some of the patterns without knowing it. Having a common vocabularily to share with others is very powerful, so know the 26 classic patterns is important for any Java developer today.
  • Extreme Programming Explained : Embrace Change (2nd Edition)Extreme Programming Explained: Embrace Change
  • by Kent Beck and Cynthia Andres
    When I first read XP: Explained, so many of the concepts made me nod my head in agreement and wonder how typical software development goes against so many of its principles. XP and agile isn’t rocket science or a silver bullet, its just good common sense. “Take small steps, one at a time. Communication is vital. Feedback is important. Change is constant, so work with it instead of fighting it.” It sounds like advice your mom or grandpa gave you when you were eight years old, so why does it take a “revolution” or a “movement” to put these things into practice for software development? That might be a topic for another essay, so for now just get this book. Its essential for understanding the ideas behind XP and agility.

    Note that the second edition is quite different from the first - it has a broader, less technical apporach. They are both worth reading, the first moreso for programmers and the second for customers and managers.

  • Practical Common LispProgramming Ruby by Dave Thomas et al, or Practical Common Lisp, or Learning Python or…
    The fifth book in this list really isn’t a specific book at all, but a more general recommendation to get a book about a language very different from the Java/C# family. Learn one of the hot dynamically typed languages all the kdis love these days, like Ruby or Python. If those are old hat, pick up the The Haskell School of Expression if the online tutorial seems interesting. Or maybe Graham’s On Lisp, which recently put online for free. Just learn a language that forces you think in a different way from Java. Even if your day job continues to be Java, knowing how you would solve a problem in Ruby or Lisp will only make you a better programmer.

Note what isn’t on the list: any of the Java 5 reference books or any of the tens (hundreds?) of J2EE books. Its important to keep up with the language and the platform, but I think thats better done through programming with the JDK and examples as reference. The reference books can be helpful for getting up to speed for day to day work, but I don’t think they are essential for furthering your knowledge or your craft. Long after your J2EE 1.4.x.niner book is collecting dust on the shelf, Effective Java will still be a reference you consult regularly.


22 Comments

Posted by
Ignacio Coloma
7 February 2006 @ 4am

By the direction your post is oriented, you should consider including Peopleware by DeMarco and Lister. It covers all the development aspects other than the language.


Posted by
Mats Henricson
7 February 2006 @ 4am

Oh brother, I get so tired of this “Go read a Ruby book and you’ll be a better Java programmer” spiel. There is absolutely NO proof behind that BS. In which way is it useful for me to read about closures in JavaScript, if I can’t use them in Java? Unless, of course, there is a hack in which way I can use something similar in Java. But then, why not read an advanced Java book instead, where you can learn new advanced Java tricks?!?!


Posted by
Mats Henricson
7 February 2006 @ 4am

By the way, isn’t a cosmic coincidence that Rob Sanheim, of all the millions of Java programmers out there, was the ONE to have read ALL the five MUST OWN books?! You are such a dude!


Posted by
chasethedevil
7 February 2006 @ 5am

Most people will agree with the GoF book. About the other ones, I doubt it, even if they are not bad.

If you think core java skill is useful, why not having a book on the JVM?

J2EE ideas are important, wheter you like J2EE or not.

What about the classic MS Press “Code Complete”? What about B Meyer “Object-Oriented Software Construction”?

And Fowler ideas?


Posted by
Anders
7 February 2006 @ 5am

Domain Driven Design by Eric Evans wouldn’t be a bad choice either. :)


Posted by
Stas Kubasek
7 February 2006 @ 10am

Good list. Not a complete list, but I agree with all of your suggestions. Those are all required.

I think Core J2EE Patterns, Code Complete, and Refactoring are also required.


Posted by
Rob
7 February 2006 @ 11am

Thanks for the comments everyone.

Ignacio: I was very close to putting Brooks _Mythical Man Month_ on there. I think that and Peopleware would easily be on a top 10 list.

Mats: Effective Java has some pretty advanced topics in it, and its a more important book to have then the latest EJB or Spring book. I think the advanced framework or JDK specific books are important (and I own a ton of them), but they depend totally upon what type of work you are doing. The point with this list is what books are vital to all developers, regardless of if they are doing Swing or web apps or whatever.

chasethedevil: I haven’t read all of Code Complete yet, and again - if you are doing Eclipse RCP work you don’t need a J2EE book. Also, _Refactoring_ could easily be a #6 or 7.

Anders: Another one on my to read list…

Stas: Not sure on Core J2EE Patterns, if you have the GoF book and then are on a j2ee project, then I can see picking it up. Seems some of the patterns are Sun’s compensation for how broke EJB’s were (are?).


Posted by
Stas Kubasek
7 February 2006 @ 1pm

Core J2EE Patterns is one of the best Java patterns book out there. I have not used EJBs before, but I really enjoyed the book. If you are working with DAOs, Java web applications, and not necessarily with EJBs, this is a must read. Also, UML diagrams in the book are excellent.


Posted by
JM
7 February 2006 @ 1pm

People publishing such lists have no work or try to convince others of how good they are because they read some books. Keep in mind that producing good software is better than just talking about it!


Posted by
Chris Dailey
7 February 2006 @ 5pm

I would recommend “Object-Oriented Design Heuristics” by Arthur J. Riel over the GoF Design Patterns book. YMMV.


Posted by
jupiler
8 February 2006 @ 4am

Ummm… I read Core J2EE patterns and was actually disapointed :( It doesn’t bring anything new now, ’cause the patterns fix concrete problems and shortcmoing of ealier versions of J2EE/EJBs: front controller (now embedded in Struts, JSF, etc), value object (a MUST!!), session façade, business delegate. So no, Core J2EE patterns should NOT be on your list :)


[…] El post va dedicado a mi amigo Oscar, que seguro que, o tiene estos u otros mejores “entoavia”. Enlace: http://www.robsanheim.com/2006/02/06/five-books-every-java-developer-must-own/ […]


Posted by
Werner Keil
8 February 2006 @ 8am

Why do you suggest a Ruby book for Java Developers?
I sure have watched it ever since it came out. Unfortunately like many other Open Source movements coming from Linux first (MySQL, PHP,…) it is still long and tedious to use on Windows or any other OS. Kind of like “Romancing the Stone” but both parts together ?;-)

For all that JavaScript and “Web 2.0″ stuff, why did you not suggest them a book about AJAX instead?

For most of the others I pretty much agree. Maybe that small book “The Elements of Java Style” (I hope to remember the title correct) authored by Scott Ambler among others would also fit well here…


Posted by
Tom Hawtin
8 February 2006 @ 10am

Pragmatic Programmer and Effective Java I found were saying goo stuff but were a bit old hat. Perhaps Effective Java brings things together for the beginner. The religious XP Explained has nothing on the common-sense Surviving Object-oriented Projects: A Manager’s Guide, by Alistair Cockburn.

So, my five for the beginner Java programmer: Effective Java, Surviving Object-oriented Project, Patterns of Enterprise Architecture, Core J2EE patterns and the JLS,


Posted by
A.R.
8 February 2006 @ 12pm

Yawn and more yawn; what you’re saying there you’ve red those books and you think they are cool but can’t quite say why. Let me guess you’ve been java programming for 3-4 years and now you think it is time to get a celebrity status because you’ve formed your own oppinion. Well congratulations I bet you feel great and we are all impressed, I am personally humbled by your presence. Try reading:
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD340.html


Posted by
Rob
8 February 2006 @ 12pm

Werner: I’m not suggesting a Ruby book, I’m suggesting a “language-other-then-Java” book. If you hate Ruby, get a Python book or a Lisp book. Also, using Ruby on Windows is very easy, deploying is a different issue but who wants to deploy to windows anyways?

Tom: Its all “old hat” but its fundamental stuff you can always improve on. Thx for the recommendation on the Cockburn book, I’ll have ot check that out.

AR: Yes, clearly now I’m a true celebrity. Thanks for recognizing my brilliance.


Posted by
kulinux
8 February 2006 @ 5pm

Another book that give a lot of pleasure to read was “java performance tuning”.

I think that learning java have to fronts:
- one is the syntax, and how the lines you write come to machine code (here is were the book i mentioned come): thinking in java, java language specification, etc.
- another one is how you organize a lot of lines of code. In this point books that talking about patterns, pragmating programming, effective programming and so on.

sorry my poor english.


[…] Thanks to the mention at Javalobby, I had a great response with tons of feedback to my post on essential books for Java developers. From reading the comments there and at the Javalobby thread, here are some more “must-haves”. Also, I have a crazy long wishlist of nerdy books at Amazon that I’m trying to get through. Only about 80 more to go! […]


Posted by
Calvin
10 February 2006 @ 2pm

The only one of the list that I think is absolutely required is Effective Java. Anybody that wants to use Java effectively needs to know the stuff in that book.

The same cannot be said about any of the others.

Likewise, I would add Brook’s “The Mythical Man-Month” to the list, but it should be required reading for any programmer, period, regardless of language.

SICP should be on there too, and that would be my 3 books required for any Java programmer.


Posted by
charles black
23 February 2006 @ 3pm

Doesn’t anyone remember the book JAVA RULES by Douglas Dunn. It is one of the best programming books written.


Posted by
Rob
23 February 2006 @ 3pm

Charles: looks interesting, but out of print (from amazon at least). Maybe it was just over shadowed by Effective Java?


Posted by
surajz
13 July 2007 @ 5pm

I think ‘Domain Driven Design’ by Eric Evans is also must read.

infoq.com has downloadable version of this book.


Leave a Comment

Five Things to Improve Your blog (plus One) Programming the New Web - hosted by Bruce Eckel