Over a period of time I have managed to get my hands on some of the most wonderful books on software development. It gives me a great feeling to have read these books as they share the author's hard earned experience over several years. I feel that I am just plain lucky to have discovered so many tips and tricks (or pitfalls) of software development so early on in my career, just by reading these wonderful books. I am indebted to the authors of these books, for they cared to share with the rest of the world, what they learned the hard way.
I have made a sincere attempt to put in my personal opinion on what each book has meant to me. The list of books mentioned here is not exhaustive and it may so happen that I might not have mentioned some of the books which are treated in the software fraternity with equal reverence, kindly excuse me for that. I still have lots to read and a really long way to go. So here's my list.
1. Effective Java, 2nd Edition – Joshua Bloch
I must confess here. This is one book that changed my way of thinking and looking at Java as a language forever. I first got to know about this book in September, 2009 and the first thing I did was to get to the nearest book store a grab a copy. I was so obsessed with reading this book that I literally read this book cover to cover. Although the book really deserves repeated reads to really grasp every single piece of advice the author shares, I feel just giving a cursory look at the topics itself gives you an idea of what the author is really talking about. The best part of this book is that it doesn't demand reading the book in a chronological order. All the sections of the book can pretty much be comprehended in isolation. What Joshua Bloch shares in this book is the collective wisdom he has gained over the years in designing and implementing the Java language features and some of its APIs. I promise you that if you are able to digest all that Joshua has jotted down in this book, you can’t help but find yourself writing cleaner and more maintainable Java programs in your day to day work. You will find yourself more mature and evolved as a programmer. But there's a catch here. Although you might discover so many tips and trick, readily served on the plate, the challenge remains at applying the right tips at the right time and at the right place, and that my dear friend comes only with experience! Amazon link.
2. Practical API design - Confessions of a Java framework architect - Jarsalov Tulach
I got to know about this book while I was reading the reviews of one of the books on Amazon. I just went through the reviews and I knew I should read this book. For someone like me who would die to work on such stuff, it took me in its stride right from the word go. The author of this book happens to be the architect of NetBeans and has some very practical pieces of advice for API designers. Don't go by the title of the book and conclude that it is only for API designers. It is for all software developers who intend to write good and maintainable software. One of things I like about this book is that it starts off with a very good analogy of what it is to build and maintain software (in particular a framework). The take away from this book would be to really know the challenges one faces in developing and maintaining framework for years. The other interesting things that Jarsalov touches upon are things like source and binary compatibility, software entropy, API testing etc. It’s a rarity in itself to have someone work with a framework right from its inception and see it mature into software so widely accepted is itself an accomplishment. I would highly recommend this book to all those people who would just want feel themselves in the shoe of that architect who makes those really challenging decisions that decides the future of a framework. Trust me, by the time you are done reading this book, you would agree with me that developing and maintaining a framework is after all, not as jazzy as it looks! Amazon Link.
3. SCJP6 - Katherine Sierra and Bert Bates
I am not a big fan of certifications! I still recommend this book to all java developers simply because it acts as a great refresher if you already know Java and wanted to know those tricky stuff from topics like Threads (or Concurrency) or get a quick refresher on the collections APIs. This books serves as a quick reference to all your queries. This book is primarily targeted for those who wish to get an SCJP certification and not really meant for an elaborate read to understand Java as a language. On a personal note I am big fan of Kathy. Her style of writing (often with just enough humor, without sounding cocky) makes you fall in love with it (even if its technical stuff!!). All in all, a good book to grab, if you want to refresh your Java fundamentals. Amazon Link
4. The Pragmatic Programmer – From Journeyman to Master – Andy Hunt and Dave Thomas
If you were challenged to write a book on programming and also told that you should not burden the readers with those complex and fuzzy example code, how would you write? I feel Andy and Dave just showed the software world that there can be a book that talks about all that matters in a day-to-day life of a software programmer. This book may not be very ‘technical’ (which I disagree to) in true sense but one can’t deny its relevance in today’s world. I personally enjoyed reading all the sections of this book. In particular I liked the approach of presenting your learning as a collection of no non-sense tips (just can’t seem to get over the Effective Java Style. I love it so much). It simply works. Amongst the other things that grabbed my attention was the focus on communication in software teams, refactoring, applying general design principles like DRY etc. If you want to read a book that doesn’t sound preachy and makes you say not less than 50 times, “Man! This is so true!” this is the book!! Amazon Link.
5. Object Oriented Analysis and Design with application – Grady Booch, Robert A. Maksimchuk, MichaelW. Engel (Author), Bobbi J. Young, Jim Conallen, Kelli A. Houston
Some might feel that this is mostly theoretical or should be read for academic interests only. But I strongly disagree with them. I feel that this book is much more that. If you ever think of getting yourself in the shoes of an OO designer, you should really get your hands on this one. This book really goes into the depth and explores some of the basics of good OO analysis and design. It makes you think about OO design in a language independent manner. This is the power of this book. I strongly feel that Object Oriented Analysis and Design is truly independent of a language since language only aids in realization of what one thinks! If you wish to learn more about some of the fundamental things of OOAD, get your copy of this book today! Amazon Link.
Some of the other books I feel that are worth reading are:
- Code Complete: A Practical Handbook of Software Construction by Steve McConnell
- Inside the Java2 Virtual Machine – Bill Venners
- Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant, and William Opdyke
- UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design (2nd Edition) by Jim Arlow and Ila Neustadt
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides