L’insegnamento, che è erogato in italiano nel secondo semestre del primo anno per la Laurea Magistrale in Ingegneria Informatica, si prefigge di far conoscere le principali tecniche per la realizzazione di applicazioni distribuite in ambito web, concentrandosi in particolare sulla programmazione front-end utilizzando il linguaggio Javascript e un framework di programmazione lato client.
Verranno trattati i principali paradigmi di programmazione necessari alla realizzazione delle funzionalità del front-end di una moderna applicazione web, sia approfondendo le problematiche a livello di codice Javascript nativo, sia vedendo l’approccio offerto da un framework predominante.
La trattazione è orientata a consentire allo studente di acquisire le abilità di base necessarie ad affrontare la valutazione e le principali scelte progettuali nell’ambito dei predetti argomenti.
The course, taught in Italian in the second semester of the first year of the Master of Science in Computer Engineering, aims at presenting the main techniques for creating distributed web applications, focusing in particular on the front-end programming, using the Javascript language and a client-side programming framework.
The main programming paradigms useful for the needs of the front-end of a modern web application will be considered, both by analyzing their impact in term of native Javascript code, and by studying the approaches provided by a dominant framework.
The topics presentation will enable the student to gain the basic skill to manage the main design choices within the mentioned topics.
Conoscenza dei principali aspetti di HTML, CSS, e Javascript moderno.
Capacità di usare Javascript in modo avanzato per la realizzazione di applicazioni web a livello di front-end.
Conoscenza di base di un framework per la realizzazione di applicazioni web in Javascript.
Capacità di realizzare applicazioni web complete, anche in modalità single page application, con l’utilizzo di semplice backend per le API lato server.
Conoscenza delle principali problematiche di robustezza, sicurezza, interoperabilità, usabilità, prestazioni delle applicazioni studiate e relative best practice.
Knowledge of the main aspects of HTML, CSS, Javascript
Ability to use a Javascript at an advanced level for creating web applications at the front-end level.
Basic knowledge of a framework for creating web applications in Javascript
Ability to create complete web applications, also in the “single page application” modality, by using a simple back-end server.
Knowledge of the main issues regarding robustness, security, interoperability, usability and performance of the studied applications, and their applicable best practices.
Capacità di programmazione in linguaggi procedurali e object oriented, e relativo debugging.
Competenze di base di HTML.
Conoscenza di base delle architetture web e del protocollo HTTP.
Conoscenze di tipo pratico di database relazionali e SQL.
Ability to program in procedural languages and object oriented languages, and corresponding debugging skills.
Basic knowledge of HTML, SQL and databases.
Basic knowledge of web architectures and of the HTTP protocol.
Richiami di architetture web, HTML5, CSS.
Layout complessi, framework CSS. Cenni di web design.
Javascript come linguaggio. Variabili e oggetti. Esecuzione nel browser ed in nodejs.
Gestione di form e di tabelle. DOM. Eventi. Callback. Closure.
Web servers ed ExpressJS.
JSON. HTTP API. Programmazione asincrona (async/await, Promise, Fetch).
Single Page Applications. Programmazione Reattiva. Introduzione a ReactJS.
Applicazioni React. Web Component. JSX.
Autenticazione e autorizzazione di API.
Architettura di un’applicazione complessa. Routing eventi. Gestione dello stato.
Deployment e pubblicazione di applicazioni.
Esempi di applicazioni.
Recall of web architectures, HTML5, CSS.
Complex layouts, CSS frameworks. Notions of web design.
Javascript as a language. Variables and objects. Execution in the browser and in nodejs.
Handling forms and tables. DOM. Events. Callbacks. Closures.
Ajax. JSON. REST. CRUD operations. Asynchronous programming (async/await, Promise, Fetch).
Single Page Applications. Reactive programming. Introduction to ReactJS.
React applications. Web Components. JSX.
Introduction to authentication and authorization.
Architecture of a complex application. Event routing. State management.
Deployment and publication of applications.
Application examples.
Oltre alle lezioni, costituito sia da lezioni frontali sia da esercitazioni svolte in aula (4 crediti), l'insegnamento comprende esercitazioni di laboratorio (2 crediti) sull'applicazione delle tecniche presentate.
I laboratori prevederanno l’applicazione delle tecniche apprese a lezione, costruendo in modo incrementale un’applicazione web di complessità crescente. Durante i laboratori gli studenti discuteranno con i docenti le loro soluzioni degli esercizi assegnati. Il materiale relativo ai laboratori sarà gestito attraverso una piattaforma Git.
In addition to classes, that include both lectures and exercises in classroom (4 credits), the course includes laboratory exercises (2 credits) on the application of the presented techniques.
The laboratories will consist in the application of the techniques learnt during the classes, by incrementally building a web application of increasing complexity. During the labs the students will discuss with the teachers on their solutions to the assigned exercises. The lab material will be managed through a Git-based platform.
Il docente fornirà il materiale (copia delle trasparenze e link a risorse disponibili online) che sarà disponibile sul sito del corso.
Molte risorse informative sono liberamente disponibili su web (https://developer.mozilla.org, https://reactjs.org/, https://javascript.info/, ecc).
Alcuni libri di testo suggeriti per approfondimenti personali:
M. Haverbeke, Eloquent Javascript (https://eloquentjavascript.net/)
A. Accomazzo, A. Lerner, N. Murray, C. Allsopp, D. Guttman, T. McGinnis, Fullstack React, 2019
The teacher will provide the material (copy of slides and links to on-line resources) on the website of the course.
Many useful resources are also freely available on the web (https://developer.mozilla.org, https://reactjs.org/, https://javascript.info/, etc).
Some suggested textbooks for personal in-depth study:
M. Haverbeke, Eloquent Javascript (https://eloquentjavascript.net/)
A. Accomazzo, A. Lerner, N. Murray, C. Allsopp, D. Guttman, T. McGinnis, Fullstack React, 2019
Modalità di esame: Prova orale obbligatoria; Elaborato progettuale individuale;
Exam: Compulsory oral exam; Individual project;
...
L'esame consiste nello sviluppo di un progetto individuale e una discussione orale. L’esame verificherà la conoscenza degli aspetti teorici e pratici descritti in precedenza tramite un progetto (da svilupparsi individualmente) seguito da una discussione orale.
La prova consiste nel creare una applicazione web usando le conoscenze illustrate nel corso.
Per la prova viene assegnato un esercizio 20 giorni prima di ogni appello. Solo gli studenti che hanno sottomesso la loro soluzione entro la scadenza sono ammessi alla prova orale.
La prova web viene valutata insieme al docente durante l’orale tramite la verifica delle funzionalità dell’applicazione web, e delle pratiche di programmazione usate, secondo una checklist dipendente dalla prova. Viene anche verificata la conoscenza puntuale da parte dello studente del codice consegnato e la sua capacità di discutere il progetto con riferimento agli argomenti trattati nel corso. Tutto il processo di assegnamento, sviluppo e consegna sarà gestito tramite la piattaforma GitHub. La discussione orale avverrà in un’aula o un laboratorio.
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Compulsory oral exam; Individual project;
Exam modality: mandatory oral colloquium to discuss the individual project.
The exam consists in the verification of the above described expected knowledge and practical skills, through a practical test, followed by an oral discussion. The test consists in creating a web application using the knowledge gained in the course.
For the test, an exercise will be assigned about 3 weeks in advance of each exam date. Only students who submit their solution before the deadline are admitted to the oral test.
The web application is evaluated by the teacher during the oral session, by verifying the functionality of the web application, the adopted programming techniques, according to a checklist that depends on the test. The detailed knowledge of the submitted source code by the student is also checked, with his ability to discuss the project in light of the course topics.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.