Professors
Danilo Pianini
Giovanni Ciatto
Prioritize the forum
- All technical question
- Any other non-personal question
When using the email
- Include both teachers, always
Office hours
Resources
- These slides should contain everything you need
- code examples produced during the lecture will be available right after
- most code is already on GitHub
Slides will be produced with a rolling release model.
Books
No mandatory books, but there are both:
- Recommended readings
- Additional useful books
On the course webpage
Organization
Lectures in lab with immediate hands-on.
- Thursday 11:00–14:00 (3h) — Room 2.5
- Friday 11:00–14:00 (3h) — Lab 4.2
Changes will be published on the forum
Goals
- Learn how to design software systems, following a domain-, model-, and/or test-driven approach
- Zero-overhead from domain definition to executable code
- Agile development practices, DevOps philosophy
- High automation + technical excellence
- Understand analogies and differences among programming platforms
Prerequisites
- Knowledge of Java, Scala is a nice to have
- Minimal ability with
git
- initializing and managing the repository options
- committing
- branching and merging
- fetching and pushing
- A curious mindset
- Never stop when it works, stop when you know why it does
- This is especially true in the LLM era
Exam
Discussion of a group project
-
Must feature:
- Domain-driven design
- Clear development process and DevOps practices
- Full-scale automation
- Including continuous integration and delivery
- Deploy automation via containerization and/or orchestration
- Technically involve 2+ target platforms
- e.g., JVM, NodeJS, Python, C, C++, Rust, Go, etc.
- two targets are different if they run on a different runtime (e.g., native + JVM)
- two targets are likely different if they use different build systems (but there are exceptions: Scala/sbt + Java/Gradle are not considered different targets)
-
Can be a joint effort with other courses
- We care about the domain modeling and the application of DevOps techniques
- You can pick a project of another course, apply them there, and it is fine for SPE
-
Can be a project created for SPE alone
- If you are short on ideas, we can help :)
-
Can be a project that covers SPE + thesis
“Project work”
The exam’s project can be developed a “project work”, namely,
a project whose requirements are provided by a real-world company,
which acts as a commissioner.
- The students will interact with the company to apply Domain-Driven Design on a real piece of software.
- The project will be open source
- All the features required for a “normal” exam project still hold
It is an opportunity to learn by doing in a context closer to the industry.
Available project works will be posted on the course site on https://virtuale.unibo.it/
Software
Required
- A working internet connection
- A working JDK installation
- Docker
Recommended
- Kotlin
- Gradle
- IntelliJ Idea
- Visual Studio Code
- A decent Unix terminal
- I recommend a well-configured
zsh shell
- ki-shell (Kotlin Interactive Shell)
Course Container
Feeling lazy?
We prepared a container with all the course’s software:
Follow the instructions at https://github.com/DanySK/docker-linux-didattica
Feeling Windows-y?
The container can be converted into a WSL2 Linux distribution.
(Instructions available in the same repository as above)
Software in lab
The PCs are equipped with the WSL2 image
- There should be a link on the Desktop
- Double-clicking it should pop up a
zsh shell
- Wait for the first terminal to show before starting others