Sciences
Subject: INFORMATION TECHNOLOGY (A.A. 2023/2024)
degree course in CHEMISTRY
Course year  1 

CFU  6 
Teaching units 
Unit Informatica
Related or Additional Studies (lesson)

Moodle portal  
Exam type  oral 
Evaluation  final vote 
Teaching language  Italiano 
Teachers
Mauro LEONCINI
Angelo FERRANDO
Overview
The course aims to provide basic knowledge of computer programming and its use for solving (simple) problems of scientific nature through the development and testing of algorithms written in the Python language.
The teaching also has a more purely cultural objective, in light of the pervasiveness of information technologies and their relative ease of use. The aim is at shedding some light on "what is under" the hood of the myriad of apps and other ways in which nowadays one uses essential services, but whose real complexity is somehow inversely proportional to the simplicity of their use.
At the end of the course the student will have developed fundamental problem solving skills, which can be translated into a solid methodology which includes:
 analysis of the problem and of the requirements for the software solution to be developed
 representation of the various instances of the problem in terms of abstract data structures
 choice or development of an algorithm able to solve the problem at hand
 translation of abstract data and algorithms into Python programs
 testing and evaluation of the fulfillment of any possible efficiency requirements
 visualization and analysis of the results
The actual examples used will possibly be taken from computational problems of a scientific nature.
Admission requirements
There are no formal requirements although some degree of mathematical maturity makes the learning path easier. From a practical standpoint, a certain familiarity with the use of the PC is useful, e.g., turning it on/off, storing/moving/erasing files, printing documents, using the main functions of a word processor, browsing the Web, ...
Course contents
The course is scheduled for the second semester and involves a total of 48 hours of frontal teaching which will take place entirely in the computer lab (unless otherwise prescribed depending on the pandemic situation). The course contents reported below, in terms of hours, is to be understood as purely indicative. It may in fact undergo changes during the course of teaching in light of the feedback and participation of students.
 Introduction to the goals and methods of computer science. Introductory elements of the Python language, primitive operations, elementary data types and Python variables. Conditional statements, proper alignment (indent) of Python statements, loops and iterative structures. (5h)
 Functional abstraction, Python functions and their use, scope (visibility) of variables, functions as parameters. Simple (scalar) and compound data, tuples and lists, concepts of mutability and immutability, iteration on lists, insertion and removal of elements from a list, other operations, aliasing. Side effects. (4h)
 Objectoriented programming, classes and objects, object instantiation. Attributes and methods. The concept of inheritance and its importance for the reuse of software. Some magic methods in Python. Development of a number of examples (8h)
 Problems of searching in/sorting collections of elements. Bruteforce approach, bisection search, bubble sort. Recursion and merge sort. (6h)
 Optimization problems, knapsack problem, exact solution (by bruteforce method) and approximate solution using the greedy method, example of the composition of a diet. Scheduling algorithms. (6h)
 Graphs as abstract models for the representation of problems. Graph representation in Python, the problem of computing the shortest path between two vertices of a directed and weighted graph, breadth search algorithm (BFS). Hints on how search engines work. (5h)
 Probability and stochastic models, stochastic models for the investigation of phenomena, "stochastic" primitives in Python, simple random processes (tossing a coin and rolling a dice) and their analysis, independent events, the birthday paradox, simulation in Python. Random walks, simulation of particle motion, simple use of pylab for the graphical representation of functions and histograms. (8h)
 Matrices and vectors. Solving systems of equations. (5h)
Teaching methods
The course involves lab classes only. In this way, the theoretical concepts are immediately translated into experiments carried out by the students under the guidance of the teacher. During the lab hours, students' questions and interventions are not only admitted but encouraged. Attendance is not compulsory, but strongly recommended. The course will be delivered in Italian. All technical and organizational information about teaching will be uploaded to the Dolly platform. The student is invited to register and consult this platform regularly. However, it should be noted that the additional teaching material provided by the teacher will be uploaded to another platform (directions will always be posted at moodle.unimore.it).
Assessment methods
Final verification is done with two tests: development of a program in lab and oral examination. The practical test, in lab, will last 1h and 30m max, and will consist of writing a Python program (or a part of a program, to be included in a "template" program proposed by the teacher) aimed at verifying the knowledge of the language and the ability to use it concretely to solve a simple problem. The oral exam wll consist of an interview of about 30 minutes in which the teacher, starting from the analysis of the program presented by the student, can ask questions about the choices made, the reasons underlying these choices, any alternatives that could have been considered, overall efficiency of the program, as well as verifying possible errors made.
Learning outcomes
Knowledge and understanding
At the end of the course the student will know the fundamental concepts and terminology of modern computing, the key concepts of programming and will be able to develop, starting from the algorithmic project, simple Python programs to solve computational problems.
Application of knowledge
The student will be able to use the knowledge to solve, or contribute to solve, problems of interest for his/her job. S/he will know in which application areas to use ICT technique and, in particular, when to apply algorithmic and programming tools.
Autonomy of judgment.
The student will have the ability to choose between alternative solutions that best suit to the problems of interest.
Communication skills.
The student will have the ability to present in an appropriate and exhaustive way data and results through IT tools and the ability to collaborate with other students to solve problems related to the use of computer systems.
Learning skills.
The student will quickly learn to use computer tools similar to those seen in class (or lab), and to learn other programming languages.
Readings
Guttag, John. Introduction to Computation and Programming Using Python: With Application to Understanding Data. 2nd ed. MIT Press, 2016. ISBN: 9780262529624.
Altro materiale didattico (in particolare programmi python ed esercizi) verrà reso disponibile dal docente via Web.