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?
- Refine the scope of what you're trying to represent
- Identify the meta constructs / similarities / analogies across the scope you define
- Present some means of displaying those constructs within your scope
- Generate an additional dimension to show relative skill or experience within the construct.