Guida [VECCHIO CORSO] Corso programmazione linguaggio C - Lezione #1 : Linguaggi di programmazione (una veloce infarinatura)

giovy2707

Utente Electrum
27 Giugno 2019
96
38
62
103
Lezione 1 - Copertina.png

LEGGI QUESTO PRIMA DI CONTINUARE
1. La maggior parte del materiale utilizzato in questo corso è stato creato da Otakutech_Official, qualora venisse usato materiale NON di nostra proprietà all'interno dei nostri post allora sarà nostra premura indicare nelle prime righe del post che è presente materiale non creato da OtakuTech_Official, aggiungendo la relativa attribuzione al proprietario del materiale in questione. Sarà tuttavia nostro obbiettivo ridurre al minimo l'uso di materiale non creato da noi e soprattutto eviteremo ad ogni costo l'uso di materiale coperto da licenze che non permettano ai lettori di usufruire liberamente del materiale in allegato a ogni post di questo corso.

2. Tutto il materiale in allegato a ogni post è messo a disposizione della community e sarà liberamente scaricabile e usufruibile.

3. Gli utenti sono liberi di usare il materiale come meglio credono, l'attribuzione (in caso abbiate intenzione di ridistribuire il materiale presente in questo corso) NON è richiesta ma tuttavia apprezzata (in quanto dietro questo corso c'è tanto lavoro,passione e voglia di condividere la nostra conoscenza con la community).

4. All'interno di ogni post troverete una "Lezione" che parlerà degli argomenti indicati nel titolo del post stesso, tutto quello che troverete nel post è presente anche nei file in allegato, però in forma diversa: in allegato a ogni lezione troverete una cartella contenente:

- dei PDF (con tutto quello che vedete nel post)

- il Vault di Obsidian (che è stato usato per la creazione del corso)

- i file PSD (file photoshop) di ogni immagine presente nel post in questione

- i file .png, .svg, .jpg ,ecc... usati per la creazione di ogni immagine

IL FILE ZIP DEL CORSO ERA TROPPO GRANDE PER ESSERE ALLEGATO A QUESTO POST QUINDI POTETE SCARICARLO DA QUI:

Vedi: https://drive.google.com/file/d/1sPuNna2S3b0sqmFHK448j4vKg1MVUlSM/view?usp=sharing


Linguaggi di programmazione

1 - Che cosa sono e a cosa servono?

I computer parlano in binario (cioè usando 0 e 1), questo significa che non capiscono il linguaggio di noi esseri umani, questo è un problema perché non possiamo chiedere al computer di fare qualcosa se non riusciamo a comunicarglielo in un modo a lui comprensibile.

1663410021473.png


1663410232255.png


Quando dobbiamo parlare con persone che non parlano la nostra stessa lingua, di solito usiamo un linguaggio che conosciamo entrambi, come ad esempio l'inglese, oppure utilizziamo un interprete che traduce quello che ci diciamo.

Per i computer la cosa non è molto diversa, infatti proprio come nella realtà con le persone, utilizziamo un linguaggio che ci permette di comunicare con i computer.

1663410363936.png


Prima di spiegare come ciò sia possibile dobbiamo comprendere meglio come avviene di solito la comunicazione tra due esseri umani:


Esempio

