Take the 2-minute tour ×


share|improve this question


I think the word you're looking for is "mastering" a language, "learned" in this context is a bit strange. –  Pieter B Jun 29 '12 at 14:20
"Words are for meaning: when you've got the meaning, you can forget the words." - Zhuangzi –  jfrankcarr Jun 29 '12 at 15:12
when you don't have to ask this question, you will have learned what you need to know ... –  Jarrod Roberson Jun 29 '12 at 17:27
@JarrodRoberson Is this Zhuangzi who said that too? –  jadkik94 Jul 4 '12 at 20:37
According to LinkedIn there is very low bar to put up a programming language on your skill resume... According to my LinkedIn people who've seen Java code before apparently feels comfortable listing it in their skills section. –  Chris Andrè Dale Jul 6 '12 at 9:25

9 Answers 9

up vote 65 down vote accepted



share|improve this answer
The terms conversational and fluent are rather subjective and while appropriate to natural language, it is difficult to see what they mean when applied to a computer language. Although still subjective, functional and idomatic may work better. Functional implies that you know the syntax well enough to write useful constructs, while having an idiomatic knowledge implies that you not only know how to write in the language but also know it well enough to use the idioms of the language, such as using using in C# or b, a = a, b and generators in python. Otherwise, +1. –  Mark Booth Jun 29 '12 at 15:16
@MarkBooth Any description short of a score on an exam will be somewhat subjective. The point is to use the familiarity that most people already have with levels of knowledge of human languages as a rough guide to knowledge of a computer language, and to do it in a friendly way that invites further investigation. Conversational C++ is shorthand for "I'm familiar with the basics, but you may need to help me with advanced, obscure, or tricky code." –  Caleb Jun 29 '12 at 15:31
While I think you're mostly right, I think a lot of people wrongly assume they have learned a natural language when they still have a miserable level. And it applies also to people who say they've learned programming languages. –  haylem Jul 1 '12 at 13:26
I think your answer is perfect, it even shows how much it's impossible to quantify language knowledge. Indeed, while fluent means you can talk about most anything, with about as much explanations as a native speaker would require, this does not address the fact that most native speakers don't possess a tenth of the language knowledge good old writers have (no, not harry potter or dan brown, real old style hard to read stuff). How would you address that, when in fact nobody has bothered addressing it for languages ? and when in fact it does strongly impact productivity in programming ? –  Morg. Aug 23 '12 at 12:54
@Morg. What utter rubbish. Programming is as much about communicating with future programmers (including yourself) as it is with telling the computer what to do. Sure, simple write one code might not need to be communicated well, but in the real world making your intentions clear to future maintainers of the code is far more important than getting the computer to do the right thing. Anyway, these comments are no longer serving to help improve this answer, so I would suggest that we take this to Programmers Chat if you want to discuss it further. –  Mark Booth Sep 5 '12 at 12:14

It depends on who is asking

The person who asks propably has a certain idea what level of skill is expected from someone who says that he has "learned a language."

Basically, i encountered two archetypical scales, by which people judge the answer to the question "have you learned X?"

For most nerds it is a trick question to weed out posers This is already demonstrated by the other answers to your question ;). If you say you learned it you fail in seeing the scope of the task, which is implicitly "perfection", and, much worse: you fail in humility.

For most bosses, you "have learned it", if you can solve their problems, a criterion oftentimes already met if your code compiles. Answering his question in a humble way will lead to him assigning the task to a poser who may also be a relative.

So, what's your audience?

share|improve this answer
In interviews, you know it if you know it. In the workplace, you know it if Google knows it. –  asfallows Jul 6 '12 at 14:07
In interviews, it's "i know it" if the interviewer wears a tie, and it's "please define 'to know'" if he does not ;). To be fair, most interviewers ask if one "has experience with", to which i am more easily inclined to answer with "yes" –  keppla Jul 12 '12 at 15:17


And we're just talking syntax here. We forget that most languages are paired with a framework. C# has the .NET framework, Java has it's own framework, as does Ruby, C++, PHP, and PERL. Think of the framework for a language as the vocabulary and the language itself is just syntax. Knowing the language means you know how to make a sentence in the language. Knowing the framework means you can express yourself well in the language. Finally, once you know the syntax and vocabulary, you need to learn the idioms so that you write code as a "native speaker".

