1 - Uses a language without any knowledge of its idioms and conventions. As an example, writes Python code that looks like C or Java.
2 - Is aware of basic idioms taught in a tutorial. For Python, these would be using for ... in list rather than for i in range(len(list)), and other similar basic python constructs.
3 - Knowledge of community idioms and the standard library. with statements, using os.path for handling file paths are indications of this level.
4 - Adept of use of a language and its ecosystem found only after writing a lot of code with it.
1 - Code is completely unreadable without expending much effort. Intention is opaque: symptoms -- functions longer than a page, doing a lot of data manipulation without any indication why it's doing so.
4 - Code is not only very readable, appropriate use of comments and docstrings are in place. Symptoms: functions that do one thing, and its purpose is obvious in the function name. Utility functions are documented. For the hairier parts of the code, there are comments to help reviewers.
This is a scale. 1 - Completely unreadable <--------> 4 - Much readable
1 - Implemented the bare minimum needed to pass the project: a list of movies and a detail view. UI looks bland and uninspired.
2 - Implemented at least 1 more feature. UI is usable and decent.
3 - Implemented at least 1 more feature. UI is great and easy to use.
4 - Implemented at least 1 more feature. UI is great and full of surprises!