cod. 1002526

Academic year 2018/19
1° year of course - First semester
Professor responsible for the course unit
integrated course unit
9 credits
hub: PARMA
course unit

Learning objectives

The main goal of the course is to provide students with the ability to understand the principles of informatics and programming:
* Data representation
* Computation, languages and abstract machines
* Architecture of computer systems
* Object oriented programming paradigm
* Introduction to software engineering

The ability to apply the listed knowledge elements regards the development of so-called "computational thinking":
* Decomposition of complex problems
* Solution of problems through recursion
* Composition of objects into complex systems
* Modelling with various levels of abstraction


None. However, the student is supposed to know the basic computer and Internet operations - the equivalent of modules 1, 2, 3 and 7 of ECDL (European Computer Driving Licence) Syllabus.

Course unit content

1. Introduction to programming
1.1. Structured programming
1.2. Data collections and flows
1.3. Functions and recursion
1.4. Objects and abstractions
1.5. Graphical interfaces

2. Introduction to computer science
2.1. Data representation
2.2. Concept of computation
2.3. Computing systems
2.4. Software development

Full programme

1. Introduction to programming (24 hours, in classroom + 24 hours, in lab)
1.1. Structured programming
1.1.1. Program structure
1.1.2. Variables and data types, expressions
1.1.3. Conditions
1.1.4. Cycles
1.1.5. Nesting
1.2. Data collections and flows
1.2.1. Vectors
1.2.2. Matrices
1.2.3. Maps
1.2.4. I/O operations on console and text files
1.3. Functions and recursion
1.3.1. Parameter passing
1.3.2. Scope of variables
1.3.3. Stack and activation records
1.3.4. Recursion
1.4. Objects and abstraction
1.4.1. Encapsulation
1.4.2. Composition
1.4.3. Dynamic allocation
1.4.4. Inheritance and polimorphism
1.4.5. Substitution principle
1.5. Graphical interfaces
1.5.1. Basic elements
1.5.2. Layout of elements
1.5.3. Signals and events
1.5.4. Animations

2. Introduction to computer science (24 hours, in classroom)
2.1. Data representation
2.1.1. Two’s complement and floating point notations, boolean algebra
2.1.2. Text representation, ASCII and Unicode encoding
2.1.3. Structured documents and HTML
2.1.4. Image and sound representation
2.2. Concept of computation
2.2.1. Finite state automata
2.2.2. Regular expressions
2.2.3. Touring machine, von Neuman architecture
2.2.4. Programming languages and paradigms
2.2.5. Computational complexity, searching and sorting algorithms
2.3. Computing systems
2.3.1. Computer architecture
2.3.2. Operating systems
2.3.3. Information systems and databases
2.3.4. Computer networks and World Wide Web
2.4. Software development
2.4.1. Development methodologies and software quality
2.4.2. Contracts
2.4.3. Testing
2.4.4. Versioning


- Fondamenti di informatica e lab. (A.A. 2014-2015). McGraw-Hill custom publishing. ISBN 978-13-082-4813-4 (25€, nelle librerie universitarie )
- A.B. Downey et al.: How to Think Like a Computer Scientist: Learning with Python 3, 3rd Edition -
- M. Beri: Python, Apogeo Pocket, 2010, 978-8850329151 (~8€)
- C. S. Horstmann: Fondamenti di C++, McGraw-Hill Education, 2003, 978-8838661051 (~43€, 768pp.)

Teaching methods

Lessons in classroom, presenting slides which are provided in advance to students. Guided solution of exercises in classroom. Programming exercises in laboratory.

The laboratory exercitations are central for the course. The proposed exercises deal with the same general matters of classroom lessons. Their objective is introducing the principles of object-orientd programming, leading the student to the solution of problems with a growing level of complexity.

Assessment methods and criteria

The examination consists of a test about the basics of computer science (brief exercizes and quizzes to answer in half an hour), a programming test (an object-oriented program to develop in lab, in 3 hours) and a talk. A constant and particularly effective participation to exercitations could exonerate from the final programming test.

Other information

Alternative textbooks

- M. Dawson: Python Programming for the Absolute Beginner, Course Technology, 2010, 978-1435455009 (~21€, 450pp.)
- K. A. Lambert: Programmazione in Python, Apogeo, 2012, 978-8838786990 (~29€, 384pp.)
- MIT: Introduction to CS and Programming - Video delle lezioni, Pyhton 2 -
- M. Dawson: Beginning C++ Through Game Programming, Course Technology, 2010, 978-1435457423 (~25€, 430pp.)
- A. Lorenzi, V. Moriggia: Programmazione ad oggetti e linguaggio C++, Atlas, 2004, 978-8826811956 - Testo per le superiori (~12€, 380pp.)
- S.B. Lippman, J. Lajoie, B.E. Moo: C++ Primer, Addison Wesley, 2012, 978-0321714114 (~36€, 940pp.)