To improve object-oriented technologies, roles are proposed to support separation of concerns, object collaboration, and object evolutions. Compared with classes, there is confusion regarding roles in modeling, because classes are a well-accepted concept and mechanism of objectoriented technologies while roles are not. This paper explores the nature of classes and roles, clarifies the similarities and differences between them, compares the advantages and disadvantages of them in different aspects, proposes that a programming language should accommodate roles at the same level as classes, and points out the existing challenges in applying roles in programming languages.