Levels of knowing a programming language

1) You can read and understand what the code does

2) You can modify existing code to do something different

3) You can write code from scratch that does what you want

4) You can fully utilize the language syntax and its libraries

5) You can write programs with the language for things people don’t even imagine and use it in ways people barely believe