// all posts
- Larry and Sergey.
- Is it reasonable to expect job seeking programmers to answer questions about object oriented programming?
- Unfortunately, we'll reject most developer job applications.
- Great Australian software developers: Nick Gammon & G-Pascal.
- Making a job offer? Lowest isn't always best.
- 50 Characteristics of a great software developer
- Design patterns have (mostly) flopped
- Stuff you must know: your tools
- Stuff you must know: object-oriented fundamentals
- The skills matrix
- Coders who don’t read
- Evidence of passion
50 characteristics of a great software developer
Sat 6 Nov 2010
When recruiting software developers, many employers focus too much on previous experience with specific technologies. Knowledge of Java, Ajax, XML, MySQL or whatever is important, but it’s not everything. A software developer is more than the sum of the technologies that have worked with.
If you’re adding software developers to your team it’s worth assessing for some of these traits:
- Passionate; loves computers and programming, takes an interest and thinks about things even outside working hours.
- Curious; wants to understand new things, researches unfamiliar terms.
- Humble; recognizes that other people are smart and have great ideas and knowledge, respects relationships more than technology.
- Creative; sees ways to do things that others don’t see, comes up with better ways of doing things, goes beyond.
- Friendly; easy to get along with, does not sabotage or bring down team morale.
- Fast learner; can quickly research, understand and use unfamiliar software technologies, tools and languages.
- Focus; works towards completion of tasks with minimal distraction, avoids taking tangents.
- Comprehension; can make sense of software requirements and understand what it is that needs to be built, able to grasp the “mental model” of the internal structure of a software application.
- Logic skills; ability to devise logical solutions for programming problems.
- Pragmatic; able to make a value judgement about what is really important, values practical outcomes and getting the job done, avoids gold plating.
- Not dogmatic; willing to change their mind and see things from the perspective of someone else, values the intellect of others. Not a jerk.
- Workman like; willing to do the drudge work as well as the exciting work.
- Thorough; puts in the 10% more needed to do a great job rather than an adequate job.
- Intellect; able to grasp very complex computing concepts, able to develop very sophisticated code, able to do “the hard stuff”.
- Energy; productive, motivated, strong work ethic, gets a lot of work done in the available working time.
- Practices; writes lots of code, especially in the early years.
- Persistence; sticks at it, takes the time needed to get something done or to learn something new.
- Flexible; adaptable, happy to take new directions, happy to work with new technologies, happy to try new things, happy to change priorities.
- Thirst for knowledge; actively self educates, reads and researches, willing to learn from others, always believes there is always much more to learn.
- Expert knowledge; has superb knowledge of, and has thoroughly researched the primary programming languages (typically 3 or fewer), object models and frameworks that they do most of their day to day programming with.
- Deep knowledge; has an in-depth understanding and experience in some small number (typically fewer than 10) programming languages and related technologies.
- Broad knowledge; has passing familiarity with a very wide range of programming languages and related computer technologies.
- Ability to write; can string words together to communicate. Client emails, co-worker emails, documentation, emails, proposals, blog posts, tweets.
- Knowledge of computer science fundamentals; object oriented programming, design patterns, algorithms and data structures, how computers work at a low level, hardware, operating systems, networking, databases & much more stuff.
- Verbal communication; able to explain their own thought process, can explain complex concepts, can participate in discussions with team members, can communicate with customers/users and other non technical people.
- User oriented; can empathise with users, understands where the users are coming from and what is most important to them.
- Software design and architecture; can design class structures, can design API’s, can design subsystems within an application, or can design entire application architectures.
- Quality oriented; understands software testing, writes tests for their code where appropriate, understands the concept of test driven development, meets organisational expectations for testing & quality, feels satisfied by a job well done.
- Balances coding priorities; knows when code should be written primarily for robustness, maintainability, reusability, speed of development, execution performance, scalability, security, polish, presentation, usability or some other factor.
- Problem solving; knows how to attack a problem and has the tenacity to solve even very hard problems, uses appropriate debugging tools.
- Development tools; understands their development tools, compiler/IDE and knows how to get the most out of them.
- Seeks simplicity; understands the danger in complexity, prefers simple solutions.
- Interested in the field; Knowledge of the industry, trends, directions, history.
- Avoids re-inventing the wheel; able to look at a problem, analyse it, work out what class of problems it comes from, can find patterns, libraries, algorithms, data structures or other pre-existing solutions that might fit the problem well and reduce the need to write code.
- Honest; can admit mistakes, unafraid to admit they don’t know something.
- Detail oriented; pays close attention. Avoids missing things, not sloppy or half-baked.
- Understands the lifecycle of software development; the roles played by developers and other people in that process.
- Manages own workload; able to prioritise their own tasks, willing to adapt to change.
- Cares about maintainability.
- Uses source control.
- Appreciates peer review; does not feel threatened or insulted by peer feedback.
- Groks; is able to read source code and learn what it is doing.
- Understands performance; able to optimise and write fast code when appropriate, knows how to avoid common performance problems.
- Writes clean code; readable, well formatted, appropriately commented code.
- Understands requirements specifications; able to make sense of software requirements, knows how to resolve questions and ambiguities, understands the relationship between requirements and testing.
- Follows coding standards; where there is such an expectation.
- Wants to be working on this project, at this company; a programmer is unlikely to do a great job if they are working on a project they don’t enjoy, or working at a company they don’t like.
- Strong research skills; good at ferreting out information: digging through documentation, searching the web, reading reference guides, release notes, discussion forums, mailing lists. Knows how to find answers.
- This slot reserved for suggestions - anything I’ve missed?
- Goto 49.
If you were employing a programmer and you could choose only five characteristics, which would they be? I’d choose passion, energy, ability to learn, flexibility and friendliness. With them, you’ll probably get many of the other characteristics for free.
Copyright © SuperCoders 2010 - 2011 All Rights Reserved.