The Pragmatic Craftsman
:: Simplicity from complexity : by Stanley Kubasek ::
If you consider yourself a good programmer, great! But is this going to hold true, two years, five years from now? If you are not going to learn new things, I can safely say that you’re going to be “out of date.”
If you want to stay still, you have to continue moving: being a good programmer means learning new things constantly.
Here are 10 Ways to Learn New Things by Philosophical Geek. Follow at least some of these and I think you’ll be covered.
1. Read books.2. Read Code.3. Write Code – Lots of it.4. Talk to other developers.5. Teach others.6. Listen to podcasts7. Read blogs8. Learn a new language9. Learn the anti-patterns10. Be Humble
Reference10 Ways to Learn New Things in Development | Philosophical Geek
Uncle Bob listed a few Design smells — the odors of rotting software in his book Agile Software Development. Take the inverse of that and what do you get? Criteria for good design — that’s the approach that the author of the book PHP in Action took.
Here are the characteristics of good design.
Very good criteria, in my opinion.

Spring in Action
by Craig Walls, Ryan Breidenbach
ISBN 1933988134
Date Read 1/2008
My Rating

One Minute ReviewPositives* Excellent overview of Spring (good coverage)* Not too detailed; not too light* Excellent writing style
Negatives* Feels lengthy* Too pro-spring
PositivesWhat’s not to like? I think this is an excellent resource for the Spring Framework. I liked it as a refresher for some of the Spring 2.0 features, but I’m also going to use it as a reference.
This book is easy to read. It has a clear writing style. The author focuses on the important parts, and the subject changes quickly, as Spring’s coverage area is huge.
One of the chapters I really liked (based on my previous experiences), is the web services chapter. Nice and simple. Easy to get it working locally. The Spring/Xfire combination is the best and easiest web services configuration I’ve seen: inject web services beans into the class and your class is not even aware it’s using web services! Very powerful abstraction.
NegativesI read the first edition of the book and I remember it as a quick read. No longer. This edition is over 700 pages! (On the other hand, this is a much better edition in terms of content.)
No mention of Java Config! As far as I know, you can now configure Spring in Java, no XML. It might be Spring 2.5 (I thought it was 2.0).
I think the author could be a little more bold. Yes, Spring is great, but it has some negatives. I did not learn about them in this book. The author has a very “neutral” position. I guess this is my personal desire to see a book that would tell me how to use Spring effectively, some anti-patterns, ie. Effective Spring (if you read Effective Java, you know what I mean).
SummaryExcellent overview of Spring. Good coverage on almost all Spring features. Could be more detailed at times, but overall it does an excellent job introducing the different parts of Spring. I recommend this book to anyone who is using/considering Spring.
Ben Watson, whose blog I just came across, lists the following Top 5 Attributes…
I think this is a very good list. I think effective programmers are humble. Why? Because you have to be able to work well with others. Just from my experience, it’s hard to work with people with a lot of ego.
You just have to love to learn. Effective programmers constantly improve. How do you improve? By finding new ways of doing the things you’re used to… better. You have to be exposed to new ways in order to do that. Being able to adopt and having a passion for the profession are essential.
Reference Top 5 Attributes of Highly Effective Programmers” href=”http://www.philosophicalgeek.com/2008/01/20/5-attributes-of-highly-effective-programmers/”>Philosophical Geek -> Top 5 Attributes of Highly Effective Programmers, Philosophical Geek blog

Enterprise JavaBeans 3.0 (5th Edition)
by Bill Burke, Richard Monson-Haefel
ISBN 059600978X
Date Read 11/2007
My Rating

One Minute ReviewPositives* Excellent coverage of EJB technologies* Thorough coverage of Java Persistence* Focuses on doing best-practice development* Full of examples
Negatives* Explanation on how to create an external client not clear
SummaryThis is an excellent book on a simplified (still overcomplicated) EJB 3.0 technology. I had high hopes for this book and for the technology in general. I am still skeptical. I think this book shows the state of EJB well: greatly simplified in version 3.0, but still a complex beast. I liked this book’s thorough treatment of the subject (although at times I thought it would never end); I liked the authors’ numerous recommendations and explanations of the best practices. I think this is a very good book, but in my opinion the technology and this book could use even a more drastic reduction in complexity. For instance, I still had a hard time creating an external client application.

Test Driven
by Lasse Koskela
ISBN 1932394850
Date Read 12/2007
My Rating

