The Stages of Learning A Programming Language

‹ Bob Chase
June 2014

Clueless

Clueless describes the programmer aspirant who has yet to understand the fundamentals of program design, algorithms, debugging and all the rest of the things that an experienced programmer knows. The kinds of struggles that the clueless programmer encounters—if the programmer title even applies—are not merely about language but also about these more basic components of the craft.

Initiated

This stage is the first stage of exposure to a new language. It implies a prior state of general knowledge about programming—algorithms, debugging, patterns, etc.—but no specific experience with the language being learned. Initiation usually just involves building a simple “Hello, world!” producing some understanding of the necessary environment, tools and procedures around creating a working program. The initiated programmer may not be able to succeed with much beyond “Hello, World!”, and may be easily perplexed by the subtleties of even a moderately complex program.

Conversant

The conversant programmer has an essential, but not deep, grasp of the language. The common errors produced during a compile or during run-time are quickly understood and remedied. New code is fairly easy to produce, but may not reflect an elegant solution within the context of the language being learned. Mental translation between an approach in a familiar language and the conversant language produce frequent rabbit trails, which, in turn, force the time-consuming re-working of solutions. Complex programs which don’t take advantage of esoteric language features are quickly understood, even if they may still be difficult to create from scratch.

Idiomatic or Expert

The idiomatic programmer has mastered the idioms and recipes of the language. This includes peculiarities of syntax as well as a working knowledge of the data types and libraries available. An accurate mental model of variable scoping, the call stack, and data structures or objects is held throughout the coding process. Pretty much any program written during the conversant stage is now a source of embarrassment. The expert programmer can, and does, write code which takes advantage of peculiar aspects of the language. Languages, like Perl, which contain many syntactic surprises, can be coerced into very strange expressions of logic.