In my company, a lot of thought is currently being given to identifying and defining commitment areas of what it means to be a good software engineer. Each of these commitment areas would then have bullet-point expected results that the engineer would then provide evidence of meeting. Annual reviews, promotions, merit increases would thus be based on less subjective and more measurable statistics.
Sivaprasadreddy Katamreddy has an interesting article on the Dzone’s JavaLobby called “10 Steps to Become an Outstanding Java Developer” that I think inform this movement rather nicely–at least from a Java perspective. I recommend the full read, but I summarize these steps here.
1. Have a strong foundation and understanding of OO principles
OO has cemented itself as a software design principle lo these past 20 or so years. Java is OO (as are most of the “nextgen” JVM languages), and in order to use Java to its fullest ability, you need to have a good idea what Object-oriented programming is. This means being able to apply polymorphism, encapsulation, inheritance, etc. in designing a solution.
2. Master the core APIs
Java has a vast library. To be conversant in Java, you should know what tools you have at your disposal. You should know StringBuilder rather than try to invent your own, for example.
3. Keep coding
Pass the SCJP? (Maybe it’s OCJP now…) Great! But that’s mostly theoretical knowledge. Nothing gives experience like…experience. Keep coding.
4. Subscribe to forums
This is a lesson I learned when moving OSs from Windows to Linux. When you tackle a problem, chances are someone else has already done so, and can help. I have yet to run into an issue for which I have not found the answer somewhere. Subscribe to the relevant forums for the technology you’re working with.
5. Follow blogs and respond
Similar to number 4, this gives you great exposure to the opinions of many people on a given technology so that you can make informed technology decisions.
6. Read open source frameworks source code
The beauty of open source software is that it’s OPEN. Dive into the source code. Find out how Spring does what it does. Examine the source of the jQuery plugin. You’ll be able to use those frameworks more effectively.
7. Know the technology trends
Following numbers 4 and 5 will help with this. Know what’s being used out there.
8. Keep commonly used code snippets/utilities handy
I have to set up Logging in an application project just infrequently enough that I always have to look it up. There are dozens of examples like this where we use something maybe once or twice on a project. Keep those snippets organized in an easy-to-search collection somewhere.
9. Know different methodologies
Be familiar with Agile, XP, traditional Waterfall, etc.
10. Document/blog your thoughts on technology
I have a hard time keeping track of everything I need to know in my memory. I’ve got to write it down. Additionally, this provides me with a way to perhaps give back to a community that I’ve relied on for help. Blog your thoughts, they may be helpful to someone else.