There are several ways in making learning activities more engaging and interesting to computer science students. In addition to traditional higher education (curriculum, project-based approaches, lectures, labs), we consider competitive approaches such as hackathons to develop hard and soft skills. Computer science education needs to change requirements for hard and soft skills. In order hard skills university CS education has to capture the changes behind the trends, such as big data, artificial intelligence, cloud computing, etc. Developing soft skills is important teamwork, end-user awareness, collaboration, etc. This study aims to present the various ways to implement hackathons in the context of CS education. We also present a taxonomy of hackathons based on our experiences and observations from 2016 to the present. We aim to share our lessons learned on the following issues: (1) How can hackathons be designed in CS education to teach students necessary skills and competencies; (2) what kinds of programming projects monitoring and evaluation we need during hackathons.