Building Better Devs: Assessing software developer language proficiency

horaceshmorace

Horace Nelson

Posted on August 13, 2024

Building Better Devs: Assessing software developer language proficiency

I've been coding professionally for 26 years across several languages, including C, Perl, ASP v1-3 in JScript, JavaScript since way back in the Before Time when it was LiveScript, CSS from its alpha, PHP and Node (its JavaScript runtime) from their betas, and more recently, Python, Dart, and lately a little Go. If you asked, I’d tell you with boundless confidence that I'm an expert developer, but how do I really know that? It’s easy to spot a bad engineer over time, but how do we qualify a good one? More importantly, how do we build one? What are the qualities or skills that we must not only identify in hiring, but actively cultivate in our teams and ourselves?

The following is an organically-developed model I’ve used in which developers descend deeper through a progression in a "Language Proficiency" skill set: how much they understand the core skills within a specific language. These skills are the same for all languages:

  1. Syntax and Grammar: Basic rules and structure of the language, as well as foundational programming concepts as implemented by the language (e.g., inheritance, abstraction, polymorphism, encapsulation).
  2. Idiomatic Coding: Writing code in a way that is natural and considered best practice within the language community, leveraging language-specific features and idioms.
  3. Patterns and Standards: Utilizing approaches deemed best practice by the language community, adhering to regulatory compliance, and being aware of relevant standards.
  4. Internals and Ecosystem (which I like to call the “Ins and Outs”): A deep understanding of applicable translators (e.g., compilers, interpreters, etc.), engines, runtimes, debugging techniques, and the intent and configuration of supporting technologies like IDEs, bundling, test runners, linters, and frameworks.

The levels of progression through these skills might be:

  1. novel familiarity: low proficiency (< 15%)
  2. actively learning: low-medium proficiency (15-50%),
  3. proficient: medium-to-high proficiency (50-75%),
  4. mastery: high proficiency (> 75%)

The naming here is not as important as the expertise each implies, nor are their exact values for proficiency percentages as important as the fact that the different levels exist.

This is the progression from intern to expert:

A table depicting language comprehension skill by career level

Here's a work-in-progress rubric for determining mastery level:

Image of a table providing a Language Proficiency Rubric

Achieving a level of mastery in a software language isn’t about ticking off boxes. It's about evolving as craftspersons through progressively deeper and broader understanding of the technologies we use. As we advance, each skill informs and reinforces the next, empowering us to craft code with an ever-growing appreciation for quality and maintainability, ultimately delivering more value to our products and to the developers with whom we collaborate to create that value.

💖 💪 🙅 🚩
horaceshmorace
Horace Nelson

Posted on August 13, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related