definition of a good programmer

A beginner knows a programming language and perhaps technologies, patterns and frameworks.

A good programmer knows how to apply them to solve and represent complex problems and real-world systems.

An advanced programmer can also make the solution maintainable, and meet other non-functional requirements.