JBoss at Work: A Practical Guide
by Tom Marrs & Scott Davis
ISBN 0596007345
Date Read 4/2007
My Rating
Good overall book on how to deploy J2EE apps to JBoss. It follows a step-by-step approach (which at times might be annoying, but it does the job). Not much theory, though. If you want to learn how to deploy to JBoss, then this is a good book. Otherwise, a good overview of J2EE and Hibernate, but the examples are very basic. The advanced topics like clustering and session management are missing. So, if you are new to JBoss, and are looking to deploy a J2EE app, then this book will help you. For a more detailed treatment of JBoss and J2EE, look elsewhere.
|
Any fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction.
–Albert Einstein
|
Books, books, books…
I just browsed the new and updated list of books available as part of ACM. I have to say one thing. I’m impressed. They have updated the book list (they now have 1100 books!) and their course list (over 500 courses available). But I’m not impressed with just the number. I’m impressed with the quality of the books. They have some of the best books out there. By best, I mean 5-star rated books on Amazon.
I just wish I had enough time to read them all. Speed reading? I wish. I’m already reading 1-2 books every month. There are so many books I would love to read, but I have to concentrate on reading the best and of most value to me.
What are some of the books available? Ajax on Java, Patterns of Enterprise Application Architecture, CSS: The Missing Manual, Mastering Regular Expressions (3rd), Agile Java, Software Architecture in Practice, Object-Oriented Design Heuristics, Applying UML and Patterns (3rd); many more. (Now, go ahead and read some reviews for these books, you’ll see what I mean.)
By belonging to the ACM, for $99 a year, you get unlimited access to these books. It’s well worth it. If I just had enough time…
Remember, reading is one of the best ways to deepen your knowledge, to improve as a developer, and to stay on top of this ever-changing IT field.
ReferenceACM Safari Books (600)ACM Books24x7 (500)
Simple. Precise. Without the use of buzzwords. The Uncle Bob’s way.
ReferenceWhat is SOA, really?, Uncle Bob
Good news for Linux advocates! Dell will be shipping computers/laptops pre-loaded with Linux! To me, this is crucial for wider adoption of Linux, which I’m waiting for.
ReferenceDude, you’re getting Linux! | Ed Burnette’s Dev Connection | ZDNet.com
I don’t think so, but it looks to me it’s going to be a good competitor in what it aims to do: dependency injection. I don’t know much about Guice, just heard about it couple of days ago, but the fact that it is coming from Google, it already has good following — at least in the blogoshpere.
Personally, I like it already. I hate writing the Spring’s XML files. I would much rather do it in Java. Guice claims to do that.
Spring is a good framework, no doubt about that. But you should not be too dependent on it. I know that’s not always the case, which is not good.
Drink some juice, I mean guice.
Java Concurrency in Practice
by Brian Goetz
ISBN 0321349601
Date Read 3/2007
My Rating
Want to learn about synchronization in Java? Do you know what’s new in concurrency in Java 5/6? Not sure? Then this is the book for you.
This book introduces many new concurrency concepts introduced in the new versions of Java: Locks, BlockingQueues, Semaphores, Executors, Concurrent data structures and more (much more). There is a lot of new material, a lot of new topics. It’s actually a major overhaul. The authors do a very good job introducing them.
It’s not the most exciting subject, but the authors have tried to keep it interesting. This book has clear writing, simple examples, and good coverage on variety of topics. What else can you ask in a book on threads?
All in all, an excellent book: the best book on the threads in Java 5/6.
If you want to call yourself a well-rounded Java programmer, read this book.
Practice makes perfect.
I think you can agree with me on that. To become a craftsman, you not only need to acquire new knowledge and new skills, you need to be able to apply that knowledge, be able to polish your skills, and improve the output every time. I don’t remember who said it, Mozart I think, that every time he played the same piece, he did it differently. He was always looking to improve it. That’s the type of mentality of a true craftsman. And that’s what I need to develop to become a true craftsman.
Practice new technologies: put your knowledge to the testOver the last few years, I must have read 20-30 software books. I learn a lot, no doubt. But rarely do I actually put that knowledge to test. I just read, make notes (sometimes), and move on to another book. Doing it this way, I think my knowledge is not deep enough. I really cannot do anything with it, and I easily forget it.
I need to read a little and be able to put that knowledge to practice: I need to apply it. How do I do that? By writing a project based on that technology. By practicing — playing — with the new technology.
For instance, I want to learn Ruby (and Rails). Before I can say that I learned it, I should build a website or another project in Ruby. Only then I can say that I learned Ruby.
Same with any new technology. To really learn it, I should create my own project based on it. Anything new, whether it is a pattern or a technique, before you really learn it, you need to be able to put it into context. Ask yourself, how can I put that technology to use?
Practice to polish your skillsIn an ideal work environment, we would get to work on new and different technologies fairly often. That does not happen in the real world too often (or you’re lucky). As a result, we stagnate and get used to our working environment. I don’t think that’s a good situation. As a craftsman, you can never let your skills stagnate — lose freshness. You have to stay abreast with new technologies, acquire new skills constantly. But how? On your own!
Use your down time at work to freshen up on your skills. Once again, practice comes into play. Think the project you’re working on could benefit from migration to a newer, better technology. Do it! On your own. Start a new project, and migrate the old project to the new technology. Doing this keeps your skills fresh. You’re gaining new skills.
Playing with new technologies is very important. If you cannot do it at work, you need to find time for it, whether at work or at home.
Practice to polish — improve — the productEvery time you build a product, always strive to make it better. Better than your previous one. That’s the mentality of Mozart. I think that’s a mentality of a craftsman. And that’s what you want to become, right? Then you have to have that mentality! In design meetings, suggest a better way; when designing on your own, reflect and see what could be improved from your last project.
By practicing continuously, you’ll be able to see how things can improve. You’ll be able to build on your skills. You’ll be able to keep your skills up to date. This is key to getting better, improving your skills, and becoming a better developer, a craftsman. And remember: you can never stop practicing!
Once again, and that’s the bottom line, to move into architecture, to move up, to become a craftsman, you need a lot of practice. You need to continue practicing or you will not be “crafting” but “hacking.” Practicing takes time, but that’s the only way to make sure that you “got it.” BTW, as a craftsman, you should be loving it!
Programmers love complexity. We love to make things that are complicated.
Why is that? I think it’s because programmers think that it makes them look good. I think they feel they accomplished something big. Or is it that it gives them job security? (probably not)
What’s the root of the problem? I think it’s jumping into code right away. We all love to code, and the first thing we do when we have a problem to solve is try to hash it out in code. Once you start, you try to resolve any issues that arise any way you can. It’s harder to make changes once you start coding, though. Especially when you’re working on something complex and the deadline approaches… So you’re trapped.
The issue here is that programmers forget about a fundamental step in good design: to think about the problem first and design it at high level first. Go through the problem at high level, even if it’s just in your head, or on a piece of paper. Go through the whole scenario. Simple UML here helps as well. By doing so, you might encounter issues that are easy to solve at this high level, but not when you’re coding.
Thinking through the problem usually results in good layers. It usually results in a good domain logic. It usually results in better architecture. It results in higher quality code.
This way of high-level thinking introduces you to thinking abstractly: a required skill in design/architecture.
Not thinking through the problem usually results in spaghetti code. That’s just the way it is, whether you like it or not. And even though you might think it does not happen to you, I think it happens to everyone. You might be an expert in refactoring, and you might be able to get a clean solution, but I say you have a higher chance of just leaving things the way they are.
Here’s what Allen Holub had to say in Holub on Patterns.
“Simple systems are easier to build, easier to maintain, smaller, and faster than complex ones. … Simplicity is often not an easy goal to achieve. Programmers love complexity, so they have a strong tendency to over complicate their work. It’s often easier to quickly build an overly complex system than it is to spend the time required to make the system simple.”
To me, the hardest thing in programming is making things simple. Programming itself, is like managing complexity. In my opinion, that’s the single most important quality of a good programmer: the ability to make complex things look simple. I think the lack of it keeps people programming, instead of moving on to designing and architecting. I think most of us want to eventually be more involved in design and architecture, but until we master the principle of making things simple, we’ll be stuck programming — even though we might have a title of an “architect.”
Look at design patterns. They changed the way we look at design. But fundamentally, behind the scenes, design patterns make complicated problems simple. Patterns are really a facade to complicated problems/issues. And that’s the beauty of patterns.
“Simplicity is prerequisite for reliability,” said Edsger W. Dijkstra.
On a related note, if you’re working on something that’s complex and not very pretty, try not to make it worse. Refactor it to make it easier. We don’t usually have the time to do a “big bang” refactoring, but a little here and there helps. One of the principles that I try to follow is to never make things worse than they are. I always try to look for ways to make things better. To me, simple is beautiful.
Stanley
Java 6 is out. And it’s better than ever!
I do think it’s the best one ever. And the fastest ever. On one of my work projects, compiling Drools rule engine used to take over a minute, and with Java 6, this has been cut more than half. Nice improvement!
What are the exciting features in the new release?- Scripting support- Database enhancements (new DB embedded)- Web Services support
In this article, Mustang Must-Haves (link below), the author gives a short and sweet intro to some of the nice features from the new release.
I have to dig a little deeper into the release. One thing that comes to mind: Web services. Writing one in Java 6 is a piece of cake. However, I still find writing a web service client, a necessary component, not so easy. I know I can use a project such as Axis2 to generate the files for me, but I don’t think that’s the cleanest solution. I probably don’t know enough yet about the subject, but what’s needed is a great simplification in creating the web services client. There is no easy way. (I tried creating a client in NetBeans: it’s easy and it works, but behind the scenes it creates several classes, and besides, NetBeans is not really my IDE of choice.)
ReferenceMustang Must-Haves: What’s Cool in Java SE 6, devx.com article