What Defines a Good Software Developer?
Written by
David Goodrich
Saturday, Jan 03, 2009What makes a good developer? Is it years of experience, a college degree, number of languages known, ability to communicate, amount of minutia memorized, or certifications? This is a question I have been asked on many occasions. Unfortunately the answer is not straight forward since the question is very subjective.
A candidate may have several years experience in Java, but has that time been spent writing Java Scripting Pages as opposed to J2EE? Will this experience translate? Candidate A has a degree in Computer Science but only two years experience, Candidate B has five years experience in a related field, and both claim to know the required language. Which is the better candidate? How can you tell?
The Short Answer
What makes a good developer? A well honed instinct for solving software problems and a demonstrated desire to continue growing and learning. This is not something that can be taught but must be developed by the software developer over a period of time. How quickly this develops depends on the natural ability of the software developer and his or her desire to better his or her skills. How do you measure instinct? The answer is, you cannot, at least not directly. There are, however, some general criteria that can give insight into this aspect of a candidate.
Look At the Code
First and most importantly, look at a candidate’s code. Even if you are not a developer you can still determine the following: Does the developer make good use of white space? Is the code neat, easy to read and appealing? Does the software developer provide coherent comments for methods, properties and complicated portions of code? Can the developer effectively explain what a given section of code does?
Some General Guidelines
Generally, if you are looking for a mid to senior level developer, use the following guideline:
- Years of experience: 5 or more. Obviously the more experience the better – as long as the experience is varied and demonstrates that the developer is continually learning and developing his or her skills. Be cautious about hiring a developer that has spent all of his or her time in one position. Unless the developer has spent a lot of his or her own time playing with new concepts and languages on the side such a developer may have difficulty solving problems not previously encountered.
- College Degree: At least a four year degree in any field, preferably not obtained fully online. While many developers become successful without having completed an undergraduate degree, the degree is important for several reasons. Possession of a degree demonstrates the ability to set and reach goals. Most undergraduate courses require a minimum amount of research, processing, writing and presenting of information via a standard style (e.g. APA). Most undergraduate courses require a minimum amount of team work. Most undergraduate courses require assignments to be completed by a published deadline. If the candidate’s degree is in Computer Science make sure he or she has experience across at least two industries. If the candidate’s degree is a field other than Computer Science, make sure he or she has at least five years experience coding and has at least a cursory understanding design patterns such as the those described in the well know “Gang of Four” Design Patterns book.
- Certifications: Certifications show some dedication by a software developer to demonstrate a specific skill set. However, certifications are not a replacement for an undergraduate degree or experience. Other than SUN’s Certified Java Developer (SCJD) series of certifications, which require a developer to write an application and then write an essay explaining his or her development approach, all other certification programs I have taken or read about rely on multiple-choice tests as qualifying instruments. This is an important fact since multiple-choice tests are not authentic measurements. Multiple-choice tests require a person to recall facts and actually provide the answer to the taker. A multiple-choice test does not require an individual to apply knowledge and understanding to a real world situation. Authentic tests (such as IPES Evaluations) require that the taker demonstrate knowledge, and the ability to apply that knowledge, by completing an actual work related task.
- Programming Languages: In depth knowledge (i.e. at least two full years experience) of at least two, dissimilar languages is a must. By dissimilar I refer to the syntax of a language. Java and C# are both syntactically similar to C. NATURAL is syntactically similar to COBOL. For more information, start here and here.
Obviously the developer should have several years experience with the programming language required by the position. Please use common sense here though, I still get a chuckle out of adds from the late 1990’s that require five plus years Java experience (Java was officially released in 1995). Also I would not hesitate to hire an experienced Java developer for a C# position (or vise versa) providing I knew I had the time available in my project timeline for the developer to become used to the few syntactical differences and different class libraries. Such a call should be made by, or at least made at the recommendation of, a senior developer on the hiring team.
- Experience: A mid to senior level developer should have experience in at least two industries and or unrelated technologies. By unrelated technologies I refer to technologies such as web-presentation versus middleware components, or device drivers versus desktop applications. Developing software targeted at different industries and or technologies offers the developer the opportunity to develop a broad repertoire of problem solving skills. While developers are known to move around often, be cautious of a developer that frequently spends less than three years at a position (unless the reason can be adequately explained: i.e. the developer worked on several short contracts).
Other Considerations
Has the candidate spent time programming outside of work, especially on collaborative works, such as open software projects? Has the candidate pursued courses of study, beyond an undergraduate degree? Is the candidate a member of any professional organizations? Does the candidate regularly post to any forums or has he or she written and submitted articles to any trade journals or web-sites? If so this demonstrates that the candidate is interested in software development as more than a means to a paycheck. Working on projects outside of work, being active in software development forums, taking additional classes and writing articles are all indicative of a software developer who is eager to develop and learn.
Summary
Sometimes employers (and, particularly, hiring managers who are non-technical) expect it to be difficult to identify good developers, but there are several indicators (many non-technical) helpful in recognizing a talented developer. Education, work experience, and certifications all are important considerations. However, it is also highly recommended to examine the diverse languages the candidate knows, and the extent to which he or she participates in development-related activities outside of work – both indicate a passion for development and continuous honing of his or her craft. Of course, the specifically technical does matter, and examination of code is the measure which most resembles what the candidate will do on the job, and therefore an important component of candidate evaluation. Examining each area will take a little more time than reading through a resume and conducting an interview, but all taken together, a business has the vital benefit of the right candidate for the job.