{"id":23,"date":"2021-04-28T19:59:10","date_gmt":"2021-04-28T17:59:10","guid":{"rendered":"https:\/\/www.gameslab.info\/site\/?p=23"},"modified":"2021-04-28T20:38:04","modified_gmt":"2021-04-28T18:38:04","slug":"linformatica-il-programma-e-lesecutore-di-riferimento","status":"publish","type":"post","link":"https:\/\/www.gameslab.info\/site\/2021\/04\/28\/linformatica-il-programma-e-lesecutore-di-riferimento\/","title":{"rendered":"L&#8217;informatica, il programma e l&#8217;esecutore di riferimento"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cos&#8217;\u00e8 un programma? E&#8217; un elenco di istruzioni che deve essere dato a qualcuno che dovr\u00e0 eseguirle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Troppo generico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Facciamo per un momento un passo indietro, e pensiamo un attimo al significato della parola informatica. Cosa vuol dire informatica? <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se lo chiedete ad un matematico, questi vi risponder\u00e0 che il termine nasce dalla contrazione delle parole INFORmazione e mateMATICA, e sta ad indicare un processo per il trattamento matematico delle informazioni, cercando ancora una volta di accaparrarsi la paternit\u00e0 della neonata scienza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In realt\u00e0 il termine informatica nasce dalla contrazione delle parole INFORmazione e autoMATICA, e sta ad indicare un processo per il trattamento automatico delle informazioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cavilli? pu\u00f2 darsi. Ma la differenza c&#8217;\u00e8, e si sente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un banale esempio: la matematica ci insegna che enunciato un problema ed i suoi dati, applicando una serie di procedimenti (matematici), possiamo giungere alla soluzione.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Es. Il nonno di Luisa ha in cantina, tra bianco e rosso, 810 litri di vino. I 2\/3 sono di vino rosso.<br>Quanti litri di vino rosso ha il nonno? Quanti sono i litri di vino bianco?<br><br>(810 : 3) x 2 = 540 l (vino rosso)<br>810 &#8211; 540 = 270 l (vino bianco)<br><br>Il nonno ha 540 litri di vino rosso e 270 litri di vino bianco.<\/p><\/blockquote>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;informatica ci permette di classificare il problema, partendo da una soluzione nota o desiderata, creando un procedimento che pu\u00f2 essere adattato ad ogni problema della stessa classe per risolverlo in maniera automatica.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Es. desidero ingrandire o ridurre una qualsiasi immagine di un qualsiasi fattore di scala.<\/p><p>per ogni punto dell&#8217;immagine<br>          moltiplica la posizione del punto per il fattore di scala, <br>          al posto del punto disegna un quadrato che ha per lato il fattore di scala.<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">In matematica abbiamo risolto il problema applicando un procedimento, una formula, arrivando al risultato. In informatica abbiamo creato un procedimento, un algoritmo, un programma, che pu\u00f2 essere applicato ad ogni problema della stessa classe (riduzioni o ingrandimenti di immagini, che pu\u00f2 essere applicato a qualsiasi immagine e per qualsiasi fattore di scala) ma, cosa pi\u00f9 importante, in maniera automatica, cio\u00e8 senza alcun intervento umano (o perlomeno estremamente ridotto).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Potremmo, banalizzando, affermare che siano una l&#8217;opposta dell&#8217;altra o che (eresia!) la matematica possa in qualche modo sfruttare l&#8217;informatica per la risoluzione dei problemi. La verit\u00e0, come sempre, sta nel mezzo. Le due discipline si compenetrano: la matematica usa procedimenti, creati dai grandi matematici fin dalla notte dei tempi, mentre l&#8217;informatica permette di creare quei procedimenti, per lo pi\u00f9 applicando formule e procedimenti matematici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alla fine di tutto questo bel paragrafo, potremmo quasi asserire che Pitagora, Euclide e compagnia bella fossero programmatori! e i matematici a seguire i loro esecutori! scommetto che i matematici alla lettura avranno la loro da dire (fieri ed orgogliosi quali sono, da bravi matematici)!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ovviamente si tratta di ironia, gente&#8230; evitiamo inutili flame!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers-1024x717.jpg\" alt=\"\" class=\"wp-image-32\" width=\"844\" height=\"591\" srcset=\"https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers-1024x717.jpg 1024w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers-300x210.jpg 300w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers-768x538.jpg 768w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers-1536x1075.jpg 1536w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/Diagram_for_the_computation_of_Bernoulli_numbers.jpg 2000w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><figcaption><a href=\"https:\/\/it.wikipedia.org\/wiki\/Algoritmo_di_Ada_Lovelace_per_i_numeri_di_Bernoulli\" data-type=\"URL\" data-id=\"https:\/\/it.wikipedia.org\/wiki\/Algoritmo_di_Ada_Lovelace_per_i_numeri_di_Bernoulli\" target=\"_blank\" rel=\"noreferrer noopener\">Il primo programma mai pubblicato nella storia dell&#8217;informatica, per l&#8217;elaborazione della serie numerica di Bernoulli, a cura di Ada Lovelace.<\/a><\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Chiarito cosa sia l&#8217;informatica e cosa un programma, andiamo avanti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il programma che resta nella testa del programmatore \u00e8 fine a se stesso (al pi\u00f9 pu\u00f2 alimentare il senso di autocompiacimento\/autostima del programmatore): questo \u00e8 un dato di fatto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Affinch\u00e9 possa essere utile a qualcuno (programmatore compreso) il programma deve essere scritto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In che lingua? in una lingua conosciuta da colui che dovr\u00e0 eseguire il programma: l&#8217;esecutore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;esecutore \u00e8 il soggetto che fisicamente legger\u00e0, comprender\u00e0 ed eseguir\u00e0 il programma passo passo, cos\u00ec come lo ha previsto il programmatore in fase di scrittura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comprato un mobile all&#8217;IKEA? aperto l&#8217;involucro di cartone hai trovato le istruzioni? hai seguito le istruzioni passo passo ed hai montato il mobile? bene, TU sei stato l&#8217;esecutore, le istruzioni il programma, i pezzi del mobile i dati, il mobile il risultato. Non hai eseguito le istruzioni passo passo, alla lettera, e il mobile \u00e8 venuto una schifezza? TU sei stato un&#8217;anomalia, un bug, qualcosa che non ha consentito al programma di funzionare correttamente (e non c&#8217;\u00e8 da andarne fieri).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Facciamo finta, per un attimo, che il tempo si sia fermato agli inizi degli anni &#8217;80. I computer potenti erano grossi come grandi stufe, i personal computer (PC) non esistevano ancora, ed iniziavano ad affacciarsi i primi home computer. Tutti in comune avevano una potenza di elaborazione ad oggi ridicola, scarsa o nessuna possibilit\u00e0 di archiviazione dei dati, e ciascuno il proprio dialetto di linguaggio macchina per la programmazione, dato dal modello di microprocessore montato a bordo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esatto. Linguaggio macchina. L&#8217;esecutore del programma era il microprocessore (cosa che avviene tutt&#8217;oggi a 40 anni di distanza, tralasciando quello che c&#8217;era prima in quanto poco utile ai fini di questa spiegazione), una macchina in grado di processare informazioni sotto forma di segnali elettrici, e di fornire altrettante informazioni, anch&#8217;esse sotto forma di segnali elettrici, prodotte da un programma inserito nella sua area di lavoro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pertanto il programmatore che volesse scrivere un programma per un dato microprocessore, doveva scriverlo nella sola lingua che l&#8217;esecutore potesse comprendere, ovvero segnali elettrici, che opportunamente combinati in un set di istruzioni, il linguaggio macchina, consentivano al microprocessore di eseguire somme, salti e spostare dati in memoria. Istruzioni che opportunamente organizzate, hanno portato alla realizzazione di programmi sempre pi\u00f9 complessi, sistemi operativi, applicazioni, web, fino a questo testo che state leggendo.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/8086-Opcodes-1024x716.jpg\" alt=\"\" class=\"wp-image-34\" width=\"830\" height=\"579\" srcset=\"https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/8086-Opcodes-1024x716.jpg 1024w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/8086-Opcodes-300x210.jpg 300w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/8086-Opcodes-768x537.jpg 768w, https:\/\/www.gameslab.info\/site\/wp-content\/uploads\/2021\/04\/8086-Opcodes.jpg 1263w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><figcaption>Tavola sinottica delle istruzioni del microprocessore intel 8086.<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Pensate che siano cose lontane anni luce? pensate che ad oggi funziona ancora tutto esattamente cos\u00ec (certo, con l&#8217;unica eccezione del computer quantistico), solo infinitamente pi\u00f9 velocemente e con capacit\u00e0 di memorizzazione, ai tempi, inimmaginabile. Cose, velocit\u00e0 ed archiviazione, che hanno consentito lo svilupparsi di tutti i sistemi software ed hardware di cui possiamo disporre oggi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dai segnali elettrici si \u00e8 passati ai codici esadecimali, e da questi ai codici mnemonici (con l&#8217;introduzione del linguaggio assembly), ma il programma veniva scritto ancora in linguaggio macchina, solo che stavolta per il programmatore era pi\u00f9 facile ricordare un&#8217;istruzione, per sommare ad esempio due numeri, del tipo ADD AX, BX piuttosto che una lunga sequenza di segnali accesi\/spenti, 1\/0, o un numero esadecimale. Il programma cos\u00ec scritto in assembly veniva dato in pasto ad un altro programma, scritto da qualcun altro, l&#8217;Assembler, che convertiva il codice mnemonico in linguaggio macchina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma anche cos\u00ec scrivere programmi complessi presentava una non trascurabile difficolt\u00e0, che si ripercuoteva sui tempi di consegna ed i budget investiti. Cos\u00ec inizi\u00f2 la corsa alla scrittura dei vari linguaggi di programmazione, che tra gli anni &#8217;70 e gli anni &#8217;80 ha visto la sua epoca d&#8217;oro. Nacquero linguaggi di ogni genere e tipo, specializzati nei pi\u00f9 variegati settori: dal BASIC per facilitare l&#8217;apprendimento e l&#8217;ingresso nel mondo della programmazione, il COBOL specializzato per costruire programmi gestionali e di contabilit\u00e0, il FORTRAN che metteva a disposizione funzioni matematiche di ogni genere e pertanto usato in ambito scientifico, il PROLOG finalizzato al trattamento logico dei dati, e cos\u00ec via, passando per ADA, PASCAL, e molti, molti altri. Tutti questi avevano una sola cosa in comune: un particolare programma in grado di convertire lo specifico linguaggio in linguaggio macchina (che resta comunque la sola cosa che la macchina pu\u00f2 eseguire): il compilatore. Cos\u00ec come l&#8217;assembly aveva il suo Assembler, cos\u00ec ogni linguaggio aveva il suo compilatore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E per i programmatori inizi\u00f2 a diventare pi\u00f9 facile scrivere programmi. E molti pi\u00f9 programmi iniziarono a vedere la luce, facendo crescere la necessit\u00e0 di prestazioni migliori, e maggiore capacit\u00e0 di archiviazione. Necessit\u00e0 dovuta anche al fatto che pi\u00f9 si sale di livello, quindi allontanandosi dal livello del codice macchina a favore di una maggiore semplicit\u00e0 di programmazione, pi\u00f9 diventa difficile\/impossibile ottimizzare il programma generato dal compilatore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da qui in avanti il programmatore non doveva pi\u00f9 fare riferimento al microprocessore nello scrivere il suo programma, bens\u00ec al linguaggio di programmazione da egli scelto. Anche perch\u00e9 i linguaggi di programmazione pi\u00f9 alla moda avevano il proprio compilatore per i vari processori presenti sul mercato, certo con qualche differenza gli uni dagli altri dovuta alle differenze dei vari microprocessori (non potevano essere tutti uguali, altrimenti il mercato si sarebbe ben presto appiattito anzich\u00e9 diventare quella fucina di idee che ha portato fino agli smartphone che ora abbiamo tra le mani).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E dai linguaggi di programmazione si pass\u00f2 ai sistemi operativi: collezioni di programmi che facevano il possibile per mettere a disposizione funzionalit\u00e0 di base per gestire gli schermi, via via pi\u00f9 sofisticati, le tastiere, le stampanti, e i dischi, sia quelli rimovibili che quelli fissi. E nacquero i primi sistemi DOS, capaci di essere eseguiti da un floppy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E da l\u00ec i programmatori dovettero iniziare a pensare i propri programmi in funzione del linguaggio, del microprocessore ed anche del sistema operativo su cui sarebbero stati eseguiti, dapprima ancora testuali come il DOS, poi grafici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E poi fu la volta degli interpreti, che gradualmente, grazie all&#8217;aumento delle prestazioni dell&#8217;hardware, presero il posto dei compilatori, al grido di &#8220;scrivi una volta, esegui dappertutto!&#8221;: programmi che anzich\u00e9 tradurre il codice in linguaggio macchina si limitavano ad eseguirlo istruzione dopo istruzione, passo dopo passo, assumendosi il compito di esecutore. E anche qui, a discapito dell&#8217;ottimizzazione. Inoltre ci\u00f2 portava con s\u00e9 la terribile conseguenza del dover distribuire il codice sorgente del programma affinch\u00e9 l&#8217;interprete potesse leggerlo ed eseguirlo passo passo, cosa ovviamente inaccettabile per le aziende, tanto gelose ed impegnate a custodire i propri segreti industriali.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma nonostante tutto il concetto di interprete piacque cos\u00ec tanto da portare alla realizzazione delle macchine virtuali, Java su tutte, evolvendo il concetto dello &#8220;scrivi una volta, esegui dappertutto&#8221; in &#8220;compila una volta, esegui ovunque&#8221;: non era pi\u00f9 necessario distribuire il codice del programma, ma bastava darlo in pasto in appositi compilatori in grado di produrre un codice macchina specifico per un microprocessore non esistente realmente, virtuale appunto, che la macchina virtuale, presente sui pi\u00f9 disparati sistemi, avrebbe interpretato alla stregua di un microprocessore reale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E ancora, a seguire, compilatori JIT, runtime di ogni tipo e genere, e via via, spostando sempre l&#8217;ago della bilancia sulla facilit\u00e0 di produrre programmi, rispetto alle prestazioni ed alle ottimizzazioni, e portando a spremere sempre di pi\u00f9 i limiti fisici per la produzione di microprocessori sempre pi\u00f9 veloci, sempre pi\u00f9 memoria, sempre pi\u00f9 spazio di archiviazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tutta questa bella prosopopea solo per dire che, oggi come allora, chi vuole intraprendere la via del programmatore, deve fare i conti con l&#8217;esecutore di riferimento, che sia un microprocessore (computer, smartphone, tablet, smart tv, sistemi embedded), una macchina virtuale (Java, .NET, etc.), un linguaggio particolare (JavaScript, C#, Python, Lua, etc.).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se poi siete qui perch\u00e9 volete sviluppare videogiochi, dovrete tenere anche in considerazione le varie piattaforme esistenti, dai sistemi desktop (windows, macOs, linux), ai dispositivi mobili, al web, alle varie console (sony, microsoft, nintendo, etc.), ciascuna con le proprie peculiarit\u00e0, e non da ultimo, l&#8217;engine ed il linguaggio di programmazione che intenderete utilizzare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo non deve scoraggiarvi, dovete solo essere preparati a quello che andrete incontro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;esecutore \u00e8 al tempo stesso, il vostro migliore alleato ed il vostro peggior nemico. Farete bene a conoscerlo a fondo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cos&#8217;\u00e8 un programma? E&#8217; un elenco di istruzioni che deve essere dato a qualcuno che dovr\u00e0 eseguirle. Troppo generico. Facciamo per un momento un passo indietro, e pensiamo un attimo al significato della parola informatica. Cosa vuol dire informatica? Se lo chiedete ad un matematico, questi vi risponder\u00e0 che il termine nasce dalla contrazione delle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-senza-categoria"],"_links":{"self":[{"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":19,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"predecessor-version":[{"id":46,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/posts\/23\/revisions\/46"}],"wp:attachment":[{"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gameslab.info\/site\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}