{"id":5884,"date":"2011-03-04T10:40:48","date_gmt":"2011-03-04T09:40:48","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=5884"},"modified":"2011-11-14T19:44:25","modified_gmt":"2011-11-14T18:44:25","slug":"1-storia-della-programmazione","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/1-storia-della-programmazione\/","title":{"rendered":"1. Storia della programmazione"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-00.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-00.jpg\" alt=\"corso-completo-c-storia-della-programmazione\" width=\"200\" height=\"100\" class=\"alignleft size-full wp-image-6049\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-00.jpg 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-00-150x75.jpg 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a> Cosa significa programmare? Come si fa a &#8220;dire&#8221; ai computers quello che devono fare? Se sono veramente stupidi, allora come fanno a prendere delle decisioni? Perch\u00e9 un computer pu\u00f2 battere Kasparov a scacchi (<a href=\"http:\/\/it.wikipedia.org\/wiki\/IBM_Deep_Blue\" target=\"_blank\">link<\/a>) anche se il programmatore che l&#8217;ha programmato non sa farlo?<\/p>\n<p>Queste sono alcune tra le domande che vengono poste pi\u00f9 spesso da chi ha pressoch\u00e8 nessuna competenza in ambito di programmazione.<\/p>\n<p>Questa prima lezione \u00e8 dedicata a loro, vedremo insieme cosa c&#8217;\u00e8 oltre lo specchio del comune utilizzatore del computer e daremo una sbirciata al, ancora per poco, misterioso mondo della programmazione.<!--more--><\/p>\n<h4>Un p\u00f2 di storia<\/h4>\n<p><strong>La preistoria<\/strong><\/p>\n<p>Anche se pu\u00f2 sembrare strano, la programmazione nasce ben prima dell&#8217;avvento dei computer, nasce infatti nell&#8217;epoca della rivoluzione industriale ad opera di una donna di nome Ada Augusta Lovelace (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Ada_Lovelace\" target=\"_blank\">link<\/a>). Ada Lovelace cre\u00f2 il primo programma per la macchina calcolatrice inventata da Charls Babbage (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Charles_Babbage\" target=\"_blank\">link<\/a>), un matematico del 1800 che per primo si rese conto che le macchine potevano essere costruite in modo da non avere un comportamento prestabilito (di solito si usa dire &#8220;comportamento deterministico&#8221;, vedi Nota 1) ma in modo tale che le azioni compiute dalla macchina dipendessero in qualche modo con l&#8217;interazione con l&#8217;esterno. Nello specifico la macchina calcolatrice di Babbage utilizzava un sistema gi\u00e0 utilizzato nei telai da tessitrice, utilizzava infatti delle schede di cartone perforate che venivano &#8220;lette&#8221; dalla macchina e, a seconda di dove si trovavano i buchi, venivano eseguite delle operazioni piuttosto che altre. Pi\u00f9 o meno quello che sarebbe successo poco tempo dopo con i pianoforti automatici Welte-Mignon (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Welte-Mignon\" target=\"_blank\">link<\/a>).<\/p>\n<p><strong>Nota 1:<\/strong> <em>un sistema si dice deterministico quando il suo stato finale e univoamente identificato dal suo stato iniziale.<\/em><\/p>\n<p><strong>La storia moderna<\/strong><\/p>\n<p>Nessuno prest\u00f2 attenzione alle &#8220;macchine programmabili&#8221; fino agli anni 40 quando l&#8217;inghilterra, entrata in guerra contro i tedeschi, cap\u00ec che se voleva sconfiggere l&#8217;esercito nemico doveva riuscire a decriptare le sue comunicazioni radio. Purtroppo tali comunicazioni erano cifrate con una ingegnosa macchina simile come struttura alle vecchie macchine da scrivere e molto complessa chiamata &#8220;enigma&#8221; (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Enigma_%28crittografia%29\" target=\"_blank\">link<\/a>). L&#8217; unica strada per decifrare queste comunicazioni era un enorme lavoro di calcolo manuale cos\u00ec lungo che una volta decriptata la comunicazione sarebbe stata sicuramente obsoleta.<\/p>\n<p>In quegli anni il matematico Alant Turing (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Alan_Turing\" target=\"_blank\">link<\/a>) stava lavorando ad un problema completamente diverso: stava cercando, insieme ad altri matematici del suo tempo, di dare risposte a domande come &#8220;la matematica sar\u00e0 mai contraddittoria&#8221; e &#8220;se dimostro un teorema posso essere sicuro che sia vero?&#8221; e per far questo ide\u00f2 la sua &#8220;macchina di Turing&#8221; una sorta di macchina ideale, non costruibile, in grado di calcolare in linea teorica qualsiasi problema. Queste competenze gli assicurarono un posto a Berkley Park per la costruzione della macchina, questavolta reale, per la decifratura del codice tedesco. Turing riusc\u00ec nell&#8217;impresa costruendo la &#8220;bomba&#8221; di fatto il primo &#8220;computer&#8221; della storia e permise agli inglesi di vincere la seconda guerra mondiale.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-01.jpg\" alt=\"corso-completo-c-storia-della-programmazione-01.jpg\" width=\"350\" height=\"263\" class=\"aligncenter size-full wp-image-6042\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-01.jpg 350w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-01-300x225.jpg 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p><strong>La storia contemporanea<\/strong><\/p>\n<p>Negli anni della seconda guerra mondiale e con gli studi compiuti da A. Turing nasceva quindi una nuova scienza, l&#8217;informatica. &#8220;Informatica&#8221; nella sua accezione originale del termine, di teoria dell&#8217;informazione. Cos\u00ec se non vi ha sopreso scoprire che la programmazione \u00e8 nata prima del computer, sappiate che ci\u00f2 vale anche per l&#8217;informatica.<\/p>\n<p>Da quegli anni l&#8217;informatica \u00e8 sempre stata sotto l&#8217;occhio attendo degli uomini di scienza, infatti \u00e8 ormai diventata una disciplina formalizzata e rigorosa ed \u00e8 un&#8217;area dove confluiscono competenze diverse. L&#8217;informatica di oggi \u00e8 quella che \u00e8 grazie a tantissimi matematici, logici, linguisti&#8230;<br \/>\ni computer che oggi abbiamo nelle nostre scrivanie, i cellulari che abbiamo nelle nostre tasche, sono quello che sono grazie ad uomini straordinari che hanno costruito una nuova scienza formale prima che per questa fosse prevista alcuna applicazione pratica.<\/p>\n<h4>Programmatori ai giorni nostri<\/h4>\n<p><strong>Cosa c&#8217;\u00e8 dentro un computer?<\/strong><\/p>\n<p>Dentro un computer per quel che ci riguarda ci sono le stesse cose che stanno dentro ad una calcolatrice e dentro un distributore di sigarette. Quello che c&#8217;\u00e8 dentro un pc \u00e8 stato scoperto  da un&#8217;altro matematico del passato, John von Neumann che intorno agli anni 40 scopr\u00ec che, se mai si fosse riusciti a costruire un computer, non si sarebbe potuto fare a meno di trovare al suo interno questi componenti:<\/p>\n<ul>\n<li><strong>Memoria.<\/strong> Nei computer si chiama memoria RAM<\/li>\n<li><strong>Unit\u00e0 che esegue i calcoli.<\/strong> Nei computer si chiama processore o CPU<\/li>\n<li><strong>Input\/Output.<\/strong> Nei computer sono rispettivamente la tastiera e lo schermo<\/li>\n<\/ul>\n<p>La cosa strabiliante \u00e8 che questo semplice elenco \u00e8 valido adesso, \u00e8 stato valido nel passato e sar\u00e0 valido probabilmente per sempre, perch\u00e8 \u00e8 il minimo indispensabile che permette di svolgere dei compiti.<\/p>\n<p>Ma anche l&#8217;uomo \u00e8 in fondo una macchina che esegue compiti e quindi, come tale, deve avere una memoria, una cpu e dispositivi di input output.<\/p>\n<p>Supponiamo ad esempio di chiedere ad un uomo (Bob) di svolgere al posto nostro una complessa moltiplicazione e fornirci il risultato. In qualche modo dovremo fornire a Bob quali sono i numeri da moltiplicare, scritti su un foglio oppure a voce, ma questo presuppone che Bob abbia dei dispositivi di <strong>INPUT<\/strong>, come i suoi occhi per leggere il foglio o le orecchie per sentire la nostra voce. Se fosse completamente sprovvisto di dispositivi di INPUT non potrebbe certo portare a termine il nostro compito.<\/p>\n<p>Quando Bob avr\u00e0 ricevuto i due numeri ripescher\u00e0 nella sua <strong>memoria<\/strong> quali erano le istruzioni dettate dalla maestra per eseguire una moltiplicazione, se non avesse memoria sicuramente non sarebbe in grado di farlo.<\/p>\n<p>Veniamo adesso alla <strong>cpu<\/strong>, i pi\u00f9 zelanti diranno &#8220;la cpu \u00e8 il cervello!&#8221; mentre invece devo deludervi perch\u00e9 non \u00e8 cos\u00ec semplice, in fondo che cosa stiamo realmente calcolando quando svolgiamo a mente un prodotto come 3&#215;3 ? stiamo calcolando o stiamo semplicemente ricordando che il risultato \u00e8 9 ? Non voglio addentrarmi in problemi di questo tipo, ma va detto che la cpu, nell&#8217;elenco di von Neumann, \u00e8 solo qualcosa che velocizza il calcolo, ma potrebbe essere sostituita da ulteriori accessi alla memoria. (non a caso la macchina di Touring ne era sprovvista).<\/p>\n<p>Pensiamo sempre a Bob impegnato nella sua  lunga moltiplicazione, se possedesse una cpu allora potrebbe svolgere velocemente operazioni semplici come 3&#215;3, mentre se ne fosse sprovvisto, anche per queste semplici operazioni dovrebbe ripescare dalla memoria qual&#8217;era la procedura corretta per ricavare il risultato.<\/p>\n<p><strong>Astrazione<\/strong><\/p>\n<p>Il precedente esempio ci \u00e8 utile per introdurre un concetto fondamentale nell&#8217;ambito della programmazione, sto parlando dell&#8217;astrazione.<\/p>\n<p>Abbiamo visto che la cpu pu\u00f2 essere considerata un&#8217;unit\u00e0 per svolgere in modo rapido calcoli semplici. Supponiamo di essere ingegneri e che ci venga commissionata una cpu in grado di calcolare &#8220;il doppio di un numero pi\u00f9 10&#8221;, e abbiamo due cpu, una sa fare &#8220;il doppio di un numero&#8221;, l&#8217;altra sa fare &#8220;aggiungi 10&#8221;. Se le colleghiamo insieme ecco che abbiamo ottenuto una nuova cpu, che sa fare &#8220;il doppio pi\u00f9 10&#8221;. Avremmo potuto ottenere lo stesso risultato in infiniti altri modi con altre cpu, per esempio con una che fa &#8220;il doppio&#8221; e due che fanno &#8220;aggiungi 5&#8221; ma quello che conta \u00e8 che alla fine abbiamo una cpu che fa &#8220;il doppio pi\u00f9 10&#8221;. Indipendentemente dall&#8217;implementazione interna le due cpu realizzate in questo modo sono uguali, intercambiabili e possono essere utilizzate allo stesso modo.<\/p>\n<p>Possiamo fornire al nostro committente o l&#8217;una o l&#8217;altra soluzione e per lui sar\u00e0 indifferente, perch\u00e8 al suo livello di astrazione, la nostra cpu \u00e8 solo una &#8220;black box&#8221; che esegue &#8220;il doppio, pi\u00f9 10&#8221;.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-02.jpg\" alt=\"corso-completo-c-storia-della-programmazione-02\" width=\"279\" height=\"217\" class=\"aligncenter size-full wp-image-6043\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-02.jpg 279w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-02-150x116.jpg 150w\" sizes=\"auto, (max-width: 279px) 100vw, 279px\" \/><\/a><\/p>\n<p>Questo concetto \u00e8 alla base dell&#8217;astrazione ed \u00e8 un concetto con cui i programmatori hanno a che fare tutti i giorni. Io so che la cpu dentro il mio portatile sa fare un milione di cose, ma non \u00e8 compito mio sapere nel dettaglio come questi compiti vengano svolti.<\/p>\n<p><strong>Microprogrammazione<\/strong><\/p>\n<p>Fino ad ora abbiamo parlato soltanto di cpu teoriche, mentre invece nei nostri computer le cpu sono fisiche, tangibili e funzionano ad elettricit\u00e0. Il loro funzionamento interno \u00e8 molto complicato ma la logica che ci sta alla base \u00e8 abbastanza semplice da essere affrontata in questo articolo.<\/p>\n<p>La cpu funziona a corrente elettrica, e sono previsti solo due livelli distinti di corrente, di solito sono zero e cinque volt. Agli albori dell&#8217;invenzione delle cpu ci si ricord\u00f2 di un matematico di nome George Boole che aveva inventato un modo di scrivere tutti i numeri e fare le pi\u00f9 comuni operazioni utilizzando solo due simboli, di solito indicati con 1 e 0. Fino ad allora inutilizzata, l&#8217;agebra di Boole, si rivel\u00f2 invece utilissima nel fornire una logica al funzionamento delle cpu.<\/p>\n<p>La presenza\/assenza di corrente poteva essere interpretata come uno dei due simboli dell&#8217;algebra di Boole ed ecco quindi che una sequenza come 101 (si chiama sequenza binaria perch\u00e8 composta da sole due cifre ed equivale al valore cinque) poteva essere inserita nella cpu semplicemente portando la corrente a cinque Volt, poi a zero Volt e ed infine nuovamente a cinque Volt.<\/p>\n<p>Quindi parlare di zero e uno \u00e8 un modo pi\u00f9 astratto per parlare di corrente a zero volt e cinque volt.<\/p>\n<p>Le cpu sono di forma e struttura diverse, ma tutte le cpu hanno dei pins, visibili in questa foto: (questa \u00e8 una vecchia cpu, in quelle attuali in pins sono meno visibili)<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03.jpg\" alt=\"corso-completo-c-storia-della-programmazione-03\" width=\"160\" height=\"160\" class=\"aligncenter size-full wp-image-6044\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03.jpg 160w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03-150x150.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03-92x92.jpg 92w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/corso-completo-c-storia-della-programmazione-03-64x64.jpg 64w\" sizes=\"auto, (max-width: 160px) 100vw, 160px\" \/><\/a><\/p>\n<p>Il funzionamento interno \u00e8 tale che data una sequenza di zeri e uno (0 volt e 5 volt) su un pin, riusciamo ad ottenere su un altro pin un&#8217;altra sequenza di zeri e uno (sempre 0 volt e 5volt) che se interpretata correttamente corrisponde ad esempio al doppio del numero dato in ingresso.<\/p>\n<p>Un esempio? Fornendo  su un pin la sequenza 101 (che per noi rappresenta 5)  su un altro pin potremmo leggere la sequenza 1010 (che per noi rappresenta 10). Ecco che quindi la cpu con la sola elettricit\u00e0 \u00e8 stata in grado di svolgere l&#8217;operazione &#8220;per due&#8221;.<\/p>\n<p>Ovviamente questo esempio non \u00e8 reale, il funzionamento di una cpu \u00e8 molto pi\u00f9 complesso di cos\u00ec ma questo \u00e8 il principio che ci sta alla base. Per avere una idea della velocit\u00e0 degli attuali processori basti sapere che queste variazioni di corrente tra 0 volt e 5 volt si susseguono con una velocit\u00e0 di circa 3 miliardi in ogni secondo.<\/p>\n<p>Quando si iniziarono a progettare le prime cpu probabilmente ci si stanc\u00f2 presto di avere un pin per fare la somma, uno per fare la sottrazione etc ed ecco che inizi\u00f2 la microprogrammazione. Si realizzarono le cpu in modo tale che i dati in input potessero essere forniti sempre sugli stessi pin, mentre su un altro pin si forniva un codice che identificava l&#8217;operazione da eseguire. Ad esempio fornire un codice come 101 su questo pin significava &#8220;fai la somma dei numeri in ingresso&#8221; mentre ad esempio 111 poteva significare &#8220;fai la differenza&#8221;. Nasce quindi il concetto di &#8220;<strong>operatore decisionale<\/strong>&#8220;, la cpu \u00e8 in grado di svolgere due compiti diversi e separati e decide quale eseguire in base ad un valore letto su un pin. Questo concetto sar\u00e0 fondamentale nello sviluppo dei futuri linguaggi di programmazione, senza di esso non si pu\u00f2 scrivere nessun programma, senza l&#8217;operatore decisionale i programmi non sarebbero altro che una ripetizione, sempre identica, delle medesime operazioni  e questo v\u00ecola anche il concetto teorico di algoritmo e quindi di programma!<\/p>\n<p>Questo \u00e8 il pi\u00f9 basso livello di programmazione, si chiama microprogrammazione ed \u00e8 un compito riservato ai progettisti di cpu ed \u00e8 anche il primo livello di astrazione. Da grezzi valori di corrente, si inizia a parlare di numeri e di operazioni su di essi. A questo livello possiamo dire &#8220;somma 2 + 3&#8221; senza preoccuparci di quale sia il livello di corrente associato a uno, a zero e altri problemi di questo tipo.<\/p>\n<p><strong>Assembly<\/strong><\/p>\n<p>Dalla microprogrammazione in poi \u00e8 tutta una questione di astrazione e traduzione. Ci si rese conto che memorizzare istruzioni come 101 e 111 per effettuare la somma e la differenza di due numeri era assolutamente poco intuitivo, si ricorse quindi ad un altro strato di astrazione, il linuguaggio assembly (<a href=\"http:\/\/it.wikipedia.org\/wiki\/Assembly\" target=\"_blank\">link<\/a>). In tale linguaggio le istruzioni in binario vengono sostituite da parole chiave mnemoniche come ADD o SUB, rendendo cos\u00ec il lavoro dei programmatori pi\u00f9 semplice.<\/p>\n<p>La cpu per\u00f2 continua a riconoscere soltanto i comandi forniti come stringhe binarie, ed ecco che quindi interviene un programma che si chiama <strong>assembler<\/strong> il cui compito \u00e8 appunto quello di tradurre le parole chiave del linguaggio assembly come ADD e SUB nelle rispettive stringhe binarie adatte alla cpu.<\/p>\n<p>Il linguaggio assembly oggi non \u00e8 sicuramente il linguaggio pi\u00f9 comune, realizzare un programma moderno scrivendolo tutto in assembly sarebbe un&#8217;opera folle, ma \u00e8 utilizzato ancora per particolari programmi che hanno bisogno di un accesso quasi diretto alla cpu.<\/p>\n<p><strong>Linguaggi di alto livello<\/strong><\/p>\n<p>I linguaggi come l&#8217;assembly vengono di norma definiti &#8220;di basso livello&#8221; per via della loro posizione relativamente bassa nella gerarchia delle astrazioni. Con il passare degli anni si sono evoluti linguaggi di programmazione via via pi\u00f9 distanti dall&#8217;assembly ed a questi \u00e8 stato assegnato il nome di linguaggi &#8220;di alto livello&#8221;<\/p>\n<p>I linguaggi di alto livello astraggono molto pi\u00f9 di quanto non faccia il linguaggio assembly, perch\u00e8 non si tratta di una semplice traduzione tra parole chiave binare a parole chiave mnemoniche, ma forniscono un modo semplice per l&#8217;accesso alla memoria, e facilitano la rappresentazione dei dati all&#8217;interno del calcolatore in maniera pi\u00f9 simile al ragionamento umano.<\/p>\n<p>I primi linguaggi di programmazione furono il FORTRAN ed il BASIC, seguirono poi ALGOL, LISP, SIMULA e a ruota tantissimi altri, mentre per veder nascere il C bisogner\u00e0 attendere fino al 1975. Il proliferare di tanti linguaggi (ad oggi se ne contano pi\u00f9 di 2500!) \u00e8 dovuto in piccola parte ai variabili gusti dei programmatori, ma soprattutto all&#8217;evoluzione scientifica teorica che sta dietro a tali linguaggi.<\/p>\n<p><strong>Come scrivere un programma?<\/strong><\/p>\n<p>Questo argomento verr\u00e0 approfondito nelle prossime lezioni di questo corso, ma vorrei fornire qui una panoramica del processo di scrittura di un programma.<\/p>\n<p>Per scrivere un programma sono necessari pochi strumenti, bisogna avere la documentazione del linguaggio che si vuole utilizzare, un programma per scrivere del testo (come notepad) e un compilatore. Sui primi due credo che non ci sia altro da aggiungere, mentre per quanto riguarda il compilatore bisogna sapere che \u00e8 un programma concettualmente simile all&#8217;assembler, il suo scopo \u00e8 quello di trasformare quello che abbiamo scritto nel linguaggio da noi scelto, e trasformarlo in istruzioni binarie adatte ad essere interpretate dalla cpu.<\/p>\n<p>Ovviamente questo \u00e8 il set minimo di strumenti, ma se si vuol lavorare in maniera pi\u00f9 comoda sono stati inventanti tanti programmi alternativi al blocco note che permettono di scrivere il nostro programma in modo pi\u00f9 agevole permettendo la collaborazione tra pi\u00f9 programmatori etc.<\/p>\n<p>Nelle prossime lezioni esamineremo il concetto di algoritmo ed analizzeremo nel dettaglio il linguaggio C. Scriveremo i nostri programmi, li compileremo e li eseguiremo, consapevoli che quello al quale stiamo lavorando \u00e8 un livello discretamente alto di astrazione rispetto al linguaggio delle cpu.<\/p>\n<h4>Letture consigliate:<\/h4>\n<p><a href=\"http:\/\/www.amazon.it\/gp\/search\/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&amp;keywords=887192200X&amp;tag=de0d-21&amp;index=aps&amp;linkCode=as2&amp;camp=3370&amp;creative=23322\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP.jpg\" alt=\"C-Corso-Completo-di-Programmazione-kernighan-ritchie-devAPP\" width=\"54\" height=\"75\" class=\"alignleft size-full wp-image-7803\" \/><\/a> <a href=\"http:\/\/www.amazon.it\/gp\/search\/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&amp;keywords=887192200X&amp;tag=de0d-21&amp;index=aps&amp;linkCode=as2&amp;camp=3370&amp;creative=23322\" target=\"_blank\"><strong>Il linguaggio C. Principi di programmazione e manuale di riferimento (Accademica) <\/strong><\/a><br \/>\n<em>Brian W. Kernighan &#8211; Dennis M. Ritchie<\/em><br \/>\n<strong>Editore:<\/strong> Pearson | <strong>Lingua:<\/strong> Italiano | <strong>Brossura:<\/strong> 313 pagine<br \/>\n<strong>Prezzo Listino:<\/strong> <del datetime=\"2011-09-03T10:00:08+00:00\">EUR 27,00<\/del><br \/>\n<strong>Prezzo Promozione:<\/strong> EUR 22,95 con Spedizione gratuita<\/p>\n<p><a href=\"http:\/\/www.amazon.it\/gp\/product\/8850329547\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;tag=de0d-21&amp;linkCode=as2&amp;camp=3370&amp;creative=23322&amp;creativeASIN=8850329547\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP.jpg\" alt=\"C-Corso-Completo-di-Programmazione-Deitel-Deitel-devAPP\" width=\"54\" height=\"75\" class=\"alignleft size-full wp-image-7550\" \/><\/a> <a href=\"http:\/\/www.amazon.it\/gp\/product\/8850329547\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;tag=de0d-21&amp;linkCode=as2&amp;camp=3370&amp;creative=23322&amp;creativeASIN=8850329547\" target=\"_blank\"><strong>C. Corso completo di programmazione<\/strong><\/a><br \/>\n<em>Paul J. Deitel &#8211; Harvey M. Deitel<\/em><br \/>\n<strong>Editore:<\/strong> Apogeo | <strong>Lingua:<\/strong> Italiano | <strong>Brossura:<\/strong> 640 pagine<br \/>\n<strong>Prezzo Listino:<\/strong> <del datetime=\"2011-09-03T10:00:08+00:00\">EUR 39,00<\/del><br \/>\n<strong>Prezzo Promozione:<\/strong> EUR 33,15 con Spedizione gratuita<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/supporto-applicazioni\/le-applicazioni-dei-nostri-autori\/parole-vietate-di-ignazio-calo\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/02\/bannerIgnazioc.png\" alt=\"\" width=\"480\" height=\"100\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cosa significa programmare? Come si fa a &#8220;dire&#8221; ai computers quello che devono fare? Se sono veramente&#8230;<\/p>\n","protected":false},"author":53,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[569],"tags":[593,241,594,595],"class_list":["post-5884","post","type-post","status-publish","format-standard","hentry","category-corso-completo-di-c","tag-corso-completo-di-c-2","tag-ignazio-calo","tag-iniziare-a-programmare-iphone","tag-storia-della-programmazione"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=5884"}],"version-history":[{"count":16,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5884\/revisions"}],"predecessor-version":[{"id":7976,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5884\/revisions\/7976"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=5884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=5884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=5884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}