Understand the principles of parallel and concurrent programming in a language independent way. Know how to apply such techniques in an operating environment and programming language. Know how to develop concurrent applications based on shared memory, message passing, synchronous and asynchronous events. Understand the basics of modern parallelization infrastructures. Study classical parallelization problems.