Sommario
< Home
Stampa

Domande sviluppo del software

Approccio induttivo e deduttivo

  1. Cosa si intende con “pensiero induttivo” nel contesto dello sviluppo software?
  2. Perché è importante che un algoritmo non si basi su casi particolari, ma su regole generali nel processo induttivo?
  3. Qual è il ruolo delle “ipotesi aggiuntive” nel ragionamento induttivo?
  4. Quali rischi o limiti presenta il ragionamento induttivo, come illustrato dalla storia del tacchino?
  5. Cosa si intende con “pensiero deduttivo” nella fase di realizzazione di un programma?
  6. Quali passaggi compongono il processo deduttivo per passare dal modello all’algoritmo e infine al codice?
  7. In che modo il sillogismo è collegato al processo deduttivo nella programmazione?
  8. Come viene applicato il processo deduttivo nel caso dell’esempio del prodotto di Wallis presente nel testo?
  9. Qual è l’approccio descritto nel testo per calcolare il minimo comune multiplo (mcm) usando il pensiero deduttivo?
  10. Perché la sola conoscenza di un linguaggio di programmazione non è sufficiente se non si padroneggiano anche i processi induttivi e deduttivi?

Tecniche di progettazione di algoritmi

  1. In che cosa consiste la tecnica divide et impera e come viene applicata per trovare il massimo in un array?
  2. Qual è la differenza tra divide et impera e programmazione dinamica in termini di indipendenza dei sottoproblemi?
  3. Nel contesto della programmazione dinamica, perché è importante memorizzare le sotto-soluzioni?
  4. In che casi la tecnica greedy è applicabile e quali sono i suoi limiti?
  5. Perché l’algoritmo greedy può fallire nel problema dello zaino, secondo l’esempio dato?
  6. Come funziona la tecnica del backtracking, e quale problema viene usato come esempio per illustrarla?
  7. Quali caratteristiche ha un algoritmo euristico e perché non garantisce sempre la soluzione ottimale?
  8. Cosa si intende con algoritmo basato sulla forza bruta, e in quali scenari diventa l’unica possibilità?
  9. Qual è la relazione tra la complessità computazionale del problema e la scelta della tecnica di progettazione?
  10. Nel riepilogo finale, quali criteri vengono suggeriti per scegliere tra le tecniche (divide et impera, dinamica, greedy, backtracking, euristica, forza bruta)?

Paradigmi di programmazione

  1. Cosa si intende per paradigma di programmazione
  2. Quali sono le problematiche tecniche che emergono quando si trasforma un algoritmo in un linguaggio di programmazione? 
  3. In che modo il paradigma procedurale è legato al modello di Von Neumann?
  4. Quali sono state le limitazioni del paradigma procedurale che hanno portato allo sviluppo della programmazione strutturata
  5. Cosa stabilisce il teorema di Bohm-Jacopini riguardo all’uso del goto?
  6. In che cosa consiste la programmazione ad oggetti e quali concetti nuovi introdusse rispetto alla programmazione strutturata? 
  7. Qual è la relazione tra oggetti, dati (“proprietà”) e metodi nella programmazione ad oggetti? 
  8. Come viene definita la programmazione funzionale e quali sono le sue caratteristiche distintive rispetto agli altri paradigmi? 
  9. Quali sono i vantaggi del paradigma funzionale, specie in contesti moderni come il parallelismo o le tecnologie web/mobile? 
  10. Perché i paradigmi di programmazione sono visti come visioni culturali e in evoluzione, non come verità immutabili? 

Ciclo di sviluppo

  1. Quali sono le due fasi principali che si alternano durante lo sviluppo del software?
  2. Perché non si può avere certezza della correttezza del programma durante la sola fase di codifica?
  3. Nell’esempio della divisione, quali problemi emergono nel primo tentativo e come vengono risolti nei passaggi successivi? 
  4. Cosa significa che il codice diventa una “scatola nera” durante l’esecuzione (runtime)? 
  5. Che ruolo ha il debugging e in che modo aiuta il programmatore?
  6. Che cosa è la fase di build time e quali operazioni include?
  7. Qual è la differenza fondamentale tra compilazione e interpretazione?
  8. Come funzionano le “macchine virtuali” e la compilazione JIT, e quali vantaggi cercano di combinare?
  9. Quali tipi di controlli o validazioni possono essere eseguiti durante la fase di build per prevenire errori?
  10. Quali sono le fasi che compongono il ciclo di sviluppo completo del software, dal codice al rilascio (deploy)?

Linguaggi e applicazioni

  1. Quali sono le principali tipologie di applicazioni software descritte nella pagina? 
  2. Cosa distingue un’applicazione da terminale rispetto a un’applicazione desktop grafica, in termini di interfaccia e tecnologie? 
  3. Come vengono classificate le pagine web statiche rispetto a quelle dinamiche, e quali linguaggi intervengono per renderle interattive? 
  4. In che modo un Web Service differisce da un Web Server tradizionale?
  5. Quali linguaggi sono citati come tipicamente usati per sviluppare applicazioni mobili (Android, iOS)?
  6. Che tipo di applicazioni rientrano nella categoria applicazioni IoT e microcontrollori e quali linguaggi sono comunemente impiegati? 
  7. Quali linguaggi sono frequentemente utilizzati per applicazioni di intelligenza artificiale e perché? 
  8. Nella sezione “Linguaggi”, qual è la relazione fra linguaggio, paradigma e utilizzo principale?
  9. Per ogni linguaggio citato (ad es. C, C++, Java, Python, JavaScript), qual è il paradigma primario e quali sono gli ambiti applicativi?
  10. Cos’è la “mappa evolutiva” dei linguaggi che suggerimenti offre?