Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
by Gregor Hohpe, Bobby Woolf
ISBN 0321200683
Date Read 12/2006
My Rating
This is probably the best book on Enterprise Java Messaging. If that is what you desire.
This is not an easy book. I read it all, but I think to actually start implementing based on the patterns, I would have to reread portions of it. This book is loaded with patterns, some small, some larger. And it is a lot to absorb.
The only downside, for me at least, is that I have not worked on a messaging system before. It’s hard to put the information from this book into context.
If you’re working with JMS and Java messaging, you must read this book. On the other hand, if you’re just looking for enterprise patterns, like I was, I think there are other, more applicable books.
Java Servlet Programming, 2nd Edition
by Jason Hunter
ISBN 0596000405
Date Read 1/2007
My Rating
I should have read this book years ago. It’s an excellent book on Java servlets — a servlets bible. But it shows its age now. But even so, it’s still worth a read (while skipping some sections): it contains detailed knowledge about how the servlets work — information not found anywhere else.
Discussion about session management, servlet codes, servlet lifecycle, environment variables, and more: you can all find it in this book. To add, this book is written in a very good, easy to read style.
I came across this (interesting) post, 2007 Goals by Frank Kelly, and pondered… and came up with my own 2007 goals.
Deepen my Java knowledgeThere are still some features of Java that I don’t know, some quirks I’m not aware. In 2007, I plan to read Thinking in Java 4th edition in full. Maybe another book as well. I am also planning to purchase a good book focused on the new features in Java 6.
Get up to speed with Java ConcurrencyI have already started on this goal. I’ve read several articles/book chapters already. I’m finishing the chapter in Thinking in Java. I received Java Concurrency in Practice. I will master this beast.
Get more comfortable with J2EEI’m not a big fan of the heavyweight J2EE, but the new JEE 5 is different and I think it’s a good technology to learn. But before I actually delve into it, I would like to get myself more familiar with the old J2EE and run sample applications on an app server.
Get up to speed with HibernateI have used Hibernate on several projects. I know how it works. But I don’t know it in detail. There is a new book, Java Persistence with Hibernate which covers Hibernate 3.2. I will buy it and get some more detailed knowledge in Hibernate.
Learn Ruby and Ruby on RailsI already have 2 books on the subject, Learn To Program and Web Development with Rails, 2nd edition. I have another coming my way — I was selected to review a book as part of a Javalobby book-reviewing team, Rails for Java. I should get my hands wet in this technology and since my host supports RoR, maybe I can develop a project that I’m thinking about.
Read another book on PatternsWow, patterns are proving to be a tough beast to handle. I think I have a good grasp on the GoF patterns but I don’t use many of them and …. I forget. There is a new book on the subject, Design Patterns in Java, which looks good to me, and which will also refresh my UML skills.
Read 12-15 booksMy goal is to read a 300-page book every month. I have been doing that since last year and I shall continue.
Apply the knowledge I learnI read a lot, but a lot of that knowledge I easily forget. I need to change the way I learn. I need to start applying the knowledge that I learn. That means creating small projects with the new technologies that I learn. That means I need to actually practice my new skills. That’s the only way that I know that I’m actually going to gain a deeper knowledge of the subjects and make sure I don’t forget it easily (or not as easily as before).
Write at least one blog entry per weekThere are weeks where I have more than one entry and weeks where I don’t have any. I need to change that. Having a successful blog means updating it regularly. I shall update this blog at least once every week (have at least 3-4 entries per month).
All in AllIt looks like a busy year ahead. But I feel comfortable and confident that I will reach most of the goals. What I have started doing in the last several months helps me a lot. I started waking up at 6AM and dedicating the first hour to reading. By doing this, I get an uninterrupted hour where I am not tired (with a cup of coffee). This is working great for me so far.(I never thought I could be an early riser, but I really enjoy it.)
If you consider yourself a well-rounded Java programmer you know threads. You must also know or heard about threads in Java 5. Or, the overhaul of threads in this version (and Java 6). This is a complicated topic but whether you like it or not, you must update your skills and learn about concurrent programming in the newest versions of Java.
I just started doing so. I actually feel pretty weak in this area. But I started erasing this gap and I hope to be “up to speed” soon. I ordered Java Concurrency in Practice (supposedly a must have), I ordered Thinking in Java, 4th edition (it is a great book – no, you cannot find the latest version online), and I read about threading online as well, links below.
Like I said, threading is a complicated topic in programming, but if you consider yourself a good programmer, you must master it.
ReferenceConcurrency in JDK 5.0, developerWorks tutorial (need subscription, PDF version)
Introduction to Java threads, developerWorks tutorial
Java Concurrency in Practice, excellent book on threads
Thinking in Java (4th Edition), excellent book on Java with a very good chapter on threads
Java 5 SE, in my opinion was a great release. While reading a blog post, Java 5 – The Gems and the Duds, the author gives thumbs up to the concurrency package, generics, CachedRowSet, and annotations; he gives thumbs down to autoboxing. And he’s not sure about varargs and enums. Very good post. I generally agree with the author. But…
I happen to like enums. I have used them several times already and they did a great job for me: made the code easier to understand and the code more robust (type safety). What are they good for?
I have used enums to encapsulate the different types. Pre Java 5, we used to have a lot of String constants defined. What that does it puts a lot of unrelated things together. It’s hard to see where each particular constant belongs to. There is also no type safety, as the constant can be substituted with any value.
No more. I can now define an enum. It nicely encloses related types. It gives me type safety. They make your code more readable. They make your comparisons easy — you can use == with confidence.
A simple example,enum DayOfWeek {MON(1), TUE(2), WED(3)… /* need to define a constructor in this case */ }
In code, you would no longer rely on integers 1-7 or strings for days, you would get a DayOfWeek param and you would be sure that you actually get the right value. You could also define a utility method inside the enum, getByDayNumber(…) and get the day that way.
In my opinion, a great addition.
ReferenceJava 5 – The Gems and the Duds, The Art and Craft of Great Software Architecture and Development blog
Enums, java.sun.com article
What was the last book you read?
Has it been long?
The bottom line, to become a better coder, better [anything], you have to do the things you are used to do… better. Reading books is one of the best ways to acquire knowledge, to deepen your knowledge, to improve yourself: to become better.
How much do you have to read?
The Pragmatic Programmers (very good book, btw), recommend reading a book every quarter. Steve McConnell in Code Complete (excellent book), recommends reading around 35 pages a week.
Is that a lot?
My guess it is that you’re most likely reading that much already, so keep doing it. Shifting to a book a month might make it more challenging,
The software development world is constantly changing. If you’re not following it, by reading and practicing, you’re falling behind.
Nowadays, though, it seems to me that people are reading everything but books. People read blogs, articles, etc. I don’t think that’s bad, I just think that a good book is more valuable. You should still have books as your primary source of knowledge. A book gives you a more complete knowledge. A book requires a lot more knowledge to create than a blog entry or an article.
Where to start? What to read?
We don’t have the time to read all of the books (I wish). So read the best. Read the classics. Just start reading and applying the knowledge you gain. A great book to start is Code Complete. It will help you guide your career.
One effective way to stay on top is to read and then apply the knowledge you learned. Repeat continuously.
RelatedContinuous Learning by Reading, my previous entry
What is it? I don’t know. I think it’s communication skills, the ability to see the big picture, staying abreast of new technologies, and learning quickly. Plus, the ability to dive into new technologies and leave your comfort zone — leave the old technologies behind.
But who am I to answer a question like this. I’m not an architect. Yet. It’s something I’m preparing myself for.
Anyway, this question, “what is the most valuable IT architecture skill?,” was answered by some distinguished IBM architects, Grady Booch being one of them. It’s a very good article.
ReferenceWhat is the most valuable IT architecture skill and how can you learn it?,developerWorks
The Timeless Way of Building
by Christopher Alexander
ISBN 0195024028
Date Read 10/2006
My Rating
Excellent architecture book. From the pure architectural point of view, though. I was looking for more of a software design point of view. I did not find too much of it in this book. It was, nonetheless, a valuable read. Hey, I got to see what ‘normal’ architects go through, and what makes buildings live — you can find a lot of that in this book.
Few interesting points. All patterns have to work together to form a whole, to make the structure uniform. One bad pattern will start destroying it, and eventually it will.
This book is all about thinking in general terms — high level thinking. It’s very important when architecting — same is true when building software.
I also found something else interesting. In the last chapter of the book, the author says that you should throw away your ego. Once you “get” the pattern language, you should throw it away. When starting a new project, always start from scratch — blank piece of paper — and forget about all of the projects you did before. Only then you will create truly ‘live’ structures. Is this possible in software? In the age of frameworks, language dependencies, probably not.
Overall, a great architecture book; but not the software architecture book that I was looking for. (From what I find now, the second book in the series is more applicable to building software.)
What do we — as developers — want more than money? Good question. I think there are a lot of things we care about more than money. We want a challenging environment, good management, ability to learn things, and more. The author of the article, below, has pointers like these, and others, that I believe we care about. Excellent article. We do care about these things, IMHO, more than money.
ReferenceNine Things Developers Want More Than Money, Software by Rob blog
I’m reading the Code Craft blog (I discovered it a few days ago) andI’m really enjoying the entries there. I recommend you check it out.
Here are few entries which are worth a read. The author writes from India, where he currently works. His summary of the Indian software market is the best you will find — he just tells it how it is. Excellent writing.
Indian bubble – unless you are willing to pay wagesthat start to sound a lot like like US wages, attracting top people is nearly impossible
Finding coders on the subcontinent – The practical reality is that anyonein India who can spell Java already has a job. – experienced candidates… less thanone in five could write a loop that counted from one to ten in AN Y programming language – you have to interview too many badcandidates to find the really good ones
ReferenceCode Craft by Kevin Barnes