Programmazione (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Etichette: Annullato Modifica da mobile Modifica da web per mobile
m Annullata la modifica di 151.31.3.11 (discussione), riportata alla versione precedente di 193.206.101.144
Etichetta: Rollback
 
(36 versioni intermedie di 23 utenti non mostrate)
Riga 1:
{{F|terminologia informatica|arg2=programmazione|maggio 2012}}
[[File:Programming_language_textbooks.jpg|thumb|upright=1.4|thumb|Un insieme di manuali di programmazione.]]
 
La '''programmazione''' è il processo di ideazione, progettazione e costruzione di [[Programma (informatica)|programmi informatici]] eseguibili volti generalmente alla risoluzione di problemi o allo svolgimento di computazioni. La programmazione è costituita da fasi come l'analisi e la generazione di [[algoritmi|algoritmi]], lo studio della loro [[teoria della calcolabilità|accuratezza]] e del [[efficienza (informatica)|consumo]] di [[risorsa informatica|risorse]], e l'implementazione di suddetti algoritmi (solitamente in un [[linguaggio di programmazione]]), fase nota come '''scrittura di codice''' ({{Inglese|coding}}).<ref>{{cita web|url=http://yearofcodes.tumblr.com/what-is-coding|titolo=What is coding|cognome=Bebbington|nome=Shaun|anno=2014|sito=Tumblr|urlmorto=|urlarchivio=https://web.archive.org/web/20200429195646/https://yearofcodes.tumblr.com/what-is-coding|accesso=3 marzo 2014}}</ref><ref>{{cita web|url=http://yearofcodes.tumblr.com/what-is-programming|titolo=What is programming|cognome=Bebbington|nome=Shaun|anno=2014|sito=Tumblr|urlmorto=|urlarchivio=https://web.archive.org/web/20200429195958/https://yearofcodes.tumblr.com/what-is-programming|accesso=3 marzo 2014}}</ref>
 
Il [[codice sorgente]] di un programma è scritto in uno o più linguaggi che sono comprensibili per i programmatori, piuttosto che nel [[linguaggio macchina]], composto dalle istruzioni in codice binario direttamente eseguite dal [[processore]]. Lo scopo della programmazione è quello di trovare una sequenza di istruzioni in grado di automatizzare lo svolgimento di un compito su un [[calcolatore]], spesso volto alla risoluzione di un dato problema. Una programmazione di qualità solitamente richiede competenza in vari ambiti, comprese la conoscenza del settore d'applicazione, di algoritmi specializzati, e di [[logica formale]].
Line 9 ⟶ 10:
== Descrizione ==
{{vedi anche|Programma (informatica)}}
 
Con ''fondamenti di programmazione'' si indicano le conoscenze basilari che un programmatore deve possedere per la programmazione in un qualunque [[linguaggio di programmazione]]. Per la scrittura di righe di [[codice sorgente|codice]] nei [[linguaggi di programmazione]] è sufficiente per un programmatore utilizzare un normale [[elaboratore testi]], o un [[programma (informatica)|programma]] ad hoc detto [[Editor di testo|editor]] spesso compreso all'interno di un [[ambiente di sviluppo integrato]] (IDE). Nel secondo caso il [[software]] individua automaticamente gli errori più banali (es. [[errore di sintassi|errori di sintassi]]) che un [[programmatore]] può commettere.
 
Line 15 ⟶ 17:
La prima operazione da svolgere per la creazione di un qualunque [[programma (informatica)|programma]] è definire nel modo più preciso ed accurato possibile quale problema intendiamo risolvere. Questo vale sia per una semplice [[funzione matematica]] che per un complesso [[database]]. L'[[input]] che il [[programma (informatica)|programma]] riceve è legato all'output che intendiamo restituire dopo l'elaborazione. Questa fase può presentare una grande complessità dovuta al lavoro astratto che impone al [[programmatore]] di immaginare il risultato finale e la sua formalizzazione.
 
=== Progettazione di un programma ===
{{vedi anche|Ingegneria del software|Ciclo di vita del software}}
[[File:A_software_reengineering_process_model.svg|thumb|Un modello di [[sviluppo software]]]]
Superata la definizione del problema che si vuole risolvere occorre progettare delle possibili soluzioni, porle a confronto tra loro e risalire a quella più efficiente (ricordando che una soluzione non efficiente per un determinato problema potrebbe essere utile allo sviluppo di altri programmi). Per confrontare l'effettiva differenza tra una soluzione ed un'altra possono essere utilizzati due diversi strumenti:
 
Superata la definizione del problema che si vuole risolvere occorre progettare delle possibili soluzioni, porle a confronto tra loro e risalire a quella più efficiente (ricordando che una soluzione non efficiente per un determinato problema potrebbe essere utile allo sviluppo di altri programmi). Per confrontare l'effettiva differenza tra una soluzione ed un'altra possono essere utilizzati due diversi strumenti:
* Uno di essi è il [[diagramma di flusso]]: con un [[Diagramma|grafico]] molto intuitivo si può illustrare un processo in tutte le fasi che lo caratterizzano. Ogni fase è collegata con le altre dalle [[linee di flusso]] che indicano la direzione del processo interno al [[programma (informatica)|programma]].
* Un efficace metodo di progettazione è lo [[pseudocodice]], una forma di scrittura in codice affine alla lingua parlata dal [[programmatore]]. La sua stesura è simile ad una scaletta di operazioni che si definiscono quando si deve eseguire una determinata azione. La scrittura dello [[pseudocodice]] deve essere dettagliata almeno quanto il codice finale, ma rispetto ad esso non si richiede una sintassi precisa lasciando il [[programmatore]] libero di concentrarsi sui problemi principali del [[programma (informatica)|programma]].
 
=== Scelta o progettazione dell'algoritmo ===
{{Vedivedi anche|Algoritmo|Struttura dati|Struttura di controllo|Flusso di esecuzione}}
[[File:Algoritmo para Procesar y Organizar en GTD.png|thumb|Esempio di [[diagramma di flusso]] di un algoritmo]]
[[File:Algoritmo dado ex.png|miniaturathumb|Esempio di [[algoritmo]] creato con [[Flowgorithm]]]]
 
Al fine di creare un [[programma (informatica)|programma]] efficiente occorre progettarne con attenzione l'[[algoritmo]]. Ad esempio potremmo creare un [[algoritmo]] che esegue i seguenti passi:
 
# Esamina una lista di numeri e riconosci il minore;
# Assegna il numero minore alla [[variabile (informatica)|variabile]] X;
Line 36 ⟶ 38:
 
I programmi informatici risultano essere molto più articolati di un processo lineare come l'addizione di due numeri. Per dare al programma una struttura più complessa si utilizzano i seguenti strumenti:
 
* Le '''diramazioni''' consistono nel fornire al codice delle funzioni che possono cambiare lo svolgimento dell'[[algoritmo]] a seconda del risultato della condizione espressa.
* I '''cicli''' sono sequenze di istruzioni eseguite ripetutamente fin quando non viene soddisfatta una determinata condizione. Ogni ripetizione è detta iterazione.
Line 45 ⟶ 46:
 
=== Scelta delle tecniche: i paradigmi di programmazione ===
{{Vedivedi anche|Paradigma di programmazione}}
 
Esistono varie tecniche di programmazione, le più comuni ed utilizzate sono le seguenti:
 
* [[Programmazione non strutturata]] - in cui il programma è costituito da un unico blocco di istruzioni (detto ''main'') che vengono eseguite in maniera sequenziale.
* [[Programmazione procedurale]] - in cui vi sono blocchi di istruzioni che fungono da sottoprogrammi e svolgono funzioni ben definite.
Line 61 ⟶ 62:
 
I linguaggi interpretati più diffusi sono:
 
* [[JavaScript]]
* [[PHP]]
* [[Ruby (linguaggio di programmazione)|Ruby]]
* [[Python]]
Riga 96:
{{vedi anche|Esecuzione (informatica)|Bug|Debugging}}
[[File:Coding_Shots_Annual_Plan_high_res-5.jpg|thumb|Attività di debugging]]
 
Completato il [[programma (informatica)|programma]] è frequente la presenza di ''errori di programmazione'' o [[bug]] derivanti da ragioni varie che possono evidenziarsi durante lo sviluppo e l'esecuzione di un codice. Questi errori possono essere essenzialmente in tre principali categorie: errori di sintassi, errori di logica ed errori di runtime. Tutti questi errori vanno necessariamente eliminati pena il malfunzionamento o il blocco dell'esecuzione del programma stesso.
 
Line 102 ⟶ 103:
Per evitare un [[debugging]] di un [[programma (informatica)|programma]] troppo complesso ed articolato è preferibile creare un [[prototipo]], ovvero una versione del risultato finale che non presenta in sé tutte le funzioni previste dal progetto originale, ottenendo una maggiore velocità di correzione dei [[bug]] principali. Alla fine di questa fase avremo il prodotto finito. Le operazioni svolte durante lo sviluppo vanno opportunamente documentate così da rendere più agevole una futura modifica.
 
=== Esempio: addizione di due numeri ===
Il primo programma didattico che un programmatore in stato di formazione scrive è solitamente [[Hello world]].
Un altro [[programma (informatica)|programma]] semplice ed intuitivo è sicuramente quello che presi due numeri in [[input]], restituisce come [[Output (informatica)|output]] la loro somma. A seconda del [[linguaggio di programmazione]] che si utilizza la struttura cambia e si articola in maniera diversa.
Line 113 ⟶ 114:
{{vedi anche|Ingegneria del software|Modello di sviluppo del software|Metodologia di sviluppo del software}}
[[File:Development_Stages.svg|thumb|Alcune fasi dello sviluppo software]]
 
Lo [[Sviluppo software|sviluppo]] di un sistema di programmi all'interno di un'[[azienda]] fa parte di un processo molto più ampio di analisi e progettazione che tipicamente coinvolge un intero team di analisti/sviluppatori. Il risultato oltre ad essere efficiente deve soddisfare specifiche richieste dell'attività aziendale per cui è pensato.
 
Line 122 ⟶ 124:
 
=== Installazione ===
{{Vedivedi anche|Installazione (informatica)|Deployment}}
Una volta creato e verificato il nuovo sistema, si procede all'installazione dello stesso all'interno dell'[[azienda]] ed al suo funzionamento a pieno regime. Tale impatto può essere traumatico per un'[[azienda]] abituata a vecchi sistemi, ragion per cui si procede in diverse maniere, secondo il caso:
 
Una volta creato e verificato il nuovo sistema, si procede all'installazione dello stesso all'interno dell'[[azienda]] ed al suo funzionamento a pieno regime. Tale impatto può essere traumatico per un'[[azienda]] abituata a vecchi sistemi, ragion per cui si procede in diverse maniere, secondo il caso:
* L{{'}}''installazione diretta'', in cui si disattiva il vecchio sistema e si sostituisce col nuovo appena creato. Se tale sostituzione presenta dei problemi non previsti in fase di sviluppo, non esiste [[backup]] dei vecchi [[programma (informatica)|programmi]], causando enormi problemi. Tale soluzione è adottata soltanto in assenza di alternative valide.
* L{{'}}''installazione parallela'', in cui il lavoro previsto per il nuovo sistema è distribuito in parti uguali su di esso e su quello [[obsoleto]], in modo da far fronte ad un eventuale problema del nuovo utilizzando temporaneamente il vecchio. Quando il nuovo sistema raggiunge un discreto livello di affidabilità, sostituisce totalmente il vecchio.
Line 131 ⟶ 133:
 
=== Configurazione ===
{{Vedivedi anche|Configurazione (informatica)|Customizzazione}}
 
Una volta installato il programma deve essere [[configurazione (informatica)|configurato]] secondo le disposizioni personali o aziendali ([[customizzazione]] o in funzione dell'output o delle funzionalità desiderato)
 
Line 137 ⟶ 140:
Superata l'installazione, il [[programma (informatica)|programma]] fornirà all'[[azienda]] un servizio, richiedendo comunque manutenzione, in cui vengono risolti i problemi riscontrati ed introdotti cambiamenti funzionali attui a migliorare le prestazioni dei programmi.
 
== Ambiti di programmazione ==
In base alla destinazione d'uso del codice si hanno vari tipi di programmazione quali ad esempio:
* Programmazione di applicazioni per dispositivi fissi ([[personal computer]], [[workstation]], [[mainframe]] ecc.);
Line 151 ⟶ 154:
== Note ==
<references />
 
== Bibliografia ==
* Dennis P. Curtin, Kim Foley, Kunal Sen, Cathleen Morin, ''Informatica di Base'', Mc-Graw Hill, 2005
 
== Voci correlate ==
{{Divdiv col|cols=23|small=no}}
* [[Algoritmo]]
* [[Computer]]
* [[Ambiente (programmazione)]]
* [[Costante (informatica)]]
* [[Codice sorgente]]
* [[Controllo di versione]]
* [[Compile-time]]
* [[Computer]]
* [[Dato]]
* [[Debito tecnico]]
Line 184 ⟶ 189:
* [[Programmazione strutturata]]
* [[Riflessione (informatica)]]
* [[Run-time]]
* [[Script]]
* [[Shell (informatica)]]
* [[Teorema di Böhm-Jacopini]]
* [[Variabile (informatica)]]
{{Divdiv col end}}
 
== Altri progetti ==
Line 196 ⟶ 202:
* {{Collegamenti esterni}}
* {{FOLDOC|programming|programming}}
* {{Garzanti}}
* [http://programmazione.html.it/guide/ Guida alla programmazione], su [http://www.html.it html.it].