Whenever I start in a new job, or switch to a new area of responsibility in a company, I end up going over several months of intense reading on new subject matter. This time has been no exception. This kind of tends to burn out my desire to read books for a while unfortunately, so I am trying to slow my intake a little bit this time in the hopes that I can actually build up a sustainable pace of reading new books related to software engineering and work life in general.
This is also only the second time around that I am actually reading several books at the same time. Previously I just finished a book and didn’t start the next until I was done with the previous. But I find that I just thoroughly enjoy some books while some others are hard to digest for one reason or another. So when I notice I am reading something that doesn’t really interest me much (but which I know I will need in my work anyway) I also start another book which I just can’t seem to put down. Makes things more interesting, and hope I can also read through more books faster.
Elements of User Experience by Jesse James Garret was recommended by my boss who has user interface background. I have done very little reading in the user interface area before (and one could argue the few UIs I have created reflect that), so I found this book a good way to quickly get me up to speed on some terminology, how web UI design is different from desktop UI design, and how you can break UI design into different activities and sort of get a blueprint on how to approach the whole UI design challenge. It was a short, easy read, although at times it felt like I was reading marketing material.
I bought Effective Java by Joshua Bloch because I really enjoyed the Effective C++ series by Scott Meyers. I think every language should have a book written in the “effective series” style. I sure wish there was one for Python. The cookbook series comes perhaps closest. Part of the material in Effective Java is going over my head, since I don’t really know Java so well as for this to be useful. I am also finding some things that are applicable to other programming languages as well, which I found kind of surprising given that the Effective C++ series are really tightly coupled with C++ and very rarely is the advice usable in other languages.
Besides Effective Java I also skimmed through the online version of Thinking in Enterpise Java by Bruce Eckel, and I am also skimming through Thinking in Java, 3rd Ed. by the same author. I found Eckel’s style a bit dry, and there is a LOT of material to read, so I resorted to going through stuff pretty fast. Nevertheless, Thinking in Enterprise Java explained a lot of things to me about how to do WEB programming in Java, and there have a been a few useful bits of information in the first six chapters of Thinking in Java as well. I also appreciate the way Eckel writes his book in a kind of Open Source way.
I am also working on a Hyperic UI plugin, where I am using Groovy. There was a quote which summed up Groovy pretty nicely; unfortunately I can’t find the quote right now but it went something like this: “Groovy: they way Java was supposed to be.” For a Pythonista there is a lot to like (read: not too different from Python). I bought Groovy Recipes by Scott Davis to jump start me on Groovy. So far I haven’t been too impressed; some of the recipes I have checked seemed too much simplified to be useful. But I bought the book mainly for language introduction, and I guess I was also partly persuaded by the section on Eclipse integration.
I bought one book at CommunityOne (they had a nice discount): The Pragmatic Programmer by Andrew Hunt and David Thomas. The title alone made me like the book, as I think I have become more pragmatic (as opposed to idealistic) over time. But it turned out that wasn’t exactly what the book was about; it is more about becoming a better programmer (rather than pragmatic). I just started the book, so I can’t comment much on it at this point. But there is one piece (already, oops) that I kind of disagree with the authors. The “Don’t Live with Broken Windows” tip, meaning you should fix bad design, code etc. as soon as you see it. They do amend that tip by saying you should at least do something to amend the situation if you don’t have the time to fix it correctly right away. I very briefly tried to do this early in my career and found I got hardly anything done as I was fixing things left and right as soon as I saw them, and quickly forgot what I was actually supposed to be doing. Now I tend to either put in an XXX comment next to the problem spot or file a bug for the issue I noticed and try to retain concentration on the current main task. Perhaps that is enough to fill the spirit of the tip, but I feel it is worth noting that it can also be very distracting and it can slow you down a lot. I feel it is also better to fix one issue per checkin, because this makes it easier to verify fixes and debug and back out bad checkins. (There are tools that help checkin just the pieces you want even if you have been working on multiple issues at the same time, but these are still pretty rare and hard to use.)
Back in January or February I also read MySQL Crash Course by Ben Forta, which I think did a good job of getting me quickly up to speed with MySQL (the only caveat being that I had to go to the book’s website to figure out how to get started with the samples). I just took a quick look at the cover and was surprised that it was from Sams Publishing, which traditionally has done a pretty bad job with technical books. Maybe this book is an indication that they are getting better. Now that I am working with PostgreSQL I feel like I’d need a similar crash course for PostgreSQL.
I also started reading Beginning Database Design by Gavin Powell earlier this year. It has gotten pretty good reviews, but I put it on the back burner for a while and I need to get back to it soon.