In my few years of programming, I've toyed with everything from Ruby to C++. I've done everything from just learning basic syntax (Ruby) to completing several major (for me) projects that stretched my abilities with the language. Given this variety (and the fact that truly learning a language never stops), when can I say I know (or have learned) a language?
|
|||||||||||||||||||||
We're looking for long answers that provide some explanation and context. Don't just give a one-line answer: please explain why you're recommending it as a solution. Answers that don't explain anything will be deleted. See Good Subjective, Bad Subjective for more information. |
|||||||||||||||||||||
|
At what point can you say that you've "learned" a language like English or French? I think most people would accept that you've learned a language when you can use it to communicate. You don't have to know every word or understand every idiom, but you should know most of the (rather small) subset of the language that people use in daily conversation. Having "learned" a language to that extent, you can continue to learn more as you use the language daily and expose yourself to more and more of it. By the time you die, you still won't know all there is to know about the language, but nobody will say that you never "learned" the language. So it is, I think, with computer languages. You can say that you "know" a language like C++ or Ruby when you can write useful programs in it. If you need to quantify the degree to which you know the language, use the same terms that you'd use for a human language. Say "I know a little C++" or "I know conversational C++" or "I'm fluent in C++" to mean that you know just enough to scrape by, enough to get useful things done, or that you're an expert, respectively. |
|||||||||||||||||||
|
|
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? |
|||||||||
|
|
I think people are focusing on the finality of the word "learned" being perfect tense it means you're finished learning. And as everyone noted, programming languages are living entities just like spoken languages. For example someone who had complete mastery of C# 2 would look at C# 3 with LINQ, Lambdas, 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.
|
|||||||
|
|
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. |
|||||||||||||||
|
|
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. |
|||
|
|
|
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. |
|||
|
|
My personal answer for this is when,
From there on, I wouldn't call it learning, but mastery. |
||||
|
|
|
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". ;-) |
||||
|
|
|
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. |
|||
|
|
is a very subjective phrase. Do you mean that you have learned the framework (ie, .net 4.0), or the language rules, or the compiler/syntax rules? If you are well versed in language types (eg, OO, functional, etc...) you should be able to apply these techniques using any language once you know the basic syntax. For instance, you could learn design patterns in Ruby but then apply them to a Java project. Also, it would be almost impossible to learn every class of a particular framework/language. If you know the techniques/concepts, a quick 'google' can be used to confirm 'refernce' material (specific syntax use etc). |
|||
|
|