Acknowledgements: These lecture notes are largely based on work of others, in particular on the development of the language SDL and the theoretical work on process algebra in the form of ACP. The material in Chapters 6, 7, 9 and 10 originates from joint work with, in alphabetical order, Jan Bergstra, Willem-Jan Fokkink, Radu Soricut, Gheorghe Stefanescu, Yaroslav Usenko, and Bogdan Warinschi.