Archive for March 2009
I’ve been thinking lately about what makes a good software engineer, how to spot a good one, and how to help yourself become better. This is what I came up with…
Distributed systems, enterprise-class, J2EE, loosely coupled, SOA, multi-tier, Agile, iterative development
I hear those words a lot. Anyone could claim they have knowledge of them, but does that really matter? A good majority of resumes and tons of job postings list them, but that says absolutely nothing about the competence of the individual. Stop asking for these qualifications and stop putting them on your resume, they don’t mean anything. Don’t put a goal toward becoming competent in these technologies, you will only fail at being a software engineer.
What about experience?
Yes, experience is important. But what kind of experience? Years? Places work? Size of the company worked? Projects completed? I wish I could come up with the equation, but I’m afraid I can’t.
The important part is to actually have something to show for your work. Rather than saying “6+ years experience as a software developer in the e-commerce industry”, how about, “Designed and constructed a number of technologies powering the <company> shopping cart, order pipeline, customer self service, and product detail pages.” Does that say a specific technology used? No, but that doesn’t matter. What you’ve done is said that you have done stuff what people want done.
So how do I know when I’m innovative?
Chances are you’re not innovate. Sure, you’ve probably “architected a solution to meet business needs and delivered on time”, or “developed a framework to simplify development of Rich Internet Applications”, but what that really means is that you’ve “drawn an inheritance diagram, wrote the code and it works”, and “probably recreated a framework that already exists in the technology I’m using, and it’s still not as good”. Ouch, that hurts doesn’t it.
Have no fear, these are things that are expected as a developer grows. The hard part is breaking out of that and doing something that actually contributes value. Let me give you an example. Recently, Bespin, a web-based collaborative code editor has been in the news. This is a very simple example of how to be innovative. Although the project only appeals to a small amount of people, it suits a need that wasn’t there before.
It’s important to remember that projects like Bespin don’t appear out of this air. It takes time to design and implement a solution (and we’re not talking just a few minutes whiteboarding either). I’m not going to go into the details of how to create a solution like this, but if you don’t know and haven’t experienced it first-hand (you can’t tie your name to it), then you’re not innovative.
I’m not trying to hurt your feelings — I’m actually eating my own words as I type, but what I’m trying to say is that the characteristics of a great software developer focuses on what you’ve done, not how you’ve done it. Just find something that interests you, stick and it, and you’d be surprised how far it will take you.