One Minute ReviewPositives* Excellent coverage of Test Driven development* Covers many development best practices* Excellent writing style
Negatives* Could be more concise
SummaryThis is an excellent book on TDD — I think it’s the best book on the subject. At first, I thought this book is going to be just a review of the commonly known practices: test-code-refactor. Not true! In this book, I learned a lot more about this practice (of course), but also about how to do other types of testing (servlet, db, jsp, swing, and more), and also about the different tools available for the task. I really liked the author’s open, direct style of writing. Makes it an interesting and a worthwhile read.
I am reading Kent Beck’s book Implementation Patterns (which is great so far) and he talks about three values that are consistent with excellence in programming: communication, simplicity, and flexibility.
Kent put it so well, and these values are so timeless… that I had to write about it.
Communication“Code communicates well when a reader can understand it, modify it, or use it,” Beck writes.
Programming for the computer works fine. For the computer! Not for the person modifying it. “Good things happen when I think of others while I program,” Kent writes. Program for the other person!
But who cares? I just want to write the code as fast as possible and be done with it. Wrong! Beck writes, “The majority of the cost of software is incurred after the software has been first deployed.” From Kent’s experience, he sees that he spends much more time reading the existing code, than writing new code. And that’s a fact! Is your experience different?
When you think “How would someone else see this?,” you see your code from a perspective of another person.
SimplicityWhy would you make your code simple? For economic reasons, of course. “Eliminating excess complexity enables those reading, using, and modifying programs to understand them more quickly,” writes Beck.
A little complexity is unavoidable. How much? It depends who your audience is. But Kent puts it perfectly, “Challenging your audience a little is fine, but too much complexity will lose them.”
“Pursuing simplicity enables innovation.” I can’t agree more with Kent.
FlexibilityPrograms should be easy to change. Simplicity can encourage flexibility. Enhancing the communicability of software also adds to flexibility.
The bottom line: create simple, understandable applications that can easily be changed.
Here’s what Ben Rady, who calls himself software craftsman, states under his Statement of Values. I value similar things: I can sign my name under this statement. Excellent summary.
As a technical leader, I value:* Talented People* Rapid Feedback* Individual Relationships* Facilitation over command and control* Continuous Improvement* Frequent Delivery
As a programmer, I value:
* Working Software* Clean Code* Rich Communication* Flexibility over efficiency* Sustainable Pace* Simplicity* Failing Fast over hiding errors
As a human being, I value:
* Courage, not cowardice* Humility, not hubris* Compassion, not callousness* Curiosity, not apathy* Discipline, not carelessness* Honesty, not deceit* Patience, not intolerance
ReferenceStatement of Values, Ben Rady

Object-Oriented Analysis and Design with Applications
by Grady Booch and others
ISBN 020189551X
Date Read 9/2007
My Rating

I am part of a book review team at Javalobby. I get a chance to get a free book, write a review, and get published. Not a bad deal.
I am not the biggest fan of the long review template that we use, but I have to follow what the team leader decided.
This is a second book I reviewed for Javalobby. You can read the review at Javalobby.org here. Enjoy it.
One Minute ReviewPositives* Great use of abstraction* Excellent (concise) UML 2.0 tutorial* Filled with lots of useful ideas
Negatives* Reads dry at times* Too academic, too much theory
SummaryThe information contained in this book is excellent. It has everything that you will if you want to adapt the Unified Process, learn UML 2.0, and do object oriented analysis and design. However, it is a very theoretical book, which makes it hard to read – hard to stay focused at times. Nonetheless, it is a very important book.
ResourcesApplying UML and Patterns – in my opinion, the best book on OOAD
UML Distilled – the most popular UML book

Ajax on Java
by Steven Olson
ISBN 0596101872
Date Read 8/2007
My Rating

I’m published outside of my website! Hooraah!!
I reviewed this book as part of a Javalobby.org book-review team. I get a chance to get a free book, write a review, and get published. Not a bad deal.
You can read the full review at Javalobby.org here. Enjoy it.
One Minute ReviewPositives* Covers AJAX: a new way to do web applications* Simple examples
Negatives* Does not show best-practice implementations* Very light introduction* Only simple examples
SummaryThis is a decent introduction to the Ajax world and how it pertains to Java development. It’s just an introduction: a light treatment of the subject. If you’re new to the subject, and would like to find out what Ajax is and what types of Ajax frameworks exist, this book gives you a good starting point.
However, if you would like get a more detailed/complete information on Ajax, this book does not suit your need. What are the advantages/disadvantages of each framework, how should you use each framework? You are not going to find that information in this book.
In my opinion, this book falls short on teaching and aiding the reader what the right choice in the vast Ajax world is. The author falls short on presenting a well researched approach to the frameworks. The examples are too simplistic to fully get a good grasp on the frameworks. Also, the constant usage of bad practices made this book hard to read for me (see my Ch.7 review).
All in all, a good overview of Ajax on Java, but not much more.
ResourcesList of Java Frameworks