We recommend you automate your organization's skills tracking process. This makes it easier for developers to keep their skill profiles updated as well as allows for creation of a searchable database. Tracking the skills of your software developers serves many purposes. For a developer, it provides an opportunity for self-evaluation , allows them to track their skills versus others in the organization, and helps in setting development goals. For managers, tracking provides a metric to evaluate their organization's strengths and weaknesses in order to help establish training and hiring priorities. A searchable skills database also allows one to locate needed skills across a large organization. We also use a portion of the skills tracking evaluation during the interview process to help judge the technical expertise of candidates.
We have included sample self-evaluation templates for object-oriented programming skills in C++ and Java. The Java self-evaluation was patterned after the earlier C++ template. In both cases, these evaluations attempt to differentiate those who simply know the syntax of the language and those who truly understand object-oriented programming.
I have no experience programming with an object-oriented language such as C++.
I would require guidance, mentoring, and training in order to become a productive object-oriented programmer.
I have knowledge of how basic object-oriented concepts such as encapsulation, identity, and inheritance are implemented in an object-oriented language such as C++.
I can program a basic abstract data type such as a linked list using classes.
I have taken a basic course in object-oriented programming using C++.
I know the difference between just using C++ syntax as a better form of C versus object-oriented programming in C++.
I have a good grasp of the C++ language and am comfortable in a minimum of 7 out of 10 C++ programming constructs.
I understand the concept of references and pointers.
I know that the concept of the array in C++ is messy and avoid arrays in favor of vectors from the standard library.
I can write efficient C++ code with an understanding of the intricacies of C++ memory management.
I can conduct code reviews. I can mentor others on basic concepts of C++.
I have 1 to 2 years of everyday relevant experience involving C++.
I know the difference between assignment and initialization and how the difference between them gets reflected by the difference between an assignment operator and a copy constructor.
I understand conversions, including implicit conversion and explicit conversion.
I can explain how a constructor is different from member functions.
I have a good grasp of all concepts of the C++ programming languages including some of the less well known concepts such as virtual base classes, namespaces, exceptions, and templates.
I have written at least one class library that is fully object-oriented. I can render an object model into C++ without missing any intrinsics .
I can teach concepts to others and can troubleshoot their tasks . I stay on top of major commercial C++ class libraries as well as IDE tools.
I have more than 2 years of everyday relevant experience with object-oriented implementations of C++.
I bring extra value through innovative approaches to all situations that require knowledge of C++.
I am able to troubleshoot the tasks of others involving this skill.
I am versed in newer features of C++ such as templates, exception handling, and namespaces.
I know the strengths and weakness of C++ as an object-oriented language. I can compare it to other languages such as Java.
I am familiar with the standard C++ library and can use functionals and iterators efficiently .
I have knowledge and some experience in object persistence and distributed objects.
Given my accomplishments in C++, I could be recognized as an industry expert in C++.
I could or do contribute to the public body of knowledge on object-oriented implementations of C++ through publishing papers and books.
I know the evolution of the C++ language as well as its future direction.
I have solid knowledge and experience in object persistence and distributed objects.
I have no experience programming with an object-oriented language such as Java.
I would require guidance, mentoring, and training in order to become a productive object-oriented programmer.
I have knowledge of how basic object-oriented concepts such as encapsulation, identity, and inheritance are implemented in an object-oriented language such as Java.
I can program a basic abstract data type such as a priority queue or B-tree using Java classes.
I have taken a basic course in object-oriented programming using Java.
I write true object-oriented Java code versus simply using Java syntax to write code that could be written in C.
I can explain the differences between interface and implementation inheritance and can give an example of how you would use Java interface inheritance.
I have a good grasp of the Java language and APIs and am comfortable in a minimum of 7 out of 10 Java programming constructs.
I understand the concept of object references and can explain how it differs from pointers in C++.
I understand all the basic Java class libraries such as AWT, java.net, and java.io.
I can write efficient Java code with an understanding of the intricacies of the Java virtual machine memory management.
I can conduct code reviews. I can mentor others on basic concepts of Java.
I have 1 to 2 years of everyday relevant experience involving Java.
I understand how to write JavaBeans.
I know the difference between abstract classes and interfaces.
I have a good grasp of all concepts of the Java programming language APIs including some of the less well known concepts such as serialization, reflection, and low-level event handling for creating custom components .
I have written at least one class library that is fully object-oriented. I can render an object model into Java without missing any intrinsics.
I can teach concepts to others and can troubleshoot their tasks. I stay on top of major commercial Java class libraries as well as IDE tools.
I have more than 2 years of everyday relevant experience with object-oriented implementations of Java.
I bring extra value through innovative approaches to all situations that require knowledge of Java.
I am able to troubleshoot the tasks of others involving this skill.
I am versed in newer features of developing Java APIs.
I know the strengths and weakness of Java as an object-oriented language and can compare it to other languages such as C++.
I have knowledge and some experience in object persistence and distributed objects.
I can explain the differences between the JDBC, RMI, Java IDL APIs and explain when each should be used.
I can explain the differences between the Java Card, Embedded Java, Personal Java, and Java API sets.
Given my accomplishments in Java, I could be recognized as an industry expert in Java.
I could or do contribute to the public body of knowledge on object-oriented implementations of Java through publishing papers, books, and/or at conferences.
I know the evolution of the Java language as well as its future direction.
I have solid knowledge and experience in object persistence and distributed objects.