Fluency


The goal of a language track on Exercism is to give people a way to achieve a high level of fluency at a low level of proficiency.

We're aiming for fluency in the syntax, idioms, and the standard library of the language.

The Language Hunters describe fluency as

What you can say when you're woken up in the middle of the night with a flashlight in your face.

This is distinct from the concept of proficiency, which is not about ease, but about degree.

They describe four levels of proficiency:

  1. Simple, concrete ideas - this is often enough to awkwardly get through simple day-to-day transactions. "Thirsty". "Good music". "One more".
  2. Simple, complete sentences - the ability to make simple conversation, and understand the responses.
  3. Complex sentences - you can have interesting conversations, tell stories.
  4. Complex ideas - you can discuss complicated things like social, economic, and political topics.

You can have the ability to perform at a level without being able to do so under stress. Proficiency does not automatically mean fluency.

While these were defined in the context of human languages, they map quite well to programming languages.

  1. Basic syntax - the ability to use basic data structures and features of the language
  2. Simple programs - you can string a small program together to solve a small problem
  3. Real-world programs - you can use the programming language to solve day-to-day problems using the tools and libraries in the broader ecosystem of the language.
  4. Deep knowledge of the language and ecosystem - rather than using what is there, you now contribute to inventing new tools, improving the language, and evolving the ecosystem

Within this framework, with Exercism we're aiming for a high degree of fluency at a level 2 proficiency. This bridges the gap between "Hello, World" and productivity.

Being fluent at this basic level lets people put all of their focus on thinking at a higher, more useful level. It also puts them in a good position to consume the existing resources and documentation for the language.