-
Formal Methods
- Calculus of Information Systems - Relational approach to Program Calculation by design. Working at a higher level allows us to perform powerful proofs using somewhat simple (but progressively more complex) concepts.
- Specification and Modeling - First-order, second-order (relation) and temporal logic used with Alloy/Electrum in order to specify models about anything and reason about their properties.
- Software Testing and Analysis - Unit Testing, QuickCheck for log generation and property testing, analysing metrics and code smells and refactoring Java code.
-
Distributed Systems
- Distributed Systems Fundamentals - Mostly focused on working with asynchronous socket types, Completable Future being the most advanced methods we used for dealing with those sockets.
- Distributed Systems Paradigms - Learned about different architectures used commonly in Distributed Systems such as Actor and Event Oriented Programming, REST API's, 0MQ middleware (PUB-SUB, PUSH-PULL, REQ-REP architectures) and a very small contact with Protocol Buffers.
- Systems Deployment and Benchmarking - Fully automated methods of setting up complex applications in distributed architectures. Also learned about planning those architectures keeping in mind perfomance and scalability.