Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I had a discussion with a recruiter recently that made me wish I could visually represent programming skills. In trying to explain how skills relate, what are the important properties of those skills? Would a tagging model work (i.e. "Design Pattern," "Programming Language," "IDE," or "VCS")? Are they really hierarchical?

Clarification: The real problem I see is communicating the level of granularity among skill sets. For instance saying someone "knows Java" is a uselessly broad term in describing what someone can DO. However saying they know how to write web services with the Java Programming language is a bit better. To go even further, saying they know Spring as a tool under all that is probably specific enough.

What should we call those levels of granularity?

What are the relationships between the terms we use? i.e. Framework to Language, Tool to Language, Framework to Solution(like web services), etc.

share|improve this question

closed as unclear what you're asking by gnat, MichaelT, BЈовић, GlenH7, Bart van Ingen Schenau Jun 27 '13 at 13:40

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

I like the idea but I think you could expand on the question a little more. What are you trying to represent? The ability to join different skills? Or your skill level in these different skills? –  Ampt Jun 20 '13 at 15:15
The first idea I had looking at this was an old-school RPG sort of view with Primary Skills (design, languages, debugging, requirements) and Secondary Skills (SCM, project management). But the problem here is that the priority or need of each skill depends on your position. Team leads need different skills than continuation engineers for example... –  Telastyn Jun 20 '13 at 15:19
It's unclear what you are asking for here. Are you looking for a "visual teaching language?" –  Robert Harvey Jun 20 '13 at 17:20
Consider the Sunburst Chart (and another bit on that chart). –  MichaelT Jun 20 '13 at 18:21
You're question is entitled "how you visually represent..." but them you clarify that you want a taxonomy, not a visual tool. As it was originally posted, the question is on-topic, but after the clarification, it's off-topic and non answerable. –  user61852 Jun 20 '13 at 18:44

3 Answers 3

up vote 18 down vote accepted

I will not create the taxonomy for you, because developing such a taxonomy is a work for several experts to do over a long time, but I can point you to the right visual tools.

Use a mind map.

Once you read what mind maps are about, you will realize they are the visual tool you are looking for in order to visualize in some way someone's programming skill.

You can start with "skills" at the center, then radiate outwards. Some nodes could be:

enter image description here

Once you begin to construct the map, the ideas will come and in no time you will have some kind of taxonomy and, in the process, a visual representation that you can print in poster format.

There's a free, opensource app called FreeMind

share|improve this answer
+1 That's actually a great idea. I'd even consider adding that to resumes, but since most electronic resumes are scanned for keywords, an image would probably not be a good idea. SVG or PDF might work, if I thought a keyword scanner would be able to reliably read them. –  FrustratedWithFormsDesigner Jun 20 '13 at 18:56
@FrustratedWithFormsDesigner You can print if to PDF which contains all the searchable text or export it to HTML. –  user61852 Jun 20 '13 at 19:01
I'd like to replace my traditional "skills" section with an image like this. I'd just have to be certain that keyword scanners won't choke on it. For printed resumes, this could be great. –  FrustratedWithFormsDesigner Jun 20 '13 at 19:04
@FrustratedWithFormsDesigner Where's the image ? FreeMind allow you to put images into nodes. –  user61852 Jun 20 '13 at 19:05
@user618582: It looks like you exported the mind map as an image, which would not be scannable by programs that scan resumes. –  FrustratedWithFormsDesigner Jun 20 '13 at 19:06

First, you have to decide what you're trying to represent. I'm not trying to be pedantic, but the basis of your question is overly broad. A visual implies communication of information in a particular form. So the first order of business is identifying what you wish to communicate.

A programming language really just represents a way of aligning bits into a pattern that will instruct a computer to produce hopefully meaningful work. Step back far enough, and ultimately all languages are the same. They are a means to an end in order to produce work.

Some languages have more meaningful constructs than others for expressing or completing types of work. As you vary the type of work, languages change in perceived superiority. You can also develop sets of languages that display particular constructs. For example, Smalltalk, C++, Java, C#, and others have superior constructs for expressing OOP principles than other languages such as COBOL, FORTRAN, or C.

And I think that's getting closer to what you're trying to represent. I believe you're looking for the meta constructs of various programming languages and then overlaying that map of constructs across the range of languages. The value of that communication is so you can say "I've used design patterns within Java, so I'm sure I can understand the MVVM pattern of C# / WPF / Silverlight / ASP.NET." The ability to successfully lay that claim would be of value to a future employer so they understand what they're getting when they hire you.

However, there's an additional dimension to this visual which would be skill or experience within a particular construct. An employer is more interested in the amount of exposure you have to a particular meta construct than they are in whether or not you've been exposed at all. Experience is meaningless as a boolean.

Your question gets a bit muddy with the introduction of version control and integrated development environments. You've moved from the domain of Programming Languages into the broader domain of Programming. They're definitely related, but Programming is a much broader set of constructs to consider. I suspect that a truly representative display of all the meta constructs within Programming would quickly overwhelm the viewer with information overload.

So, how do you do this?

  1. Refine the scope of what you're trying to represent
  2. Identify the meta constructs / similarities / analogies across the scope you define
  3. Present some means of displaying those constructs within your scope
  4. Generate an additional dimension to show relative skill or experience within the construct.
share|improve this answer

The idea of representing a taxonomy by a mindmap is great for programmer-to-programmer communications. But if you are facing HR people, it's best so stick to simpler visual forms. re.vu is a good visual resume builder - here is a profile I've built there when you can see it in work. But from my experience no pyrotechnics will replace word of mouth (and linkedin) communication.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.