In a recent JDJ article, Interviewing Enterprise Java Developers, the author, Yukov Fain, explained what J2EE developer needs to know. I really liked the article (you should read it), and author’s suggestions. Here is an excerpt from that article:
What does a good J2EE developer have to know in addition to understanding the difference between abstract classes and interfaces?
Usually employers are looking for people with at least 10 of the following skills:
Next year JavaServer Faces and Hibernate will most likely be included in this laundry list.
What do you think? I think the list is reasonable. I know most of the technologies. No I don’t know all of them. I don’t know EJB, JMS, and I’m not really familiar with the applications servers. However, that’s on my to-learn list. I’m playing with JBoss, WebLogic, and WebSphere (hey, why not learn all of them ) Plus, EJB 3.0, which is coming up soon, is something I want to learn.
Are you completely clueless what those acronyms mean? Then it’s time to wake up. You better start reading and learning!
In the road to becoming a craftsman, I need to define a software craftsman. In this section, Becoming a Craftsman, I’m going to try to explore who a software craftsman really is, and offer my advice in steps required to go in that direction. Don’t worry, you’re not alone. I’m either going through the action steps, went through them, or they’re on my list. That’s a real deal. I’m going to start off with communication skills.
Software craftsman is a good communicator
There is no question about about it: If you cannot explain what you’re doing to others you will not be a true craftsman, no matter how skillful you are. You have to become a good communicator! Being a good communicator is not only knowing how to speak (yes, that’s part of it), it is also knowing how to write well, and how to listen well. I’ll explain one by one.
Knowing how to speakThis is very important because a lot of times a person is judged by it. Just think about it. Who do you perceive as smart? Who has left a good impression on you? Whom are you more likely to listen? Usually, somebody that knows how to speak well. Usually, somebody that has got your attention. Besides, if you want to gain confidence or move up the ranks you need to be able to speak clearly. What can you do about it? Practice, practice, practice. I’ve recently joined a local Toastmasters club solely for that purpose. It’s a speech club that gives you a chance to talk at every meeting. I can’t tell you how it has helped me, since I joined it recently, but judging by the people in the club, I think it’s going to help me tremendously. Plus, I found out about it because it was recommended by an article on Computerworld.com — How to Prevent Offshoring From Taking Your Job. Check out Toastmasters.org, find a local chapter, and go to a meeting and see how it is.
Knowing how to writeIn software development there is a lot of writing. You write software requirements. You write design document. You write code. You write tests. There is a lot of writing. What comes with it? An opportunity to shine. An opportunity to be better than others. An opportunity to be perceived as quality oriented. Just by writing well you will be perceived as a better developer. What can you do about it? Set it high on your priority. Say it to yourself: I’m a good writer. And then practice, practice, practice. Read some books on writing well. There are two that I read and that I think are must reads: The Elements of Style by Strunk and White, and On Writing Well by William Zinsser. You should definitely read at least those two. Here is a list of others by a professional writer and his recommendations.
Knowing how to listenYou might be saying to yourself, whaaaaaat? Yes, knowing how to listen is also a very important communication skill. However, it’s a skill that many of us, including me, take for granted. I am not doing a whole lot in that direction, except acknowledging that it is important to do so and reading up on some strategies in Carnegie’s book (see below). What can you do about it? Get a book on communication skills and you’ll sure find it there. Plus, take notice: don’t interrupt when somebody talks; stay interested when somebody talks; ask questions. Basically, when somebody talks, stay active, don’t daydream.
Being a good communicator will not come right away. This is a long-term process because it is a change that has to come from inside of you. Make a dedication and evaluate your progress every 1/2 year (or more often — the more the better). You’ll see a difference. This is a skill that will help you in other areas of you life. It is a universal, whatever-you-do skill. It has a potential to be a difference maker. Take it seriously.
On a related note, a classic book that everybody should read (I’m finishing it slowly), is Dale Carnegie’s How To Win Friends and Influence People. I am highly recommending it, as are hundreds of users on Amazon (it has almost a 5 star rating).
So, say it to yourself and try to achieve it: I am a software craftsman and I know how to communicate well.
I found an interesting reply to a pretty good post, Kick-ass Software Developer looking for work, submitted by an anonymous reader. Take a look, as I think they’re quite interesting. In the quest to becoming a craftsman, I think this is a pretty good guideline. It’s certainly one I will keep an eye on, and judge the progress I’m making. This is the best list I’ve seen so far.
I’ve had the liberty to work with a few of great programmers. They have had a number of traits that good or average programmers lack. Each of them had a few of these, but I don’t think any had all of them.
- Understanding of the customer’s perspective. A programmer that can put themselves in the customer’s shoes can stop a bad decision from becoming a nightmare. Sure, it is probably someone else’s job to design the product, but I’ve found that developers usually have the best understanding of the product on the whole. The great developer can pick out inconsistencies before they effect the end user.
- Willing to dive into unknown technology and come back with something usable in a short amount of time. Yep, the whole team may be familiar with Java, but maybe XSLT is a mystery to all. The guy that can give himself a crash course in the technology and come back and show everyone else how it’s done is going to save a lot of time, and allow the team to use technologies that save even more time.
- Able to teach others effectively. This is related to the above, but goes beyond. It allows you to hire lesser qualified people and bring them up to a much higher level.
- Stays on top of new technology. Some developers know their languages and APIs and don’t plan on learning anything new. Others are constantly adopting new technology, skills, or concepts. I’ve known developers who don’t use a computer at home after they leave the office. I know others who are constantly reading blogs, whitepapers, journals, and downloading new software. Most of the time, what you’re trying to do has been done before by someone else. The more you know of what is out there, the more likely you are not to re-invent the wheel.
- Is usually right. The sum of the knowledge and experience in a person’s life effects every decision a person makes. A good developer has seen enough and gone down the wrong path enough times to recognize the right decision.
- Is a good at leading others. This one had been done to death, but there’s nothing worse than going on vacation and coming back to find nothing done.
Just some things I’ve noticed over the years of being fortunate enough to work with very talented people.