Un insieme di manuali di programmazione.
La
programmazione
e il processo di ideazione, progettazione e costruzione di
programmi informatici
eseguibili volti generalmente alla risoluzione di problemi o allo svolgimento di computazioni. La programmazione e costituita da fasi come l'analisi e la generazione di
algoritmi
, lo studio della loro
accuratezza
e del
consumo
di
risorse
, e l'implementazione di suddetti algoritmi (solitamente in un
linguaggio di programmazione
), fase nota come
scrittura di codice
(in
inglese
coding
).
[1]
[2]
Il
codice sorgente
di un programma e scritto in uno o piu 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 e 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 qualita solitamente richiede competenza in vari ambiti, comprese la conoscenza del settore d'applicazione, di algoritmi specializzati, e di
logica formale
.
Tra gli incarichi legati alla programmazione ci sono la gestione del codice sorgente, il suo
collaudo
e il
debugging
, nonche l'implementazione di
sistemi di automazione
, e la gestione degli
artefatti
derivati, come il codice macchina. Queste fasi possono essere considerate parte del processo di programmazione, ma sono piu spesso associate al piu ampio termine "
sviluppo del software
", mentre si tende a racchiudere il termine "programmazione" piu strettamente nell'effettiva scrittura del programma. L'
ingegneria del software
combina tecniche e principi associabili all'ingegneria con lo sviluppo del software. Ad esempio, chiunque sia coinvolto nello sviluppo di un programma puo a volte occuparsi di
reverse engineering
, nel cercare di comprendere un programma gia esistente con lo scopo di implementare in qualche modo le sue funzioni.
[3]
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
nei
linguaggi di programmazione
e sufficiente per un programmatore utilizzare un normale
elaboratore testi
, o un
programma
ad hoc detto
editor
spesso compreso all'interno di un
ambiente di sviluppo integrato
(IDE). Nel secondo caso il
software
individua automaticamente gli errori piu banali (es.
errori di sintassi
) che un
programmatore
puo commettere.
I passi con cui si sviluppa un programma efficiente sono simili tra di loro per quasi tutti i contesti di programmazione (aziende, hobby, lavoro, ecc.). Le prime fasi sono strettamente legate alla
logica
di quello che si va a creare e del suo funzionamento, mentre le ultime sono orientate verso lo specifico
linguaggio di programmazione
che si intende utilizzare.
La prima operazione da svolgere per la creazione di un qualunque
programma
e definire nel modo piu 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
riceve e legato all'output che intendiamo restituire dopo l'elaborazione. Questa fase puo presentare una grande complessita dovuta al lavoro astratto che impone al
programmatore
di immaginare il risultato finale e la sua formalizzazione.
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 piu 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 e il
diagramma di flusso
: con un
grafico
molto intuitivo si puo illustrare un processo in tutte le fasi che lo caratterizzano. Ogni fase e collegata con le altre dalle
linee di flusso
che indicano la direzione del processo interno al
programma
.
- Un efficace metodo di progettazione e lo
pseudocodice
, una forma di scrittura in codice affine alla lingua parlata dal
programmatore
. La sua stesura e 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
.
Esempio di
diagramma di flusso
di un algoritmo
Esempio di
algoritmo
creato con
Flowgorithm
Al fine di creare un
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
X;
- Stampa la variabile X;
E importante precisare che la lista di passi deve contenere istruzioni chiare, precise e non ambigue, ovvero il cui significato non dipenda dal contesto in cui lo si scrive, ma sia chiaramente identificabile.
I programmi informatici risultano essere molto piu articolati di un processo lineare come l'addizione di due numeri. Per dare al programma una struttura piu 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 e detta iterazione.
I programmi possono inoltre essere divisi in sezioni in modo che i vari compiti possano essere eseguiti attraverso sequenze piu semplici di passi. A tale scopo viene suddiviso il
programma
in
funzioni
. Il programmatore esperto salta spesso questa fase di sviluppo in termini di algoritmo e passa direttamente alla fase successiva pensando direttamente alla soluzione algoritmica del problema dato in termini di linguaggio di codifica ovvero
linguaggio di programmazione
o in
pseudocodice
.
Un programma molto semplice da utilizzare per la creazione di questi ultimi e
Flowgorithm
, oppure
Scratch
, che permettono di realizzare questi algoritmi, compresi di conversione in codice pronti per la programmazione.
Esistono varie tecniche di programmazione, le piu comuni ed utilizzate sono le seguenti:
- Programmazione non strutturata
- in cui il programma e 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.
- Programmazione modulare
- in cui e possibile utilizzare procedure messe a disposizione da altri programmi e permettere a questi di poter utilizzare le proprie.
- Programmazione orientata agli oggetti
- in cui vengono creati degli "oggetti" che possono funzionare autonomamente o interagire tra di loro. Ogni oggetto possiede in se delle specifiche proprieta e funzioni (se ipotizziamo come oggetto un'automobile, una caratteristica sara il suo colore o la sua marca e le funzioni saranno l'accelerare o il rallentare). Ciascun paradigma puo sfruttare uno o piu
linguaggi di programmazione
a basso, medio o alto livello di astrazione.
Esempio di
codice sorgente
scritto in linguaggio
C++
Esempio di programma scritto in
Java
I linguaggi di programmazione sono molti e si distinguono principalmente in due categorie:
interpretati
e
compilati
.
I linguaggi interpretati piu diffusi sono:
Inoltre sono interpretati anche gli
script
di
shell
(i cosiddetti file di
batch
) e gli altri script in uso su
Internet
(
Jscript
,
VBScript
,
Batch
...). Il codice di un programma interpretato viene salvato cosi com'e, e viene poi letto da un
interprete
, che e un programma che gira sul
sistema operativo
in uso. I linguaggi di programmazione compilati richiedono invece che il codice, una volta terminato, sia processato da un
compilatore
che, convertendolo in
linguaggio macchina
, ne permetta l'esecuzione da parte della
CPU
.
I linguaggi compilati piu famosi sono:
I programmi interpretati sono piu lenti ma piu facili da creare e girano su molti sistemi operativi, a patto di avere lo stesso interprete, e che il
dialetto
del linguaggio sia comune. I linguaggi compilati, molto spesso, hanno invece degli
standard ISO
, o comunque regole universali, le quali permettono di compilare un programma senza modifiche su piu architetture, anche da una sola macchina, a patto di avere un compilatore adeguato.
Java
e pseudocompilato, ossia viene tradotto in un linguaggio intermedio, detto
bytecode
, il quale e una specie di linguaggio macchina, che viene poi passato all'interprete, che deve essere disponibile per il tipo di macchina che si vuole utilizzare. Il
Visual Basic
, per contro, non e un linguaggio standard, ma un
ambiente di sviluppo
creato per sviluppare programmi in un Basic ad oggetti sviluppato dalla
Microsoft
, e come tale disponibile solo sui loro OS. Non esistendo uno standard riconosciuto, non viene garantita la compatibilita tra versioni successive, e non e possibile utilizzarlo pienamente su altri sistemi operativi o altre CPU che quelle supportate dalla Microsoft.
Codice sorgente scritto in
Python
Avviene in questa fase la scelta del
paradigma di programmazione
e del relativo
linguaggio di programmazione
con cui sviluppare il progetto (es.
Java
,
C++
,
BASIC
,
Perl
, ecc.), passando dai
diagrammi di flusso
o dallo
pseudocodice
, ad una sintassi piu rigorosa e specifica del linguaggio scelto, redigendo il
codice sorgente
.
Al riguardo un teorema dell'
informatica teorica
(il
teorema di Bohm-Jacopini
) afferma che per la codifica dell'algoritmo nel codice sorgente di un certo linguaggio e necessario l'uso opportuno, eventualmente combinato, di solo tre
strutture di controllo
del flusso di esecuzione: la sequenza o blocco di
istruzioni
, la
selezione
e l'
iterazione
appoggiandosi all'uso di
variabili
,
costanti
,
tipi di dato
,
puntatori
,
operatori aritmetici
e
logici
,
strutture dati
,
funzioni
,
parametri
, istruzioni dei
canali standard
(
standard input
,
standard output
e
standard error
), eccetera.
L'operazione di
codifica
e quella piu soggetta ad errori di natura logica e sintattica. In teoria il
programma
potrebbe essere pronto in questa fase, ma in realta esso presenta nella quasi totalita dei casi degli errori (
bug
), che verranno analizzati con la fase successiva. Tipicamente lo sviluppo di un'applicazione avviene in locale sul PC dello sviluppatore che potra operare una prima fase di test verificando la bonta o meno dell'output del programma svolto.
Talvolta un progetto software e portato avanti da una
comunita
di utenti distribuita in rete attiva attraverso
newsgroup
, come accade ad esempio per diverse
distribuzioni GNU/Linux
. Quando da un progetto software se ne sviluppa un altro sullo stesso tipo di programma, ma portato avanti da un'altra community si parla di
fork
.
Attivita di debugging
Completato il
programma
e 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.
La fase di verifica e di messa a punto del
programma
ha lo scopo di ricercare e correggere gli errori riscontrati ed e detta
debugging
. Si tratta di una fase molto lunga ed importante in cui il
programmatore
verifica la bonta del proprio lavoro. La correzione di un
bug
potrebbe essere causa di nuovi errori ed occorre quindi prestare la massima attenzione.
Per evitare un
debugging
di un
programma
troppo complesso ed articolato e preferibile creare un
prototipo
, ovvero una versione del risultato finale che non presenta in se tutte le funzioni previste dal progetto originale, ottenendo una maggiore velocita di correzione dei
bug
principali. Alla fine di questa fase avremo il prodotto finito. Le operazioni svolte durante lo sviluppo vanno opportunamente documentate cosi da rendere piu agevole una futura modifica.
Il primo programma didattico che un programmatore in stato di formazione scrive e solitamente
Hello world
.
Un altro
programma
semplice ed intuitivo e sicuramente quello che presi due numeri in
input
, restituisce come
output
la loro somma. A seconda del
linguaggio di programmazione
che si utilizza la struttura cambia e si articola in maniera diversa.
Alcune fasi dello sviluppo software
Lo
sviluppo
di un sistema di programmi all'interno di un'
azienda
fa parte di un processo molto piu 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'attivita aziendale per cui e pensato.
Inizialmente si procede con una dettagliata
analisi dei requisiti
che la creazione del
programma
mira a risolvere (bisogni) detta anche
analisi funzionale
. L'analista deve proporre queste informazioni e stilare delle proposte idonee in sede di progettazione. Il documento output dell'analisi assume varie denominazioni: specifica funzionale, capitolato, elenco requisiti ma spesso si utilizzano termini in inglese. Spesso per requisiti non si intendono solo le funzioni ma anche: prestazioni, condizioni di utilizzo, specifiche tecnologiche e di hardware e altro. Nella logica del
project management
si possono affiancare al documento di definizione dei requisiti anche quelli relativi a: tempi, costi, responsabilita, rischi, ecc.
Conclusa l'analisi, si passa alla vera e propria fase di
progettazione
del nuovo sistema. Tale operazione coinvolge un grande numero di persone e di idee. I migliori progetti saranno scelti e sviluppati secondo un'ottica di guadagno economico e di efficienza. Approvato il progetto migliore si passa allo
sviluppo
vero e proprio. Cio consiste nell'acquisto del materiale
software
(ed eventualmente di quello
hardware
) necessario alla verifica del funzionamento del nuovo sistema. Segue poi la fase di test dell'applicazione da parte di un team autonomo che rigira agli sviluppatori eventuali errori o
bug
per la loro risoluzione.
Per molte
aziende
il
software
presente sul mercato risulta spesso inadatto alle proprie esigenze ed e necessario lo sviluppo di programmi personalizzati o la modifica di quelli gia esistenti. A questo scopo esistono altre aziende specializzate in questo tipo di servizi affidati dunque in
esternalizzazione
(aziende di
consulenza informatica
).
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 puo 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
programmi
, causando enormi problemi. Tale soluzione e adottata soltanto in assenza di alternative valide.
- L'
installazione parallela
, in cui il lavoro previsto per il nuovo sistema e 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 affidabilita, sostituisce totalmente il vecchio.
- L'
installazione scaglionata
, in cui il nuovo sistema e introdotto per gradi, man mano che vengono risolti gli errori riscontrati, esso sostituisce il vecchio secondo varie fasi. Adottando tale soluzione, eventuali problemi avranno conseguenze meno disastrose interessando soltanto una singola fase. Svantaggio di questo tipo di installazione sono i tempi molto lunghi.
- L'
installazione pilota
, in cui il nuovo sistema viene utilizzato soltanto per una piccola parte delle attivita aziendali e, se funzionante regolarmente, viene esteso a tutta l'
azienda
. In caso di problemi essi risulteranno ristretti soltanto a quella parte di attivita che adotta il nuovo sistema, senza pregiudicare l'intera attivita aziendale.
Una volta installato il programma deve essere
configurato
secondo le disposizioni personali o aziendali (
customizzazione
o in funzione dell'output o delle funzionalita desiderato)
Superata l'installazione, il
programma
fornira 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.
In base alla destinazione d'uso del codice si hanno vari tipi di programmazione quali ad esempio:
- ^
Shaun Bebbington,
What is coding
, su
Tumblr
, 2014.
URL consultato il 3 marzo 2014
(archiviato dall'
url originale
il 29 aprile 2020)
.
- ^
Shaun Bebbington,
What is programming
, su
Tumblr
, 2014.
URL consultato il 3 marzo 2014
(archiviato dall'
url originale
il 29 aprile 2020)
.
- ^
Eldad Eliam,
Reversing: Secrets of Reverse Engineering
, Wiley, 2005, p. 3,
ISBN
978-0-7645-7481-8
.
- Dennis P. Curtin, Kim Foley, Kunal Sen, Cathleen Morin,
Informatica di Base
, Mc-Graw Hill, 2005
- programmazione
, su
Vocabolario Treccani
,
Istituto dell'Enciclopedia Italiana
.
![Modifica su Wikidata](//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/10px-Blue_pencil.svg.png)
- programmazione
, su
sapere.it
,
De Agostini
.
![Modifica su Wikidata](//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/10px-Blue_pencil.svg.png)
- (
EN
)
Opere riguardanti Computer programming
, su
Open Library
,
Internet Archive
.
![Modifica su Wikidata](//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/10px-Blue_pencil.svg.png)
- (
EN
)
Programming
, su
Encyclopaedia of Mathematics
, Springer e European Mathematical Society.
![Modifica su Wikidata](//upload.wikimedia.org/wikipedia/commons/thumb/7/73/Blue_pencil.svg/10px-Blue_pencil.svg.png)
- (
EN
)
programming
, in
Free On-line Dictionary of Computing
, Denis Howe.
Disponibile con licenza
GFDL
- Programmazione
, in
Grande Dizionario di Italiano
, Garzanti Linguistica.
- Guida alla programmazione
, su
html.it
.