BASICS OF COMPUTING
Academic Year 2021/2022  1° YearCredit Value: 9
Scientific field: INF/01  Informatica
Taught classes: 60 hours
Term / Semester: 1°
Learning Objectives
Synthetic general description
The course introduces some fundamentals principles of Computer Scisnce but mostly focuses on an practical introduction to Programming using Python as reference language.
Focusing on the mosto common practices of Scientific computing imperative as well object oriented paradigm of programming will be considered. Some minor reference will be provided toward ad advanced use of spreadsheet computation models.
Elementary data structures (list, string, dataframes) will be introduced. Basic programing structures: conditional and case based control, iteration, recursion.
Functions and code factoring will be considered as well.
General educational objectives of teaching in terms of expected learning

Knowledge and understanding: the primary objective of the course is the students' acquisition of the "mind set" of programming, as well as an operative knowledge of Python and of some spreadsheet utilities.

Applying knowledge and understanding: it intends to provide the tools to achieve the following practical and professional skills:
 To analyze computational problems and to code algorithmic ideas for their resolution;
 To design, to describe, to implement and debug Python programs with professional tools;
 To use builtin data structures for data management in scientific computing;
 Understanding simple recursive algorithms;
 To use specific libraries for scientific calculation;
 To be able to read documentation of libraries.
 To use, modify and create efficient and interactive spreadsheets. 
Making judgements: through the examination of code examples and numerous practice exercises, the learner will be able, both independently and in a cooperative manner, to analyze problems and design and implement related software solutions.

Communication skills: the student will acquire the necessary communication skills and expressive appropriateness in the use of technical verbal language in the context of computer programming.

Learning skills: the course aims to provide the learner with the necessary theoretical and practical methodologies to be used in professional contexts and, in particular, the ability to formulate and implement adhoc algorithms for solving new computational problems as well as the possibility of easily and quickly acquiring other programming languages.
Course Structure
The course will include:
a) frontal classes of mostly theoretical content (blackboard and slides) approx 10 hours;
b) interactive laboratory classes with exercise and direct experiencs (laptop projection, internet connection), students will be encouraged to use their own laptops (not mandatory) for approx 50 hours;
The classes will be held in presence (but different decisions of the authorities).
Handson learning and reference to typical case studies will be used through the full course.
Required Prerequisites
No prerequisite is mandatory.
It will help a basic knoledge of spreadsheet usage and elementary notions of math and logic. Problem solving attitude and experience of rigorous quantitative thinking will be very helpful.
Attendance of Lessons
Requested according to the rules of the Corso di Studio
Detailed Course Content

Introduction to programming

The general structure of a digital computer.

Problems and Algorithms.

Flow chart, Structured linear notation, BöhmJacopini theorem.

Representation of information: integers and floatingpoint numbers, characters, strings.


Computational styles

"Turingable" programming languages vs spreadsheets;

Basic cycle of computation in a spreadsheet: variables (value, format, dependencies)

Compilation and interpretation for traditional programming languages.

Installation of the development environment for the Python language. First program: Editing, Running, Debugging.


Constructs of Python language

Basic syntax, data types, predefined operators, I/O management.

Numbers and mathematical functions.

Flow control: consructs of selection and iterative.

Functions and recursion.


Builtin data structures in Python

Strings.

Lists, Tuples, Dictionaries.


Object oriented programming in Python

General ideas

Basic notation

Examples of simple objects and their usage;

Ereditariety

 Advanced topics

Notable algorithms: Searching, Sorting, Merging. Basics of computational complexity.

Modules. Basic Python libraries for scientific computing and data analysis. Basic data visualization.

Textbook Information
1) A.Downey, Think Python, 2nd Ed., Grean Tea Press (online available).
2) M.Lutz, Learning Python, 4th Ed., O'Reilly (online available).
3) D.Pine, Introduction to Python for Science and Engineering, SMTEBooks  CRC Press (online available).
4) Jessen Havill  Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming Chapman and Hall/CRC; 1 edizione (14 settembre 2015)
Course Planning
Subjects  Text References  

1  Introduction to computing and scientific computing  
2  Spreadsheet model  
3  Turingable programming languages, intepretation and compilation  
4  Python, installation and usage  
5  Fundamental data types  
6  Control: conditional, iteration, recursion  
7  Basic data structures: list, string, tuples  
8  Object oriented programming  
9  Important algorithms  
10  Modules and libraries: examples and usage  
11  Using on line references 
Learning Assessment
Learning Assessment Procedures
The verification will consist of:
a) a programming assignement to be carried on in class on the exam date. It includes exercises in Python and using a spreadsheet (80% of the evaluation)
b) an interective discussion of the solution developed in the previsou exercise (20% of the evaluation)
Examples of frequently asked questions and / or exercises
Part1
Given some data (in a list or dictionary format) extract informatin about them (elementary statistical descriptors, data cleaning, data aggregation tasks).
Part 2
Given some data in a spreadsheet extract informatin about them (elementary statistical descriptors, data cleaning, data aggregation tasks).
Part 3 (optional)
Write code for data visualization using Python graphics libraries