- Teacher: Tullio Vardanega
Personal profile: Tullio Vardanega
Courses

L'insegnamento illustra le conoscenze essenziali della disciplina detta Software Engineering, facilitandone la pratica per il tramite di un impegnativo progetto didattico di sviluppo software, da svolgere in modo collaborativo, secondo metodi professionali di conduzione, monitoraggio, e valutazione qualitativa delle attività, in rapporto diretto e continuativo con il docente-committente e un cliente-mentore esterno.
- Teacher: Riccardo Cardin
- Teacher: Tullio Vardanega

What we call “level of abstraction” of any programming language is a measure of the expressive power that that language avails to the programmer: the higher that level, the larger the computational effect of a single statement of the program.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, the farther it gets from the actual operation of the underlying processor hardware. The execution of one single program statement (i.e., the achievement of the computational effects that such statement is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions. When the language compiler (or interpreter) transforms the program text into an executable binary, it effectively applies that correspondence.
Interestingly, not all of that transformation can happen statically, before execution, because a sizable fraction of such transformations applies to elements of the “program state”, i.e., the machinery needed to cause program-level entities to exist and be operated on by program execution. The simplest possible example of such machinery is what is to exist – during program execution – for the abstraction of procedure calls to become usable by the programmer. The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, such very high-level features as concurrency and distribution, which are present in some advanced programming languages, involve semantics that is not even remotely primitive to the processor hardware. Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries (standard routines) dedicated to making the relevant semantics happen at run time and therefore causing those features to accomplish what their language specification claims.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, the farther it gets from the actual operation of the underlying processor hardware. The execution of one single program statement (i.e., the achievement of the computational effects that such statement is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions. When the language compiler (or interpreter) transforms the program text into an executable binary, it effectively applies that correspondence.
Interestingly, not all of that transformation can happen statically, before execution, because a sizable fraction of such transformations applies to elements of the “program state”, i.e., the machinery needed to cause program-level entities to exist and be operated on by program execution. The simplest possible example of such machinery is what is to exist – during program execution – for the abstraction of procedure calls to become usable by the programmer. The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, such very high-level features as concurrency and distribution, which are present in some advanced programming languages, involve semantics that is not even remotely primitive to the processor hardware. Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries (standard routines) dedicated to making the relevant semantics happen at run time and therefore causing those features to accomplish what their language specification claims.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
- Teacher: Tullio Vardanega

L'insegnamento illustra le conoscenze essenziali della disciplina detta Software Engineering, facilitandone la pratica per il tramite di un impegnativo progetto didattico di sviluppo software, da svolgere in modo collaborativo, secondo metodi professionali di conduzione, monitoraggio, e valutazione qualitativa delle attività, in rapporto diretto e continuativo con il docente-committente e un cliente-mentore esterno.
- Teacher: Riccardo Cardin
- Teacher: Tullio Vardanega

L'insegnamento illustra le conoscenze essenziali della disciplina detta "Software Engineering". L'organizzazione del corso intende facilitare la pratica delle conoscenze acquisite, sia in aula che per auto-formazione, tramite un impegnativo progetto didattico di sviluppo software, da svolgere in modo collaborativo, secondo metodi professionali (cioè "a regola d'arte") per conduzione, monitoraggio, e valutazione qualitativa delle attività. Tratto saliente di tale progetto didattico è il rapporto diretto e continuativo con il docente-committente e un proponente-mentore esterno.
- Teacher: Riccardo Cardin
- Teacher: Tullio Vardanega

What we call “level of abstraction” of any programming language is a measure of the expressive power that that language avails to the programmer: the higher that level, the larger the computational effect of a single statement of the program.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, the farther it gets from the actual operation of the underlying processor hardware.
The execution of one single program statement (i.e., the achievement of the computational effects that it is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions.
When the language compiler (or interpreter) transforms the program text into executable binary, it effectively applies that correspondence.
Interestingly, not all of that transformation can happen statically, before execution, because a sizeable proportion of such transformations applies to elements of the “program state”, that is, to the machinery needed to cause program-level entities to exist and be operated upon by program execution.
The simplest possible example of such machinery is what is to exist for the abstraction of procedure calls to be available to the programmer.
The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, such very high-level language features as concurrency and distribution involve semantics that is far from primitive to the computer hardware.
Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries dedicated to making the relevant semantics happen at run time.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud.
- Teacher: Tullio Vardanega

L'insegnamento illustra le conoscenze essenziali della disciplina denominata "Software Engineering".
L'organizzazione del corso facilita la pratica delle conoscenze acquisite, sia in aula che per auto-formazione, tramite lo svolgimento di un impegnativo progetto didattico di sviluppo software, da svolgere in modo collaborativo, secondo metodi professionali (cioè "a regola d'arte") per conduzione, monitoraggio, e valutazione qualitativa delle attività.
Tratto saliente di tale progetto didattico è il rapporto diretto e continuativo con il docente-committente e un proponente-mentore esterno.
L'organizzazione del corso facilita la pratica delle conoscenze acquisite, sia in aula che per auto-formazione, tramite lo svolgimento di un impegnativo progetto didattico di sviluppo software, da svolgere in modo collaborativo, secondo metodi professionali (cioè "a regola d'arte") per conduzione, monitoraggio, e valutazione qualitativa delle attività.
Tratto saliente di tale progetto didattico è il rapporto diretto e continuativo con il docente-committente e un proponente-mentore esterno.
- Teacher: Tullio Vardanega

What we call “level of abstraction” of any programming language is a measure of the expressive power that that language avails to the programmer: the higher that level, the larger the computational effect of a single statement of any program in that language.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, hence closer to natural language and to the programmer's intent, the farther it gets from the actual operation of the underlying processor hardware.
The execution of one single program statement (i.e., the achievement of the computational effects that it is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions.
When the language compiler (or interpreter) transforms the program text into executable binary for the intended processor target, it effectively applies that correspondence. Interestingly, not all that transformation can happen statically, before execution, because a considerable proportion of the required transformations applies to elements of the “program state”, that is, to the machinery needed to cause program-level entities to exist and be operated upon by program execution.
The simplest possible example of such machinery is what is to exist for the abstraction of “procedure call” to be available to the programmer.
The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, very high-level language features such as concurrency and distribution involve highly sophisticated semantics, which is far from primitive to the computer hardware.
Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries dedicated to making the relevant semantics happen at run time.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
The latter notion provides another, perhaps more direct, intuition of how the level of abstraction can be measured quantitatively: the higher it rises, hence closer to natural language and to the programmer's intent, the farther it gets from the actual operation of the underlying processor hardware.
The execution of one single program statement (i.e., the achievement of the computational effects that it is intended to cause) entails the execution of multiple, possibly very many, individual processor instructions.
With modern programming languages, there always is a one-to-many correspondence between any single program statement and the corresponding sequence of processor instructions.
When the language compiler (or interpreter) transforms the program text into executable binary for the intended processor target, it effectively applies that correspondence. Interestingly, not all that transformation can happen statically, before execution, because a considerable proportion of the required transformations applies to elements of the “program state”, that is, to the machinery needed to cause program-level entities to exist and be operated upon by program execution.
The simplest possible example of such machinery is what is to exist for the abstraction of “procedure call” to be available to the programmer.
The technical name given to that machinery is “run-time support” for the corresponding programming language, shortened to “language runtime”.
Most evidently, very high-level language features such as concurrency and distribution involve highly sophisticated semantics, which is far from primitive to the computer hardware.
Their realization therefore requires the compilation system of the corresponding programming language to be augmented with software libraries dedicated to making the relevant semantics happen at run time.
This class aims at exploring the requirements placed on such runtimes, and their typical operation, considering exemplary paradigms of language-level concurrency and distribution, progressively ranging from single-CPU computers to the Cloud, which covers a very large spectrum of computing abstractions indeed.
- Teacher: Tullio Vardanega