This subject introduces students to advanced programming concepts that are increasingly used in modern software development projects. Mastery of these concepts will enable students to choose appropriate programming techniques for real-world software projects, and to take advantage of the latest advances in popular programming languages such as Java and Python. The subject is divided into three modules – advanced topics in object-oriented programming, functional programming, and programming with concurrency. Specific topics include interfaces, abstract classes, programming with exceptions, generic types, collections, recursion, lambda functions, threads, and synchronization.