Domande sviluppo del software
Approccio induttivo e deduttivo
- Cosa si intende con “pensiero induttivo” nel contesto dello sviluppo software?
- Perché è importante che un algoritmo non si basi su casi particolari, ma su regole generali nel processo induttivo?
- Qual è il ruolo delle “ipotesi aggiuntive” nel ragionamento induttivo?
- Quali rischi o limiti presenta il ragionamento induttivo, come illustrato dalla storia del tacchino?
- Cosa si intende con “pensiero deduttivo” nella fase di realizzazione di un programma?
- Quali passaggi compongono il processo deduttivo per passare dal modello all’algoritmo e infine al codice?
- In che modo il sillogismo è collegato al processo deduttivo nella programmazione?
- Come viene applicato il processo deduttivo nel caso dell’esempio del prodotto di Wallis presente nel testo?
- Qual è l’approccio descritto nel testo per calcolare il minimo comune multiplo (mcm) usando il pensiero deduttivo?
- 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
- In che cosa consiste la tecnica divide et impera e come viene applicata per trovare il massimo in un array?
- Qual è la differenza tra divide et impera e programmazione dinamica in termini di indipendenza dei sottoproblemi?
- Nel contesto della programmazione dinamica, perché è importante memorizzare le sotto-soluzioni?
- In che casi la tecnica greedy è applicabile e quali sono i suoi limiti?
- Perché l’algoritmo greedy può fallire nel problema dello zaino, secondo l’esempio dato?
- Come funziona la tecnica del backtracking, e quale problema viene usato come esempio per illustrarla?
- Quali caratteristiche ha un algoritmo euristico e perché non garantisce sempre la soluzione ottimale?
- Cosa si intende con algoritmo basato sulla forza bruta, e in quali scenari diventa l’unica possibilità?
- Qual è la relazione tra la complessità computazionale del problema e la scelta della tecnica di progettazione?
- Nel riepilogo finale, quali criteri vengono suggeriti per scegliere tra le tecniche (divide et impera, dinamica, greedy, backtracking, euristica, forza bruta)?
Paradigmi di programmazione
- Cosa si intende per paradigma di programmazione?
- Quali sono le problematiche tecniche che emergono quando si trasforma un algoritmo in un linguaggio di programmazione?
- In che modo il paradigma procedurale è legato al modello di Von Neumann?
- Quali sono state le limitazioni del paradigma procedurale che hanno portato allo sviluppo della programmazione strutturata?
- Cosa stabilisce il teorema di Bohm-Jacopini riguardo all’uso del goto?
- In che cosa consiste la programmazione ad oggetti e quali concetti nuovi introdusse rispetto alla programmazione strutturata?
- Qual è la relazione tra oggetti, dati (“proprietà”) e metodi nella programmazione ad oggetti?
- Come viene definita la programmazione funzionale e quali sono le sue caratteristiche distintive rispetto agli altri paradigmi?
- Quali sono i vantaggi del paradigma funzionale, specie in contesti moderni come il parallelismo o le tecnologie web/mobile?
- Perché i paradigmi di programmazione sono visti come visioni culturali e in evoluzione, non come verità immutabili?
Ciclo di sviluppo
- Quali sono le due fasi principali che si alternano durante lo sviluppo del software?
- Perché non si può avere certezza della correttezza del programma durante la sola fase di codifica?
- Nell’esempio della divisione, quali problemi emergono nel primo tentativo e come vengono risolti nei passaggi successivi?
- Cosa significa che il codice diventa una “scatola nera” durante l’esecuzione (runtime)?
- Che ruolo ha il debugging e in che modo aiuta il programmatore?
- Che cosa è la fase di build time e quali operazioni include?
- Qual è la differenza fondamentale tra compilazione e interpretazione?
- Come funzionano le “macchine virtuali” e la compilazione JIT, e quali vantaggi cercano di combinare?
- Quali tipi di controlli o validazioni possono essere eseguiti durante la fase di build per prevenire errori?
- Quali sono le fasi che compongono il ciclo di sviluppo completo del software, dal codice al rilascio (deploy)?
Linguaggi e applicazioni
- Quali sono le principali tipologie di applicazioni software descritte nella pagina?
- Cosa distingue un’applicazione da terminale rispetto a un’applicazione desktop grafica, in termini di interfaccia e tecnologie?
- Come vengono classificate le pagine web statiche rispetto a quelle dinamiche, e quali linguaggi intervengono per renderle interattive?
- In che modo un Web Service differisce da un Web Server tradizionale?
- Quali linguaggi sono citati come tipicamente usati per sviluppare applicazioni mobili (Android, iOS)?
- Che tipo di applicazioni rientrano nella categoria applicazioni IoT e microcontrollori e quali linguaggi sono comunemente impiegati?
- Quali linguaggi sono frequentemente utilizzati per applicazioni di intelligenza artificiale e perché?
- Nella sezione “Linguaggi”, qual è la relazione fra linguaggio, paradigma e utilizzo principale?
- Per ogni linguaggio citato (ad es. C, C++, Java, Python, JavaScript), qual è il paradigma primario e quali sono gli ambiti applicativi?
- Cos’è la “mappa evolutiva” dei linguaggi che suggerimenti offre?
