Guida [Non puù continuato]corso di linguaggio C

giovy2707

Utente Electrum
27 Giugno 2019
96
38
62
103
Ultima modifica:
LEZIONE X IMMAGINE.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/1XaePsmsqzs1SKUv-SmlbgcZMsEn3cabN/view?usp=sharing


Nota per i lettori del vecchio corso:
Questo corso sarà leggermente diverso dal precedente:
  • ho riscritto alcune parti per rendere ancora più chiari gli argomenti​
  • ho migliorato l'organizzazione dei file all'interno del vault di obsidian e aggiunto alcuni plugin​
  • una delle grandi novità di questo corso sarà la versione video, infatti pubblicherò delle versioni video del corso sul canale youtube di OtakuTech_Official​
  • mi sono prefissato di pubblicare almeno una lezione a settimana (le versioni video usciranno un paio di giorni dopo la versione scritta)​
  • l'ordine degli argomenti verrà cambiato​
  • l'evidenziazione delle parole è un pò cambiato​


Capitolo 1: Linguaggi di programmazione


1.1 - Linguaggi di programmazione, che cosa sono e a cosa servono?

1679337541861.png


Come forse saprai i computer parlano in binario (cioè usando 0 e 1), questo significa che non comprendono il linguaggio di noi esseri umani.

Questo è un problema perché non puoi chiedere a un computer di fare qualcosa se non riesci a comunicare con esso.

1679339437335.png


Quando devi comunicare con persone che non conoscono la tua stessa lingua, utilizzi un linguaggio comprensibile sia a te che al tuo interlocutore, come ad esempio l'inglese, oppure utilizzi un interprete (sia esso una persona o un software) che traduce quello che ci dici.

Per i computer la cosa non è molto diversa, infatti proprio come con le persone, puoi utilizzare un linguaggio, comprensibile sia a te che al computer, che ti permetta di comunicare con esso.

1679339489418.png


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

1679338413578.png

1679338434647.png


Con i computer avviene una cosa simile.


Comunicazione tra umano e computer

Per comunicare con un computer si usa:
  • un linguaggio di programmazione (che farà da linguaggio "intermediario")

  • un programma che farà da interprete
    • 1679339123111.png

  • un file contenente i messaggi che vogliamo far leggere al computer
    • quello che scriveremo nel file deve essere scritto in una "lingua intermediaria" (visto che stiamo parlando con un computer tale lingua intermediaria sarà un linguaggio di programmazione) come ad esempio il "linguaggio C".

Ora vediamo come avverrebbe la comunicazione tra noi e un computer attraverso un esempio.

1679339328392.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 effettivamente esso funzioni davvero.

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.

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.

1679339575594.png


Ebbene tutto quello che vedete sul vostro schermo è il risultato di 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 esegue.

1679339703415.png


1.2 - Quali tipi di linguaggi di programmazione esistono?

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ù efficiente da usare).

Per comprendere il mondo dei linguaggi di programmazione iniziare facendo una prima suddivisione:
  • Linguaggi interpretati

  • Linguaggi compilati

La differenza sostanziale tra queste due categorie è il tipo di processo che viene utilizzato per tradurre i programmi dal linguaggio di programmazione in cui sono stati scritti al linguaggio binario.

1679339901918.png



1.2.1 - Linguaggi interpretati

Partiamo dai linguaggi interpretati.

Vediamo come avviene il processo di traduzione delle istruzioni dal linguaggio di programmazione a quello binario:
  1. Viene letta una riga del file contenente le istruzioni.
  2. L'istruzione scritta nella riga appena letta viene tradotta ed eseguita.
  3. Poi si passa alla prossima riga e avviene lo stesso della riga precedente.
  4. Si continua così fino alla fine del file.
1679340078641.png


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


1.2.2 - Linguaggi compilati

I linguaggi di programmazione compilati necessitano che i programmi vengano sottoposti al processo di "compilazione":
  • cioè i file vengono letti e tradotti in linguaggio binario dal compilatore, e solo allora possono essere eseguiti:
    • 1679340307252.png

  • il file (o i file , se il programma è composto da più file) viene compilato dal compilatore del linguaggio(ogni linguaggio ha il proprio compilatore)

  • il compilatore restituisce un "file eseguibile" che può essere eseguito dal computer.
    • 1679340425131.png
1679340442945.png



1.2.3 - Linguaggi compilati vs interpretati

1679340500129.png


Linguaggi interpretati

  • I linguaggi interpretati offrono una grande flessibilità
    • questo grazie al fatto che tutta la traduzione avviene durante l'esecuzione del programma stesso
    • questa flessibilità rende anche l'apprendimento di tali linguaggi molto più semplice per coloro che si avvicinano ad essi per la prima volta

  • I linguaggi interpretati sono più "lenti" di quelli compilati
    • 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 prima tradurre tale istruzione, e solo allora può eseguirla; e ciò avviene per ogni riga del file, questo significa maggiore potenza di calcolo richiesta
    • 1679340756293.png

Linguaggi compilati

  • I linguaggi compilati necessitano che i programmi vengano sottoposti al processo di "compilazione":
    • mentre un programma scritto con linguaggi interpretati può essere subito eseguito, un programma scritto con linguaggi compilati richiede necessariamente di essere prima compilato, e questo processo (a seconda della complessità del programma) può richiedere molto tempo.

  • I linguaggi compilati sono più "veloci" di quelli interpretati
    • un programma compilato è già tradotto in binario, quindi il computer deve solo eseguire le istruzioni, senza passare per una fase di traduzione per ognuna di esse, e questo significa meno tempo richiesto per eseguire le istruzioni
    • 1679340973045.png

  • i linguaggi compilati sono molto meno flessibili
    • il loro più grande punto di forza, cioè la compilazione, che li rende "veloci", è anche uno dei loro più grandi svantaggi, infatti l'uso della compilazione non permette molta flessibilità
    • la loro bassa flessibilità li rende anche più difficili da imparareper qualcuno che si avvicina ad essi per la prima volta
      • 1679341857586.png
