- Docente: Mirko Viroli
- Credits: 6
- SSD: ING-INF/05
- Language: Italian
- Teaching Mode: Traditional lectures
- Campus: Cesena
- Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 8614)
Learning outcomes
At the end of this course, students will acquire advanced knowledge of techniques and methodologies for advanced software development. In particular, students will:-know the basic software engineering methodologies (from waterfall to agile ones), and can apply them to develop complex software systems; - know the main programming techniques of declarative (functional and logical) approaches; - be able to apply advanced programming techniques in the context of modern programming languages, and in particular, those mixing object-oriented and functional paradigms; - be able to apply advanced design patterns in the context of the various programming paradigms.
Course contents
Software quality
- rules for clean code and effective programming
- the role of design patterns
- refactoring
- agile approaches
Functional programming
- functions and functional programming
- elements of Haskell, Java 8 lambdas
- the Scala language (OO layer, functional layer, advanced typing, DSL techniques)
Logic programming
- Prolog
- relational and logical interpretation
Software engineering
- advanced design and architectural patterns
- testing, unit testing, and test-driven development
- the role of tools for software project management (DVCS and continuous integration)
- software methodologies overview
- documenting a project
Readings/Bibliography
Advanced OO programming techniques:
- "Effective Java", Second Edition, Joshua Bloch
- "Design Patterns: Elements of Reusable Object-Oriented Software", Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
- "Java 8 Lambdas", Richard Warburton
Functional languages:
- "Functional Programming in Scala", Paul Chiusano and Runar Bjarnason
- "Programming in Scala", Bill Venners, Lex Spoon, and Martin Odersky
- "Functional Programming Patterns in Scala and Clojure", Michael Bevilacqua-Linn
- "Programming Scala: Scalability = Functional Programming + Objects", Alex Payne and Dean Wampler
Logic languages:
- "The Art of Prolog", Second Edition, Leon S. Sterling and Ehud Y. Shapiro
Software Engineering:
- "Fundamentals of Software Engineering", Giorgio Ghezzi, Dino Mandrioli and Mehdi Jazayeri
- "Clean Code", Robert Cecil Martin
- "The Art of Agile Development", James Shore
- "Scrum and XP from the Trenches: How We Do Scrum", by Henrik Kniberg
- "Test Driven Development: By Example", Kent Beck
- "JUnit in Action", Second Edition, Petar Tahchiev, Felipe Leme, Vincent Massol and Gary Gregory
- "Testing in Scala", Daniel Hinojosa
Teaching methods
The course will provide lessons in room on technical and methodological aspects, and practical exercises in lab.
Assessment methods
Assignments developed during the course, and sicussion of a final project with oral examination
Teaching tools
Slides projected during lessons
Office hours
See the website of Mirko Viroli