I was listening to a podcast about Scala by Scott Hanselman and Dianne Marsh where programming languages were briefly compared to foreign languages. The idea stuck in my mind for the rest of the drive to work. I came up with the following scale that can be used to help self-assess one’s proficiency with a programming language.
|Level||Programming Language||Foreign Language|
|1 (inexperienced)||You don't recognize the syntax, either because the language utilizes an unfamiliar paradigm or is from a different family of languages than what you are used to. The file extension might provide a hint—depending on how good your memory is.||You might be able to guess which continent this language is used in, but you wouldn't feel comfortable taking a stab at identifying the language with anyone listening.|
|2||You know what language it is, but the syntax feels quite uncomfortable (or even unintelligible).||You are able to identify the language based on the look of the alphabet, but phonetics, grammar, and general structure are still very foreign.|
|3||You understand the context in which the language resides and are able to hack together basic functionality by copying and pasting snippets from Stack Overflow.||You have memorized a few basic phrases for ordering food and asking where the bathroom is.|
|4||You can make things work, but the level of code quality is such that it pains others (and future you) to read. You don't yet enjoy writing code in the new language.||Though still fragmented, you have a basic knowledge of the structure of the language and can form a basic sentence on the fly, albeit grammatically unsound.|
|5||You write code at an acceptable level. It's no longer completely written in the paradigms of languages you are more comfortable with. You are starting to feel comfortable in the new language.||Though you are still simply speaking your native language using foreign words some of the time, you are able to carry on a conversation.|
|6||You are adopting more and more of the idioms of the new language. You are embracing the best practices and avoiding the pitfalls and code smells of the new ecosystem that is becoming more familiar to you by the day. You creatively solve problems in the way that only the new language would.||You are starting to think and dream in your new language. You wish there were ways to express certain ideas in your native language that are only achievable in the foreign language.|
|7 (proficient)||Writing code the idiomatic way for the new language is natural and comfortable. Reading quality work by others is easy and pleasant. The new language has become your go-to for thinking through problems. You even contribute to the community and help spread enthusiasm for the language.||Your command of the new language is such that you understand the subtle nuances of poetry. You are even capable of writing poetry yourself, and occasionally come up with something brilliant, indistinguishable from that of a native speaker of the language.|
Where you do fall on the scale for the languages you work in every day?