One of my beliefs regarding you and your career in the software industry is that you need to understand your strengths and weaknesses, and improve both.
It's okay to have weaknesses, but I also believe you should be aware of them, and try to minimize them. For instance, if you're a Java Swing developer, I think you should invest some time in understanding the fundamentals of design. Robin Williams has a terrific book titled "Non-Designer's Design Book" that can get you started in this area.
To help you understand some of your strengths and weaknesses in the software development industry, I thought I'd share a "checklist" here that covers various areas of knowledge in the software development industry. All you have to do is look at each item, and honestly assess your strengths and weaknesses in that category ... and then decide what you want to do about your assessment of your skills in each area.
Strengths and weaknesses checklist
At a high level, software development consists of these skill areas:
- Analysis
- Design
- Architecture
- Programming
- Database management
- Testing
- Development processes
- Project management
Programming
Some things you should understand about programming:
- Understanding one or more languages
- Understanding language libraries/frameworks (Swing, JSF, Struts)
- Understanding tools (Ant, Hibernate, Spring)
- Understanding IDE's (Eclipse, NetBeans)
- HTML, CSS, JavaScript, DHTML, AJAX
Database management
Knowledge areas in database management:
- Database design
- Database maintenance
- Awareness of different databases (Oracle, MySQL, Postgres, object-oriented databases)
Business analysis
Things you should understand as a business analyst:
- Use cases
- UML
- Database design
- Data flows
- Cost estimating
- Function Point Analysis (FPA)
- Cocomo, or something like it
- Roles in the analysis process
- How to interview
- How to write use cases and requirements specifications
- Design
Quality
Knowledge areas in the field of software quality:
- Testing (unit, regression, code coverage, GUI testing)
- Six Sigma
- FPA as it relates to quality
Communication
Your strengths and weaknesses as a communicator:
- Technical writing
- Verbal communication
- Ability to lead a team
- Communication as a manager
- Communication as an employee
Software development processes
Your knowledge of software development practices:
- Scrum
- XP
- Other "agile"
- "Heavy" processes, like RUP
- Being a "team player", i.e., understanding your role(s) on a team
Business
Your understanding of businesses, and how they make and spend money:
- Business
- Costs
- Decisions
- Income
- Processes
- Sales (even great ideas have to be "sold")