I'd say there are several levels of learning.

  1. Hello World (you can write the most rudimentary programs.)
  2. Proficient (you can write basic programs but need to consult online help regularly)
  3. Fluent (you can write advance programs with some reference needed).
  4. Native speaker (you can write advanced programs with minimal online help, your code is indistinguishable from another native speaker's code).
share|improve this answer
Nitpick: await is from C# 5, the major new thing in C# 4 was dynamic. –  svick Jul 5 '12 at 18:06
You're right...I keep losing track of which version of C# goes with which version of .NET –  Mike Brown Jul 5 '12 at 21:12

You can rarely say you've learned a language. That implies you're done learning about it, which is... foolish.

Saying you know a language is fine when you can write code that isn't blatantly breaking idioms in the language (maybe after a week of de-rusting the knowledge) without referring to a syntax reference.

share|improve this answer
Idioms change, styles vary from one place to another, and indeed languages themselves change over time. If you can't say that you "know" or "have learned" a language like C++ until you're done learning about it, then there are very few people indeed who can claim to have learned C++. –  Caleb Jun 29 '12 at 14:46
@Caleb exactly. –  Mike Brown Jun 29 '12 at 14:55
If you learning like that, then you don't know even your native language, which is foolish too (at least for most of people) –  superM Jun 29 '12 at 15:06
@Caleb, worse than that, many parts of c++ are better when ignored, as Carmack and Torvalds both pointed out - so .. having learned all of cpp is not exactly beneficial. –  Morg. Aug 23 '12 at 13:05

This is more of a opinion based factor. In all technical terms "Learned" would mean having a complete knowledge of, as in you would be expected to know EVERYTHING of the language.

However in the world of programming I believe it's more about if you can program fluently in the language to complete a objective/task. It also probably means if you're comfortable with the language. Sure you could go out there and get a degree after years and years of college, but that's only to get noticed? You define when you can say you've learned a language.

share|improve this answer

When you start noticing its flaws. Once you start learning a language you are usually still busy learning now to do stuff or are much involved in it to notice where it fails (of course, this is unless you start learning it from a negative point of view just to see how worse it is compares to your favorite language so far). I'd say you don't truly know a language until you are acutely aware of the areas where it fails.

share|improve this answer
I can't agree with that. It may be true for the first language or two you learn — you may simply not know what to look for, so even the most bletcherous design failures are indistinguishable from the right way to do things. Once you've learned a few languages, you should start to be able to see language flaws soon after you start learning a new one. But then for a while in your development, you will erroneously equate "different" with "wrong." Until you learn a few languages of each major type (procedural, OO, functional, declarative...) your immediate judgements will be suspect. –  Warren Young Jul 2 '12 at 23:56

My personal answer for this is when,



share|improve this answer

At the point when your application or component can read mail, i.e. Zawinski's law, which states:


This was updated when RSS became popular to "... can read RSS feeds" and probably could be updated these days to "... can read Twitter feeds". ;-)

share|improve this answer

I think you have learned a language when you don't see it. You don't see the for cycles and data accesses, but the workflow of the algorithm.

You don't play tricks with parameter passing and array processing, magic macros. You don't think of your code as a self marketing material to show to your friends and teachers, but to express your understanding of a problem, and your will to the computer the most readable way.

You have habits that help you avoiding lots of mistakes just by following them, like: use {} code blocks and () in expressions even if you are absolutely sure that "it will be only one line" or "I am no fool and know operator precedence order".

You stop counting how many classes, patterns and framework APIs you know. This is what intellisense, the references and tutorials, and the Google is for. But when you look at a problem, you immediately know what parts it can be split, and with what tools and algorithms you will solve them.

What you do works, is elegant and small. You enjoy coding and easily find your bugs. Yes, masters also make bugs because they are humans - but they find them quickly because their code structure leads them to the right place.

And finally realize: you have learned to think, analyze and solve problems; compared to them, the actual language is secondary, just the current box of rules and tools.

share|improve this answer

Your Answer


