Tuesday, December 28, 2010

Books I've read in 2010

I mostly read online articles/blog posts to keep me up to date. I read books whenever I get a chance. Below are some of the books which I've read this year.
  1. First, I finished reading the books I was in the middle of reading in 2009 - Programming Groovy and Eclipse - Building Commercial quality plugins. My comments about these books can be found from my last year's post.
  2. Java Puzzlers - This is one of the classic java books written by Josh Bloch and Neal Gafter. It has lots of java puzzles which are very interesting and I learned a lot about the intricacies of the language from this book. If you think you know Java very well, try solving the puzzles in this book and it would make you rethink about it. I highly recommend this book to any java programmer and I'm sure everyone (even if you have lot of experience in Java) will learn new things about the language from this book.
  3. The Mythical Man Month - This is one of the classic books on Software Engineering and Project Management. This book was originally published in 1975 and republished with few more chapters in 1995, but almost all of the things explained in this book still hold good. The classic saying "9 women cannot produce a baby in one month" comes from this book and the author says this to explain that adding more programmers to a delayed project will not make it faster. Some of the ideas presented in this book are explained in the wiki page of this book. I highly recommend this book to any programmer, more so to anyone who manages a project, be it a Development Manager or Project Manager.
  4. Design Patterns: Elements of Reusable Object-Oriented Software - I have been using design patterns in my code for several years now and mostly learned design patterns by reading online articles and blog posts. I have read this book on a on-demand basis in the past and always wanted to read it completely. Finally, got chance to read it completely this year and it was a good refresher to many of the design patterns and I also learned few new ones. I don't need to tell about this book, as it is a Classic Design Patterns book and is a must read for any programmer.
  5. 97 things Every Programmer Should Know - This book is a collection of thoughts on things which every programmer should know and has many nice ideas and tips. If you are new to programming, I'm sure this book will open your eyes. Even if you are someone with several years of experience, I'm sure your time will still be well spent reading this book and you will learn useful things. You can also get an online version of the contributions appearing in this book.
  6. Agile Software Development with Scrum - This is a basic book on what Scrum is and explains the concepts very clearly. One of the authors of this book is Ken Schwaber, who is one of the co-founders of Scrum. I have been using Scrum more more than 3 years now and have been ScrumMaster for most of this time. I have read parts of this book few years back and so wanted to read it again and it made some of the things more clear to me. I highly recommend this book to anyone interested in Scrum. If you are thinking about starting to use Scrum, but not clear about it or it's benefits, then this is the book you need to read.
  7. Kanban and Scrum - making the most of both - Kanban and Scrum are different Agile project management methodologies. This book explains about Kanban and Scrum - it's similarities and differences and how to use them together to get the advantages of both. You can get an online version of this book from InfoQ. You may have to register/sign-in first before downloading the book. I recommend this book to anyone who is using Scrum or Kanban or any other Agile management methodologies and is a must-read for any ScrumMaster.
  8. Agile Retrospectives: Making Good Teams Great - This book is the bible for Agile Retrospectives and is written by Esther Derby, who is well known for her thoughts on improving retrospectives. This book presents many techniques on how to gather data and generate insights in a retrospective. It also presents ideas on how to decide which ideas to implement immediately. This book offers good advice on how to lead retrospectives and is a must read for anyone who leads the retrospectives, mainly for any ScrumMaster. We used some of the ideas presented in this book and they worked great. We also plan to use more techniques presented in this book in upcoming retrospectives.
Looking forward for a very exciting year 2011. Wish everyone a very Happy and Prosperous New Year!


Toi said...

Looks like you've been paying a lot of attention to agile and design patterns.

- Agile: in my opinion, if you do a project in a reasonable and thoughtful way, then you're using agile methodologies. Can anybody give an example of doing a project reasonably and thoughtfully but not in an agile way?

- Design patterns: also in my opinion, they are good but I prefer simplicity than design patterns. When I say simplicity I mean an easy to read, easy to understand, easy to debug, loosely coupled and flexible code. For example, Hibernate is good (I think ORM is also a design pattern) but in some cases a simpler solution (e.g. Spring JDBC) is much better. Or another example is in a RESTful application. Spring 3 MVC and its view resolvers, annotations (@RequestMapping, @PathVariable, @RequestParam ...) are powerful but in some cases Servlet 3 wins because it's much simpler.

Marco Rietveld said...

- Agile: I have seen instances of RUP projects which were basically done using waterfall. These projects were reasonable and thoughtful -- but not Agile.

- Design patterns: You mention a number of frameworks -- all of which make extensive use of a number of design patterns (especially Hibernate and Spring 3.. _MVC_.. :) ). You might want to refresh your knowledge of design patterns.

raveman said...

I hate design patterns, there are useless trouble to get by when you look for a job. Most of the people that use them are not good programmers. I know first hand that you can produce very bad code and use design patterns. The best ones will be in your code if you remember its a design pattern or not.

Raja said...

@Toi - There are many benefits of doing Agile development like early feedback (end of every sprint), re-prioritization of tasks at the beginning of every sprint, team not being disturbed inside the sprint, team being empowered to do everything to finish the tasks, better visibility, being able to reflect and tune the process at the end of every sprint etc., You should be able to find many articles online which discuss about benefits of Agile development.

Raja said...

@raveman - I would not specifically look for design patterns while coding. But, they help in solving common problems and also help during design discussions. It is easy to mention to use facade or template pattern or visitor during discussion and others could understand what we mean. I think it is useful to know and understand the various design patterns. It might become bad only when we force to use design patterns in our code. Having the ability to recognize design patterns in existing code and knowing when to apply a design pattern in a particular scenario is always good.

Sandeep said...

Thanks for the information!!


dan rogy said...
This comment has been removed by a blog administrator.