Quando parli con qualcuno che non parla la tua stessa lingua e quindi scegliete di usare una lingua che conoscete entrambi, tipo l'inglese, quello che fate per comunicare è:
  1. Pensare a cosa dire e formularlo nella vostra mente usando la lingua che conoscete (nel tuo caso probabilmente l'italiano).
  2. Tradurre tale frase nella lingua "intermediaria" (cioè quella che avete scelto di usare per comunicare con l'altra persona, nel nostro esempio sarà l'inglese).
  3. Comunicare all'altro la frase che avete formulato e poi tradotto.
1663410625395.png


Dopodiché il destinatario del messaggio tradurrà il messaggio dalla lingua "intermediaria" (in questo esempio è l'inglese) nella sua lingua.

1663410731927.png


Con i computer avviene una cosa simile: infatti per parlare con un computer si usa un linguaggio di programmazione (che farà da linguaggio "intermediario") e un programma farà da interprete (nell'esempio visto sopra era il nostro cervello a interpretare la frase dall'inglese per poi tradurla nella lingua desiderata), questo programma che farà da interprete si chiama "compilatore" (nel caso del linguaggio C, per altri linguaggi si chiama semplicemente interprete, questo concetto verrà approfondito più avanti).

Quindi per dire al computer cosa deve fare creeremo un file dove scriveremo quello che vogliamo che il computer faccia, quello che scriveremo nel file deve essere scritto in una "lingua intermediaria" come ad esempio il linguaggio C .

Quindi il processo sarebbe il seguente:

1663410942064.png


Quindi come abbiamo potuto capire i linguaggi di programmazione servono a comunicare con un computer.

Ora che a livello logico abbiamo capito come funziona un linguaggio di programmazione dobbiamo capire a livello pratico come esso venga utilizzato, infatti penso sia ovvio che un computer rimane pur sempre un insieme di: pezzi di ferro, plastica, circuiti, fili, ecc... , di conseguenza è impensabile che un computer possa parlare con noi (le intelligenze artificiali in questo caso non sono state prese in considerazione) , abbiamo detto che tramite i linguaggi di programmazione è possibile "comunicare" ma in verità quello che facciamo è dare "istruzioni" al computer, quindi non c'è una vera e propria comunicazione come avviene in una discussione tra esseri umani.

Avete presente i programmi che usate sul PC? Ad esempio: un programma per la scrittura di documenti (tipo il blocco note o Word) oppure un videogame, o un browser per navigare sul web o un sito web?

Ebbene tutto quello che vedete sul vostro PC è possibile tramite istruzioni che il computer esegue: un programma (anche se il nome tecnico è "software") è un insieme di uno o più file che contengono istruzioni (scritte in un linguaggio di programmazione) che il computer si limita ad eseguire.

1663411110833.png


Per esempio se volessimo dire al computer di mostrare a schermo la frase "hello world" dovremmo fare in questo modo (usando il linguaggio C) :

1663411295877.png


Quindi praticamente ogni cosa che vedi sul tuo schermo è il risultato di istruzioni eseguite dal tuo computer.

Esistono molti linguaggi programmazione diversi, ognuno ha le proprie caratteristiche che lo contraddistinguono dagli altri.
Esistono linguaggi di programmazione "specializzati" per un particolare uso: ne esistono per la creazione di siti web, per la creazione di intelligenze artificiali, per la creazione di basi di dati ecc...

e ne esistono altri (come ad esempio il C) che sono "general purpose" cioè utilizzabili un pò per tutto (ovviamente un "linguaggio specializzato" per uno specifico lavoro è molto più comodo da usare).

Possiamo iniziare a dividere il mondo dei linguaggi di programmazione in due grandi categorie:
  • Linguaggi interpretati
  • Linguaggi compilati

2.1 - Linguaggi interpretati

Come sappiamo il computer comunica unicamente in binario, quindi un programma per essere eseguito deve essere tradotto in binario, con i linguaggi interpretati ciò avviene nel seguente modo:
  • Viene letta una riga del file contenente le istruzioni.
  • L'istruzione scritta nella riga appena letta viene tradotta ed eseguita.
  • Poi si passa alla prossima riga e avviene lo stesso della riga precedente.
  • Si continua così fino alla fine del file.
1663411854422.png


Il programma che traduce le varie istruzioni durante l'esecuzione del programma nei linguaggi interpretati viene chiamato "interprete".

1663411921022.png


2.2 - Linguaggi compilati

I linguaggi di programmazione compilati necessitano che i programmi scritti con essi vengano sottoposti al processo di compilazione, cioè i file vengono letti e tradotti in linguaggio binario dal compilatore e solo allora possono essere eseguiti:
  1. Il file (o i file , se il programma è composto da più file) viene compilato dal compilatore del linguaggio.
  2. Il compilatore restituisce un "file eseguibile" che può essere eseguito dal computer.
1663412280155.png


Come possiamo notare qui la traduzione avviene una sola volta ma su tutto il file e solo allora viene eseguito, mentre in quello interpretato ogni riga viene tradotta e poi eseguita.

1663412326320.png


2.3 - Linguaggi compilati vs interpretati


Abbiamo capito che i linguaggi interpretati vengono tradotti durante l'esecuzione mentre quelli compilati vengono prima tradotti e poi eseguiti, ma quale tipo di linguaggio è meglio usare?

DIPENDE!

I linguaggi interpretati offrono una grande flessibilità, questo grazie al fatto che tutta la traduzione avviene durante l'esecuzione del programma stesso, poi c'è anche da dire che questa flessibilità rende anche l'apprendimento di tali linguaggi molto più semplice per coloro che si avvicinano ad essi per la prima volta, tuttavia il fatto che il programma venga tradotto riga per riga durante l'esecuzione, significa che ogni volta che deve essere eseguita un'istruzione, il computer deve tradurre tale istruzione, e ciò avviene per ogni riga del file e questo significa maggiore potenza di calcolo richiesta.

Per i linguaggi compilati tale problema non sussiste: infatti per eseguire un programma, tutti i file che lo compongono devono essere compilati, questo significa che quando il computer eseguirà il programma tutte le istruzioni saranno già tradotte, quindi la traduzione avviene una sola e non ogni volta che viene eseguito il programma, questo significa minore potenza di calcolo richiesta. Però i programmi compilati sono molto meno flessibili e più difficili da imparare per qualcuno che si avvicina ad essi per la prima volta.

Per capire bene la differenza tra questi due tipi di linguaggi vi faccio un esempio molto semplice:

Immaginate 2 ristoranti, uno che richiede la prenotazione e uno non la richiede:

1663412557609.png


1663412575671.png
 

Allegati

  • Linguaggi di programmazione.pdf
    910.8 KB · Visualizzazioni: 14

LEGGI QUESTO PRIMA DI CONTINUARE
1. La maggior parte del materiale utilizzato in questo corso è stato creato da Otakutech_Official, qualora venisse usato materiale NON di nostra proprietà all'interno dei nostri post allora sarà nostra premura indicare nelle prime righe del post che è presente materiale non creato da OtakuTech_Official, aggiungendo la relativa attribuzione al proprietario del materiale in questione. Sarà tuttavia nostro obbiettivo ridurre al minimo l'uso di materiale non creato da noi e soprattutto eviteremo ad ogni costo l'uso di materiale coperto da licenze che non permettano ai lettori di usufruire liberamente del materiale in allegato a ogni post di questo corso.

2. Tutto il materiale in allegato a ogni post è messo a disposizione della community e sarà liberamente scaricabile e usufruibile.

3. Gli utenti sono liberi di usare il materiale come meglio credono, l'attribuzione (in caso abbiate intenzione di ridistribuire il materiale presente in questo corso) NON è richiesta ma tuttavia apprezzata (in quanto dietro questo corso c'è tanto lavoro,passione e voglia di condividere la nostra conoscenza con la community).

4. All'interno di ogni post troverete una "Lezione" che parlerà degli argomenti indicati nel titolo del post stesso, tutto quello che troverete nel post è presente anche nei file in allegato, però in forma diversa: in allegato a ogni lezione troverete una cartella contenente:

- dei PDF (con tutto quello che vedete nel post)

- il Vault di Obsidian (che è stato usato per la creazione del corso)

- i file PSD (file photoshop) di ogni immagine presente nel post in questione

- i file .png, .svg, .jpg ,ecc... usati per la creazione di ogni immagine

IL FILE ZIP DEL CORSO ERA TROPPO GRANDE PER ESSERE ALLEGATO A QUESTO POST QUINDI POTETE SCARICARLO DA QUI:

Vedi: https://drive.google.com/file/d/1sPuNna2S3b0sqmFHK448j4vKg1MVUlSM/view?usp=sharing


Linguaggi di programmazione

1 - Che cosa sono e a cosa servono?

I computer parlano in binario (cioè usando 0 e 1), questo significa che non capiscono il linguaggio di noi esseri umani, questo è un problema perché non possiamo chiedere al computer di fare qualcosa se non riusciamo a comunicarglielo in un modo a lui comprensibile.

Visualizza allegato 65190

Visualizza allegato 65192

Quando dobbiamo parlare con persone che non parlano la nostra stessa lingua, di solito usiamo un linguaggio che conosciamo entrambi, come ad esempio l'inglese, oppure utilizziamo un interprete che traduce quello che ci diciamo.

Per i computer la cosa non è molto diversa, infatti proprio come nella realtà con le persone, utilizziamo un linguaggio che ci permette di comunicare con i computer.

Visualizza allegato 65193

Prima di spiegare come ciò sia possibile dobbiamo comprendere meglio come avviene di solito la comunicazione tra due esseri umani:


Esempio

Quando parli con qualcuno che non parla la tua stessa lingua e quindi scegliete di usare una lingua che conoscete entrambi, tipo l'inglese, quello che fate per comunicare è:
  1. Pensare a cosa dire e formularlo nella vostra mente usando la lingua che conoscete (nel tuo caso probabilmente l'italiano).
  2. Tradurre tale frase nella lingua "intermediaria" (cioè quella che avete scelto di usare per comunicare con l'altra persona, nel nostro esempio sarà l'inglese).
  3. Comunicare all'altro la frase che avete formulato e poi tradotto.
Visualizza allegato 65194

Dopodiché il destinatario del messaggio tradurrà il messaggio dalla lingua "intermediaria" (in questo esempio è l'inglese) nella sua lingua.

Visualizza allegato 65195

Con i computer avviene una cosa simile: infatti per parlare con un computer si usa un linguaggio di programmazione (che farà da linguaggio "intermediario") e un programma farà da interprete (nell'esempio visto sopra era il nostro cervello a interpretare la frase dall'inglese per poi tradurla nella lingua desiderata), questo programma che farà da interprete si chiama "compilatore" (nel caso del linguaggio C, per altri linguaggi si chiama semplicemente interprete, questo concetto verrà approfondito più avanti).

Quindi per dire al computer cosa deve fare creeremo un file dove scriveremo quello che vogliamo che il computer faccia, quello che scriveremo nel file deve essere scritto in una "lingua intermediaria" come ad esempio il linguaggio C .

Quindi il processo sarebbe il seguente:

Visualizza allegato 65196

Quindi come abbiamo potuto capire i linguaggi di programmazione servono a comunicare con un computer.

Ora che a livello logico abbiamo capito come funziona un linguaggio di programmazione dobbiamo capire a livello pratico come esso venga utilizzato, infatti penso sia ovvio che un computer rimane pur sempre un insieme di: pezzi di ferro, plastica, circuiti, fili, ecc... , di conseguenza è impensabile che un computer possa parlare con noi (le intelligenze artificiali in questo caso non sono state prese in considerazione) , abbiamo detto che tramite i linguaggi di programmazione è possibile "comunicare" ma in verità quello che facciamo è dare "istruzioni" al computer, quindi non c'è una vera e propria comunicazione come avviene in una discussione tra esseri umani.

Avete presente i programmi che usate sul PC? Ad esempio: un programma per la scrittura di documenti (tipo il blocco note o Word) oppure un videogame, o un browser per navigare sul web o un sito web?

Ebbene tutto quello che vedete sul vostro PC è possibile tramite istruzioni che il computer esegue: un programma (anche se il nome tecnico è "software") è un insieme di uno o più file che contengono istruzioni (scritte in un linguaggio di programmazione) che il computer si limita ad eseguire.

Visualizza allegato 65197

Per esempio se volessimo dire al computer di mostrare a schermo la frase "hello world" dovremmo fare in questo modo (usando il linguaggio C) :

Visualizza allegato 65198

Quindi praticamente ogni cosa che vedi sul tuo schermo è il risultato di istruzioni eseguite dal tuo computer.

Esistono molti linguaggi programmazione diversi, ognuno ha le proprie caratteristiche che lo contraddistinguono dagli altri.
Esistono linguaggi di programmazione "specializzati" per un particolare uso: ne esistono per la creazione di siti web, per la creazione di intelligenze artificiali, per la creazione di basi di dati ecc...

e ne esistono altri (come ad esempio il C) che sono "general purpose" cioè utilizzabili un pò per tutto (ovviamente un "linguaggio specializzato" per uno specifico lavoro è molto più comodo da usare).

Possiamo iniziare a dividere il mondo dei linguaggi di programmazione in due grandi categorie:
  • Linguaggi interpretati
  • Linguaggi compilati

2.1 - Linguaggi interpretati

Come sappiamo il computer comunica unicamente in binario, quindi un programma per essere eseguito deve essere tradotto in binario, con i linguaggi interpretati ciò avviene nel seguente modo:
  • Viene letta una riga del file contenente le istruzioni.
  • L'istruzione scritta nella riga appena letta viene tradotta ed eseguita.
  • Poi si passa alla prossima riga e avviene lo stesso della riga precedente.
  • Si continua così fino alla fine del file.
Visualizza allegato 65199

Il programma che traduce le varie istruzioni durante l'esecuzione del programma nei linguaggi interpretati viene chiamato "interprete".

Visualizza allegato 65200

2.2 - Linguaggi compilati

I linguaggi di programmazione compilati necessitano che i programmi scritti con essi vengano sottoposti al processo di compilazione, cioè i file vengono letti e tradotti in linguaggio binario dal compilatore e solo allora possono essere eseguiti:
  1. Il file (o i file , se il programma è composto da più file) viene compilato dal compilatore del linguaggio.
  2. Il compilatore restituisce un "file eseguibile" che può essere eseguito dal computer.
Visualizza allegato 65201

Come possiamo notare qui la traduzione avviene una sola volta ma su tutto il file e solo allora viene eseguito, mentre in quello interpretato ogni riga viene tradotta e poi eseguita.

Visualizza allegato 65202

2.3 - Linguaggi compilati vs interpretati


Abbiamo capito che i linguaggi interpretati vengono tradotti durante l'esecuzione mentre quelli compilati vengono prima tradotti e poi eseguiti, ma quale tipo di linguaggio è meglio usare?

DIPENDE!

I linguaggi interpretati offrono una grande flessibilità, questo grazie al fatto che tutta la traduzione avviene durante l'esecuzione del programma stesso, poi c'è anche da dire che questa flessibilità rende anche l'apprendimento di tali linguaggi molto più semplice per coloro che si avvicinano ad essi per la prima volta, tuttavia il fatto che il programma venga tradotto riga per riga durante l'esecuzione, significa che ogni volta che deve essere eseguita un'istruzione, il computer deve tradurre tale istruzione, e ciò avviene per ogni riga del file e questo significa maggiore potenza di calcolo richiesta.

Per i linguaggi compilati tale problema non sussiste: infatti per eseguire un programma, tutti i file che lo compongono devono essere compilati, questo significa che quando il computer eseguirà il programma tutte le istruzioni saranno già tradotte, quindi la traduzione avviene una sola e non ogni volta che viene eseguito il programma, questo significa minore potenza di calcolo richiesta. Però i programmi compilati sono molto meno flessibili e più difficili da imparare per qualcuno che si avvicina ad essi per la prima volta.

Per capire bene la differenza tra questi due tipi di linguaggi vi faccio un esempio molto semplice:

Immaginate 2 ristoranti, uno che richiede la prenotazione e uno non la richiede:

Visualizza allegato 65203

Visualizza allegato 65204

Bravo e complimenti per l'impegno, continua così! Hai scritto un'introduzione chiara e precisa. Adatta per i principianti, ma interessante da leggere anche per chi ha un po' più di esperienza alle spalle. Attendiamo il prossimo materiale! 😉
 
  • Mi piace
Reazioni: giovy2707
Ho letto e secondo me manca una cosa:

Possiamo iniziare a dividere il mondo dei linguaggi di programmazione in due grandi categorie:
  • Linguaggi interpretati
  • Linguaggi compilati

come categoria avrei aggiunto i "linguaggi semi-interpretati" (come Java, Kotlin, ...). Questi vengono compilati, ma il codice prodotto non è direttamente eseguibile (e la parte interpretata è svolta in maniera differente da prima ormai, usando un JIT; vale ormai anche per altri linguaggi interpretati).

A parte ciò è una bella introduzione, scritta anche in modo comprensibile per chi è appunto "nuovo" del mondo dello sviluppo. ;)
 
  • Mi piace
Reazioni: giovy2707
Ho letto e secondo me manca una cosa:



come categoria avrei aggiunto i "linguaggi semi-interpretati" (come Java, Kotlin, ...). Questi vengono compilati, ma il codice prodotto non è direttamente eseguibile (e la parte interpretata è svolta in maniera differente da prima ormai, usando un JIT; vale ormai anche per altri linguaggi interpretati).

A parte ciò è una bella introduzione, scritta anche in modo comprensibile per chi è appunto "nuovo" del mondo dello sviluppo. ;)
Appena finisco con la seconda modifico questa, grazie per il consiglio 👍🏻
 
  • Mi piace
Reazioni: DispatchCode