<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Basic on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/basic/</link>
    <description>Recent content in Basic on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Sat, 05 Apr 2025 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/basic/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>50 anni di Microsoft (più un giorno)</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2025/04/05/50-anni-di-microsoft-piu-un-giorno/</link>
      <pubDate>Sat, 05 Apr 2025 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2025/04/05/50-anni-di-microsoft-piu-un-giorno/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-05-50-anni-di-microsoft-piu-un-giorno/allen-and-gates.png&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Paul Allen seduto alla telescrivente collegata al computer della scuola con accanto, in piedi, un giovanissimo Bill Gates. Fonte: &lt;a href=&#34;https://www.gatesnotes.com/meet-bill/source-code/reader/microsoft-original-source-code&#34;&gt;Celebrate 50 Years of Microsoft&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://melabit.com/it/2025/04/04/50-anni-di-microsoft/&#34;&gt;Ieri&lt;/a&gt;, nonostante i festeggiamenti, sono stato un po&amp;rsquo; perfido nei confronti di Microsoft. Però va detto che il &lt;a href=&#34;https://www.gatesnotes.com/meet-bill/source-code/reader/microsoft-original-source-code&#34;&gt;pezzo celebrativo&lt;/a&gt; scritto da Bill Gates per i 50 anni della sua creatura è bellissimo. Il testo non rivela niente di nuovo, sono tutte cose ben note a chi conosce un po&amp;rsquo; di &lt;a href=&#34;https://melabit.com/it/2019/07/28/il-libro-per-lestate/&#34;&gt;storia dell&amp;rsquo;informatica personale&lt;/a&gt;, ma la realizzazione grafica è spettacolare. Grazie a Bill per questo bel regalo!&lt;/p&gt;&#xA;&lt;p&gt;Ma la vera chicca è il &lt;a href=&#34;https://images.gatesnotes.com/12514eb8-7b51-008e-41a9-512542cf683b/34d561c8-cf5c-4e69-af47-3782ea11482e/Original-Microsoft-Source-Code.pdf&#34;&gt;listato completo dell&amp;rsquo;interprete BASIC&lt;/a&gt; per l&amp;rsquo;Altair 8800, che è stato il primo programma mai venduto dalla Micro-Soft (all&amp;rsquo;inizio il nome era scritto con il trattino).&lt;/p&gt;&#xA;&lt;p&gt;Ragazzi, possiamo dire quello che vogliamo ma i due, Paul Allen e Bill Gates (con il supporto di Monte Davidoff) hanno scritto un codice ineccepibile. È in &lt;a href=&#34;https://en.wikipedia.org/wiki/Assembly_language&#34;&gt;Assembly&lt;/a&gt;, cioè nel linguaggio di programmazione più vicino possibile alla macchina (a meno di non programmare direttamente in codice binario), che ai quei tempi era l&amp;rsquo;unico modo per produrre un programma compatto e che pesasse il meno possibile sulle limitatissime risorse hardware delle macchine di allora.&lt;/p&gt;&#xA;&lt;p&gt;Non è necessario conoscere il linguaggio Assembly per apprezzare la perizia tecnica dei due: il loro codice è molto pulito e strutturato, pieno di subroutine (le moderne funzioni) per gestire le parti ripetitive ed evitare sprechi di spazio. Inoltre tutto il codice è pieno di commenti, che spiegano con estremo dettaglio il funzionamento di ogni sezione di codice e persino di ogni singola riga.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-05-50-anni-di-microsoft-piu-un-giorno/altair-basic-rnd-generator.png&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-05-50-anni-di-microsoft-piu-un-giorno/altair-basic-rnd-generator.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Non voglio dire leggendo che si capisce al volo quello che fa (magari fosse così!). Ma sono abbastanza sicuro che se oggi uno sufficientemente esperto di queste cose avesse la pazienza di leggere il codice, potrebbe capire fin nei minimi dettagli come funzionava l&amp;rsquo;interprete BASIC (chissà se fra 50 anni si potrà dire lo stesso per i programmi scritti oggi)&lt;/p&gt;&#xA;&lt;p&gt;Se diventi il più grande produttore di software al mondo non è solo perché sai vendere e usi pratiche commerciali sul filo del rasoio. È perché sei bravo.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>50 anni di Microsoft</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2025/04/04/50-anni-di-microsoft/</link>
      <pubDate>Fri, 04 Apr 2025 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2025/04/04/50-anni-di-microsoft/</guid>
      <description>&lt;p&gt;Piaccia o non piaccia  Microsoft è il più grande produttore di software al mondo, ed è riuscita, in modi più o meno puliti, a far installare i suoi prodotti sulla stragrande maggioranza dei computer del pianeta.&lt;/p&gt;&#xA;&lt;p&gt;Oggi Microsoft compie 50 anni, e sembra ieri quando i due fondatori, Bill Gates e Paul Allen, assicurarono Ed Roberts di avere pronto un &lt;a href=&#34;https://www.gatesnotes.com/meet-bill/source-code/reader/microsoft-original-source-code&#34;&gt;interprete BASIC per il suo Altair 8800&lt;/a&gt;, il primo computer davvero personale, senza aver mai visto né l&amp;rsquo;Altair né il processore 8080 che lo faceva funzionare.&lt;/p&gt;&#xA;&lt;p&gt;Qualche anno dopo, i due &lt;em&gt;dimenticarono&lt;/em&gt; di dire a Tim Paterson, l&amp;rsquo;autore di QDOS (Quick and Dirty Operating System, ovvero il Sistema Operativo [fatto in modo] Veloce e Sporco) per il processore 8086, che avevano promesso ad IBM un &lt;a href=&#34;https://www.pcmag.com/news/the-rise-of-dos-how-microsoft-got-the-ibm-pc-os-contract&#34;&gt;sistema operativo per il suo imminente Personal Computer&lt;/a&gt;, che era basato proprio su quel processore. Così acquisirono i diritti di QDOS da Paterson per un tozzo di pane, lo ribattezzarono MS-DOS e lo licenziarono a IBM, catapultando Microsoft (e sè stessi) nell&amp;rsquo;olimpo dell&amp;rsquo;informatica e dei profitti.&lt;/p&gt;&#xA;&lt;p&gt;E poi ci sono state le copiature smaccate dell&amp;rsquo;interfaccia utente di Windows (vero Apple?), le pratiche quasi intimidatorie con le aziende che utilizzavano Windows in licenza e l&amp;rsquo;uso di Internet Explorer come strumento per eliminare la concorrenza degli altri sistemi operativi. E poi ancora le cause legali, il ritiro di Bill Gates, le pagliacciate di Steve Ballmer, il flop cosmico di Vista, quello altrettanto cosmico di Windows 8.&lt;/p&gt;&#xA;&lt;p&gt;Ma oggi è il compleanno e si festeggia, per cui facciamo i buoni e alziamo i calici.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/clink-glasses.jpeg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata dall&amp;rsquo;IA di &lt;a href=&#34;https://designer.microsoft.com/image-creator&#34;&gt;Microsoft Designer&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Però, anche se oggi si fa festa, una domanda a quelli di Microsoft non posso non fargliela.&lt;/p&gt;&#xA;&lt;p&gt;State festeggiando mezzo secolo di storia, siete famosi in tutto il sistema solare, e certo i soldi non vi mancano. Come è possibile che per celebrare un anniversario come questo non siate riusciti ad ingaggiare uno straccio di artista capace di disegnare degli &lt;a href=&#34;https://unlocked.microsoft.com/50th/&#34;&gt;sfondi migliori di questi&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/Microsoft_50th_Solitaire_Light_4k.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/Microsoft_50th_Windows_Light_4k.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;P.S. Ma anche chi usa solo lo smartphone può rifarsi gli occhi con &lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/GmV5M6rWkAACeJ2.jpg&#34;&gt;questo&lt;/a&gt;, o &lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/GmV5NsCa8AQtzph.jpg&#34;&gt;questo&lt;/a&gt;, o anche &lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/GmV5Ptea8AMPRCh.jpg&#34;&gt;questo&lt;/a&gt;, e perfino &lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-04-04-50-anni-di-microsoft/GmV5Repa8AQTKaV.jpg&#34;&gt;questo&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Swift contro Python, ovvero mele contro pere</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2022/10/03/swift-contro-python-ovvero-mele-contro-pere/</link>
      <pubDate>Mon, 03 Oct 2022 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2022/10/03/swift-contro-python-ovvero-mele-contro-pere/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-10-03-swift-contro-python-ovvero-mele-contro-pere/martina-leuderalbert-i-GgDz7KQz4-unsplash.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Fonte: &lt;a href=&#34;https://unsplash.com/@tinaleuderalbert&#34;&gt;Martina Leuderalbert&lt;/a&gt; su &lt;a href=&#34;https://unsplash.com&#34;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Alle elementari la maestra mi aveva insegnato a non sommare le mele con le pere, cioè a non mettere insieme (o paragonare) cose e fatti molto diversi fra loro. Non ha quindi senso sommare 3 litri di acqua con 5 chilogrammi di farina o chiedersi se 40 metri sono più o meglio di 20 secondi.&lt;/p&gt;&#xA;&lt;p&gt;Quello che diceva la mia maestra lo dicono, sono sicuro, le maestre di tutto il mondo, ma c&amp;rsquo;è sempre qualcuno assente a queste lezioni.&lt;/p&gt;&#xA;&lt;h4 id=&#34;il-golia-della-programmazione-moderna&#34;&gt;Il Golia della programmazione moderna&lt;/h4&gt;&#xA;&lt;p&gt;Uno di questi è stato di sicuro Ari Joury che, nonostante il suo dottorato in fisica delle particelle, non si è fatto scrupoli a pubblicare su Medium questo &lt;a href=&#34;https://medium.com/geekculture/swift-was-poised-to-replace-python-then-it-tanked-3e6c11740ba6&#34;&gt;Swift was poised to replace Python. Then it tanked&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cosa dice l’articolo? Che nel mondo del machine learning i linguaggi di programmazione più usati sono Matlab, R, Julia e soprattutto Python. Quest’ultimo, nato originariamente per sviluppare dei piccoli &lt;em&gt;script&lt;/em&gt; senza troppe pretese, è diventato oggi un vero &lt;em&gt;&amp;ldquo;Golia della programmazione moderna”&lt;/em&gt;, tanto da essere usato estensivamente da aziende come Dropbox, Instagram e Pinterest per i loro servizi online.&lt;/p&gt;&#xA;&lt;p&gt;Grazie alla disponibilità di librerie come TensorFlow o PyTorch (nonché, aggiungo io, di librerie di base come Pandas o NumPy), Python è diventato anche il linguaggio di elezione di chi si occupa di machine learning e di analisi dei dati.&lt;/p&gt;&#xA;&lt;p&gt;La crescita di Python sembra bloccata da un paio di anni, ma la sua enorme diffusione lo farà rimanere comunque un attore centrale anche nel prossimo futuro.&lt;/p&gt;&#xA;&lt;h4 id=&#34;entra-in-scena-swift&#34;&gt;Entra in scena Swift&lt;/h4&gt;&#xA;&lt;p&gt;Fin qui tutto vero e condivisibile. Magari si potrebbe eccepire qualcosina sull&amp;rsquo;importanza di R nell&amp;rsquo;ambito dell&amp;rsquo;analisi dei dati, ma non voglio essere puntiglioso.&lt;/p&gt;&#xA;&lt;p&gt;Il guaio è che se uno si limita a scrivere queste cose non se lo fila nessuno, chi vorrà mai leggere l&amp;rsquo;ennesimo articolo generico sulle virtù di Python per il machine learning (e non) o su &lt;a href=&#34;https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66&#34;&gt;quale linguaggio&lt;/a&gt; è destinato a soppiantarlo?&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Ci vuole un colpo d&amp;rsquo;ala.&lt;/p&gt;&#xA;&lt;p&gt;Per fortuna c&amp;rsquo;è sempre Apple che, come il nero, va bene su tutto e, soprattutto, garantisce sempre un bel po&amp;rsquo; di click. E allora perché non mettere in mezzo Swift?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.apple.com/swift&#34;&gt;Swift&lt;/a&gt; è un linguaggio di programmazione sviluppato da Apple con l&amp;rsquo;obiettivo specifico di sostituire &lt;a href=&#34;https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html&#34;&gt;Objective-C&lt;/a&gt; come linguaggio di elezione per lo sviluppo delle applicazioni per iOS e per macOS. Swift è facile da imparare e la sua sintassi leggibile ricalca quella di Python, è vero, così come quella di Julia e di tanti altri linguaggi di programmazione moderni.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Swift però non ha mai preteso di essere, come &lt;a href=&#34;https://medium.com/geekculture/swift-was-poised-to-replace-python-then-it-tanked-3e6c11740ba6&#34;&gt;sostiene il nostro Ari&lt;/a&gt;, il nuovo &lt;em&gt;&amp;ldquo;Re della Programmazione&amp;rdquo;&lt;/em&gt;. Ad Apple non interessa posizionare Swift come uno strumento di programmazione &lt;em&gt;general purpose&lt;/em&gt;, le interessa solo che venga usato per programmare le applicazioni per i suoi sistemi operativi. Del resto, il fatto che manchi di una versione per Windows taglia fuori una fetta così importante di potenziali utenti da rendere impossibile a priori una pretesa tanto assurda.&lt;/p&gt;&#xA;&lt;p&gt;A maggior ragione Swift non ha mai preteso di essere il nuovo strumento principe per il machine learning, come il buon Ari sotto sotto ci vuole far intendere. È vero che Google ha provato a &lt;a href=&#34;https://tensorflow.org/swift&#34;&gt;supportare Swift&lt;/a&gt; all&amp;rsquo;interno di TensorFlow (di cui Google è il principale sviluppatore), ma questo esperimento, come succede con tanti altri prodotti dell&amp;rsquo;azienda di Mountain View, è stato interrotto nel 2021. È ragionevole pensare, infatti, che chi sviluppa in Swift preferisce usare gli &lt;a href=&#34;https://developer.apple.com/machine-learning&#34;&gt;strumenti per il machine learning integrati&lt;/a&gt; in macOS/iOS piuttosto che prodotti di terze parti.&lt;/p&gt;&#xA;&lt;h4 id=&#34;io-sono-più-popolare-di-te&#34;&gt;Io sono più popolare di te&lt;/h4&gt;&#xA;&lt;p&gt;Ma la cosa più sconcertante è pretendere di confrontare la popolarità (o meno) dei linguaggi di programmazione utilizzando una metrica fasulla come la percentuale di domande poste ogni mese su StackOverflow relativamente ad uno o ad un altro linguaggio. In base a questa percentuale, la &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=python%2Cswift&#34;&gt;popolarità di Python&lt;/a&gt; è cresciuta costantemente fino alla fine del 2020, per poi stabilizzarsi al 16% del totale delle domande su StackOverflow, mentre &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=python%2Cswift&#34;&gt;quella di Swift&lt;/a&gt; dopo aver raggiunto un massimo del 3% è in declino e ora si aggira nei dintorni dell&#39;1.5%.&lt;/p&gt;&#xA;&lt;p&gt;Perché è una metrica fasulla? Perché finché siamo sui grandi numeri e confrontiamo la &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=python%2Cjavascript&#34;&gt;popolarità di Python con quella di JavaScript&lt;/a&gt; può anche avere senso basarsi sul numero di domande poste su StackOverflow per valutarne la diffusione.&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-10-03-swift-contro-python-ovvero-mele-contro-pere/stack-overflow-python-javascript.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;Ma se buttiamo nel calderone anche la terna &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=python%2Cjavascript%2Cjava%2Chtml%2Ccss%2Cphp&#34;&gt;HTML, CSS e PHP&lt;/a&gt;, che sono ancora oggi tre strumenti fondamentali per chi fa sviluppo web, troviamo che questi ultimi sono in costante declino, senza però che la decadenza (su StackOverflow) di PHP venga compensata da un incremento corrispondente nell&amp;rsquo;interesse verso JavaScript.&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-10-03-swift-contro-python-ovvero-mele-contro-pere/stack-overflow-python-javascript-html-css-php.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;Anche &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=wordpress&#34;&gt;Wordpress&lt;/a&gt;, che piaccia o non piaccia sta dietro il 40% dei siti web, secondo la metrica di StackOverflow sarebbe in calo. Idem per &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=mysql&#34;&gt;MySQL&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;E allora la spiegazione può essere un&amp;rsquo;altra: più che la diffusione, le domande su StackOverflow ci fanno vedere la complessità del linguaggio e la qualità della sua documentazione: HTML, CSS e PHP (o Wordpress e MySQL) sono prodotti ben assestati, per loro esistono ottime guide sul web che ne spiegano diffusamente i segreti. Di conseguenza non è necessario cercare risposte più o meno occasionali su StackOverflow, e comunque quelle che ci sono già bastano ed avanzano.&lt;/p&gt;&#xA;&lt;p&gt;Python e JavaScript, al contrario, hanno una sintassi di base piuttosto semplice ma per essere usati al meglio hanno bisogno di un gran numero di librerie aggiuntive, che sono spesso più complesse del linguaggio base e che vengono aggiornate ed espanse di continuo. La documentazione relativa non tiene sempre il passo dello sviluppo, per cui il modo migliore per imparare ad usare al meglio le centinaia e centinaia di API disponibili è quello di rivolgersi a qualche esperto su StackOverflow, spingendo così in alto la &lt;em&gt;popolarità&lt;/em&gt; dei due linguaggi.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Secondo la logica basata sul numero di domande su StackOverflow anche &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=c%2Cc%2B%2B&#34;&gt;C e C++&lt;/a&gt;, i linguaggi usati per la programmazione di sistema (e non) su Linux e Windows, sarebbero in declino, e lo stesso succede a &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=algorithm%2Carchitecture%2Cclass%2Cdatabase&#34;&gt;concetti di base&lt;/a&gt; come &lt;em&gt;algoritmo&lt;/em&gt;, &lt;em&gt;architettura&lt;/em&gt;, &lt;em&gt;classe&lt;/em&gt; o &lt;em&gt;database&lt;/em&gt;. Ma  sono in declino perché c&amp;rsquo;è davvero poco interesse o solo perché anche per loro c&amp;rsquo;è abbondanza di documentazione di ottimo livello, senza doversi ridurre a porre sempre delle nuove domande su StackOverflow?&lt;/p&gt;&#xA;&lt;p style=&#34;border-style:solid; border-color:lightblue; background-color:lightyellow; padding:1em;&#34;&gt;Nel mio piccolo lo faccio anch&#39;io: quando programmo in R uso pochissimo StackOverflow, perché posso usare l&#39;ottimo help in linea di RStudio e perché la documentazione che accompagna le librerie aggiuntive di R è centralizzata sul [CRAN](https://cran.r-project.org/) (_The Comprehensive R Archive Network_) ed è di altissima qualità. E quando tutto questo non basta, posso trovare decine di siti e di blog che spiegano benissimo gli aspetti più ostici del linguaggio. Quando passo a Python (un linguaggio che, sia chiaro, mi piace parecchio), StackOverflow diventa quasi una necessità, perché la frammentazione e la mancanza di sistema di gestione centralizzata delle librerie di Python rendono molto più complicato trovare documentazione aggiornata di qualità.&#xA;&lt;/p&gt;&#xA;&lt;h4 id=&#34;decaduto-o-semplice&#34;&gt;Decaduto o semplice?&lt;/h4&gt;&#xA;&lt;p&gt;Swift è un linguaggio semplice con una ottima &lt;a href=&#34;https://www.swift.org/documentation/&#34;&gt;documentazione ufficiale&lt;/a&gt;, un eccellente strumento di apprendimento del linguaggio (e non solo) come &lt;a href=&#34;https://www.apple.com/it/swift/playgrounds/&#34;&gt;Swift Playgrounds&lt;/a&gt; e un numero relativemente ridotto di &lt;a href=&#34;https://codersera.com/blog/open-source-swift-libraries/&#34;&gt;librerie aggiuntive&lt;/a&gt;, c&amp;rsquo;è davvero bisogno di passare un sacco di tempo su StackOverflow per usarlo al meglio?&lt;/p&gt;&#xA;&lt;p&gt;Guardando il grafico relativo al numero di domande relative a Swift ci si accorge che i picchi di interesse corrispondono alle date di presentazione della versione 1.0 (giugno 2014) e al rilascio delle versioni 2.0 (settembre 2015), 3.0  (settembre 2016) e 5.0 (marzo 2019) e, come è naturale, dopo ogni presentazione l&amp;rsquo;interesse tende a decadere, proprio perché per usare il linguaggio c&amp;rsquo;è davvero poco da chiedere su StackOverflow.&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-10-03-swift-contro-python-ovvero-mele-contro-pere/stack-overflow-swift.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;A supporto di questa tesi c&amp;rsquo;è il risultato di &lt;a href=&#34;https://data.stackexchange.com/stackoverflow/query/edit/1649394&#34;&gt;questa semplice query SQL&lt;/a&gt;, con la quale ho provato a calcolare il numero di domande poste su StackOverflow ogni anno. Di SQL ne so pochissimo per cui dovete prendere i risultati con le pinze, ma sembra che il numero di domande su StackOverflow sia in progressiva diminuzione, da un massimo di 2.2 milioni di domande nel 2016 a 1.6 milioni nel 2021.&lt;/p&gt;&#xA;&lt;p&gt;Una volta raggiunta una base di conoscenza sufficientemente ampia non ha molto senso porre sempre delle nuove domande (che su StackOverflow sono fortemente scoraggiate) ma ci si può limitare ad utilizzare il materiale già esistente. Questo almeno per le tecnologie più stabili, come possono essere HTML, CCS, PHP, Wordpress, MySQL&amp;hellip; oppure Swift. Quando invece abbiamo a che fare con strumenti in rapidissima evoluzione, come Python o JavaScript, StackOverflow diventa davvero il modo migliore per imparare.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;C&amp;rsquo;è bisogno di dilungarsi ancora? Non credo, dico solo che basarsi su ipotesi fantasiose o metriche poco affidabili per ipotizzare &lt;a href=&#34;https://medium.com/geekculture/swift-was-poised-to-replace-python-then-it-tanked-3e6c11740ba6&#34;&gt;scenari catastrofici&lt;/a&gt; per Swift (o, al contrario, &lt;a href=&#34;https://towardsdatascience.com/bye-bye-python-hello-julia-9230bff0df62&#34;&gt;scenari entusiasmanti&lt;/a&gt; per Julia&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;) mi pare francamente &lt;a href=&#34;https://xkcd.com/558/&#34;&gt;insensato&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-10-03-swift-contro-python-ovvero-mele-contro-pere/dt140323.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Fonte: &lt;a href=&#34;https://dilbert.com/strip/2014-03-23&#34;&gt;Dilbert&lt;/a&gt; di Scott Adams&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Capo: Non si possono confrontare mele e arance.&lt;/p&gt;&#xA;&lt;p&gt;Dilbert: È chiaramente sbagliato, perché li hai appena confrontati e dichiarati diversi.&lt;/p&gt;&#xA;&lt;p&gt;Wally: Mele e arance sono entrambi alimenti che crescono sugli alberi. Sarebbe assolutamente valido confrontarli dal punto di vista nutrizionale.&lt;/p&gt;&#xA;&lt;p&gt;Dilbert: Ho notato che molte delle cose che escono dalla tua bocca non hanno senso.&lt;/p&gt;&#xA;&lt;p&gt;Capo: Parli come mia moglie.&lt;/p&gt;&#xA;&lt;p&gt;Wally: Non puoi paragonare tua moglie al tuo subordinato. Sono mele e arance.&lt;/p&gt;&#xA;&lt;p&gt;Capo: Cosa sta succedendo qui?&lt;/p&gt;&#xA;&lt;p&gt;Wally: Non lo so, ma non lo paragonerei a lavoro.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Ari sembra avere le idee un po&amp;rsquo; confuse sul futuro di Python, dato che su Medium ha anche pubblicato &lt;a href=&#34;https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66&#34;&gt;Why Python is not the programming language of the future&lt;/a&gt;, oppure &lt;a href=&#34;https://towardsdatascience.com/bye-bye-python-hello-julia-9230bff0df62&#34;&gt;Bye-bye Python. Hello Julia!&lt;/a&gt; e perfino &lt;a href=&#34;https://levelup.gitconnected.com/why-tensorflow-for-python-is-dying-a-slow-death-ba4dafcb37e6&#34;&gt;Why TensorFlow for Python is dying a slow death&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;E non è un caso, perché alla base di tutti questi linguaggi c&amp;rsquo;è sempre il buon vecchio &lt;a href=&#34;https://time.com/69316/basic/&#34;&gt;BASIC&lt;/a&gt;, il primo linguaggio di programmazione davvero per tutti, che è stato il linguaggio di base dei computer personali degli anni &amp;lsquo;80 su cui si sono fatti le ossa tutti i grandi nomi dell&amp;rsquo;informatica di quegli anni.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Le sole domande sulla libreria &lt;code&gt;pandas&lt;/code&gt; di Python (una libreria fondamentale per chi usa Python per l&amp;rsquo;analisi dei dati) &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=pandas&#34;&gt;assommano al 3%&lt;/a&gt; del totale, le principali librerie per il machine learning (TensorFlow, Keras, PyTorch, scikit-learn, OpenCV, NLTK) fanno &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=tensorflow%2Ckeras%2Cpytorch%2Cscikit-learn%2Copencv%2Cnltk&#34;&gt;un altro 2%&lt;/a&gt;, mentre quelle su &lt;code&gt;Django&lt;/code&gt; e &lt;code&gt;Flask&lt;/code&gt; (le principali librerie Python per lo sviluppo di applicazioni per il web) sono quasi &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=django%2Cflask&#34;&gt;al 2.5%&lt;/a&gt; del totale generale. Chiaramente queste domande vengono anche conteggiate come domande relative a Python.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:4&#34;&gt;&#xA;&lt;p&gt;Perché sì, &lt;a href=&#34;https://insights.stackoverflow.com/trends?tags=julia&#34;&gt;l&amp;rsquo;interesse per Julia&lt;/a&gt; sembra essere in aumento su StackOverflow, ma parliamo di non più dello 0.16% (1/10 dei valori di Swift) e anche in questo caso i picchi corrispondono al rilascio delle varie versioni del linguaggio.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Python, il Visual Basic del XXI secolo?</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2021/04/19/python-il-visual-basic-del-xxi-secolo/</link>
      <pubDate>Mon, 19 Apr 2021 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2021/04/19/python-il-visual-basic-del-xxi-secolo/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2021-04-19-python-il-visual-basic-del-xxi-secolo/visual-basic-10-for-windows.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&amp;ndash; &lt;em&gt;Microsoft Visual Basic 1.0 per Windows 3.0 (e versioni successive)&lt;/em&gt;. Fonte: &lt;a href=&#34;https://winworldpc.com/product/microsoft-visual-bas/10&#34;&gt;WinWorld&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ho appena letto l&amp;rsquo;articolo &lt;em&gt;&lt;a href=&#34;https://medium.com/young-coder/is-python-the-spiritual-successor-to-visual-basic-5b211be55bc2&#34;&gt;Is Python the Spiritual Successor to Visual Basic?&lt;/a&gt;&lt;/em&gt; di &lt;a href=&#34;https://medium.com/@prosetech&#34;&gt;Matthew MacDonald&lt;/a&gt; e non potrei essere più d&amp;rsquo;accordo, tanto più che ho fatto esattamente lo stesso percorso, Visual Basic nei primi anni &amp;lsquo;90 e Python (assieme ad R) oggi.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Visual Basic&lt;/strong&gt; è stato un linguaggio davvero rivoluzionario, il primo che permetteva di aggiungere in modo semplice una interfaccia grafica ai programmi scritti in BASIC, un linguaggio di programmazione ben noto a tutti coloro che avevano vissuto la stagione degli &lt;em&gt;home computer&lt;/em&gt; come il Commodore 64 o lo Spectrum.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;A me, abituato ad usare il Fortran o uno dei vari linguaggi &lt;a href=&#34;https://issuu.com/adpware/docs/mc070/80&#34;&gt;Turbo-qualcosa e Quick-qualcosa&lt;/a&gt; che all&amp;rsquo;epoca spopolavano, Visual Basic sembrò all&amp;rsquo;inizio come una ventata di aria fresca e lo usai subito per un &lt;a href=&#34;http://rescience.github.io/bibliography/Maggi_2020.html&#34;&gt;progetto&lt;/a&gt; a cui tenevo moltissimo (e che merita di essere raccontato più in dettaglio).&lt;/p&gt;&#xA;&lt;p&gt;Ma dopo questa prima volta lo abbandonai senza remore, non solo perché nel frattempo avevo scoperto la potenza di UNIX e Windows era diventato improvvisamente troppo stretto per le mie esigenze, ma soprattutto perché avevo cozzato contro uno dei problemi più seri del linguaggio (almeno per me), l&amp;rsquo;incompatibilità fra le varie versioni, che impediva di eseguire il codice sviluppato per Visual Basic 1.0 già nella versione successiva della piattaforma di sviluppo. Ma dato che Microsoft già allora era maestra nel mettere i bastoni fra le ruote dei suoi utenti, nemmeno la compatibilità fra il Visual Basic 1.0 per Windows e la versione corrispondente per DOS era garantita al 100% (e questo era proprio il mio caso).&lt;/p&gt;&#xA;&lt;p&gt;Non sapevo ancora nulla di &lt;em&gt;free software&lt;/em&gt; o di &lt;em&gt;open source&lt;/em&gt;, ma l&amp;rsquo;idea di dover dipendere dai capricci di una azienda di software mi sembrava già allora incomprensibile.&lt;/p&gt;&#xA;&lt;p&gt;Visual Basic è considerato un prodotto Microsoft, ma in realtà è l&amp;rsquo;adattamento di un linguaggio di programmazione visuale per Windows 3.x, &lt;a href=&#34;https://www.computer.org/csdl/magazine/an/2020/04/09263263/1oReOkHdXQQ&#34;&gt;sviluppato in proprio da Alan Cooper&lt;/a&gt; (che lo aveva chiamato &lt;em&gt;Ruby&lt;/em&gt;). L&amp;rsquo;idea originale di Cooper era di creare uno strumento con cui costruire con facilità delle interfacce grafiche che aiutassero gli utenti ad utilizzare al meglio il nuovo sistema operativo, interfacce che potevano essere diversificate in base al livello di esperienza di chi le usava.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; Tramite dei buoni agganci Alan Cooper riuscì a presentare il proprio prodotto a Bill Gates, che ne rimase entusiasta e decise immediatamente di acquistarne i diritti. Ruby però finì subito in un limbo, ostaggio delle strategie aziendali e delle rivalità fra i diversi gruppi di sviluppatori, per essere associato solo in un secondo momento al QBasic, il vecchio interprete Basic della Microsoft, diventando così il Visual Basic che conosciamo.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;ambizioso obiettivo iniziale si ridusse così alla semplice riproposizione di un vecchio linguaggio di programmazione in una forma graficamente più accattivante. Alan Cooper sarà quindi anche considerato il &lt;em&gt;&lt;a href=&#34;https://yourstory.com/2017/06/techie-tuesdays-alan-cooper&#34;&gt;padre del Visual Basic&lt;/a&gt;&lt;/em&gt;, ma la sua idea originale ha ben poco a che fare con il prodotto finale!&lt;/p&gt;&#xA;&lt;p&gt;Date le premesse non ci si può stupire che Visual Basic abbia avuto una vita travagliata e relativamente breve, descritta con grande abbondanza di dettagli nell&amp;rsquo;articolo &lt;a href=&#34;https://socket3.wordpress.com/2016/09/12/visual-basic-early-beginnings/&#34;&gt;Visual Basic: Early Beginnings&lt;/a&gt;, pubblicato in uno dei blog più interessanti in assoluto sulla storia del Personal Computer.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt; oggi è uno dei linguaggi di programmazione più popolari, e con buona ragione. Python e Visual Basic sono praticamente coetanei: il primo ha &lt;a href=&#34;https://www.theregister.com/2021/02/20/python_at_30/&#34;&gt;festeggiato trent&amp;rsquo;anni&lt;/a&gt; a febbraio di quest&amp;rsquo;anno,&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; mentre Visual Basic è stato pubblicato pochi mesi dopo, a maggio del 1991.&lt;/p&gt;&#xA;&lt;p&gt;Ma Python, a differenza del Visual Basic, dopo una partenza lenta ha conosciuto negli ultimi anni un successo travolgente dovuto, a mio avviso, a due aspetti fondamentali del linguaggio:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Leggibilità&lt;/strong&gt;. Python non è infarcito di parentesi e di segni di interpunzione come JavaScript, C/C++ o Java, e questo lo rende molto più leggibile dei linguaggi concorrenti. Se per un programmatore esperto questo può essere un dettaglio di poco conto, di sicuro aiuta i neofiti ad avvicinarsi al linguaggio. Anche il fatto che le istruzioni contenute all&amp;rsquo;interno dei cicli &lt;code&gt;for&lt;/code&gt; e &lt;code&gt;while&lt;/code&gt; o delle istruzioni condizionali &lt;code&gt;if&lt;/code&gt; debbano essere &lt;a href=&#34;https://www.html.it/pag/39741/indentazione/&#34;&gt;indentate&lt;/a&gt; rispetto al resto del codice contribuisce moltissimo alla sua leggibilità, perché permette di afferrare &amp;ldquo;ad occhio&amp;rdquo; la struttura del programma. Questa caratteristica obbliga anche a rispettare una certa disciplina nella scrittura del codice (se non si rispetta la giusta indentazione il codice, anche se corretto dal punto di vista sintattico, si rifiuta di funzionare), che è sempre una cosa positiva quando si programma.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Flessibilità&lt;/strong&gt;. Si può programmare in Python utilizzando indifferentemente un approccio &lt;em&gt;procedurale&lt;/em&gt;, ad &lt;em&gt;oggetti&lt;/em&gt; o &lt;em&gt;funzionale&lt;/em&gt;, riuscendo spesso a mescolare senza troppi problemi i diversi metodi di programmazione all&amp;rsquo;interno dello stesso programma. Il linguaggio quindi si adatta facilmente alle abitudini dei singoli programmatori e consente di far evolvere il codice in base alle esigenze del momento. È abbastanza usuale, almeno per i programmatori &lt;em&gt;dilettanti&lt;/em&gt; come me, cominciare a scrivere un programma in Python buttando giù le idee alla bell&amp;rsquo;e meglio, per passare solo in un secondo momento ad organizzare le parti principali in funzioni autonome, arrivando magari a creare una struttura di classi e metodi o a spingersi verso le asprezze della programmazione funzionale (in cui dati e funzioni diventano un tutto unico) quando serve un approccio più robusto.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;La flessibilità del linguaggio viene sfruttata all&amp;rsquo;estremo dalle interfacce a &lt;em&gt;notebook&lt;/em&gt; come &lt;a href=&#34;https://jupyter.org&#34;&gt;Jupyter&lt;/a&gt;, che consentono di costruire dei veri e propri documenti programmabili, dove le parti di testo che descrivono il problema o i dettagli di funzionamento del codice si mescolano alle istruzioni Python e perfino ai dati e agli stessi risultati delle elaborazioni, dando all&amp;rsquo;utente la possibilità di sperimentare in modo interattivo e di eseguire il codice in modo non lineare (una pratica non sempre raccomandabile, ma che se tenuta sotto controllo è molto comoda).&lt;/p&gt;&#xA;&lt;p&gt;Jupyter può essere &lt;a href=&#34;https://jupyter.org/try&#34;&gt;utilizzato direttamente dal web&lt;/a&gt;, senza installare nulla sulla proprio computer e senza dover gestire le mille dipendenze dei pacchetti di terze parti che permettono a Python di essere usato in settori diversissimi, che spaziano dalle analisi scientifiche alla finanza o all&amp;rsquo;arte. Bisogna ammettere che la gestione dei pacchetti esterni è l&amp;rsquo;aspetto più complesso del linguaggio ed anche la sua principale debolezza, e che ancora oggi non esiste uno strumento universale per farlo.&lt;/p&gt;&#xA;&lt;p&gt;Grazie a &lt;a href=&#34;https://colab.research.google.com/notebooks/intro.ipynb&#34;&gt;Colab di Google&lt;/a&gt; si può persino utilizzare una GPU (e in certi casi persino una TPU) per velocizzare i programmi su Jupyter, una cosa fantascientifica fino a pochissimi anni fa.&lt;/p&gt;&#xA;&lt;p&gt;Sul fronte opposto, Python è in grado di girare anche su microcomputer da poche decine di euro, come le varie incarnazioni del &lt;a href=&#34;https://www.raspberrypi.org/products/raspberry-pi-4-model-b/&#34;&gt;Raspberry Pi&lt;/a&gt;, e perfino su alcuni microcontroller, come il recentissimo &lt;a href=&#34;https://www.raspberrypi.org/products/raspberry-pi-pico/&#34;&gt;Raspberry Pi Pico&lt;/a&gt;, dei veri e propri computer ridotti all&amp;rsquo;osso.&lt;/p&gt;&#xA;&lt;p&gt;Dal Visual Basic per Windows al Python di oggi se ne è fatta di strada!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2021-04-19-python-il-visual-basic-del-xxi-secolo/6kxdp8u3k2c61.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata da un testo mediante le reti neurali BigGAN e CLIP&lt;/em&gt;. Fonte: &lt;a href=&#34;https://www.reddit.com/r/MachineLearning/comments/kzr4mg/p_the_big_sleep_texttoimage_generation_using/&#34;&gt;Reddit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2021-04-19-python-il-visual-basic-del-xxi-secolo/a-cityscape-in-the-style-of-mondrian-under-a-bright-sun.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata da un testo mediante le reti neurali BigGAN e CLIP&lt;/em&gt;. Fonte: Sabino Maggi.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Prima del Visual Basic mi viene in mente solo &lt;a href=&#34;https://it.wikipedia.org/wiki/LabVIEW&#34;&gt;LabView&lt;/a&gt; (sviluppato originariamente per MacOS), che però era un linguaggio iper-specializzato (e iper-costoso!) per la gestione della strumentazione elettronica di misura (e per l&amp;rsquo;automazione industriale in generale) e l&amp;rsquo;analisi dei dati acquisiti.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;LabView (ancora!) perseguiva lo stesso scopo (e lo fa tuttora) nell&amp;rsquo;ambito, ben più ristretto, dell&amp;rsquo;automazione industriale.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Il codice originale di Python &lt;a href=&#34;https://github.com/smontanaro/python-0.9.1&#34;&gt;si trova qui&lt;/a&gt;, adattato in modo che possa essere ancora compilato sulle macchine moderne.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Setacciare numeri con il serpente</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/09/29/setacciare-numeri-con-il-serpente/</link>
      <pubDate>Mon, 29 Sep 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/09/29/setacciare-numeri-con-il-serpente/</guid>
      <description>&lt;p&gt;Anche se ho una collezione molto ampia di &lt;a href=&#34;http://atariage.com/forums/topic/167235-byte-magazine/&#34;&gt;scansioni in pdf&lt;/a&gt; di vecchi numeri di &lt;a href=&#34;http://vintagecomputer.com/history-of-byte-magazine.html&#34;&gt;BYTE Magazine&lt;/a&gt;, mi piace ogni tanto leggere qualche fascicolo preso in prestito dalla biblioteca dell&amp;rsquo;Istituto (del resto qualche tempo fa li ho salvati da una fine stile &lt;a href=&#34;http://it.wikipedia.org/wiki/Fahrenheit_451&#34;&gt;Fahrenheit 451&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Nonostante la mia passione per la tecnologia, infatti, ci sono dei casi in cui preferisco ancora l&amp;rsquo;analogico al digitale. Fra cui ci sono i libri e le riviste.&lt;/p&gt;&#xA;&lt;p&gt;Sfogliando un numero di BYTE dell&#39;89 dedicato a Unix, mi ha incuriosito una lettera sul famoso &lt;a href=&#34;http://it.wikipedia.org/wiki/Crivello_di_Eratostene&#34;&gt;Crivello di Eratostene&lt;/a&gt;, un algoritmo per calcolare i &lt;a href=&#34;http://it.wikipedia.org/wiki/Numero_primo&#34;&gt;numeri primi&lt;/a&gt; che ha più di 2200 anni. L&amp;rsquo;algoritmo funziona come un &lt;em&gt;setaccio&lt;/em&gt; (da cui il nome): elimina uno dopo l&amp;rsquo;altro i numeri composti lasciando alla fine soltanto i numeri primi.&lt;/p&gt;&#xA;&lt;p&gt;La lettera su BYTE introduceva all&amp;rsquo;&lt;a href=&#34;http://www.algorithmist.com/index.php/Prime_Sieve_of_Eratosthenes&#34;&gt;algoritmo &lt;em&gt;standard&lt;/em&gt;&lt;/a&gt; e ad una ottimizzazione ben nota, con la quale era possibile velocizzare il calcolo dei numeri primi senza complicarne più di tanto l&amp;rsquo;implementazione in &lt;a href=&#34;http://en.wikipedia.org/wiki/BASIC&#34;&gt;BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Il BASIC è stato il linguaggio di programmazione più popolare degli anni&#xA;80, gli anni della rivoluzione del personal computer. A quei tempi il BASIC era usato per interagire con il computer stesso &amp;ndash; ne costituiva di fatto il sistema operativo vero e proprio &amp;ndash; ed ha contribuito a formare le prime generazioni di programmatori che sviluppavano software per il nascente mondo dell&amp;rsquo;informatica personale. Non è un caso che sia la Apple che la Microsoft abbiano basato i primi prodotti proprio sul BASIC [1,2].&lt;/p&gt;&#xA;&lt;p&gt;Il listato originale in BASIC è mostrato qui sotto, in una forma (spero) più leggibile rispetto a quanto consentito dall&amp;rsquo;impaginazione di BYTE (oltre che dall&amp;rsquo;abitudine di quei tempi di compattare all&amp;rsquo;estremo i programmi per ridurre il più possibile l&amp;rsquo;occupazione della memoria). Il programma determina i numeri primi da 1 fino al valore impostato nella variabile &lt;code&gt;max&lt;/code&gt;. Per usarlo, bisogna anche impostare il valore di &lt;code&gt;root&lt;/code&gt; alla radice quadrata di &lt;code&gt;max&lt;/code&gt; (arrotondata ad un numero intero).&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;max=8192&#xA;root=90&#xA;DIM flags (max)&#xA;&#xA;FOR num=1 TO max&#xA;&#x9;flags(num)=TRUE&#xA;NEXT num&#xA;&#xA;FOR num=2 TO root&#xA;&#x9;IF flags (num) THEN&#xA;&#x9;&#x9;FOR mult=num*num TO max STEP num&#xA;&#x9;&#x9;&#x9;flags(mult)=FALSE&#xA;&#x9;&#x9;NEXT&#xA;&#x9;END IF&#xA;NEXT num&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Appena ho visto il programma ho pensato che sarebbe stato immediato tradurlo in &lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt;, un linguaggio che mi piace moltissimo e che considero il migliore compromesso fra potenza e facilità d&amp;rsquo;uso. Python può essere usato a più livelli, da &lt;a href=&#34;http://en.wikipedia.org/wiki/Procedural_programming&#34;&gt;linguaggio puramente procedurale&lt;/a&gt; fino a &lt;a href=&#34;http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep&#34;&gt;linguaggio orientato agli oggetti&lt;/a&gt;, e quindi si presta bene ad essere usato per imparare i fondamenti delle programmazione.&lt;/p&gt;&#xA;&lt;p&gt;Nella prima traduzione in Python ho lasciato il più possibile inalterato il codice originale. Le piccole differenze sono dovute alle particolarità sintattiche dei due linguaggi. In Python esiste la funzione &lt;code&gt;max()&lt;/code&gt; e non si può usare lo stesso nome per una variabile, gli indici degli array iniziano da 0 e la funzione &lt;code&gt;range(0, N)&lt;/code&gt; crea una lista di numeri interi da &lt;code&gt;0&lt;/code&gt; fino a &lt;code&gt;N-1&lt;/code&gt;, e non fino ad &lt;code&gt;N&lt;/code&gt; come sarebbe immediato pensare.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num_max &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, root):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flags[num] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; mult &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(num&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, num):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            flags[mult] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sieve of Eratosthenes between 1 and &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (BYTE-style): true/false map&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;(num_max))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print flags[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sieve of Eratosthenes between 1 and &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (BYTE-style): prime numbers&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;(num_max))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flags[num] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print num,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alla fine ho aggiunto il codice per stampare i risultati del calcolo, mostrando prima il contenuto &lt;em&gt;grezzo&lt;/em&gt; dell&amp;rsquo;array (o meglio della &lt;code&gt;lista&lt;/code&gt;) usato per determinare se ciascun numero è primo o meno, e poi convertendo l&amp;rsquo;output in una forma più leggibile.&lt;/p&gt;&#xA;&lt;p&gt;Per provare il programma, basta copiare il codice in un editor di testo (come i soliti TextWrangler, TextMate, Atom, Brackets, o analoghi), salvarlo sul disco rigido con un nome qualsiasi (diciamo &amp;ldquo;sieve.py&amp;rdquo;), ed eseguirlo dal Terminale con il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ python sieve.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1305&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;img src=&#34;http://melabit.files.wordpress.com/2014/09/sieve.png?w=605&#34; alt=&#34;Output delle traduzione in Python del programma originale in BASIC per il calcolo dei numeri primi.&#34; width=&#34;605&#34; height=&#34;375&#34; class=&#34;size-large wp-image-1305&#34; /&gt; Output della traduzione in Python del programma originale in BASIC per il calcolo dei numeri primi.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Si può provare a misurare il tempo di esecuzione del programma impostando la variabile &lt;code&gt;num_max&lt;/code&gt; ad un valore relativamente grande (e ricordando di modificare anche il valore di &lt;code&gt;root&lt;/code&gt;, che deve essere la radice quadrata di &lt;code&gt;num_max&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ time python ./sieve.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Per evitare di influenzare la misura è bene cancellare (o commentare) la sezione del codice contenente i comandi di stampa dei risultati, che sono molto lenti rispetto al puro codice di calcolo.&lt;/p&gt;&#xA;&lt;p&gt;Il mio iMac del 2008 impiega 0.025 secondi per calcolare i numeri primi fino a 10.000, e ben 22.5 secondi per arrivare fino a 25.000.000.&lt;/p&gt;&#xA;&lt;p&gt;Ma di questo parleremo più diffusamente un&amp;rsquo;altra volta.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;[1] Il primo software prodotto dalla Micro-Soft di Bill Gates e Paul Allen fu proprio un &lt;a href=&#34;http://startup.nmnaturalhistory.org/gallery/notesViewer.php?ii=75_4&amp;amp;p=00&#34;&gt;interprete BASIC&lt;/a&gt; per l&amp;rsquo;&lt;a href=&#34;http://en.wikipedia.org/wiki/Altair_8800&#34;&gt;Altair 8800&lt;/a&gt;, il primo microcomputer personale in assoluto. La storia è raccontata nel bel libro di Paul Freiberger e Michael Swaine, &amp;ldquo;Fire in the Valley: The Making of the Personal Computer&amp;rdquo;, McGraw-Hill, 2000, ed è riassunta molto bene &lt;a href=&#34;http://it.wikipedia.org/wiki/Altair_BASIC&#34;&gt;in questa pagina su Wikipedia&lt;/a&gt; (per una volta la versione in italiano di un articolo è allo stesso livello di quella originale).&lt;/p&gt;&#xA;&lt;p&gt;[2] Steve Wozniak, la mente geniale della Apple degli inizi, &lt;a href=&#34;http://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n461/mode/2up&#34;&gt;scrisse da zero&lt;/a&gt; un &lt;a href=&#34;http://gizmodo.com/how-steve-wozniak-wrote-basic-for-the-original-apple-fr-1570573636&#34;&gt;interprete BASIC per l&amp;rsquo;Apple I e II&lt;/a&gt;, che diventò il più diffuso interprete BASIC degli anni &amp;lsquo;80, un vero riferimento a cui tutti gli altri interpreti BASIC cercavano di ispirarsi.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
