Software Development: Building Reliable Systems
Skills Tracking
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.
Sample C++ Programming Self-Evaluation
Rating 0: No Skill
-
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.
Rating 1: Beginner
-
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++.
Rating 2: Intermediate
-
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.
Rating 3: Accomplished
-
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.
Rating 4: Expert
-
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.
Rating 5: Master
-
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.
Sample Java Programming Self-Evaluation
Rating 0: No Skill
-
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.
Rating 1: Beginner
-
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.
Rating 2: Intermediate
-
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.
Rating 3: Accomplished
-
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.
Rating 4: Expert
-
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.
Rating 5: Master
-
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.