1679341885059.png


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

1679341921020.png

1679341938733.png


1.3 - Linguaggi ad alto e basso livello

Un ulteriore suddivisione che possiamo fare nel mondo dei linguaggi di programmazione è quella tra:
  • linguaggi ad alto livello

  • linguaggi a basso livello

Cerchiamo di capire la differenza tra questi due tipi di linguaggio:
  • fate finta che che in un palazzo di dieci piani ci siate voi e il vostro computer, ora immaginate di essere al 10 piano, mentre il computer si trova al primo piano del palazzo:
1679342507148.png


Ora immagina che:
  • più un linguaggio si avvicina al piano 1 (quindi più si avvicina al computer) più diventa difficile da leggere e sempre più simile al linguaggio macchina (cioè il linguaggio che parla il computer, il linguaggio binario)

  • mentre più un linguaggio si avvicina al 10 piano (quindi più si avvicina a voi) più è semplice da leggere e più è simile al linguaggio umano.

Ebbene i linguaggi di programmazione di alto e basso livello si basano su qualcosa di simile:
  • più un linguaggio è vicino al linguaggio umano (piani alti del nostro palazzo immaginario) e più esso viene definito di livello alto

  • più un linguaggio è vicino al linguaggio binario (piani bassi del nostro palazzo immaginario) e più esso viene definito di livello basso
1679342613103.png

1679342633160.png


Puoi facilmente notare come linguaggi di livello basso siano difficili da leggere e spesso poco comprensibili, mentre man mano che il livello si alza la sintassi diventa molto più semplice da comprendere.

Se leggi il codice in python anche senza sapere nulla di programmazione puoi facilmente comprendere cosa dice quell'istruzione, infatti c'è un sola riga che inizia con la parola inglese "print" (significa stampa) con all'interno la frase "hello world" (non bisogna essere dei geni per immaginare cosa possa mai fare).

1679342660907.png


Anche qui come nei linguaggi compilati e interpretati troviamo diversi vantaggi e svantaggi:
  • i linguaggi di basso livello:
    • sono molto più prestanti(essendo di basso livello sono molto più vicini al computer e quindi il processo di traduzione per il computer è più semplice):
      • 1679342854224.png
    • permettono un maggiore controllo sull'hardware
    • sono difficili da leggere e da scrivere
    • ...più tutti i vantaggi/svantaggi dati dall'essere compilato o interpretato
      • 1679342967380.png

  • i linguaggi di alto livello:
    • sono molto meno prestanti(essendo di alto livello sono molto più lontani dal computer e quindi il processo di traduzione è più complesso):
      • 1679343100134.png
    • permettono un minore controllo sull'hardware
    • sono facili da leggere e da scrivere
    • ...più tutti vantaggi/svantaggi dati dall'essere compilato o interpretato
      • 1679343197086.png
L'immagine 1.11 riassume bene ciò che ho detto finora.

1679343231595.png


1.4 - Linguaggi "semi-interpretati"

Ti ho parlato della differenza tra linguaggi compilati e interpretati, e ti ho anche parlato della differenza tra linguaggi di programmazione ad alto livello e a basso livello, ora abbiamo tutte le informazioni di base per comprendere come funzionato i linguaggi "semi-interpretati".

(Il motivo per cui non ne ho parlato nella parte dei linguaggi compilati o interpretati è perché volevo che capiste prima il concetto di linguaggio ad alto o basso livello, poiché ci sarà utile per questa spiegazione)


1.4.1 - Java

Il modo migliore per spiegarvi come funzionano i linguaggi "semi-interpretati" è parlarvi del linguaggio semi-interpretato per eccellenza: il Java.

Il Java è un linguaggio general-purpose (come il C).

Questo linguaggio è allo stesso tempo compilato e interpretato, infatti i programmi java vengono:

  • Compilati

poi...

  • Interpretati

1679343379049.png


Quando un programma java viene compilato esso viene tradotto in un linguaggio di basso livello (un pò come l'assembly per capirci) che è chiamato "byte code", questo viene poi interpretato dalla JVM (Java virtual machine).

1679343464704.png


La cosa migliore di questo metodo di compilazione dei file, è che essendo la JVM a effettuare la traduzione, ovunque ci sia un JVM installata possiamo eseguire codice Java compilato (senza doverlo ricompilare)!

1679343548639.png

1679343668163.png
 
Volevo direttamente eliminare o modificare il post ma non è possibile, quindi ve lo scrivo qui... Il corso non continuerà sul forum, mi spiace perchè qui è dove ho iniziato a scriverlo tuttavia pubblicare le lezioni sul forum non è possibile, questo poichè le lezioni che scrivo sono fatte con obsidian e quindi non tutti gli elementi possono essere facilmente aggiunti nel post , l'unico modo è facendo degli screen e sinceramente non mi piace il risultato, le lezioni continueranno su youtube in formato video e in formato pdf su google drive, avrei davvero voluto continuare a pubblicare sia lì che qui ma per fare qualcosa di decente dovrei scrivere due versioni dello stesso corso è visti gli impegni che ho attualmente non mi sarebbe possibile.