Undergraduate students of a Software Engineering degree must be able to select the appropriate paradigm to solve a problem. They must also be able to know the foundations of concurrent and parallel programming. In the Software Engineering degree taught in the University of Oviedo, both competencies were assigned to the Programming Technology and Paradigms course. In this article, we present the approach we followed in the design of that course to teach object-oriented, functional, concurrent and parallel programming to second year undergraduate students with basic knowledge of Java. Due to the time limitations of the course, the proposed design uses one single programming language besides Java. We describe the most important challenges we faced and how we addressed them.