

Ask HN: The "Expert/Master At (Language)" Point - ThinkWriteMute

At what point should a programmer consider himself well versed or an expert/master of a programming language? Where is the bar set?
======
DanielStraight
You are a master of a programming language when you consistently write
idiomatic code in that language which exploits the power of the language to
solve difficult problems in an easy-to-explain way.

Or in detail:

You must _consistently write_ code in the language. Knowledge without
experience cannot make you a master.

You must write _idiomatic_ code for the language. If you're just writing
FORTRAN in another language, then you might be a FORTRAN master, but you
aren't a master of the language you're using.

You must _exploit the power of the language_. If you're writing "for" rather
than "foreach" loops to iterate over a collection in C# or rolling your own
LinkedList class, you aren't a master of C#.

You must _solve difficult problems_. Writing Hello World will never make you a
master.

You must write code in an _easy-to-explain way_. If you are the only person
who can read your code, you aren't a master of the language.

------
mbrubeck
The people I've worked with who were true masters of their languages (or other
tools) understood what happened under the hood. They knew the techniques
required to implement the language themselves, or to debug or optimize
existing implementations. They understood any differences or gaps between the
language spec and their preferred implementation's actual behavior.

------
pmiller2
Some necessary but not sufficient criteria for our intrepid programmer to
consider himself a master of his language:

* He's written a non-toy compiler for the language.

* He knows how to choose between more or less semantically equivalent ways of writing the same code because he understands the tradeoffs involved.

* He's explored many or most of the dark and mysterious corners of the language and knows when and when not to invoke them in production code.

* He is familiar with the contents of the standard library and uses it whenever appropriate.

* Knuth is his homeboy.

That's all I can think of for now.

------
tom_b
I'm trying to approach it from a slightly different angle (although pmiller2
alludes to it):

When you know that a language is absolutely the wrong choice for a problem,
you are probably there.

When you can hold a problem in your head, use two different programming
languages to shape a solution, and intuitively understand - in a way you can
clearly communicate at least to yourself - which one is best suited to the
situation, then you can consider yourself an expert.

Mastery is just a path.

------
metamemetics
master: contributor to the development branch if open source or
writing\maintaining actively used libraries.

expert: biggish list of work\projects finished, know how to leverage the
standard/popular libraries

