Author: Massimo Maria Ghisalberti - pragmas.org (massimo.ghisalberti@pragmas.org)

Date: 2016-05-09

Emacs 24.5.50.1 (Org mode 8.3.4)

Validate

Coding, ovvero il delirio computazionale (draft)

1 Il Coding.

Coding, questo sconosciuto o meglio oggi troppo conosciuto, ma che cosa è?
Da un paio di anni non si fa che parlarne e gli esperti nel coding sono spuntati come i funghi dopo una copiosa pioggia ed un po' di sole.

Coding ovvero il gerundio o participio presente del verbo to code: codificando o codificante. Codificante di che? In questa nostra verve nella anglicizzazione dei termini ci dimentichiamo spesso che l'italiano ha bisogno di essere più preciso e meno volatile dell'inglese. Andrebbe ricordato che codificare significa molte cose e non solo programmare i computer.
Programmare i computer (anche detti in italiano elaboratori elettronici) forse ci sembrava troppo scontato o difficile ed infatti dando una occhiata a wikipedia:

La programmazione, in informatica, è l'insieme delle attività e tecniche che una o più persone specializzate, programmatori o sviluppatori (developer), svolgono per creare un programma, ossia un software da far eseguire ad un computer, scrivendo il relativo codice sorgente in un certo linguaggio di programmazione.

Per gli anglosassoni invece:

Computer programming (often shortened to programming) is a process that leads from an original formulation of a computing problem to executable computer programs. Programming involves activities such as analysis, developing understanding, generating algorithms, verification of requirements of algorithms including their correctness and resources consumption, and implementation (commonly referred to as coding) of algorithms in a target programming language. Source code is written in one or more programming languages. The purpose of programming is to find a sequence of instructions that will automate performing a specific task or solving a given problem. The process of programming thus often requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms and formal logic.

Le definizioni sono notevolmente diverse e rispecchiano inevitabilmente il modo di pensare dei due popoli, perché anche la lingua che è espressione di un popolo forma il suo modo di pensare. Per l'italiano programmare è una attività tecnica svolta da persone specializzate mentre per gli anglosassoni è un processo cognitivo.
Il modo di immaginarsi l'attività è decisamente diverso.

Anche noi quindi oggi, forse per sdoganarci dal vecchiume che ci circonda, facciamo del coding.

Fortunatamente, visto che la fantasia in queste cose ed in molte altre ci difetta da molto tempo, abbiamo preso a larghe bracciate da iniziative internazionali come code.org1.
Una cosa che faccio spesso, quando mi sbandierano delle cose importanti, è andare vedere chi sono i sostenitori dell'iniziativa. Ammetto di essere generalmente malfidato e sospettoso ma come si dice: questa è la mia natura e non ci posso fare niente.

Leggo quindi:

Code.org ringrazia i suoi sostenitori

Mark Zuckerberg and Priscilla Chan, Bill and Melinda Gates Foundation, Quadrivium Foundation, Sean N. Parker Foundation, BlackRock, Salesforce, Drew Houston, Verizon, Reid Hoffman, Diane Tang and Ben Smith, John and Ann Doerr, Bill Gates, Infosys Foundation USA, Ali and Hadi Partovi, Google, Microsoft, Omidyar Network, Ballmer Family Giving, Jeff Bezos

