Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
how to really master a programming language

Let say about Java(just a sample, you can talk about C#, PHP, C++ ... it's just similar) and 10 (ten) levels, 1 is newbie and 10 is master. How can you identify someone at which level based on his knowledge? I do not tend to compare languages, I do tend to know what indicate a master or a newbie in a language and its (language's) based technology.

Yeah, I know there aren't on earth a language stand alone, it always come with a technology with it. Let say in Java, you can memorize all of its keyword and syntax in just few days, but to know it (I mean do something with it effectively), you must read the Oracle (Sun) javadoc many many times (I'm not mention the 3rd party product yet).

share|improve this question
add comment

marked as duplicate by ChrisF Sep 20 '12 at 21:24

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

1 Answer

up vote 7 down vote accepted

Languages nowadays come with frameworks. It is almost useless to know a language well without it's framework if your talking about high level languages like java and c#.

This could help: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

The most important thing about mastering a framework is knowing where to look. You don't need to memorise every single class to be good at it. If I want to write e-mail code in .Net I know to look in System.Net.Mail, if there is something I don't know I can google it. If I didn't know to look there it could have been a problem, especially with more abstract things.

The mastery of a language is similarly not only knowing all the keywords and constructs, but where they are useful. If you just learn about generics you want to find a place to use them, but the important part is using them in the right place.

If you want to assign a point system to language knowledge, here is my crappy rating system:

  1. Knows how to write statements but tends to ask many questions about obvious problems such as inaccessible variables and scope. Does not use loops. Declares many variables.
  2. Understands loops and functions and the importance of return types. Many unused variables and bad arrangement of statements or unintentional arrangement.
  3. Uses longer statements and does not declare variables unnecesarily. For instance only to send a value to a function.
  4. Writes functions to properly separate logic. no (value = true) statements or statements that could be more succinct(short and to the point)
  5. Using classes. Unnecessary public variables or functions. Tight coupling.
  6. Proper classes with intentional design constraints, hiding of implementation. Good commenting.
  7. Use of novel problem solving techniques such as interfaces and regular expressions. Defensive programming such as assertions, use of transactions, design patterns
  8. Use of introspection, generics, advanced polymorphism.
  9. Understands language semantics including memory allocation and garbage collection.
  10. Understands language internals. Is able write language tools such as compilers, debuggers and profilers.

I kind of nose-picked that list, but the idea is that advanced concepts available to the language should be used in the right places, in the right way. To master a language you should need to know how to predict and enhance it. If you really want to master a language you should write compilers and profilers, but in most cases I think that is impractical.

Frameworks have the same effect. The best way to master a framework is to extend it, enhance it and possibly write your own.

share|improve this answer
    
thanks you Tjaart. –  LongTTH May 22 '11 at 4:38
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.