Master Course: Concepts of Programming Languages - Rosenheim Technical University - 2019/2020
The course "Concepts of Programming Languages" is designed as a master course. Solid programming skills in Java/C/C++ are required. I also assume that students have introductory skills in Scala and Python. For all exercises and examples, the course uses Go (Golang) as concrete example. We will look at typical styles and application areas like OOP, FP, Parallel-, Distributed- or Systems Programming.
- Learn the Concepts of Programming Languages
- Learn how Go differs from Java, C/C++, Scala and languages
- Get solid skills to pick the right language for a given problem
It is somewhat unusual, that we focus on Go in all Lectures. Master students are typically well skilled in Java. They have some basic knowledge in C/C++, maybe JavaScript, Ruby, Python or Scala. Since Go is a multi paradigm language, the lecture uses Go to demonstrate the basic concepts of these languages and discuss features which are missing in Go. We go from concrete to the abstraction and not vice versa. Each student will compare Go to one of these languages as Semester Work: Modula, Ada, Smalltalk, C++, Eiffel, Objective C, Haskell, Clojure, F# , Erlang, Scala, D, Occam, Rust, Swift, JavaScript, Ruby, Python, Kotlin. We will release the results here.
- Overview of Programming Languages, Why Go?
- Setup, HelloWorld, Swap, Basic Types and Variables, Programm Arguments, Working with Go Flags, CLI Libraries
- About
- Overview
- Introduction to Golang
- Exercise 1
- Pointer, Arrays, Maps and Object Oriented Programming
- Reasons for Go https://www.youtube.com/watch?v=5kj5ApnhPAE
- Slides
- Exercise 2.1
- Exercise 2.2
- Structs, Interfaces, Embedding, Polymorphism
- Slides
- Exercise 3.1 - Interfaces, Polymorphism and Embedding
- Exercise 3.2 - Mail Component and Service Locator
- Practicing Go using the example of parsers for boolean expressions
- Slides
- Exercise 4.1 - Lexer for boolean expressions
- Exercise 4.2.1 - Abstract Syntax Tree (AST)
- Exercise 4.2.2 Recursive Descent Parser
- Exercise 4.3 Antlr
- Introduction in Functional Programming, the Lambda Calculus and the implementation in Go
- Slides
- Exercise 5.1 - Warm Up with functional Programming in Go
- Exercise 5.2 - Functional Composition
- Exercise 5.3 - Map, Filter, Reduce with Streams
- Exercise 5.4 - Functional Word Count
- Why concurrent programming matters! Go routines and channels, Go concurrency patterns, The dining philosophers problem
- Slides
- Exercise 6
- Introduction into Consensus Protocols
- Raft
- Implementing Raft with Go
- Slides