Ci sono i coniugi Facebook e il vecchio e caro Bill e consorte (Bill c'è due volte) e poi Google, Microsoft (Bill tre volte?), Ballmer? Poi Mr. Amazon.

Oddio, permettetemi l'oddio senza riferimenti religiosi, ma non sono tutti quelli che si fanno i fatti nostri plurimultati per abuso di posizione dominante e a detta di qualcuno dalla malelingua: il male di Internet?
Qualcosa non mi torna.

Mi sono andato a vedere programmailfuturo.it2; tra i partner rispuntano Microsoft (benefattore), TIM e Samsung (fondatori), Intel, HP, Cisco ed Oracle (donatori). Facebook è solo sostenitore ed ha donato 5.000€.
Nella descrizione del progetto si dice:

Il MIUR, in collaborazione con il CINI – Consorzio Interuniversitario Nazionale per l’Informatica, ha avviato questa iniziativa (che fa parte del programma #labuonascuola) con l’obiettivo di fornire alle scuole una serie di strumenti semplici, divertenti e facilmente accessibili per formare gli studenti ai concetti di base dell'informatica. Leggi la circolare MIUR del 2015 (quella del 2014 la ritrovi qui ).

Partendo da un’esperienza di successo avviata negli USA che ha visto nel 2013 la partecipazione di circa 40 milioni di studenti e insegnanti di tutto il mondo, l’Italia sarà uno dei primi Paesi al mondo a sperimentare l’introduzione strutturale nelle scuole dei concetti di base dell’informatica attraverso la programmazione (coding ), usando strumenti di facile utilizzo e che non richiedono un’abilità avanzata nell’uso del computer.

La buona scuola, quella che dovrebbe essere.
Bisognerebbe anche ricordare ai nostri politici che le iniziative di cui parlano sono iniziate ben prima del 2013 e non solo in USA ma anche in Europa, noi siamo pedine come al solito.
Continuando nella visita al sito, ci raccontano che ci sono strumenti di elevata qualità didattica e scientifica:

Gli strumenti disponibili sono di elevata qualità didattica e scientifica, progettati e realizzati in modo da renderli utilizzabili in classe da parte di insegnanti di qualunque materia. Non è necessaria alcuna particolare abilità tecnica né alcuna preparazione scientifica. Il materiale didattico può essere fruito con successo da tutti i livelli di scuole. Raccomandiamo soprattutto alle scuole primarie di avvicinare i propri studenti allo sviluppo del pensiero computazionale.

Strumenti utilizzabili da parte di insegnanti di qualunque materia e non è richiesta nessuna abilità particolare, né tecnica e né scientifica. Interessante.
Forse quelli del MIUR non sanno di che insegnanti sono fatte le loro scuole oppure sono inevitabili i dubbi che potrebbero sorgere: forse la qualità affermata è un poco discutibile?
No di certo visto che sono gli stessi strumenti di code.org, copiati al volo e nemmeno tradotti tutti.

Quelli del MIUR però non sono stupidi e le loro scuole le conoscono bene, quindi ci sono percorsi di coding senza computer, penna e foglio.

Nella frase citata sopra c'è poi la chiave di tutto questo: il pensiero computazionale.

Il lato scientifico-culturale dell'informatica, definito anche pensiero computazionale, aiuta a sviluppare competenze logiche e capacità di risolvere problemi in modo creativo ed efficiente, qualità che sono importanti per tutti i futuri cittadini. Il modo più semplice e divertente di sviluppare il pensiero computazionale è attraverso la programmazione (coding ) in un contesto di gioco.

Prima mi si dice che ho a disposizione strumenti adatti ad ognuno senza distinzione di sorta, poi mi si parla del lato scientifico-culturale dell'informatica.
Allora… Ci vuole una preparazione scientifica e culturale o no? Si deve sapere di cosa si sta parlando o facciamolo alla vogliamoci bene?

Il contesto di gioco, quello è importante. Ormai se non si insegna in un contesto di gioco i bambini non imparano, non facciamoli sforzare troppo.
Noi che siamo della generazione della scuola no-gioco avremmo fatto carte false per aver potuto avere questa scuola moderna allora. Vuoi mettere l'origami con la geometria?

I bambini devono esprimersi, cosa sacrosanta, ma forse dovrebbero anche capire che nel loro progresso di crescita sia fisica che mentale la fatica è un processo fondamentale. Capire la fatica che occorre per raggiungere risultati li renderà migliori in futuro, forse.
Il gioco, momento importantissimo, ha e deve avere una sua giusta collocazione ma non pervadere in toto la vita del bambino e del ragazzo. Una volta si diceva prima il dovere poi il piacere ed anche per avere bisogna dare, roba antica ormai.

È in atto un cambiamento epocale non c'è dubbio, dove esperti di pensiero computazionale finalmente escono dall'ombra e armati di Scratch diffondono algoritmi come piovesse.
Giusto per ritornare al 2013, anno fatidico dell'inizio dell'esperienza di successo USA, Scratch è del 2002/03 per la prima versione e del 2013 la seconda.

1.1 Scratch

Mitch Resnick3 è stato, insieme ad altri, un pioniere della educazione informatica confermata anche da alcuni premi presi nel 1993 e numerosi libri pubblicati dal 1996 ad oggi (2013?).
All'interno del MIT Media Lab's Lifelong Kindergarten group con a capo Resnick è stato sviluppato Scratch, inizialmente in Smalltalk4 (che per chi non lo ha mai sentito nominare è il padre di tutto quello che noi oggi conosciamo nelle interfacce grafiche dei sistemi operativi).

Scratch è ed è stato uno strumento molto valido per l'approccio iniziale alla programmazione dei computer, ma non deve essere preso troppo sul serio.
La relativa semplicità ne fa uno strumento che chiunque può prendere in mano ed illudersi di poter imparare il pensiero computazionale ma soprattutto di poterlo anche insegnare.

Scratch inoltre, è stato progettato per bambini anglosassoni. Come visto prima, la differenza linguistica fa anche la differenza nella definizione ed inevitabilmente nell'apprendimento dei nostri bambini. La mente pragmatica tipica delle persone di lingua inglese non è la nostra.
Il bambino statunitense o inglese o nord europeo è diverso dalla nostra cultura imperante del fai poca fatica e dell'essere furbo.

Scratch presenta, a mio avviso, alcuni problemi importanti che non lo rendono adatto se non nelle prime fasi di un avviamento alla programmazione.

1.1.1 critica sullo sviluppo in sé.

Scratch inizialmente fu sviluppato in Smalltalk ed era ispezionabile al suo interno. Senza entrare nel dettaglio, Scratch era basato su una distribuzione di Smalltalk4 chiamata Squeak5 (originata dallo Smalltalk-804 e dal Dynabook6 di Alan Kay7 e compagni).
Era un applicativo multipiattaforma: Linux, Apple, Microsoft Windows e probabilmente molti altri purché in grado di eseguire Squeak. Oggi Scratch 2.0 è scritto in ActionScript, il linguaggio del famigerato Adobe Flash (ex Macromedia Flash) e di Adobe Air.
Anche se il compilatore di sviluppo (Apache Flex ex Adobe Flex) è oggi open source, la piattaforma di runtime non lo è. Adobe Air è un software proprietario e come tale soggetto a strategie commerciali che hanno ritenuto Linux non una piattaforma degna di essere onorata di sviluppo. Adobe Air è fermo per Linux ad una versione ormai vecchia ed obsoleta (come Flash del resto). \ Questo renderà gli utenti Linux inabili alla installazione dell'applicazione e quindi discriminati. Ad oggi già usarlo su una distribuzione moderna a 64bit è problematico.
Gli utenti dei tablet ne sono fuori per principio non potendo eseguire Adobe Flash sui loro apparecchi.

Perché riscriverlo in ActionScript quando il suo sviluppo sarebbe potuto continuare con un linguaggio di programmazione senz'altro più potente ed interessante ma soprattutto realmente Open Source e multipiattaforma?

Esistono delle alternative come Snap!8, che sono scritte in Javascript9 e che nel bene o nel male del linguaggio è eseguibile in qualunque Browser Internet moderno.
Snap! è un buon software ed all'altezza se non superiore a Scratch.

Il nostro paese ha inoltre delle direttive sull'utilizzo delle tecnologie software Open Source, quindi perché suggerire sempre e comunque software in qualche modo proprietario essendoci delle alternative?

1.1.2 Il gioco, quando non è utile alle costruzioni mentali.

Sostengo da molto tempo che le differenze linguistiche fanno anche la differenza nel pensare e non credo che sia cosa nuova e nemmeno di essere solo. I nostri bimbi tendono con Scratch a giocare più che pensare. La dotazione di strumenti di disegno integrati e la notevole libreria di elementi grafici già pronti fa sì che il bambino perda troppo tempo in attività ludiche.
Sono abituati a giocare, sono immersi in videogiochi dove il tempo che si impiega è per spostare una figurina da una parte all'altra dello schermo in percorsi preordinati con una interattività praticamente passiva.
Con Scratch, se lasciati a sé stessi, spostano il gatto continuamente o ciclano tra i vari sprite nella impossibilità di decidere. Il prendere una decisione, un problema che affligge i nostri figli ma anche spesso noi stessi adulti.
Scratch quindi, fa parte di quegli ambienti preconfezionati ed omnicomprensivi che andrebbero evitati proprio per poter stimolare nel bambino le diverse modalità di utilizzo del mezzo informatico. La cosa che oserei dire buffa, è come in una organizzazione fondata da precursori del pensiero funzionale e della intelligenza artificiale si insista su un ambiente limitato e limitante in scatola chiusa.

1.1.3 Bad Practice, per dirla all'inglese che ci piace tanto.

Insistendo sulla forma mentale che una lingua naturale da ad un popolo, lo stesso vale per i linguaggi di programmazione. I programmatori fanno molta fatica a passare da un linguaggio di programmazione ad un altro. Se poi aggiungiamo anche l'inerzia che l'italiano medio ha…

Scratch fornisce una gratificazione immediata ed è nascosto, il codice in cui è scritto è nascosto e non facilmente ispezionabile. Scratch stimola il copia ed incolla insieme a quella che amo definire il programming by example. La programmazione per esempi, l'assemblaggio del codice scritto da altri nei vari e diffusi tutorial.

L'approccio meramente visuale e compositivo, porta a distorsioni della comprensione del problema. Questo è causato anche da un linguaggio limitato che obbliga, per risolvere anche semplici problemi, a strutture che sono di fatto più complesse del dovuto.

Scratch è un linguaggio imperativo e come tale contribuisce a formare una mente imperativa; questo è oggi in contrasto con i moderni modi di pensare al software e quindi inadatto anche nella preparazione ad un possibile futuro lavorativo.
Certo non vogliamo prefissare il destino di bambini di dieci anni, ma quando sento che è utilizzato nei licei credo che qualche problema debba essere posto.
Altri linguaggi, veri linguaggi di programmazione, sarebbero auspicabili a questo scopo.

Il futuro e la tendenza attuale dei linguaggi è quella verso strutture meno imperative e più funzionali nel senso matematico del termine. Il pensare il software in maniera funzionale10, oltre ad essere a mio avviso più vicino11 a noi favorisce una migliore comprensione del dominio del problema da risolvere.
A questo proposito un software molto interessante è Kojo12, 13.

1.1.4 Quindi?

Scratch (od i suoi cloni) è stato e rimane un buono strumento per iniziare con bambini la cui capacità di scrivere è ancora limitata, ma dovrebbe essere abbandonato il prima possibile.

1.2 Il pensiero computazionale.

Scratch per insegnare il pensiero computazionale? Basta averlo preso e dopo avere riprodotto qualche esempio della copiosa libreria essere in grado di insegnarlo ai bambini?
A quanto pare sembrerebbe di si.
Vorrei poter chiedere a chi lo insegna cosa sia questo pensiero senza che mi venga recitato a bacchetta ed in traduzione il famoso articolo del 2006 della Jeannette Wing14: Computational Thinking15, 16.
Un articolo che consiglio a tutti di leggere e di cercare di capire bene, perché contiene molti punti interessanti ed altamente condivisibili.
Inoltre vorrei ricordare a tutti questi coders che l'idea non è poi così recente e li rimando a Seymour Papert 17 , 18, un pioniere del pensiero computazionale. Già nel 1980 nel suo testo Mindstorms: Children Computers and Powerful Ideas e nel 1992 con The Children's Machine: Rethinking School in the Age of the Computer teorizzava come sia importante stimolare costruttivamente la mente del del bambino e del ragazzo. In due interviste di Mediamente (in italiano per gli stitici dell'inglese) spiega chiaramente il suo pensiero19 , 20. Quanti dei maestri dei nostri figli o di sedicenti digital champions sono in grado di astrarre e concettualizzare i processi cognitivi o combinare il pensiero ingegneristico e matematico?

Torniamo al documento della Wing, che i nostri champions sicuramente conoscono di più, qui si cita:

Computational thinking is thinking recursively. It is parallel processing. It is interpreting code as data and data as code. It is type checking as the generalization of dimensional analysis. It is recognizing both the virtues and the dangers of aliasing, or giving someone or something more than one name. It is recognizing both the cost and power of indirect addressing and procedure call. It is judging a program not just for correctness and efficiency but for aesthetics, and a system’s design for simplicity and elegance.15

La Wing insiste sul fatto che il pensiero computazionale non è la mera programmazione dei computer ma solo un modo di affrontare le sfide ed i problemi, non parla di programmatori quanto di scienziati informatici. Ci vuole attitudine, conoscenza e capacità, come in ogni altra cosa, per poterlo insegnare o meglio soltanto proporlo. Perché forse, il pensiero computazionale non può essere insegnato pena la caduta nell'indottrinamento e conseguente perdita del motivo iniziale: sviluppare le capacità logico-analitico-critiche dell'individuo.

La cosa interessante che si nota è come in ogni cosa che dice sia intrinseco il paradigma funzionale (anche il LOGO di Papert è un dialetto LISP), forse in derivazione dai suoi studi sul lambda calculus:

From grade school through high school, I was always interested in math and science. When I was in eleventh grade, I remember asking my father, "So what is engineering anyway?" and he told me all about what engineering is and how it blends math and science; and it's not just pure theory, but it's about applying math and science to real world problems. Then, after I went to MIT for my undergraduate work, like many others, I decided to major in electrical engineering. So I started out as an EE major. At MIT there are four courses that are required of both EE and CS majors. So my first semester sophomore year I took the first two. One was Circuits and Systems, which was more EE-oriented, and the other was Structure and Interpretation of Computer Languages, which was more CS-oriented. In this second course, we did everything, and somewhere in there, we learned lambda calculus. And I was just blown away! I said, "Wow! This is something I've never seen before and I really like it." (Before that, I thought computer science was just programming; I had taken a programming course my freshman year and I didn't like it very much.) And so then, I decided to switch from majoring in electrical engineering to majoring in computer science.21

Ai ragazzi deve essere insegnato a pensare, cosa che si è persa progressivamente in questa ricerca del gioco a tutti i costi. Pare che i giovani ormai, non imparino se non giocando e nessuno sforzo particolare gli viene richiesto. Il gioco che dovrebbe portare alla riflessione ma che spesso salta questa ultima parte per vari motivi.

La capacità di analisi cioè quella di scomporre i problemi in parti più piccole e facilmente affrontabili, il dīvide et īmpera, la collaborazione e la tolleranza sono tutti fattori di cui i nostri figli difettano e per colpa nostra; vuoi che sia semplice disattenzione o dolo o troppa protezione.
Il pensiero computazionale è anche questo, porsi dei dubbi; trovare altre strade per affrontare gli stessi scopi, cercare di capire ed impostare collegamenti nuovi tra le informazioni. In questo senso è un processo iterativo e di conoscenza a tutti i livelli e non solo quello informatico.

I programmatori sono solo dei manovali del software (sono pure persone molto litigiose…) quando programmano e per quanto bravi possano essere non tutti hanno il pensiero computazionale, traducono direttive spesso di altri in una lingua che un computer sa ascoltare e comprendere. La fase di programmazione è solo della bassa manovalanza e prima dovrebbe venire il pensiero.
Abituare meccanicamente i ragazzini a montare blocchetti colorati in un trionfo di immediata soddisfazione è errato, perché non svilupperanno alcunché e presto dimenticheranno ogni cosa.

I ragazzini devono invece essere incalzati e costretti al ragionamento logico, fornendo loro i mattoni logici e non quelli colorati.

Devono scrivere per ricordare meglio ed andare più lenti. Scrivere porta a rileggere e rileggere porta a ricordare, scrivere e riscrivere in modo diverso per far capire come le cose possono essere affrontate in modi alternativi. L'idea di possibilità ed approcci diversi crea discussione e confronto.

Insomma, non basta il cugino che programma in PHP che smanetta su Scratch per farne un mentor del pensiero computazionale.

1.3 I linguaggi di programmazione, la scuola, i tutorial

I linguaggi di programmazione sono come i linguaggi naturali, plasmano il modo di pensare. Divisibili ed ordinabili in ceppi, ognuno di essi ci modifica la visione del mondo circostante.
Sono espressione dell'ingegno e del pensiero di chi li elabora ed a differenza, probabilmente, di quelli naturali sono progettati con scopi ben precisi: affrontare nel miglio modo possibile le sfide che ci fronteggiano. Modellare in un ambiente artificiale il mondo che ci circonda, ridurre la complessità della natura a valori per noi comprensibili.
In questo senso dovrebbero essere imparati quasi come quella filosofia che si insegna ancora, almeno spero, nei nostri licei.
Nelle nostre scuole dove si è perso il latino, per esempio, quella lingua morta e defunta e spesso bistrattata che ci allenava alla logica quando i computer per noi poveri mortali ancora non c'erano. Oggi dovremmo inserire i linguaggi di programmazione e non solo il coding.

Noi però andiamo avanti a tutorial ed anche la scuola lentamente sta diventando un tutorial e presto mi aspetto di vederla su youtube dove youtubers affermati spiegheranno ai miei pronipoti la lezione del giorno in un italiano elementare, quello che tutti possono capire, perché invece di elevare la cultura della società pare che sia più conveniente abbassare la qualità della lingua.

1.4 Programming by example

Questo che segue è pezzo goliardico sulla programmazione scritto tempo fa perché anche io ho voluto abbassare la qualità della lingua.

Oggi va di moda il learning by example. La summa del famo poca fatica.

In un mondo ideale dove le persone fossero serie e corrette, dove l'amore per la conoscenza fosse uno dei principi fondanti della vita umana andrebbe tutto bene.

<< Peccato tutto petto! >>

Volete imparare a programmare? Learning by Example.

Mi verrebbe di dire… By Example, 'na sega.
Il by example che oggi, come una montagna di altra fuffa va di moda, lo si è sempre fatto ed ha portato i problemi che ha portato. Il concetto ricalca la natura umana del: faccio molto con poco; dove il poco in genere si riferisce alla fatica mentre il molto ai soldi.

È faticoso leggere le specifiche e le regole dei linguaggi di programmazione, la filosofia che ne è alla base.
Poi, scusate perché farlo? C'è il Learning by Example!
Dal BASIC via Learning by Example si è imparato il C e poi il C++, ci siamo dimenticati puntatori a giro a palettate ma con qualche martellata tutto filava liscio. Certo, qualche apparecchio elettrico l'abbiamo fritto e qualche aereo è cascato ma sono incerti del mestiere.

Ada non lo abbiamo voluto imparare perché… cazzo è difficile e non c'è un Learning by Example.

Questa però è roba ancestrale ormai.

Il trionfo del Learning by Example è iniziato sicuramente col web.
La rivoluzione, il web e poi il web 2.0, il web 3.0 (che nessuno sa cosa sia, ma nemmeno il 2.0).
La massima espressione del Learning by Example: PHP e javascript.

Per i non addetti ai lavori e gli scribacchini il Learning by Example è come Tumblr.
Ecco, Tumblr è un enorme Learning by Example di sentimenti, cose scritte, immagini, porno e cazzate varie.
Se sei una mezza sega del nulla, Tumblr fa al caso tuo. Ti forma il carattere.

Nel Learning by Example si presuppone che l'example sia giusto, deve esserlo altrimenti che example è?
Si da una fiducia estrema all' exemplatore (il produttore di example), lui è nel giusto. Un po' come, mi darete del blasfemo, Gesù Cristo. Vabbè come il Papa via, Cristo era nel giusto per forza come figlio di dio; un dio giusto ed infallibile.

<< Smettila! Non è la religione l'argomento >>
<< Va bene, smetto. >>

L'exemplatore è nel giusto abbiamo detto, lui si è formato leggendo tutto il leggibile, lo scibile su quell'argomento ed ha scritto milioni di linee di codice, sbagliando e riscrivendolo; ma… Se per ipotesi si fosse formato con il Learning by Example anche lui?
L'example che ci propone… È un example di un example?

Sempre per i disadattati di prima (i poeti e romanzieri), andrebbe bene un sentimento di seconda mano, ma di terza? Quarta? Quinta?

Certo se uno sa già programmare in qualche linguaggio e su paradigmi diversi può essere utile, anche solo per dare una occhiata e decidere se ne possa valere la pena o no.
Questo sarebbe il mondo ideale però.
La balla che il mondo informatico fa guadagnare molto è molto diffusa ed è anche vero. C'è chi guadagna molto.
Il miraggio del soldo attira una pletora di learner by example.

<< Gigi che va di moda oggi? >>
<< La programmazione funzionale. >>
<< Che mi consigli di imparare? >>
<< Scala >>

Al che, googlate: Scala by example.

In un paio d'ore (o una giornata se siete proprio duri) conoscete Scala ed iniziate a programmare.

La vostra fortuna è che non avete i puntatori e gli aerei non li fate cascare. Al limite fate crashare un telefono.
La programmazione funzionale? Oddio e cosa è? Ah! Quella di Scala. Si usano le funzioni, poi ha map, flatMap, foldLeft e foldRight. Si fanno un sacco di cose ganze.

Certo fare il cut an' paste con Scala non è come farlo col PHP o il javascript, ma insomma…
Poi ci permette di scrivere poco codice per fare tante cose insieme.

<< … ma che fa questo codice? >>
<< restituisce una sezione di una lista annidata con i valori ordinati per peso di informazione. >>
<< Il valore di ritorno va bene, ma dentro che fa? >>
<< restituisce una sezione di una lista annidata con i valori ordinati per peso di informazione. >>
<< vabbè, le faremo sapere >>

L'esperienza e la competenza, in tutti i campi, non si affitta. Imparare è fatica, è tempo impiegato, è sudore e lavoro.
Produrre qualità è un effetto collaterale della conoscenza intima di quello di cui si parla.
Il resto è solo speculazione.

<< Le faremo sapere. >>

PS: Scala è un ottimo linguaggio di programmazione, al contrario del PHP (paradigma dell'hammer programming, ovvero la programmazione a martellate) e del javascript. Varrebbe la pena impararlo bene col Learning Not by Example. Ho citato Scala, perché essendo un sostenitore dei linguaggi funzionali in ausilio allo sviluppo del pensiero computazionale e promotore di Kojo, non mi venga rimproverato nulla (mi sono parato le terga quindi). Normalmente non uso termini idioti come googlare o crashare visto che non ho usato il Learning by Example.

Note a piè di pagina:

Data: 2016-05-09

Autore: Massimo Maria Ghisalberti - pragmas.org

Created: 2016-06-11 sab 10:38

Validate