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

Date: 2019-03-28

Emacs 26.2 (Org mode 9.2.3)

Validate

La poltrona nel vagone non è mai la prima

1 La poltrona nel vagone non è mai la prima

Ovvero commenti sociali di getto su temi a tema.

Avete fatto caso che raramente ci si siede nella prima poltrona su un vagone?
Quella a destra appena entrati, non quella al finestrino ma la prima sul corridoio?

Bene, non vi ci sedete nemmeno ora.
Passate oltre, oltre la prima poltrona ed oltre la seconda. Oltre il vagone, poi quello dopo e mi raccomando salutate il controllore.

2 Siamo seri (18/04/2019)

<< Per dirla all'Emerito Professore: e quindi? >>
<< E quindi, personalmente… >>

Siamo seri allora.

Leggo:

In studio, ad accompagnare i Robocoder, ci sono due tecno-conduttori dai nomi chiaramente ispirati al mondo della programmazione: Zero(…) e la cibernetica Uno(…)

Certo avessero chiamato lui uno e zero lei, sarebbe stato troppo, quindi in tempi di strapon hanno invertito la questione (Qui si potrebbe anche citare il famoso detto del buon DeSade, mai detto e falsamente attribuito, che il buon signore ha fatto un coso tondo per un buco tondo e non certo per un buco ovale).

Oddio, avevo detto:
<< Siamo seri… >>

Vedo pure una guru del coding in ambito internazionale una coding influencer, coglioni! Non sapevo esistessero.

Ops, ma ci ricasco ancora.
Certo che la mission edutainment con una pillola sul coding, volete mettere?

Meno male che ci sono i tecno-assistenti e i tecno-disturbatori anche detti scassapalle-robotici o rompicazzo-digitali.

Però, programmare le stringhe di coding mi fa sentire proprio vecchio. Qui davvero mancano le parole per esprimere, in piena demenza senile e biascicando la dentiera, il totale disgusto semantico da pillola (del coding) amara.

Stamattina dovrò mettere anche lo zucchero nel caffè. [m]

3 Analisi sul documento currivulum4coding (~20/06/2016)

Cosa intendete per didattica quantistica? Conosco la teoria dei quanti di Planck, ma non vedo a prima vista almeno come l'idea di quanto possa essere applicato alla didattica, a meno che non sia una idea di flusso di unità di informazioni non divisibili. Però penso che cozzi con la base computazionale del problem solving e del divide et impera. L'idea è che un problema possa essere sempre scomposto in parti più piccole in sfumature frattali, questa è la base ideale anche se poi in pratica ad un certo punto ci si ferma.
Forse ricade nel presupposto della dualità della materia? Ondulatoria e particellare? Quindi nella molteplicità nell'affrontare un problema?
Potrebbe essere una similitudine interessante, mi piacerebbe capirla meglio.

Come ho detto molte volte ribadisco la necessità di non fermarsi solo a code.org, ma di espandere i suggerimenti anche ad altre realtà ed esperimenti. Essendo questo un documento che vuole presentare un percorso curricolare, la necessità di più alternative credo sia oltremodo importante. Penso che poi ricada anche nella libertà di insegnamento che ognuno ha, i docenti dovrebbero essere messi a conoscenza delle molte possibilità in maniera da poter usare quella più adatta al contesto in cui si trovano.

Non dovreste parlare di App quanto di applicazione o software. La distinzione credo sia importante, App o app è una parola inventata da Apple per prima per un preciso scopo di marketing. App in un contesto di sviluppo non è un concetto che esiste, esiste l'applicazione o programma applicativo. App riporta inevitabilmente ai vari store controllati e posseduti da grandi aziende. Nel mio corso di programmazione per le quinte elementari, spesso mi sono sentito dire: non trovo la app sullo store. Questo in relazione a Kojo. Anche Scratch non è una app, ma una applicazione. Credo che vada smantellata l'idea del software legato agli store, idea che Apple, Microsoft e Google fanno di tutto per instillarci.

In merito al fatto che Scratch e Blocky facciano acquisire le capacità di capire cosa sia un algoritmo o i principi di funzionamento di un computer o di Internet non ne sono convinto. Scratch e Blocky non hanno strutture fondamentali per queste competenze. Gli algoritmi non sono sviluppabili sufficientemente, in caso comunque di linguaggio visuale perlomeno presentate anche Snap! che è fornito di strutture avanzate.
Essendo questo un documento per un futuro non rendetelo già vecchio, c'è un progetto: John Maloney (Scratch), Jens Mönig (nap!), and Yoshiki Ohshima (Squeak EToys); che si propone il superamento di Scratch.
Un documento che dovreste leggere è questo: http://web.engr.oregonstate.edu/~scaffidc/papers/eu_20110607_scrusrprog.pdf che è uno studio sulla progressione ed il mantenimento della capacità acquisite attraverso l'uso di Scratch, mi raccomando seguite poi all'inizio il link per un altro documento in cui il MIT cerca di controbattere la tesi esposta.
Sviluppare il drag and drop, sinceramente non la vedo come una capacità da perseguire. Il prendi, trascina e lascia è competenza innata. Lo scrivere è cosa più complessa. C'è stata molta polemica sull'idea finlandese di non insegnare più la scrittura 'a mano' (come ortografia e calligrafia) per invece orientarsi sul fluent typing, noi invece vogliamo insegnare a scrivere a mano ma a sviluppare il drag and drop? Perché invece non insegnargli a scrivere a mano e poi quando ne sono in grado insegnargli anche il fluent typing? Gli utenti digitali sono lazy (pigri) e facilmente fidelizzabili. Se c'è un problema nel pensiero computazionale, è che struttura la mente. Un bene ed un male al tempo stesso.
L'uomo è pigro, è nella sua natura. Se una cosa 'funziona' non si cambia, ma l'uomo erra e non sempre quello che pare funzionare lo fa davvero o è il meglio. L'utente digitale è pigro e cercherà, piuttosto che cambiare, di risolvere tutto con quello che ha. I programmatori non cambiano linguaggio di programmazione, non cambiano editor. Gli utenti di word processor non cambieranno il loro word processor, il loro foglio elettronico. I grafici useranno il loro programma, i modellatori 3D il loro software. Nessuno cambierà anche in presenza ed evidenza di una superiorità delle alternative. In fondo è anche la questione di Scratch, perché non Snap! con cui potreste fare lo stesso e di più? Per la community?

Nella seconda tabella leggo tra le conoscenze: conoscere il concetto di funzione. Scratch non ha funzioni, come potete introdurre il concetto di funzione? 'Conoscere la funzione di ripetizione' è errato, la ripetizione non è una funzione (almeno in un linguaggio come Scratch) ma uno 'statement' e cioè una affermazione. Ricordate che Scratch è un linguaggio imperativo. Sarebbe una 'funzione' ma in un linguaggio funzionale come Scala che è alla base di Kojo.

Nella tabella sulla scuola secondaria di primo grado, ancora si parla di funzioni ed addirittura di astrazioni. Tutte cose problematiche da risolvere con Scratch, ma non con un linguaggio vero su un ambiente facilitato. Un linguaggio visuale con strutture limitate porta a distorsioni mentali nel tentativo di forzarlo a fare quello per cui non è stato progettato. I ragazzi alle medie, sanno scrivere e cominciano anche una matematica un po' più avanzata quindi perché continuare con un giocattolo? LLK dichiara che è per ragazzi tra gli 8 ed i 16 anni, la stima in alto è esagerata secondo ed è più realisticamente relegato nella fascia K-12.

La cosa che sinceramente mi 'sconvolge' è il proporlo nella stessa maniera nelle scuole superiori. Nella tabella si citano le strutture sequenziali ed i cicli while e for. Cicli concatenati ed ottimizzazioni. Tutte cose che spingerebbero Scratch oltre i suoi limiti naturali, portando i ragazzi a creare strutture visuali oltremodo complesse e non reali. Nella scuola superiore, si dovrebbe anche affrontare il problema di un possibile inserimento lavorativo o perlomeno il fornire la plasticità necessaria all'adattamento.

Saper utilizzare strutture di controllo con un contatore alle superiori? Giusto per dire, abbiamo fatto questo il 19 ad un coderdojo con ragazzini di undici anni al massimo.

Una cosa che non capisco è anche come si elenchino queste linee guida, ma poi in un link indicato nelle stesse linee guida (http://curricolo4coding.blogspot.it/) ci sia un post del 9 giugno che rimanda a (https://www.kodable.com/curriculum#exploreCurriculum) dove nelle varie tappe è indicato: 5/6 comandi ed algoritmi, 5/7 espressioni condizionale, 6/8 loop e codice conciso, 7/9 variabili e funzioni, 8/10 basi della programmazione ad oggetti, 9/11 classi, sottoclassi e javascript.

Senza entrare nel merito del Javascript che suppongo sia almeno ES6 (altrimenti non sarebbe un linguaggio orientato agli oggetti ma solo basto su oggetti e prototipale) mi chiedo: in un sito (http://curricolo4coding.blogspot.it/) che presenta queste linee guida, in cui un ambiente limitato come Scratch è pervasivo fino alle superiori, mi si indica poi che esistono alternative in cui prima delle medie si parla di programmazione orientata agli oggetti?

Nell'indicazione su Arduino inoltre, alla fine della tabella, si dice che serve per familiarizzare con le resistenze ed i diodi, etc… Non credo sia possibile essendo una scheda micro-ingegnerizzata dove i chip integrati contengono migliaia se non milioni di transistor. Il kit Arduino potrebbe servire d altre cose semmai che non sia il familiarizzarsi con la microelettronica (a meno di istituti tecnici elettronici). Si cita il linguaggio C per un passaggio da Scratch? Il linguaggio C è un linguaggio complesso, non tanto in sé quanto nel suo uso e gestione che è unanimemente ritenuto una delle fonti di cattiva programmazione nel mondo. Il fatto che sia largamente utilizzato non ne fa un buon linguaggio sopratutto adatto all'insegnamento. Non a caso la maggior parte ormai dei corsi non sono più basati sul C. La sua intrinseca caratteristica di non sicurezza non ne fa un buon candidato, occorrono anni e anni per padroneggiarlo. Arduino può essere pilotato in molti modi ed in linguaggi più vicini a noi e più produttivi.
Il C è nato e proliferato in tempi in cui si usava l'assembler e fu un notevole passo in avanti, è tra i lunguaggi più usati per un motivo semplice: l'hardware in giro per il mondo è obsoleto per la maggior parte e il mantenimento di quel codice è business. Il C è molto usato in sistemi embedded perché il loro hardware è vecchio ed il codice prodotto dieci o venti anni fa ancora può funzionare. Ci sono problemi di memoria limitata che linguaggi come il C con il suo weak typing e l'accesso a basso livello rendono possibile utilizzare. Il C è più o meno un assembler di alto livello e il passaggio da Scratch non sarà così naturale e veloce.

Riguardo a kodable.com, ritengo che la loro tabella di marcia sia fattibile (a prescindere sul javascript e la programmazione orientata agli oggetti) con varie fasi.

  • introdurre coi più piccoli i concetti con lezioni unplugged e cercare al più presto di utilizzare software visuali a la Scratch.
  • all'apprendimento fluente della scrittura farli scrivere e passare ad ambienti 'facilitati' ma in cui si rendano conto del codice. Scrivere fa andare lenti, scrivere porta a rileggere, rileggere porta a riflettere.
  • un linguaggio di programmazione vero, che possiede tutte le strutture non limiterà l'evoluzione dell'apprendimento e non frustrerà il ragazzo, specialmente quelli che arriveranno prima alle conclusioni. Si svilupperà in questo modo anche un clima di collaborazione in cui chi ha capito lo spiegherà agli altri.
  • mantenere il 'coding' interdisciplinare e stimolare i ragazzi ad usarlo in qualunque disciplina. Per esempio, nella matematica potrà essere naturale la ricaduta. Geografia: creare ed usare un dizionario per i capoluoghi di regione associati alla regione (Umbria -> Perugia, Toscana -> Firenze) e un algoritmo per la ricerca. Storia: una cosa simile con gli eventi storici (1492 -> Scoperta dell'America)…

Gli esempi potrebbero essere molti e soprattutto creativi.

  • Insegnare a scrivere codice compatto ma leggibile, insegnare a commentare il codice scritto.
  • Insegnare il concetto di multiparadigma, perché il ragazzo deve poter scegliere quello che più gli è vicino. Ne esistono molti, alcuni sono più adatti di altri a risolvere certi problemi.
  • I ragazzi imparano oggi, ma lavoreranno dopodomani e non è assolutamente detto che quello che imparano gli servirà. Quindi non fidelizzateli, perché si creeranno selve di persone obsolete in partenza che dovranno riconvertirsi immediatamente.
  • Non si possono insegnare cose che non si comprendono nel profondo, perché molti concetti che appaiono semplici a prima vista non lo sono ed occorrono anni per comprenderli appieno.

Il proliferare dei linguaggi di programmazione è dovuto ai numerosi tentativi per superare una crisi dello sviluppo del software che è in atto e lo è da anni. Gli americani non sono il miglior esempio da prendere in considerazione, noi europei abbiamo prodotto quanto di meglio nella programmazione possa esistere oggi. Giusto per curiosità per superare la crisi dello sviluppo che attanagliava il dipartimento della difesa statunitense fu istituita una gara per produrre il linguaggio più adatto ai loro scopi. Vinse il gruppo Bull con Jean Ichbiah a capo. Vinsero i francesi quindi e questo linguaggio di programmazione si chiamò Ada (in onore di Ada Lovelace). Era il 1980 (Questo a proposito di cosa ancora oggi si dice di Ada http://cowlark.com/2014-04-27-ada/). Google oggi è riuscita a produrre il Go, sbandierandolo come super novità, che altro non è che una revisione dell'Algol68 (http://cowlark.com/2009-11-15-go/).

Per concludere vorrei che almeno per una volta l'Italia non fosse l'ultima ruota del carro che si accontenta delle briciole. Mi piacerebbe che si potesse guardare avanti e oltre e che chi ci guida fosse un po' più visionario.

4 boboto (23/06/2017)

http://www.boboto.it/it/progetti/coding-e-pensiero-computazionale.html

Il modo più semplice e divertente di sviluppare il “pensiero computazionale” è attraverso la programmazione (coding) in un contesto di gioco.

La linea di esordio è sempre quella, si dice che il 'coding' è programmazione. Quindi è o non lo è (andrebbe spiegato all'esimio professore).

L’ American Montessori Society, per esempio, ha preso una posizione ferma a favore delle nuove tecnologie nelle scuole e ne incoraggia l’utilizzo al fine di promuovere l'alfabetizzazione digitale e le competenze del 21° secolo.

Sono americani e da loro non ci dovrebbe aspettare altro visto che lo stesso Obama è stato portatore del messaggio. In altri paesi il Montessori pensiero è allineato a quello statunitense?

Inoltre, non solo la tecnologia offre la possibilità di scalabilità illimitata, a un livello mai visto prima, ma offre anche la possibilità di un apprendimento personalizzato per il singolo, in una didattica, invece, ancora molto spesso standardizzata per tutti.

Che vuol dire scalabilità illimitata? Apprendimento personalizzato? Quindi didattica per target? Va considerato anche il costo di questi strumenti quindi ci saranno target e target. Carta e matita per i più poveri e robot per i più ricchi? Non mi pare che il pensiero Montessoriano si proponga in questo modo. In un mondo perfetto dove tutti potessero aver accesso alla tecnologia al completo non si porrebbe il problema ma siamo nella realtà.

I vari kit di robotica o robot stessi (LEGO WeDo, Cubetto ecc.) presentano caratteristiche che permettono l’interazione in prima persona del bambino e l’esperienza manuale. Inoltre, questi kit, sono stati progettati per essere auto-correttivi, sposando quindi l’importante concetto del controllo dell’errore nei materiali strutturati, dando al bambino la possibilità di fare e sperimentare da solo e stimolano diversi sensi, tra cui tocco, il suono e la vista.

Credo che l'esperienza dell'errore sia fondamentale nel bambinio, giusto per essere retrogradi una volta si diceva: sbagliando si impara. Uscendo da motto semplicistico, direi che l'errore porta a riflettere ed a trovare strade per superarlo. Anche questo non credo che faccia parte del pensiero Montessoriano o no?

Anche se i bambini e le bambine fino sei anni di età hanno necessità di sperimentare manualmente e sensorialmente ogni attività, ci sono usi della tecnologia che possono semplicemente implementare queste attività dando l’opportunità al bambino di sviluppare il pensiero computazionale, di cui abbiamo scritto ampliamente qualche rigo più giù.

I bambini di quella età hanno le strutture mentali per sviluppare il pensiero computazionale? Secondo Piaget mi pare di no, ma se ricordo bene c'erano delle differenze con la Montessori.

Nella scuola primaria, la tecnologia inoltre può migliorare la capacità di ricerca delle informazioni da parte degli studenti, attraverso la possibilità di accedere e scambiare informazioni a livello mondiale, imparando inoltre il modo corretto e ottimale per fare ricerca, in un’era in cui va per la maggiore il “copia e incolla”.

Non per essere polemico, ma il remix non è altro che un copia ed incolla. Inoltre tenendo conto che per la maggior parte le lezioni su Scratch volgono al tutoraggio spinto non trovo apprezzabili differenze.

L’approccio al Coding, secondo il nostro punto di vista, presenta diverse analogie con l’approccio educativo di Maria Montessori:

  • sperimentare in prima persona
  • manualità con materiali che permettono il controllo dell’errore
  • possibilità di percorsi per tentativi ed errori cercando anche nuove soluzioni
  • l’apprendimento come scoperta
  • poter lavorare in autonomia senza l’aiuto dell’adulto
  • individualità dei percorsi d’apprendimento
  • sviluppo e potenziamento della creatività e dei processi logici
  • sviluppo della concentrazione, dell’attenzione e della precisione

Materiali che permettono il controllo dell'errore? Prima si è affermato come gli strumenti siano auto-correttivi e quindi dotati di una loro intrinseca intelligenza.
Non credo che si lasceranno lavorare bambini di sei anni in autonomia senza l'aiuto dell'adulto. Lasciarlo giocare con una apparecchio che potrebbe costare centinaia di euro è pura utopia.

Nel libro “Formazione dell’uomo”, Maria Montessori scompone il linguaggio in tre componenti: la lingua parlata, la scrittura e la lettura. Lei descrive il linguaggio parlato come in fase di sviluppo, e si riferisce al linguaggio scritto come ad una "forma superiore di linguaggio" , quindi un’evoluzione. E scrive:

"La civiltà dei nostri giorni non può fare progressi tra le persone che possiedono solo la lingua parlata, e l'analfabetismo diverrebbe, di conseguenza, il più grande ostacolo al progresso."
Maria Montessori - "Formazione dell'uomo"

Mi pare dica l'esatto contrario se il significato espresso si riferisce a questa frase. La lingua scritta è molto importante ma questa deriva del 'coding' favorirà solo la lingua parlata nelle sue più deleterie manifestazioni: lo slang di stampo statunitense.

stata usata per la prima volta da Seymour Papert, matematico, informatico e pedagogista sudafricano, il quale, nel suo famoso libro Mindstorms, afferma che la programmazione sviluppa l'intelligenza sequenziale e il pensiero procedurale, insegna come scomporre il problema in componenti più semplici e a trovare eventuali errori se il procedimento non funziona.

Non mi risulta che Papert abbia parlato nel Mindstorm di intelligenza sequenziale. Forse si dovrebbe spiegare loro cosa significa sequenziale. Il pensiero computazionale non è un pensiero sequenziale e se lo fosse non servirebbe a nulla. Papert si occupava di intelligenza artificiale e quindi per quegli anni di LISP e non a caso il LOGO è un dialetto LISP.
Il LISP ha in sé l'idea di multicomputazione e era (è) un linguaggio in grado di generare se stesso e eseguirsi. La sua struttura a s-expressions ne favorisce il meccanismo, il LISP evidenzia il concetto di: data as code and code as data. Di fatto un codice LISP è un albero decisionale di per sé, quindi nelle idee di Papert ottimo per insegnare la logica della programmazione. Da quello derivò il LOGO, una forma semplificata di LISP ma che ne mantiene la struttura principale come per esempio la notazione prefissa. A livello di pensiero molto più intuitiva di quella infissa che poggia le basi sulla aritmetica. Cosa è più naturale pensare: somma uno a due o uno lo sommi a due (tralasciando la simbologia aritmetica). Altro punto sulla programmazione funzionale è come l'intelligenza artificiale (quindi la simulazione di una intelligenza umana) sia stata da sempre affrontata con linguaggi di programmazione funzionali.

La Wing mostò in un articolo come, in tutta una serie di ambiti scientifici, l’informatica abbia portato innovazioni nel modo di pensare.

Non sopporto gli articoli con gli errori, specialmente da chi promuove il digitale. Un modesto correttore automatico avrebbe trovato il mostò senza problemi.

Esempio eclatante è stato il sequenziamento del DNA umano, avvenuto nel 2003, anticipando di molto le previsioni che erano state fatte, grazie all’adozione di un tipo di algoritmo, chiamato shotgun, per ricombinare i frammenti di DNA analizzato.

Questi non hanno idea di cosa stiano parlando. Si riferiscono allo Human Genome Project che ha chiuso i battenti nel 2003 ma non è arrivato alla sequenziazione totale del genoma umano, ma solo ad una bozza (draft). Nel 2003 il progetto affermò:

… within the limits of today's technology, the human genome is as complete as it can be. Small gaps that are unrecoverable in any current sequencing method remain, amounting for about 1 percent of the gene-containing portion of the genome, or euchromatin. New technologies will have to be invented to obtain the sequence of these regions.

However, the gene-containing portion of the genome is complete in nearly every functional way for the purposes of scientific research and is freely and publicly available. Even though the Human Genome Project is now completed, scientists will continue to develop and apply new technologies to the few remaining refractory problems. For its part, NHGRI will continue to support a wide range of research to develop new sequencing technologies, to interpret the human sequence and to use the newfound understanding of the human genome to improve human health.

Il sistema 'shotgun' (lo shtogun è il fucile a canna liscia a pallini) è una pratica per spezzare il dna (oltre le 1000 basi) in maniera quasi randomica per avere sequenze più piccole da analizzare con altri metodi. I frammenti ottenuti possono essere poi ricombinati controllando l terminazioni sovrapponibili, in questo modo si può arrivare ad una bozza delle struttura in tempi più brevi di altri metodi. Può essere visto un po' come i metodi Montecarlo. Non capisco però cosa c'entri qui col 'coding' se non come idea di algoritmo (vero che si usano computer per i calcoli e la ricombinazione ma l'azione dello shotgun è enzimatica).

Il pensiero computazionale è lo sviluppo di capacità di pensiero che contribuiscono all'apprendimento e alla comprensione.

Finalmente abbiamo una definizione…

Nello specifico, il pensiero computazionale è un processo di problem-solving che ha caratteristica di astrazione. E’ un modo di pensare intelligente e creativo, riguarda i concetti e gli approcci per risolvere problemi, gestire la nostra vita e comunicare.

La definizione si rafforza: il pensiero computazionale ha caratteristica di astrazione. Non sarà che la capacità di astrazione è una caratteristica del pensiero computazionale? Se l'astrazione entra dal davanti o dal dietro nel penisero computazionale, i bambini sotto 10/11 anni che secondo Piaget non hanno capacità di astrazione saranno in grado di svilupparlo?

Aiuta a sviluppare competenze logiche e capacità di risolvere problemi in modo creativo ed efficiente. Il modo più semplice e divertente di sviluppare il pensiero computazionale è attraverso la programmazione – coding.

Quindi il 'coding' è programmazione? Poi si cita una tesi che guarda caso… non avevo indicato su facebook?

Il Lodi però in una frase citata dice: “Chi impara a programmare bene infatti sa analizzare un problema, scomporlo nelle sue parti essenziali, astrarre, automatizzarlo, testarlo e correggere errori, riutilizzare il codice e ottimizzarlo”.

Non mi pare proprio che si riferisca a Scratch, ma in ogni caso ha fatto la prefazione al libro su Scratch della Moscetti. Oddio, io gli informatici non li capisco… Lanciano il sasso e nascondono la mano.

Seguono link utili.

5 coding boh (27/11/2016)

Che tutto sia un codice è giusto, alla fine codice è un sistema organizzato di simboli e per simbolo possiamo considerare una miriade di cose; da quelle semplici a quelle complesse. Il codice ha una sua rappresentazione matematica e formale e l'atto del coding, ovvero del produrre codice, deve seguirla. Nella teoria dei linguaggi formali ha una precisa definizione. Quindi il discorso è inerente prettamente all'ambito applicativo.

La parola coding viene da 'to code', per quello che mi risulta e quindi codificare. 'Codicizzare' è un termine prettamente legato alla sfera della giurisprudenza in italiano e quindi non lo vedrei particolarmente adatto al contesto della computer scienze.

Codificare credo sia quindi inerente alla comunicazione, perché l'informatica è comunicazione e translitterazione di dati, una parte fondamentale della comunicazione uomo macchina attraverso simboli normativi. Non credo che si possa disgiungere l'atto del 'coding' dalla sua realizzazione in un elaboratore elettronico. Sarebbe come 'tarpargli le ali' o lasciare un discorso a metà.

Non mi pare che si sia mai inteso il 'coding' come una pratica slegata da questo (in questo ambito), oggi si tenta di farlo ma non in passato; mi pare sia sempre stata una pratica ingegneristica con un fine bene preciso e non un concetto astratto.

Certo se consideriamo 'coding' come sinonimo di 'calcolo' allora sarebbe molto diverso, ma non mi sembra che questo venga preso in considerazione nelle scuole. Anche perché questo, almeno in certi ordini di scuole, si faceva già. Nell'ambito della teoria dell'informazione allora si dovrebbe affrontare molti tipi di calcolo dal lambda di Church all currying di Curry passando per il join calculus della INRIA, giusto per citarne alcuni al volo.

La lingua anglosassone è di per sé una lingua ambigua, dove i termini prendono e modificano il loro significato nel contesto del loro uso e questo li fa di traduzione complessa verso una lingua, come la nostra, che non è così ambigua. A mio avviso quindi, sarebbe opportuno trovare una definizione nell'ambito della nostra lingua e del contesto in cui vogliamo operare piuttosto che prendere in prestito vocaboli anglosassoni.

Bisognerebbe stabilire dove si voglia andare a parare e quale sia lo scopo reale di queste iniziative sul 'coding' e non basta dire: sviluppare il pensiero computazionale (anche questo con una semantica dubbia).

6 coding boh 2 (28/11/2016)

Dipende da come lo apprende, è molto semplice, insieme a come e dove lo vorrà insegnare. Quello che si contesta non è il 'coding' in sé che è sicuramente utile e sono il primo ad affermarlo, essendo in posizione propositiva da prima che si svegliassero tutti (se non altro per età anagrafica). Ci si pongono dubbi se questo sia il modo giusto di farlo. Quando lessi per la prima volta il documento sulla "buona scuola" mi rallegrai perché scattò in me anche una certa gratificazione del tipo: vedremo cosa ne penseranno quelli che fino ad allora mi avevano più o meno deriso per le mie proposte. Mi sono accorto poi, che visto che non c'erano delle direttive precise, la cosa andava progressivamente degenerando verso una estrema faciloneria. Le proposte si stavano moltiplicando ma erano proposte di bassissimo livello. Mi sono visto spuntare come funghi esperti del pensiero computazionale e del 'coding', sedicenti esperti in un concetto di cui ancora all'estero si discute se esista o no. Qui invece sulla scia di qualche corso online con o senza annessa caccia al tesoro, persone che fino a ieri a malapena sapevano accendere un computer si sono sentite in dovere di iniziare i nostri figli a questa pratica fino ad allor esoterica come la programmazione dei computer. Però no, 'coding' non è programmare computer, non lo è ma il nostro ministro ha appena detto che faranno un esercito di programmatori. Quindi lo è o non lo è? So di persone entusiaste che a colpi di blocchetti colorati sviluppano il pensiero computazionale nei licei scientifici. Questa la trovo una deriva insostenibile perché credo che un ragazzo a quella età abbia la capacità di andare oltre il blocchetto colorato.

Io non so cosa vi insegnino di Scratch e delle sue potenzialità, ma di potenzialità ne ha solo per bambini piccoli e dovrebbe essere usato in quel contesto come d'altro canto anche lo stesso LLK dice. Scratch è un linguaggio limitato a cui mancano molte strutture logiche utili a sviluppare un pensiero computazionale corretto. La sua limitatezza porta a distorsioni logiche inevitabili nel tentativo di risolvere il problema, queste distorsioni sono controproducenti in una mente che sta iniziando ad addentrarsi nel pensiero ipotetico-deduttivo. Quello che voglio dire è che l'entusiasmo non basta ma serve una adeguata preparazione che tutti non possono avere, nemmeno molti programmatori.

L'argomento è molto complesso perché quello che non si comprende è quanto un linguaggio di programmazione possa strutturare la mente della persona che lo usa. Un linguaggio di programmazione va pensato come un linguaggio naturale tralasciando l'aspetto tecnico ed ingegneristico e come un linguaggio naturale, dove tutti noi siamo concordi che faccia parte della evoluzione socio-culturale di un popolo, questo forma il modo di pensare. Insegnare un modo di pensare specifico ad un bambino lo renderà meno flessibile in futuro e più inquadrato in uno schema mentale preordinato. Quando al solito si citano i massimi 'profeti del pensiero computazionale', ammesso che se ne siano letti i testi, si dimentica però di analizzare il periodo storico e le spinte sociali in cui questi sono maturati. Il loro percorso, quello che li ha portati a questa idea.

Sono concorde sul fatto che ci sia bisogno di insegnare a programmare ai nostri ragazzi, sempre che sappiano parlare in un italiano corretto o che conoscano la nostra storia o la filosofia o la biologia o tante altre cose. Ci vuole però un piano serio ed una elaborazione di un percorso che li porti in futuro ad essere davvero consapevoli e non schiavi. Non ho ancora detto che la scuola non è un coderdojo? Visto che lo dico sempre a mo' di mantra…

In un coderdojo i ragazzini si divertono e si fa tutto allegramente (lo fanno anche quelli tristi come noi e con Scratch) si fa vedere e loro copiano un po' ed un po' cazzeggiano, poi fanno merenda e poi ricazzeggiano. La maggior parte del tempo passa a scegliere lo sprite dopo aver 'ammazzato il gatto'. Di questi bambini ce ne sono di promettenti, alcuni già si annoiano ed alcuni si sentono arrivati e sono la gioia dei loro genitori. I piccoli geni. Basta però ribaltare la situazione e cioè non fargli vedere ma dirglielo a chiacchiera cosa fare che già cala la nebbia. Allora li vedi attaccare un blocchetto dopo l'altro in un trionfo di colori quando ne sarebbero bastati una decina. Poi devi affrontare le liste o le variabili, poi non hai un operatore di disuguaglianza e devi spiegargli la negazione di una uguaglianza ed una eventuale doppia negazione. Blocchi annidati dello stesso colore che a malapena si distinguono. Qual'è il problema? Non leggono, ma montano i blocchetti in base alla forma ed il colore.

Su una decina di ragazzini che erano nel corso 'samurai' nessuno (compreso mio figlio con Scratch mentre sa farlo benissimo con Kojo e Scala) è riuscito a fare un controllo su una disuguaglianza. Il dover pensare in termini di non uguale li ha spiazzati, eppure sarebbe bastato leggere le parole scritte nei blocchi. Forse noi siamo sfortunati e non abbiamo i geni degli altri coderdojo; forse, ma non lo credo. Sono bambini come tutti gli altri e di alcuni mi rammarico perché saranno bambini promettenti persi. Bambini che si sentono ormai esperti programmatori perché li hanno convinti di questo, bambini che si sentono in dovere di darmi dei consigli… :D A parte la tenerezza che possono fare, trovo questo preoccupante.
Il sistema a soddisfazione immediata non è un buon sistema, la soddisfazione ci deve essere perché lo sforzo deve essere premiato ma va sempre lasciato quel pizzico di incompletezza per costringerli a continuare ed affrontare sfide sempre più complesse.

Ogni strumento ha una sua giusta collocazione, è progettato per uno scopo e non bisogna abusarne. Il ragazzo che cresce ed in cui la mente si sta espandendo non va tenuto a terra ma gli vanno forniti gli strumenti per poter volare.

7 coding boh 2 (03/12/2016)

Il significato di 'codificare' è inerente al contesto e non può essere generalizzato. In informatica ha un preciso significato e fonda le basi nella teoria della computazione che si occupa delle proprietà che possiede un 'linguaggio formale' che deve essere 'corretto', completo e avere una terminazione. Si riferisce specificatamente alla possibilità anche teorica di una macchina automatica di risolvere problemi.

La teoria della computazione è formata da varie branche: la definizione di un automaton, ovvero di una macchina astratta di calcolo in grado di risolvere problemi computazionali. Un automaton è un oggetto matematico (quindi definibile formalmente) che accetta un input ed è in grado se opportunamente istruito di accettarlo o rigettarlo. In teoria un automaton non cambia lo stato dell'ambiente in cui esso si trovi a funzionare ma dovrebbe operare solo delle semplici trasformazioni o mapping.

I linguaggi formali, come i linguaggi di programmazione sono essi stessi degli automata il che li porta ad essere capaci di descrivere se stessi. Un linguaggio di programmazione è progettato con un linguaggio di programmazione che può essere uguale nella migliore delle ipotesi o diverso.
La teoria della computabilità è strettamente in relazione con la logica matematica e l'idea di ricorsione. La ricorsione è un problema computazionale molto complesso ed in relazione al problema base della computazione: come fermare una esecuzione. Il come fermare una esecuzione è il problema decisionale di base che già Turing affrontò arrivando alla conclusione che fosse indedicibile. Il che significa che possono esistere più algoritmi equivalenti ma diversi per affrontare lo stesso problema.
La teoria della complessità computazionale considera se un problema è risolvibile da un computer e quale ne sia il costo in termini di efficienza.
Ci sono molti modelli computazionali a parte la macchina di Turing e molti possono essere ricondotti a questa. La macchina di Turing per molti è considerata un sovrainsieme che li comprende a strati come una cipolla.

'Coding' è quindi informatica la formulazione di un problema computazionale seguendo uno o più modelli di calcolo attraverso un linguaggio formale atto ad essere eseguito in una macchina automatica finita. Non ci sono altre definizioni e né deve essere piegato a proprio uso e consumo. Se si fa altro questo non è 'codificare' nel senso informatico ma appunto altro, quindi questa azione deve essere nominata con altro termine più adatto.

8 commento fb scratch framework (26/10/2016)

io però non ho capito una cosa che mi sfrucuglia nel cervello da parecchio. Se devo usare i blocchettini per costruire una sequenza logica di passaggi per ottenere un certo tipo di effetto/risultato (tipo un movimento), fondamentalmente che differenza c'è con la costruzione di una GIF o con le sequenze di animazione di un PowerPoint?….anche in quel caso trattasi di sequenze logiche. E quindi? Però sei tu l'esperto, se mi sfugge qualcosa dimmelo.

Se guardiamo solo al risultato niente, anzi forse in altri modi si farebbe prima. Il discorso è lo stimolo eventuale che ne potrebbe avere chi lo fa, dico eventuale perché non necessariamente ci sarà per forza. Se l'animazione è ottenuta tramite tutoraggio non credo che porti a niente in ogni caso. Ovvio che per chi non sa ci voglia una sorta di guida almeno all'inizio ma sono dell'opinione che il 'tutor' debba presentare il problema in maniera astratta per fare in modo che lo studente arrivi all'implementazione pensando da solo. La stessa implementazione porta ad una analisi per risolvere il problema implementativo. Da questo punto di vista fare un filmato o usare un software di presentazione o Scratch non fa differenza. I programmi come Scratch si chiamavano una volta 'programmi di authoring' e non linguaggi di programmazione, quando dico che Scratch si rifà ad idee degli anni novanta mi riferisco anche a quello. Erano programmi che permettevano usando un linguaggio limitato ed orientato al problema (oggi si dicono DSL, Domain Specific Language), di ottenere cose che usando semplicemente i comandi normali non erano ottenibili. Ce n'erano parecchi. Hanno il supporto per operazioni complesse, come la gestione dell'audio o lo stesso movimento. Primitive (anche ormai chiamarle primitive sarebbe errato) di livello altissimo. Queste 'primitive' sono delle scatole nere, sono chiuse e non ispezionabili all'interno. Lo studente quindi userà quella primitiva ma non ne comprenderà il funzionamento intimo, come infilarsi un paio di scarpe la mattina, ti chiedi forse come sono fatte? Il discorso è però che noi vogliamo insegnare a praticare un tipo di ragionamento che in realtà dovrebbe tutte le mattine metterci in crisi e costringerci ad analizzare ogni componente di quella scarpa.

Un altro problema è il numero di primitive, un linguaggio di programmazione vero dovrebbe essere semplice con un numero di istruzioni basso. Si considera migliore un linguaggio con un numero di istruzioni basso rispetto ad uno che ne ha molte. Più istruzioni sono deleterie in realtà denotano spesso una povera ingegnerizzazione. Scratch che è un ambiente di altissimo livello ne deve avere molte anche perché limitato. I ragazzi devono capire inoltre la differenza che c'è tra linguaggio, framework e librerie; è una cosa molto importante per comprendere anche l'astrazione che c'è nello sviluppo di un software.

Un computer non è un cervello ambiguo come il nostro, dove la semantica delle istruzioni può essere piegata e 'famo a capisse'… Un computer è una macchina sequenziale con istruzioni semplici e non ambigue. Dobbiamo scontrarci con quello (i computer del futuro saranno diversi ma per adesso questo è, gusto per fermare subito gli entusiasti dei computer quantici sul sequenziale) e quindi si dovrebbe imparare come costruire da cose semplici cose complesse e renderle generiche, librerie appunto. Scratch è una libreria di funzioni di altissimo livello.

Riguardo all'esempio qui sopra, questo sarebbe impossibile in Scratch (poi pronto ad accettare la sconfitta) che non ha Input ed Output usabili. In questo caso mi servivano delle 'primitive' che mi leggessero i risultati restituiti da Open Weather Map e quindi le ho fatte, perché Snap! mi permette di farle avendo le funzioni vere e la capacità di usare un linguaggio come il javascript per estenderlo. Con Scratch avrei dovuto modificare il software ed aggiungere queste funzioni nel 'core' del programma, ricompilarlo e farne una nuova distribuzione da utilizzare con un runtime proprietario… Scratch è una libreria ed anche un framework, perché contiene funzioni e ne impone un certo utilizzo.

I framework come sa chi li usa, impongono un modo di utilizzo. Nello sviluppo si usano, ma c'è chi preferisce quelli omnicomprensivi e chi i microframework più semplici e più agili, con meno costrizioni. Un linguaggio di programmazione vero qualunque esso sia è libertà, un framework: libertà vigilata.

Ritornando al filmato, per esempio, nella serie di incontri coi bambini visto che stavano facendo un corso di cinema, gli ho fatto vedere come si potrebbe programmare un 'cartone animato', disegnando un quadrato e cancellandolo, poi ridisegnarlo più in là e così via. Esempio demenziale, ma ha permesso a loro di capire un modo di far muovere una immagine su uno schermo. In fondo il gatto di Scratch, quello fa: carica l'immagine -> la leva -> la ridisegna spostata… Capendo come funziona si potrebbe arrivare al perché l'immagine 'sfarfalli' e cercare di risolvere anche questa nuova sfida (Double buffering o triple buffering). Questo è stimolo, non fare il filmatino od il giochino con due palle che rimbalzano.

Per ora basta :)

9 commento fb scratch framework (28/10/2016)

Ripeto: ma siamo sicuri che questa cosa abbia davvero una utilità? A me sembra soprattutto un impegno di tempo sproporzionato al compito. Io i cartoni animati li facevo a 13 anni sugli acetati coi colori acrilici e avevo appreso il concetto di sequenza senza troppe difficoltà. Continuo a pensare che questi sw addestrino degli esecutori..per la comprensione di problemi complessi e strategie continuo a ritenere più utili giochi logici del genere Scacchi, Sudoku e Risiko. Mi sembra questa del coding e dei videogiochi usati in didattica più una mania da nerd e una sbagliata strategia di rincorsa….

Io adoro gli scacchi, non mi piace il sudoku e perdo inesorabilmente a risiko data la mia proverbiale 'sfiga' (anche con le carte e tutto quello che comporta il caso) in cui nemmeno le mie migliori strategie sono in grado di combattere con un un lancio di dadi.

Allora… Una utilità l'avrebbe ma solo se fatto 'come dio comanda', la storia dei videogiochi è un minchiata pazzesca come se si sviluppasse poi solo videogiochi. Questi software addestrano degli esecutori e non ci sono dubbi. Come per capire la sequenza ci vorrebbero pennarelli ed acetati per comprendere il software ci vorrebbero editor e compilatori (o interpreti). Ogni cosa deve avere una sua giusta collocazione, è il modo in cui 'coding' e digitale in genere vengono proposti che non è valido. Ogni cosa serve o servirebbe, certo non a discapito dell'imparare la lingua o del saper scrivere. Diciamo che la bellezza della scienza dei computer sta anche nella sua difficile possibilità di essere inquadrata, perché può abbracciare e coadiuvare una miriade di ambiti intellettuali e culturali. Come giustamente qualcuno ha detto 'ieri pomeriggio' un computer è una superba macchina per pensare. Una macchina che però va come dire… Domata, perché assolutamente stupida. Una macchina inutile se non si sa cosa farci. Ogni tanto mi chiedono: - ma che ci posso fare con un computer? - Normalmente rispondo che se non riescono a pensare a niente da farci probabilmente non gli serve a nulla. Poi mi replicano che oggi lo usano tutti o che serve perché… Serve.

Tutto questo discorso lo sposta dalla dimensione di mero mezzo ad assoluto fine ed è davvero sbagliato. È un mezzo, come una penna o un colore acrilico, non deve sostituirli ma può accompagnarli. Sono dell'opinione che i bambini debbano scrivere, disegnare, correre sporcarsi e giocare. L'attività 'analogica' è alla base dell'apprendimento e non può essere evitata, quella digitale è solo un'altro aspetto che potrebbe o no (dato che non abbiamo ancora dati certi in questo) incentivarlo od al limite solo aiutarlo.

Vedi, io sono quello che smontava i giocattoli da piccolo per sapere cosa c'era dentro. Ho avuto giocattoli che non ho mai visto funzionare avendoli smontati prima. Mia madre quando ero molto piccolo, mi portava da un amico dei miei meccanico ed a quattro anni stavo in officina e ritornavo con quattro dita di grasso addosso. Ho sempre smontato e costruito in un processo continuo di 'reinventare la ruota'. Credo che questo sia importante per riuscire ad arrivare poi in seguito a conclusioni proprie. La soddisfazione di essere arrivato da solo ad una conclusione che magari qualcuno aveva trovato cento anni prima mi ha sempre riempito di 'orgoglio' e mi ha dato la spinta per insistere.

Il primo giorno coi ragazzini, ho portato un mio vecchio server biprocessore e lo abbiamo smontato insieme. Prima di aprirlo gli ho chiesto: - Secondo voi cosa c'è dentro? - Ho avuto un sacco di risposte di tutti i tipi a cui ho detto sempre di no.

Sai cosa c'è dentro un vecchio server biprocessore? Tanta polvere. Quello c'è dentro: la polvere; quindi in fondo è una stupida macchina piena di polvere.

La conoscenza è la cosa più importante, il pensiero. Ogni cosa può sviluppare il pensiero, ma noi adulti abbiamo un dovere etico ed è quello di non plasmare le menti dei nostri figli in base al nostro capriccio. Quindi va insegnato a loro come ribellarsi a noi, come pensare ed anche contro di noi senza inquadrarli e massificarli ad uso futuro perché in qualche maniera li temiamo.

Per ritornare alla programmazione dei computer, serve? Si serve anche quello, ma partendo dal presupposto che è inutile se sa mettere in croce quattro parole.
Uno Scratchista è inutile a prescindere.

10 commento su fb (11/09/2016)

Mi permetto di intervenire in un campo che personalmente ritengo interessante e premetto che non sono né un insegnante né un animatore digitale e perlopiù un disturbatore digitale. Noto però come in queste discussioni dopo un po' si arrivi al sarcasmo ed al dileggio quando probabilmente gli argomenti con cui controbattere calino.

Ovviamente tutti noi qui, almeno, possediamo un computer e inevitabilmente siamo dei consumatori. In questo senso si potrebbe anche prenderla più larga e citare le condizioni di lavoro di chi questi dispositivi li monta o ancora peggio affrontando la fine di questi dispositivi dopo bambini recuperano i metalli pesanti e preziosi di cui sono composti a colpi di acidi terribili. Il tutto a piedi scalzi e mani nude.

La scuola non fa indottrinamento? La scuola non prepara consumatori? Forse in una scuola perfetta in un mondo perfetto, ma come si dice per citare una famosa pubblicità (da consumatore): - peccato tutto petto -.

Nei vari gruppi di animazione digitale e 'coding' in cui sono inserito ho notato sempre una certa apertura verso le proposte fornite dalle grosse e blasonate software house. Apertura spesso incondizionata alla stregua di una setta o peggio di pollaio col galletto a capo. Basta formulare una opinione divergente e subito si arriva in un qualche modo o all'espulsione dal gruppo (non nel mio caso, io dopo un po' mi stufo delle discussioni sterili e me ne vado) o allo 'sfottò'. Bisognerebbe ricordare che l'Italia come altre nazioni e pare non ultimi anche gli stessi Stati Uniti, ha delle direttive riguardo al software proprietario. Non per semplice morale ovviamente, ai nostri politi della moralità non gliene può fregare di meno; ma per il mero costo, soldi insomma. In qualunque caso, queste direttive ci sono e sono disattese sempre e comunque.

Mi aspetto il coro di quelli che: - il software open source non è all'altezza di quello proprietario -. Sapete che vi dico? Avete anche ragione, molti di loro non lo sono, molti lo sono ma sono forse più complessi, altri sono indubbiamente superiori. Questo però non è un argomento. Per prima cosa tutti o quasi i software open sono adatti alla maggior parte delle persone, all'utilizzo medio che si fa; i limiti spesso sono per usi altamente professionali che pochi devono affrontare e credo, specialmente nella scuola. In ultimo, questa è la filosofia dell'open source, fornire a tutti una possibilità di intervenire e di migliorare; ognuno può con commenti o richieste agli sviluppatori o intervenendo direttamente, se ne è capace, nel codice contribuire al miglioramento. La diretta conseguenza è la collaborazione, quella competenza che viene sbandierata così spesso.

Altra cosa che noto è come nessuno si periti di leggere le licenze d'uso o le informative sulla privacy che coprono questi applicativi o servizi delle varie Microsoft o Google o Apple e chi più ne ha più ne metta. Ho visto innumerevoli post ad articoli che dicono che le persone non leggono e non vanno oltre i titoli e che non capiscono cosa leggono, post evidenziati dagli stessi che, mi pare evidente, non abbiano mai letto quei documenti e si siano fermati alla dichiarazione iniziale: La privacy dell'utente è fondamentale per…

Lo capisco, il documento è lungo e noioso ed a tratti tortuoso, ma quelle regole voi le applicate ai vostri ragazzi che date in pasto ad aziende, oltretutto straniere, ragazzi minorenni spesso o comunque non informati adeguatamente.

Vedrò poi nei commenti il solito: ma lei non ha un telefono android? Si e le dirò di più è un nexus, ma sa io sono nato poco dopo la metà del secolo scorso e sono ampiamente maggiorenne. Stupido forse, ma maggiorenne.

Quello con cui voi avete a che fare sono ragazzi, bambini, persone che anche viste dal solo lato legale nel nostro ordinamento non hanno la 'libertà di agire'. Questo vuol dire non non sono in grado legalmente di comprendere ed accettare un contratto. Forse voi però non lo sapete, le licenze d'uso sono contratti legali a tutti gli effetti. Credo che non lo sappia nemmeno il MIUR che incita i ragazzi (minorenni anche) ad iscriversi a code.org, una associazione straniera, dove il form di registrazione permette di registrarsi per chiunque accettandone la licenza di uso. Inoltre la banda di programmailfuturo si rallegra anche sul fatto che finalmente non stoccano le password nei loro database; si rallegra? Si sarebbero dovuti e passatemi il termine, incazzarsi prima.

Vedete, capisco la vostra inettitudine media in campo informatico e quindi questi sistemi e servizi omni comprensivi che rendono tutto più facile vi rendono la vita più facile. Vi hanno costretti ad affrontare una materia per voi oscura ed al limite della magia in così poco tempo, facendovi partecipare a corsi all'americana per formarvi. Vi hanno convinto cosa è bene e cosa è male. Cosa è meglio per voi ed i vostri ragazzi.

Vi hanno reso in grado di insegnare una cosa che non conoscete e di cui non conoscete la complessità.

A colpi di Papert e Wing (Papert riscoperto di recente, resuscitato dalle ceneri degli anni '80) sbandierate pensieri computazionali muovendo il gatto. Per fugare dubbi in merito, sto parlando di pensiero computazionale dal 2007 e cioè da quando mio figlio di due anni prese il mio palmare e senza avergli insegnato niente ha lanciato un giochino e ci ha giocato. Quindi da tempi non sospetti (almeno qui da noi) e da tempi in cui un dirigente scolastico mi prese in giro: - lei vuol far diventare tutti programmatori? -. Oggi la stessa lo promulga a spada tratta. Un bambino di due anni mi ha spaventato, spaventato come padre sulla sua naturalezza nell'utilizzo di un device digitale.

Quello che molti di voi non capiscono è che quella che vi viene prospettata è falsa interattività. I nostri padri, per noi della vecchia generazione, temevano la televisione. La televisione è passiva dicevano. I device digitali sono invece interattivi, attivi. Niente di più falso, sono falsamente interattivi e si illude l'utente che sia capace di padroneggiarlo. Noi che non siamo con una brutta definizione 'nativi digitali' abbiamo almeno una naturale diffidenza per il mezzo ma i nostri ragazzi no. Quello che dovremmo insegnare, io come padre e voi soprattutto come insegnanti, è l'approccio critico. Questo lo si fa utilizzando sistemi che non siano pacchetti completi e scatole nere. Questo si fa parlando di word processor e non di Word, di foglio elettronico e no di Excel. Sistema operativo e non Windows, Programmi di disegno e non Photoshop.

Il software è un mezzo potente di affiliazione, perché la curva di apprendimento è ripida e si fa fatica a cambiarlo. Per questo motivo devono essere fuggite le soluzioni di questo tipo. L'approccio critico, quello che vi vantate di insegnare e che molti di voi non hanno, non si insegna col corso di programmazione Apple il cui intento è fidelizzare al suo nuovo Swift o con quello Microsoft che vi vuole 'insifonare' Windows e tutto il suo 'ambaradan'. Le Google App for Education? Stessa storia… Dati, informazioni, personali e non che fornite gratuitamente.

Non è questione del grande complotto, questa è la realtà dei fatti. È in atto una guerra tra le società informatiche, la guerra dei dati. I vostri, ma soprattutto quelli dei vostri ragazzi che saranno il futuro. Le grandi società non sono come quelle italiane il cui imprenditore con la 'buzza' non si vede la punta delle scarpe. I loro piani sono a lungo termine. Dato che vantate il pensiero critico (quello che insegnate ai ragazzi) vi siete guardati chi sono gli sponsor di queste organizzazioni? Guardate chi sponsorizza code.org o programma il futuro per esempio, visto che le ho già citate. Nessun dubbio?

In questi gruppi facebook, mi è capitato di vedere gente proporre corsi per formare docenti, corsi delle solite aziende; gente che era amministratore di quel gruppo. Ora, io sono un malfidato, ma un dubbio mi sorge: l'amministratore del gruppo che propone un corso a pagamento e che poi è in qualche modo collegato a quel corso? Speculazione? Un cavalcare l'onda?

Gruppi in cui se appena appena tocchi il galletto del pollaio le galline insorgono perché loro stanno facendo: un percorso bellissimo; salvo poi scoprire che un pezzo di un mio articolo è finito in un documento senza citazione e criticato senza fornire almeno un collegamento al documento originale.

La scuola sono anni che viene smantellata in favore di un disegno che prevede un aumento del divario socio-culturale. Il mezzo digitale è senza dubbio una opportunità, ma deve essere affrontato con competenza e serietà. Gli entusiasmi non servono e sono deleteri. State perdendo il valore dell'insegnamento perché non vi rendete conto che state andando ad insegnare con strumenti e regole che sono state ideate e preparate da 'ingegneri' e non da educatori. La scuola non deve preparare al mondo del lavoro, la scuola dovrebbe insegnare e formare nel ragazzo il pensiero critico, la capacità di districarsi nelle diverse situazioni anche lavorative. Il ricatto delle aziende sul fatto che la scuola deve preparare al mondo del lavoro si sta attuando e nel peggiore dei modi. Per l'azienda è comodo, non deve preparare i sui dipendenti, risparmia. Non solo, in questa maniera avrà un flusso continuo di nuova manovalanza. È un sistema produttivo 'delirante' dove tutto si muove a velocità impressionanti, dove la massa di consumatori indotti deve aumentare perché l'economia di una nazione è strettamente legata al rapporto produzione-consumo. In questo modo non produciamo futuri lavoratori, ma futuri quarantenni disoccupati, persone ultra specializzate che sono diventate obsolete in pochi anni.

Il software da una forte affiliazione, l'ho detto sopra, quindi non permette riconversione o la rende lunga e faticosa. Riflettete su voi stessi, riflettete sulla vostra capacità di passare da un software all'altro ed in quanto tempo.

Nel mio lavoro, me ne rendo conto ogni giorno, di come miei 'colleghi' anche bravi non siano in grado di affrontare paradigmi di programmazione diversi. In fondo che difficoltà c'è? Dovrebbe esserci un substrato su cui appoggiare le nuove informazioni e le nuove idee. È invece molto complesso per loro. Il software non è come guidare un auto o una bicicletta e non risiede nella parte automatica del cervello.

Maggiore è l'età e più è difficile cambiare quindi, se formate i ragazzi quando la loro mente è plastica con strumenti specifici quelli non li abbandoneranno probabilmente più. Le aziende questo lo sanno, perché ogni azienda che si rispetti ha analizzato il suo target.

Noi qui in Italia siamo tra gli ultimi in questo senso e per una volta non sarebbe un male, questo ci potrebbe permettere di imparare dalle derive degli altri invece che copiare pedissequamente esperienze estranee. Ci potrebbe permettere di elaborare un percorso proprio.

Ci lamentiamo sempre dei cervelli che fuggono dall'Italia e che sono fuggiti dall'Italia, ma nessuno si pone il problema del perché? Non sono solo i soldi o il lavoro. Il sistema economico si basa sulla domanda e sull'offerta, se non ci fosse domanda di un certo tipo di ricercatori non ci sarebbe nemmeno l'offerta. È il sistema occidentale che tanto vogliamo difendere.

Se così tanti ricercatori italiani sono inseriti e molti a capo di team nei paesi anglosassoni ci sarà un motivo e forse questo ricade nel nostro sistema educativo, in quello che c'era ma che ci sarà sempre meno. Stiamo anglicizzando il nostro sistema educativo.

Ricordo lamentele di quando ancora studiavo nelle scuole, perché ancora studio ed imparo, la scuola troppo generalista e troppo umanista. Il latino, due palle… Quella scuola che però forniva cultura e pensiero critico, preparava non al lavoro ma al mondo. Quella scuola che tentava di elevare lo stato sociale e culturale delle persone, perché quello la scuola deve fare e non abbassarsi al livello comune. Non essere più semplice perché altrimenti i ragazzi non capiscono.

Oggi invece di approfittare delle nuove tecnologie per ampliare quella scuola le utilizziamo per distruggerla e per allinearci alla massa in un tripudio di idee riciclate ma col fiocco rosso.

11 esimio professore (23/06/2017)

Chiamare l'esimio professore 'uno studioso' mi pare eccessivo :) Bisogna fare attenzione però e non ricadere nella scuola nella preparazione specifica ricercando queste 'life skills'. La scuola dovrebbe preparare le persone ad adattarsi a qualunque tipo di approccio. In una mia visione utopica della scuola la vedrei come un percorso con varie fasi e comunque obbligatoria. Per quello che riguarda le scuole superiori ritengo che in linea di principio debbano essere con un indirizzo soprattutto culturale, una fase di formazione dello studente in cui gli si dovrebbero fornire gli strumenti per poter affrontare le sfide a largo raggio. La specializzazione la deputerei in quello che viene dopo, nelle università o altre tipologie di istituto. Senza entrare nella possibile divisione in cicli, trovo questo puntare alle 'skill' troppo riduttivo.

La scuola non dovrebbe fare il gioco delle aziende, altrimenti non se potrà uscire perché se il ricatto è questo e cioè una volta terminato il percorso lavorare subito o no, le persone contro cui 'combattiamo' avranno vinto. Non ci sarà discussione, alla domanda: << vuoi che tuo figlio trovi subito lavoro finita la scuola? >>: qualunque genitore porbabilmente risponderà di si. Questo è un ricatto e molti preferiranno figli pigiatasti con lo stipendio piuttosto che figli a carico della loro, forse, pensione.

Mi piacerebbe un mondo nuovo sinceramente, dove l'uomo possa non essere ricattato.

Anche nell'idea del coding è così, se vogliamo combattere la linea intrapresa, che con buona probabilità porterà i nostri figli verso quel destino, dovremmo ragionare più ampiamente. Si dovrebbero fornire competenze ai ragazzi che siano di ausilio al pensare in grande, che li abituino alla flessibilità ma non di lavoro quanto di pensiero. Vedete io sono fermamente convinto che la programmazione dei computer sia una forma di arte e come tale possa ampliare la visione del mondo, è arte in quanto espressione del pensiero umano. Questa è stata la mia 'filosofia' di sempre ed in ogni cosa che ho fatto. Forse ho una attitudine particolare allo scavare nella cose al cercare di capirne il funzionamento ed in maniera a volte maniacale e compulsiva. Un esempio, quando decisi di iniziare a fotografare (su spinta di una mia ex) cominciai con una macchina fotografica ovviamente, in capo a poco tempo ero lì che mi stavo costruendo il primo apparecchio stenopeico, poi ho preparato il materiale sensibile partendo dagli alogenuri e gelatina… Credo che nelle cose si debba 'reinventare la ruota' ogni volta e specialmente nei ragazzi che imparano. Una mia soddisfazione? È di arrivare e magari cento anni dopo alla comclusione di qualcun'altro ma per la mia strada e senza indizi. Capire, anche tardi ma capire. Questa la molla che mi ha spinto sempre.

Ero il bambino (fortunato) che smontava i giocattoli ancora prima di vederli messi in funzione.

Nella mia critica a Scratch a questo mi riferisco, ad un ambiente di altissimo livello: un framework. Un qualcosa che rendendo facile cose di altissima complessità, perché un blocco di Scratch potrebbero essere centinaia di linee di codice reale infarcito di decine di problemi, nasconde la verità convincendo chi lo usa che non c'è niente al di sotto. Come se nello studio della materia ci si fosse fermati alle molecole perdendoci la meravigliosa bellezza degli atomi e delle particelle subatomiche e della doppia natura dell'elettrone. Pensate… qualcosa che è massa ed energia allo stesso tempo, natura corpuscolare ed ondulatoria… Senza contare tutto il resto.

Certo non dico di cominciare inserendo codici binari e né assembler, ma di non ingannare i ragazzi. Scratch? Va bene ed ha una sua collocazione, poi si passerà ad altro… Facciamogli smontare questi 'giocattoli' perché smontare è all'inizio forse più importante del montare. Mettiamoli in condizione di farselo uno Scratch se lo desiderano cose che non saranno in grado di fare se conosceranno solo Scratch.

Voglio anche essere chiaro, Scratch è un simbolo di un approccio scorretto se utilizzato a tutti i livelli; quando parlo di Scratch mi riferisco ad una classe di software limitati e non è una critica assoluta né a Scratch stesso e né al visuale (specialmente a quello ibrido). Ogni classe di software è progettata per risolvere problemi a volte ci riesce ed a volte ne crea di altri specialmente quando diventa lo scopo per un processo educativo.

Noi oggi abbiamo fortunatamente linguaggi di livello elevato che permettono di affrontare la complessità dei domini del problema a cui tentiamo di dare una soluzione senza doverci interfacciare alla base della macchina senza perdere però di vista questa stessa complessità.

Il discorso poi è dirottabile al 'digitale' in generale ed all'approccio 'passivo' che ha l'utenza normale che confonde il 'device' con la 'App'…

12 perché al peggio non c'è mai fine (23/06/2017)

http://www.focus.it/tecnologia/digital-life/cognitive-computing-la-nuova-informatica

I veicoli connessi, per esempio, scambiando tra loro e con l’infrastruttura stradale le informazioni sul traffico potrebbero contribuire alla fluidità e alla sicurezza della circolazione.

I veicoli connessi, potrebbero fornire informazioni sul comportamento stradale dell'autista e contribuire a schedarlo come affidabile o no.

Gli automobilisti potrebbero ricevere le segnalazioni relative a ingorghi e rallentamenti con congruo anticipo, mentre i display delle vetture e la segnaletica informativa potrebbero attivamente indicare percorsi alternativi più scorrevoli.

Potrebbero fornire anche indicazioni su percorsi alternativi più piacevoli in caso di città nuove: un abitudinario del viale delle mignotte in una città potrebbe avere indicazioni utili in un'altra oppure magicamente essere indirizzato al ristorante vegano più 'in'.

In maniera analoga il continuo dialogo tra contatori intelligenti e apparecchi elettrici potrebbe ottimizzare i flussi di corrente in modo da evitare sovraccarichi e incanalare l’energia laddove il fabbisogno è più elevato.

Salvo poi che il contatore intelligente sia programmato in PHP ed allora buon T_PAAMAYIM_NEKUDOTAYIM a tutti.

Ad oggi solo il 10% dei dati raccolti dai dispositivi dell’Internet of Things viene effettivamente utilizzato: il resto va praticamente perduto. Ma come si può impiegare una simile mole di informazioni, che continua a crescere ed evolversi un giorno dopo l’altro?

Che sfortuna… Ancora non sanno le mie abitudini 'cacatorie' e non possono propormi la carta igienica più adatta.

L’approccio informatico tradizionale, che prevede l’elaborazione dei dati attraverso schemi e programmi predefiniti, non è applicabile all’Internet of Things…

Infatti stiamo preparando una selva di programmatori Scratch.

Un termostato intelligente o un impianto di illuminazione smart devono per esempio tenere conto della temperatura o della luminosità esterna ma anche della presenza o meno di persone all’interno dei locali.

Infatti ad una festa potrebbe spengere il riscaldamento per favorire il contatto umano.

Un sistema informatico di concezione classica riesce a effettuare elaborazioni predefinite secondo scenari standard e questa rigidità non gli permette di sfruttare al massimo le potenzialità di dati che si evolvono di continuo e che iniziano a invecchiare nel momento stesso in cui vengono registrati.

Non so se ho già detto che si prevede di formare una selva di programmatori 'non tradizionali', visto che la memori mi difetta.

Computer che imparano. Questi limiti vengono superati dai sistemi cognitivi, supercomputer che non sono programmati secondo sequenze di istruzioni rigide e predefinite ma che imparano dalla ripetuta interazione con l’uomo e con l’ambiente nel quale sono usati.

Infatti come sappiamo bene questi supercomputer che sanno giocare a scacchi un giorno si svegliano e scatenano una guerra termonucleare globale. Non saranno programmati con seguenze di istruzioni rigide ma con blocchetti colorati che si sa che si possono incastrare a caso senza causare danni. In futuro ci si spingerà oltre ed invece di programmarli gliela racconteremo: storytelling.

Rispetto alle macchine tradizionali, queste intelligenze artificiali riescono ad evolversi e tenere il passo con la complessità delle informazioni generate dall’Internet of Things. E a differenza dei sistemi meno evoluti riescono ad utilizzare anche dati non strutturati come fussi video, post sui social network e via dicendo.

Ho programmato una intelligenza artificiale una volta: un bot per tumblr. Faceva proseliti umani pubblicando foto porno recuperate dagli stessi utenti tumblr, teneva conto della complessità dell'ambiente ed a differenza dei sistemi meno evoluti (gli umani di tumblr) riusciva a utilizzare anche dati strutturati come il blog ed il reblog ragionato oltre che quello compulsivo. Un difetto lo aveva non sapeva fare 'fussi' video.

I sistemi cognitivi sono per esempio impiegati nella lotta al terrorismo: tengono sotto controllo le telecamere degli obiettivi sensibili, riescono a individuare comportamenti sospetti, come qualcuno che abbandona un pacco o una valigia, ma sono anche in grado di ascoltare Twitter per cogliere i cambiamenti di umore nei membri di un partito politico o di una fazione estremista.

Ora devo dire che mi sento molto più sicuro. La potenzialità di ascoltare Twitter per cogliere i cambiamenti di umore di un partito politico mi rassicura, non sia mai che in Italia si faccia una rivoluzione. Sui terroristi la vedo meno efficace, in fondo quelli vanno a fare gli attentati con la patente e si fanno i selfie dopo la raffica di mitra.

Ti ascolta e ti capisce. Di fatto questi sistemi si appoggiano a una infrastruttura hardware potente e affidabile per analizzare grandi quantità di immagini, video, tweet, post su facebook e blog alla ricerca di schemi altrimenti invisibili. E per poter fare questo devono anche essere in grado di comprendere il linguaggio naturale.

Finalmente la solitudine è bandita dalla nostra società. Ora non ci sono più scuse ed è inutile 'menarsela' con il << io sono solo! >>. Sei solo? Parla col super computer che lui capisce e scova schemi altrimenti invisibili. Sarà chi vuoi… Questo mi ricorda un po' il presidente operaio, che fosse anche lui una intelligenza artificiale?

Analogamente, queste intelligenze artificiali possono essere impiegate dalle aziende per cercare, all’interno dell’enorme massa di dati generati dagli oggetti connessi, la soluzione a problemi matematici come il calcolo del percorso migliore o l’ottimizzazione dei consumi energetici di un’intera città.

Che imbecille che sono, fino ad ora ho sempre pensato che lo facessero per la solita carta igienica adatta alla mia chiappa ed invece sono dei filantropi.

Consulente elettronico. Ma i sistemi cognitivi possono spingersi ben oltre: una volta compresi gli obiettivi di un’organizzazione, sono per esempio in grado di integrarli e di offrire spunti e suggerimenti su come raggiungerli.

Care organizzazioni state attente agli obiettivi che avete, perché potrebbero integrarvi ma soprattutto raggiungervi. Vi possono anche consigliare la bibita giusta a seconda delle ragazze che vengono nel vostro dormitorio.

Nei sistemi industriali, per esempio, possono elaborare e studiare i dati prodotti dai diversi dispositivi connessi dislocati lungo la catena produttiva e prevedere con anticipo guasti e rotture, ma anche suggerire modifiche alle lavorazioni che possano portare a miglioramenti della qualità o riduzione dei costi.

Questo va tutto a vantaggio dei lavoratori di un sistema industriale, loro non capiscono. Gli alleggerirà il lavoro ed avranno più tempo libero da passare coi figli.

Qualcosa di simile è stato realizzato da Shaffler, azienda tedesca specializzata nel settore automobilistico, che utilizza Watson IoT, la piattaforma di cognitive computing di IBM, per analizzare i dati provenienti da milioni di sensori e dispositivi che controllano le attività operative dei produttori di automobili.

Chissà se una nota marca automobilistica tedesca li usi questi dati, forse sono stati dei super computer intelligenti a consigliare il trucchetto sulle emissioni.

Sistemi vocali disposti all’interno dell’abitazione riconoscono comandi come “chiama un’ambulanza” e ricordano di prendere le medicine o di spegnere un apparecchio elettrico, con l’obiettivo di lasciare i pazienti il più a lungo possibile nel proprio ambiente e in piena autonomia.

Mi sono sempre chiesto come un sistema vocale possa ascoltare e nella mia ignoranza ho sempre pensato che potessero solo parlare. Comunque, questo è interessante anche se la vedo scomoda come cosa. Insomma in pieni gemiti da amplesso non è che mi vedrei arrivare l'ambulanza a casa? Insomma, sarebbe imbarazzante no?

13 goofylang (15/06/2017)

Buongiorno.

So chi è, è una persona impegnata dal lato OCaml. A mia conoscenza ha fatto l'unico MOOC dedicato ad OCaml (un paio di anni fa o forse l'anno scorso). Mi ero iscritto ed l'ho seguito per un po' più per curiosità che altro e non era male davvero.

Ha ragione sull'open source. Qui in Italia siamo veramente al provincialismo più retrogrado. Da noi vige prevalentemente l'idea che Open Source o Free Software (che sono concetti diversi) siano solo sinonimo di 'gratis'. È un preconcetto culturale, lo stesso che porta nel nostro paese al non adeguato riconoscimento del lavoro. In un paese dove l'attenzione è verso il il prodotto, è inevitabile che il lavoro per una cosa che puoi non pagare abbia valore pressoché nullo. È una miopia strutturale che, nonostante l'Italia abbia fornito nomi illustri all'informatica ed al calcolo automatico, ci sta portando verso l'abisso computazionale (altro che pensiero computazionale).

L'italiano 'ha da toccà la robba' ed il software non si può toccare.

Questo discorso però va esteso anche a chi promuove l'Open Source in Italia, moltissimi che a vario titolo si occupano di questo seguono le stesse identiche linee di pensiero: gratis. Al limite il discorso di partenza è che fa risparmiare. Parole vacue ed ingannatorie, perché non sempre fa risparmiare e quando le amministrazioni o le aziende se ne accorgono ritornano indietro con conseguente danno alla stessa idea di Open Source. Open Source e Free Software è in principio un'idea e così dovrebbe essere proposto. Non si deve dire Open Source nella scuola perché fa spendere meno, ma Open Source nella scuola perché è moralmente giusto. La difesa non deve risparmiare ma usare software che non la renda ricattabile, così l'anagrafe e così tutta l'ammistrazione pubblica. Perché uno stato non può essere ricattato in qualche modo da un'azienda o più. Discorso lungo…

Il sito http://hopl.info/ è molto conosciuto e nemmeno aggiornatissimo (2004), quindi considera che i linguaggi ideati ad oggi sono di più. Tra l'altro non prende in cosiderazione le DSL ed altri linguaggi specializzati.

Punto 4. Andrebbe portato il concetto di Open a tutti i livelli della conoscenza e della ricerca della e sulla conoscenza. Oggi specialmente, dove le scienze di tipo sperimentale e statistico hanno bisogno in maniera inscindibile del calcolo automatico. Affermare verità ottenute col calcolo automatico senza mostrare il codice che ha ottenuto il risultato è come dire che una mela è una pera per principio. Il codice stesso dovrebbe far parte della 'dimostrazione' altrimenti si fa solo della 'postulazione'. In questo contesto entra anche il discorso che Open Source deve esserlo a tutti i livelli delle fasi di produzione del software. Non si può considerare Open Source un codice che ha bisogno di software proprietario per essere compilato od interpretato od il cui runtime è proprietario. Sarebbe codice del tutto inutile, ispezionabile si ma inutile. Un esempio molto semplice: il codice di Donald è Open Source e lo rilascio su github (che è tutto dire, perché la piattaforma che sbandiera l'Open Source non è essa stessa Open Source), per compilarlo serve il compilatore per il GoofyLang prodotto dalla WalterPPK che è un software proprietario. Il GoofyLang è un linguaggio industriale sviluppato dalla WalterPPK ed il suo compilatore ha due versioni una 'free' ed una commerciale. Ambedue a codice chiuso e proprietario. Donald usa quello 'free', perché crede nel software libero ed ha rilasciato il suo codice come GPL3. Qualcuno obietta che il suo codice non potrebbe essere in GPL3 ed invita Donald a leggersi bene la licenza; al ché dopo ore ed ore di attenta lettura ed almeno tre cappucci e tre caffè la cambia in MIT (almeno dove si para si para).

Tutto contento compila il suo progetto e lo sparge al mondo. Dopo un po' di tempo il solito impegato del un noto motore di ricerca GluGlu pagato per fare il pelo alle possibili applicazioni concorrenti del suo datore di lavoro, scopre che ChiappaChiappaLaMandrappa (il nome del software di Donald) quando si lancia manda: IP, coordinate GPS, Nome, Cognome e numero dei peli del culo alla Mouse Inc., una sussidiaria della WalterPPK.

Donald tutto infervorato ed anche un po' offeso si difende: il codice è open source!

Peccato che il compilatore GoofyLang compili si il codice, ma nella versione 'free' ci aggiunga anche due o tre cosette… Forse se Donald avesse usato un compilatore GoofyLang Open Source se ne sarebbe accorto prima, ma non esiste un copilatore GoofyLang Open…

Perdonate l'esempio contorto, ma questo è il punto: Open source a tutti gli stadi. Accendendo quindi la solita polemica su Scratch, arrivate da soli alle conclusioni: il codice è pubblico su github, ma il runtime è proprietario e se voi vi fidate di Adobe allora tutto bene…

Vero è che tra un po' lo avremo in javascript e la polemica finirà.

14 microsoft nella linux foundation (18/11/2016)

Insomma Microsoft passa all'Open Source ed entra nella Linux Foundation… Che dire? La cosa che mi sovviene al volo è che come ha in passato contribuito a qualche decina di linee di codice nel kernel Linux oggi forse ne vorrà mettere di più, magari contribuire allo sviluppo davvero? La contribuzione al kernel Linux è stata inevitabile una volta sotterrato Ballmer, in fondo Linux è il sistema server più diffuso ormai e Microsoft Azure aveva bisogno di farselo girare dentro. Diciamo insomma, che Azure è un po' mignotta e le tocca pigliar su tutto, pure quell'antipatico di Linux.

In realtà di open source Microsoft ne aveva già fatto con i Microsoft Research che sono decisamente però cosa diversa. Insomma da lì sono uscite cose interessanti e molte fine a sé stesse e poche sono finite dentro Windows od Office sul serio.

Riguardo all'articolo che abbia rilasciato il motore javascript a codice aperto penso che non interesserà a nessuno, Edge è e rimane un browser del cavolo in linea coi precedenti e non credo proprio che questa mossa ne migliorerà lo stato di fatto. Non credo nemmeno che possa in qualche modo scalzare la supremazia dei motori Mozilla e Google. PowerShell? In sé una shell anche interessante ma solo perché il prompt dei comandi era un escremento assoluto. Open Source anche quello? Boh!, sono contento per chi la usa ma forse anche no. Visual Studio Code è una applicazione scritta in javascript su Electron che poi è il motore di Atom, l'editor di Github. Quindi fanno girare il Code (che forse sarà la base del nuovo Visual Studio al completo) sul motore javascript V8 e non il loro ed un po' questo fa pensare.

La storia della bash portata su Windows ha fatto il giro del mondo e vabbè, Shuttleworth in finale ha bisogno di soldi visto che si mantiene da solo un carrozzone (Canonical) che soldi ne porta davvero pochi. Bisogna anche ricordare che la bash non è di Ubuntu, ma solo una delle tante shell presenti nel mondo Posix (io uso zsh per esempio).

Pure Google si unisce alla Net Foundation? Oddio, ma che c'è stato uno scambio di favori? Io ci metto una buona parola per te e tu ci metti una buona parola per me? Ragazzi, anche questo è il cloud e tutto questo gira intorno al cloud. L'avete voluta la nuvola? Bene, sulle nuvole si sta sul vapore e queste due aziende sono da sempre specializzate in Vaporware. Questo è il mondo, dove tutti e quasi nessuno escluso è pronto a calarsi le braghe per qualche soldo in più, dipende solo dal costo del gel lubrificante di cui però vedo le azioni salire.

Sarà il business del futuro, datemi retta. Avremo anche il remake: Via col gel; che non dura solo cinque ora ma tutta una vita.

Servo vostro, m.

15 Penge domande (29/11/2016)

Allora… Commenti telegrafici buttati giù al volo e post prandiali (col caffè ancora nel gozzo).

  1. pensiero computazionale e pensiero logico/matematico sono sinonimi? se no, quali sono le differenze?

Non si dovrebbe compartimentizzare ed occorrerebbe parlare di pensiero umano e basta. Come sfaccettature di questo sono diversi e complementari. Il pensiero computazionale non è solo logico/matematico ma ne usa le caratteristiche. Qui è la differenza per esempio tra i soliti citati Papert e Wing.

  1. imparare a programmare a scuola è utile in sé, oppure solo nel contesto di un dominio (fisica, geometria, …)?

Imparare a programmare i computer è utile in sé ed uno dei primi vantaggi possibili (tralasciando il pensiero computazionale questo sconosciuto) è che stimola la consapevolezza di come è fatto un software e ottimisticamente ne limita il suo uso passivo. Chi programma si rende conto più di altri sulla tendenziale malevolenza di un software.

  1. il coding è utile solo in campo scientifico? Se no, in quali altri campi?

Occorre mettersi d'accordo su cosa sia 'coding' per prima cosa. In ogni caso credo sia utile in molti campi anche non scientifici, in fondo l'informatica tratta della automazione delle informazioni qualunque esse siano. Ne fa sicuramente una branca del sapere trasversale.

  1. è più importante risolvere problemi dati o creare strutture originali con comportamenti emergenti?

Ambedue. La creazione di strutture originali porta a problemi da risolvere, come esistono problemi da strutture non originali.

  1. è più importante saper progettare un algoritmo o saperlo scrivere correttamente? E da dove bisogna cominciare?

Si deve saper progettare un algoritmo in prima istanza, lo scriverlo correttamente è una fase successiva. Vero è che spesso progettare un algoritmo è un processo iterativo per susseguenti raffinamenti concettuali. Un algoritmo che in astratto può sembrare perfetto facilmente incontra problemi implementativi e dovrà essere adattato. La nostra mente ragiona in termini di potenza di calcolo assoluto e l'algoritmo dovrà essere inevitabilmente 'compresso' per poter entrare in una macchina finita.

  1. la capacità di leggere un codice sorgente scritto da altri è uno degli obiettivi del coding?

Non mi pare lo sia, ma dovrebbe esserlo. Come si è in grado di leggere libri scritti da altri. Un linguaggio di programmazione è espressione del pensiero umano sia nelle sue caratteristiche che nella sua applicazione. Saper leggere il codice di altri è un arricchimento.

  1. quanto conta nell'efficacia delle attività di coding l'aspetto affettivo (l'entusiasmo, il divertimento, la piacevolezza, la facilità, il rafforzamento dell'autostima)?

Molto, la gratificazione è un molla imprescindibile. La gratificazione però non deve essere immediata, o meglio, stadi di gratificazione diversi per età diverse. La gratificazione immediata può essere un'arma a doppio taglio perché pone lo studente in una fase euforica da sovrastima. La troppa gratificazione porta ad una stasi di apprendimento ed evoluzione ritenendo di aver raggiunto lo scopo prefisso. È anche uno dei problemi negli sviluppatori professionisti che tenderanno per esempio a scrivere codice sempre con lo stesso linguaggio anche se a conoscenza di alternative migliori.

  1. gli aspetti di genere vanno presi in considerazione? Se si, come?

Quale genere?

  1. la modalità cosiddetta "visuale" è fondamentale solo per i più piccoli o introduce vantaggi in generale (es. l'impossibilità di commettere errori di sintassi)?

La modalità visuale può essere adatta in bambini piccoli con capacità di scrivere limitata. L'errore di sintassi (viene catturato dal compilatore od interprete ed evidenziato) è meno problematico dell'errore logico però ed i linguaggi visuali non proteggono dall'errore logico, oltretutto se troppo limitati pososno introdurre distorsioni logiche.

  1. vanno usati ambienti (e linguaggi) diversi in base all'età? se si, secondo quale principio (es. andare verso linguaggi "veri" e richiesti dal mercato, oppure linguaggi più potenti, o più specifici per un certo dominio)?

Ogni età può avere il suo linguaggio. Visuale all'inizio ma testuale od al massimo ibrido poi. Ho sempre affermato che: scrivere porta a rileggere e rileggere porta a comprendere. Vanno evitate le DSL perché troppe specifiche per il dominio da risolvere ed invece orientarsi verso linguaggi completi e general purpose. I linguaggi ad uso comune ed industriale potrebbero portare vantaggi in termini pratici ma non sono fondamentali, un linguaggio di programmazione deve essere espressivo e completo nella sua classe paradigmatica di appartenenza e stimolare il pensiero.

  1. Il coding senza computer (unplugged) è un passaggio necessario o facoltativo?

Rimane il dubbio su cosa sia 'coding'. Nel suo significato originario forse no, in quanto il processo deve terminare nella esecuzione da una macchina automatica. Le attività unplugged, sono certamente importanti nella definizione e comprensione di un algoritmo che poi dovrà essere implementato in un linguaggio di programmazione ed eseguito su una macchina automatica.

  1. quanto è importante la possibilità di identificazione dello studente con un avatar (tarturuga, gatto, robot)?

Lo studente deve mantenere le distanze e comprendere che un avatar è un avatar, la vita reale è più importante. Oggi i ragazzi probabilmente confondono troppo i due aspetti. L'insegnamento della programmazione potrebbe stimolare questa presa di coscienza. L'uomo è uomo, la macchina è macchina per quanto intelligente possa sembrare. Il rapporto affettivo con la macchina è personale ma devono essere chiari i limiti.

  1. che rapporto c'è fra coding e robotica educativa (sono indipendenti, sono uno dentro l'altro, sono connessi)?

Sempre il problema di cosa sia il 'coding'. Potrebbero essere indipendenti o connessi.

  1. quanto è importante che il software usato abbia una licenza opensource?

Importantissimo. Bisogna stimolare nello studente l'eticità del software e bisogna mettere tutti nella condizione di poterlo usare senza distinzioni. Il software open source nella scuola non dovrebbe avere alternative e nessuna soluzione proprietaria dovrebbe essere adottata anche se superiore. È nota l'estrema fidelizzazione che il software porta e non si devono preparare futuri clienti ma futuri cittadini critici e responsabili.

  1. quanto è importante poter lavorare fuori rete, oppure poter installare un ambiente su server delle rete locale?

Se si parla della rete Internet, oggi sarebbe importante averla disponibile e di buona qualità. Se si intende affrontare il problema cloud, questo dovrebbe essere tenuto fuori dalla scuola per evidenti problemi di sicurezza e privacy.

  1. che rapporto ci può/deve essere tra codig e sviluppo di app per il mobile?

Cosa è il 'coding'? Le applicazioni per il mobile si sviluppano comunque…

  1. da che età è possibile cominciare?

Penso che si possa non appena si siano acquisite delle competenze in lettura e scrittura con i dovuti strumenti adatti alle singole età. In ogni caso pare che il pensiero logico deduttivo (Piaget) si inizi a formare intorno agli 11 anni. Prima l'azione del pensiero dovrebbe essere prevalentemente intuitiva.

  1. il coding a scuola va affidato ad un'ora speciale o va praticato all'interno delle altre "ore"?

L'applicazione può essere trasversale ma ci vorrebbero ore dedicate per la formalizzazione dei concetti.

  1. deve esserci un "curriculum" uguale per tutti, o ogni scuola (ogni insegnante) può definire quello più adeguato al contesto?

Penso che ogni insegnante debba valutare il proprio contesto pur all'interno di indicazioni comuni.

  1. può insegnare il coding chiunque? se no, solo chi ha ricevuto una formazione specifica, oppure solo chi ha una competenza informatica più generale?

Non può insegnarlo chiunque (ma sempre rimane la domanda su cosa sia il coding). Ogni persona ha delle proprie competenze, questo non vuol dire che un informatico sia in grado di insegnare a ragazzi e bambini solo per il fatto di esserlo.

  1. l'approccio per problemi di complessità successiva è l'unico possibile?

Non necessariamente, si potrebbero proporre strade per complessità crescente ma anche per domini diversi non necessariamente il primo meno complesso di quello dopo. Si deve abituare il ragazzo all'analisi ed a pensare fuori dagli schemi prefissati come all'astrazione, la complessità implementativa è un dettaglio superabile.

  1. la valutazione delle attività degli studenti va fatta in maniera simile a quanto si fa nell'insegnamento tradizionale della programmazione? Se no, quali aspetti vanno valutati e come?

Credo che debbano essere valutati per le strutture analitiche prodotte e non per la semplice implementazione che può variare da linguaggio a linguaggio e nello stesso. La valutazione di un codice è una operazione molto complessa (ad oggi ancora discutibile) che deve tenere conto di molti fattori. Un codice viene scritto anche in maniere diverse in base al contesto.

  1. serve un docente/tutor nelle attività di coding?

In affiancamento al docente? Se si parla di ragazzi lasciati da soli il docente serve come rapporto umano diretto per un confronto bilaterale, ma se il docente non ne è in grado un tutor serve (all'insegnante).

  1. se no, è sufficiente un ambiente predisposto per gradi di difficoltà crescenti con adeguati help on line, oppure è fondamentale che ci siano delle comunità di apprendimento online?

Non credo sa sufficiente, il rapporto umano immediato è fondamentale. Si rischia con l'apprendimento online il mio mitico 'programming by example'. L'apprendimento online è fondamentalmente un tutoraggio in cui non essendoci rapporto umano diretto è unidirezionale. Il ragazzo si limiterà a ripetere i passi anche non comprendendoli senza nessun confronto diretto sedimentando convinzioni che potrebbero essere errate.

  1. che ruolo possono avere gli studenti più avanzati?

Gli studenti dovrebbero essere stimolati al confronto ed alla collaborazione. Gli studenti più avanzati potrebbero svolgere anche un ruolo di 'consulenti' per gli altri. Va stabilito anche cosa significhi più avanzati. Più avanzati ad implementare algoritmi? Più avanzati nell'astrazione mentale? Più avanzati nella comunicazione del sapere? Altro?

16 Penge tesi (06/11/2016)

  1. DEFINIZIONI

[Stefano] Pensiero computazionale e pensiero logico (algoritmico, matematico) non sono sinonimi

[Massimo] Il pensiero computazionale è anche di tipo euristico e non algoritmico in senso stretto, quindi non sono sinonimi.

  1. PRIORITA'

[Stefano] Insegnare il pensiero computazionale ai bambini non ha una priorità più alta di altri obiettivi trasversali

[Massimo] Il pensiero computazionale deve essere di ausilio ma non oscurare altri tipi di pensiero.

  1. OBIETTIVI

[Stefano] Se a scuola si introduce il Coding, va fatto per migliorare la didattica, permettendo la verifica di ipotesi con simulazioni, non per aggiungere una materia alle altre o per preparare generazioni future di programmatori

[Massimo] L'introduzione del 'coding' non è atta a produrre futuri programmatori quanto persone consapevoli della complessità, possibilità, eticità e fini dello sviluppo del software. Lo stesso deve essere di ausilio alla didattica nelle materie tradizionali e trasversali.

  1. AMBIENTI

[Stefano] Bisogna garantire degli ambienti di apprendimento aperti, indipendenti e sicuri.

[Massimo] Gli ambienti software devono essere a codice aperto ed indipendenti, modificabili e riproducibili con strumenti anch'essi a codice aperto. La possibilità di ispezionare il codice sorgente ha anche una valenza educativa.

  1. SCELTA

[Stefano] La scelta di un ambiente e di un linguaggio di programmazione deve essere fatta in funzione dei destinatari e del contesto, non della moda.

[Massimo] Si devono preferire ambienti estensibili e preferibilmente nello stesso linguaggio di programmazione che usano. Si devono preferire i linguaggi di programmazione generali rispetto a framework o DSL (Domani specific Language).

  1. MOTIVAZIONI

[Stefano] La gradevolezza dell'ambiente e delle attività non è una garanzia sufficiente dell'efficacia.

[Massimo] Framework o DSL non portano ad una comprensione del problema da affrontare ma sono soluzioni preconfezionate a vari livelli. Se accettabili in una fase iniziale per motivi di età dovrebbero essere progressivamente abbandonati per stimolare lo studente alla produzione di propri framework.

  1. VISUALE

[Stefano] Non c'è una chiara evidenza della superiorità, in termini di efficacia a medio termine, degli ambienti di programmazione visuali su quelli testuali.

[Massimo] Non esistono evidenze scientifiche della superiorità di un ambiente visuale su uno testuale o ibrido, molti studi lo confermano ed anche alcuni produttori di ambienti visuali concordano come i dati non siano sufficienti e che occorre indagare ancora.

  1. COMPETENZE

[Stefano] Per insegnare il Coding non è sufficiente averne una vaga infarinatura.

[Massimo] Se per 'coding' si intende la programmazione degli elaboratori elettronici non è sufficiente uno studio basato su poche ore di apprendimento online. Se per 'coding' si intende inpilare una sequenza semplice di operazioni potrebbe essere sufficiente, questo lo equiparerebbe probabilmente al significato minimo di 'storytelling'.

  1. PROBLEMI

[Stefano] Risolvere in sequenza problemi sempre più difficili non è l'unica maniera di imparare a programmare e non necessariamente la migliore.

[Massimo] La difficoltà di un problema non è un requisito minimo per affrontarlo, a problemi noti si potrebbe tentare di dare diverse soluzioni nella ricerca della forma più elegante. Alcuni problemi computazionali sono complessi in un linguaggio di programmazione ma più semplici in altri.

  1. VALUTAZIONE

[Stefano] La valutazione delle competenze acquisite non può essere fatta solo sulla base del tempo impiegato e delle dimensioni del codice prodotto.

[Massimo] La valutazione delle competenze nel codice non è in relazione al tempo o alle dimensioni ma semmai alla qualità. Il codice deve avere un equilibrio tra facilità di lettura per sé stessi o altri, ottimizzazione e mantenibilità. La valutazione delle competenze sull'elaborare soluzioni dovrà essere valutata nella possibilità di astrazione e generalizzazione del problema in essere in modo da poter produrre soluzioni applicabili in più ambiti. Non in ultimo si dovrà valutare la disposizione dello studente ad un confronto critico ed etico in merito al probema posto.

17 programmare e arte (11/10/2016)

Il tipo di domande che mi faccio è: ma hai sempre scritto così? quando cambi linguaggio cambi anche "stile"? hai preferenze per un costrutto sintattico per ragioni che non siano di efficienze? E i linguaggi sono tutti eleganti, ma alcuni sono più eleganti degli altri, quindi li preferisci anche solo per questo? In pratica: c'è uno spazio in cui ci si muove scegliendo, che non è solo quello pratico ma appunto estetico? La mia impressione è che si, c'è. Ma non è facile definirlo perché si passa subito al vantaggio (tempo, correttezza, leggibilità) come se fosse necessario giustificare la parte estetica visto che siamo su un territorio scientifico e non umanistico. E' questa separazione che comincio a trovare inadeguata. Come trovo inadeguata la pretesa della "scienza informatica" ufficiale di dire cos'è la programmazione senza analizzare quello che ha da dire la pratica di milioni di programmatori. I quali di quella "scienza" hanno fatto un modo di vita, che è molto di più di una scienza, e comprende, appunto, preferenze stilistiche, idiosincrasie, guerre di religione, fissazioni personali. Le cose dI cui parlano fra di loro i programmatori, ma poi quando si tratta di uscire allo scoperto - di raccontarlo al mondo esterno - fanno finta di costruire algoritmi neutri preoccupandosi solo della correttezza. Anche per questo il "coding" (almeno nella vulgata che trovo spesso presentata qui dentro) non mi convince, perché veicola un'idea della programmazione che non è quella reale, ma è solo un'idea della programmazione (appunto, il pensiero computazionale).

-—

No, non ho scritto sempre così. C'è stata una evoluzione e non scrivo sempre nella stessa maniera con linguaggi diversi. Per me programmare è sempre stato anche un atto estetico e per questo insisto sempre che programmare i computer è un arte come tante altre. Ormai considero il computer una propaggine, ma sempre distaccato però perché per me è mero strumento di espressione. Una sorta di tela dove dipingo quello che penso.

Il pensiero è l'atto principe e valuto un linguaggio inizialmente per le idee che lo hanno prodotto, il valutare la sintassi viene dopo ma non nego un certo rapporto estetico anche in quello. Sono un minimalista ed amo l'arte minimalista e concettuale. Tra una sintassi sporca ed una pulita preferisco la seconda, non mi piacciono le parentesi graffe che così tanto adorano gli americani, a quanto pare. I delimitatori dei blocchi della maggior parte dei linguaggi di origine statunitense hanno come delimitatori dei blocchi le parentesi graffe.

In generale non amo i simboli specialmente le $ (oddio il PHP), sarà perché in qualche modo mi ricordano le variabili globali o sarà per il mio antiamericanismo e anticapitalismo in merito al segno del dollaro. Difficile da dire.

Sono stato per anni un anti-interpretato, un compila-codice convinto ed ho sempre preferito per primi i linguaggi scritti in se stessi. Anche oggi, potendo scegliere li preferirei. Il che non vuol dire che non usi Ruby che è scritto in C o Scala, che è scritto in Scala ma gira sulla JVM che è scritta quasi tutta in C/C++.

Le performance in sé mi interessano relativamente e sono solo speculazioni empiriche, benchmark e roba del genere hanno poco senso se non introdotti nel contesto di esecuzione. In ogni caso preferisco l'estetica del codice alla performance.

Non sono d'accordo sui linguaggi tutti eleganti, alcuni sono fatti con la zappa. Specialmente gli imperativi. Loro sono di poche idee di base, il concetto è imperare. Istruzioni semplici e comandi secchi e sviluppo top-down. Sono sporchi e fatti per il lavoro quick 'n' dirty. Certo oggi imperativi puri se ne trovano pochi e stanno diventando un mischione di varie idee spesso scopiazzati gli uni dagli altri.

Nel tempo della guerra Ruby contro python ero (e sono) con Ruby, insomma un linguaggio pensato da un mormone giapponese deve essere fico per forza no? A parte gli scherzi, l'eleganza di Ruby non è assolutamente paragonabile al python. Ruby è magico, Ruby è divertente. Ruby è un linguaggio che quando inizi a progettare qualcosa e lo scrivi è come un poema che inizi e non sai dove andrà a finire. Ti da il gusto dell'implementazione. Un dosaggio quasi perfetto di paradigmi dove ogni funzionalità è elegantemente inserita. Trovo per esempio il LISP, interessante ma non molto elegante. Le parentesi mi disturbano sempre un po', non la notazione prefissa che anzi in molti casi trovo più chiara, più discorsiva. Adoro i linguaggi della famiglia ML ed OCaml in particolare: elegante, performante, quasi semplice e sporco quando serve. Programmare poi è tutta una serie di azioni e decisioni, basti pensare all'editor ed alla sintassi colorata; quella che perfeziono in maniera 'maniacale'. Ogni cosa deve avere il giusto colore, come su un quadro dove le pennellate sono parole.

Questo famigerato pensiero computazionale poi, non non è la solita conseguenza e forse non è nemmeno la più importante. A parte che ritengo che non basti essere un programmatore per averlo, conosco programmatori che non l'hanno assolutamente e sono degli emeriti idioti. Bravi nel loro lavoro ma idioti.

Una delle cose più importanti che stimola è la riflessione, la riflessione sul software. Il dubbio e la voglia di capire. Insegnare a programmare dovrebbe insegnare ad essere curiosi e a non subire il software. Questo avrebbe valenza educativa nei ragazzi, soprattutto questo. Il pensiero è pensiero, il pensiero computazionale non è per tutti e bisogna esserci portati. Si può stimolare la capacità di analisi, ma per padroneggiarlo bisogna esserci portati.

In questo mio percorso e battaglia per un insegnamento del coding 'giusto' e 'giusto' per me significa anche dubbioso, riflessivo e non assoluto, mi chiedo spesso se davvero io possa averlo e possa essere in grado di proporlo. Non lo so, sul serio non lo so. Ne do una definizione organica ma cosa davvero sia non so proprio dirlo. È una cosa che mi disturba perché non capisco come altri ne siano così sicuri e certi.

Nella mia mente, quando devo pensare ad un progetto mio o su commissione, passo giorni in cui assorbo idee ed informazioni tutte allo stato grezzo, come riempire un grande sacco quando si va a sgomberare il garage dell'amico. Queste idee stabiliscono connessioni, intrecci e possibilità e poi comincio a, come dico quando me lo chiedono, 'vedere il codice'.

Mi si comincia a scrivere nella mente in un linguaggio di programmazione che non è sempre lo stesso, ma forse quello più adatto ed elegante per quel compito. Poi la realtà ovviamente si insinua in questo visione poetica perché il cliente ti aveva chiesto di farlo in PHP.

Subentra una certa professionalità ed un aumento di prezzo un questo caso :D

Comunque si, il codice può essere paragonato allo scrivere una storia o una poesia, ma non parlatemi si storytelling per favore; odio quella parola anche più di coding.

18 real programmer (13/11/2017)

Buongiorno.

Subito giusto per: Real programmer… oppure Real programmer… Penso che alcuni di noi già abbiano letto parecchie di queste battute ed è solo per i neofiti del codice.

Oddio, il dromedario fatto di codice (come tutte queste manifestazioni) lasciano il tempo che trovano anche artisticamente. Vanno lasciati nel è stato fatto pure questo o nel ma uscire a farsi una birra con gli amici no?. Insomma a prescindere dal codice Perl questa roba la facevano già i dada ormai tanti e tanti anni fa. Il codice è un mezzo ma come tutte le cose può diventare un fine e spesso fine a se stesso. Proprio come un linguaggio naturale un linguaggio di programmazione è un mezzo il cui fine è dialogare con una macchina che sia un Cray od un frigorifero. Il codice sorgente è una rappresentazione materiale di questo mezzo e come tutte le cose prodotte e quindi reali e materiali diventa se non siamo accorti un fine.

Credo che la cosa interessante dell'attività del programmare sia la molteplicità delle azioni da intraprendere. Per fare un paragone programmare è come insegnare ai bambini dove non basta la preparazione propria, la conoscenza profonda dell'argomento; servono altre cose come: la passione, l'umiltà, la conoscenza della capacità di apprendimento del ragazzino, la capacità di relazionarsi con loro. Più altre cose tipo gentilezza e disponibilità, empatia e via dicendo.

Non basta la passione che ci porta a strafare o la fredda conoscenza che non ci pone il dubbio su cosa sia giusto o non giusto fare. È un equilibrio delicato, perché l'intrigo di circuiti che abbiamo sotto le dita è un bambino e dei peggiori: quelli che non c'è verso di prenderli. Non ascolta e non capisce.

L'arte nel programmare penso che sia questo: il saper dosare sapientemente una moltitudine di ingredienti come in una ricetta di alta cucina.

Le battute sopra ci fanno sorridere perché non esiste il vero programmatore, quel vero programmatore è nell'immaginario di chi, anche programmatore, nella realtà non lo è. Ho detto spesso che non tutti i programmatori possiedono il pensiero computazionale, urtando sia chi paventava di esserlo che chi non lo era ma frequentava un corso per diventarlo. Uno dei problemi del programmatore è il sentirsi arrivato ed il non mettersi in discussione. L'essere più fico degli altri e solo magari perché usa che so l'Haskell? O l'ultima cosa che fa tanto ganzo. Quella cosa che ti fa scrivere tanto poco. Se guardate, tutti i nuovi linguaggi paventano l'essere più stringati dei loro predecessori. Non che non sia un vantaggio anche se spesso questa brevità va a scapito della comprensione.

Nella evoluzione e nella ricerca ci sono stati due punti fondamentali: la lunghezza del codice scritto ed i puntatori. La lunghezza del codice è di facile comprensione, si scrive meno e si fa prima e se si pagano i programmatori a riga prodotta si pagheranno meno. I puntatori invece… Questi sconosciuti. Pare che gli americani si perdano puntatori a giro a palettate. Loro ed i puntatori sono una cosa diversa, già gli europei sono meglio. Certo un problema c'è visto che con i puntatori si fanno cadere gli aeroplani e scoppiare i razzi intercontinentali. Insomma american first prendono le cose ma si dimenticano di restituirle: vogliono la memoria ma poi non te la ridanno più e dimenticandosi di averla tentano di riscriversi sopra e… boom! Vabbè, allora giù di garbage collector: ti prendi la memoria e poi te la dimentichi visto che qualcuno ci penserà. I garbage collector però sono lenti e come il camion della spazzatura fermo ai cassonetti ferma il traffico, il nostro ferma il programma. Insomma però all'aereo mica gli si può dire: - senti aspetta che ripulisco -; mentre atterra. Insomma dal tutti io ho il miglior camion della spazzatura, alla raccolta differenziata porta a porta dove la busta dell'umido la lasci al cancello e misteriosamente l'indomani non c'è più. Attenti però che non si può buttare nel cassonetto del vicino, quello è chiuso col lucchetto; al limite gli si può prestare poi o la rende o cazzi suoi la butta lui (Rust, smart pointer, …). Certo qualcuno ha dei camion della spazzatura veloci come il vento, ma poi il vero programmatore si lamenta che non è multicore. Il multicore è il mantra del momento insieme ai puntatori che oggi ci sono ancora ma si chiamano Nullable.

Insomma anche i linguaggi di programmazione hanno a che fare con ladri, truffatori e millantatori. Chi prende senza permesso e non rende, chi fa finta e poi prende uguale scavandoti la terra sotto i piedi e chi ti racconta di essere la stringa più bella del mondo e poi non è che un carattere; oppure chi afferma il longint ed invece possiede un misero intero, anzi più uno shortint.

Divagazioni.

Il programma giusto o sbagliato forse non c'è ma c'è quello che funziona e quello no. Poi lo si può fare in molti modi e nella miriade di linguaggi che ci sono. Ogni linguaggio Turing completo è equivalente e quindi potrà fare la stessa cosa: chi in tremila linee di codice e chi in dieci. La velocità? Chi andrà lento e chi andrà veloce…

Poi… Chi stabilisce la bellezza del codice? Io non sopporto il python perché i dittatori illuminati per me rimangono sempre dittatori e se in quel punto voglio indentare me lo devono lasciar fare e possibilmente senza parentesi graffe.

19 resnik (18/11/2016)

Resnik è una figura importante sicuramente e non credo che nessuno possa criticarlo nelle sue visioni. I visionari però ogni tanto vengono sfruttati da persone con pochi scrupoli. In ogni caso l'LLK propone le sue idee per una certa fascia di ragazzi che sono i più piccoli. Una cosa che mi pare di notare però, ma in un discorso generale, è che si tende a sottovalutare i ragazzi per certi versi e sopravvalutarli per altri. Comunque le idee vanno inquadrate in un problema tutto statunitense o anglosassone in generale. Come ho detto spesso, sono emblematiche le due posizioni dei soliti citati quando si parla di coding e pensiero computazionale: Papert e la Wings. Se guardiamo al periodo in cui hanno operato credo si possano notare due spinte opposte. Papert negli anni '80 aveva il problema che in pochi si avvicinavano alla matematica ed alle scienze in genere. Con gli anni settanta ed i movimenti socio culturali di quel periodo la tendenza era verso un abbandono delle scienze verso ambiti culturali più umanistici, inoltre a questo va aggiunta una crisi dell'educazione più tradizionale, quella cosiddetta 'frontale', che noi oggi mettiamo in dubbio rispolverando teorie di quegli anni. Il rifiuto delle nuove generazioni per l'autorità educativa e chiaramente anche di più per il rigore scientifico inevitabile dello studio di alcune materie creò un problema. Gli Stati Uniti avevano bisogno di scienziati, già avevano iniziato ad avere stranieri nei posti di rilievo dei gruppi di ricerca. Il rilassamento dei rapporti con l'Unione Sovietica e poi il suo crollo definitivo stava portando verso gli Stati Uniti persone altamente preparate. Quindi come far avvicinare i ragazzi ed i bambini alla matematica?

Nel tempo la scuola americana si è evoluta verso una estrema specializzazione e nell'idea che si avesse bisogno di persone altamente preparate nel campo specifico. Sono probabilmente arrivati ad un livello insostenibile dove si comincia a sentire il bisogno di persone con visioni più ampie e meno specialistiche. Quindi il problema opposto con gli stessi effetti, a capo dei gruppi di ricerca hanno per la maggior parte ancora le stesse persone: gli europei e gli asiatici che nel tempo sono avanzati moltissimo. Chi ha lavorato con degli americani un po' dovrebbe averlo capito: sono preparatissimi nello specifico ma con una visione globale nulla.

La scienza informatica ha forse un pregio rispetto alle altre ed è che di fatto è indefinibile. Con la pervasività dei computer deve per forza occuparsi di molti campi applicativi. Da notare anche come spesso e volentieri in campi di ricerca informatica a capo dei progetti non ci siano informatici sul serio ma persone provenienti da altre branche del sapere: fisica teorica, matematica, biologia e così via. Credo che questo sia interessante.

La riflessione della Wings parte da qui, a mio avviso. Si è notato come chi si occupa di scienza dei computer debba per cause di forza maggiore avere una visione ampia di quello di cui si sta occupando. Se si riflette forse la nostra scuola, quella bistrattata dalle aziende che piangendosi addosso volevano gente già pronta per il lavoro (gente 'a gratis'), non era tanto male. Ci si è sempre lamentati della troppa genericità, quella genericità però che forse ha causato la nostra fuga di cervelli di cui ci lamentiamo senza pensare al perché questi fuggano. A parte il fatto dei fondi strutturali per la ricerca che sono effettivamente pochi, va capito come mai la gente se ne vada ma soprattutto come mai venga accolta. Il fatto che uno se ne vada non è in stretta relazione con il fatto di venir accettato. Quello è il motivo da indagare.

A parte chi va a Londra per fare il cameriere tutto il giorno e sfondarsi di coca la notte, quelli 'seri' perché li prendono? Di frequente non vanno mica come ultima ruota del carro. Forse perché la nostra scuola forniva un sapere ed un livello culturale da mettere in grado di fare ed imparare velocemente? Forse perché riusciva a fornirci una visione migliore degli autoctoni iperspecializzati? Negli Stati Uniti si va a lavorare solo se uno statunitense non è in grado di fare quel lavoro, farebbe riflettere anche questo. Gli Stati Uniti che sono liberisti per gli altri ma con un mercato interno protetto.

È questa una valutazione rapida e veloce, una riflessione e pronta alla smentita, ma se fosse giusta noi dovremmo imparare e non seguire delle indicazioni così come ci vengono proposte senza uno pregresso adatto. La nostra storia educativa è diversa da quella anglosassone e la nostra lingua e cultura profondamente diverse. Siamo in una corsa di anglicizzazione educativa ormai alla deriva dove regna tra le eccellenze (in tutti i campi) una faciloneria e impreparazione abissale. Questo sta diventando campo di conquista di quelle aziende a cui serve bassa manovalanza con una collusione inconscia di molti.

Quei principi che sono anche giusti poi perdono la loro validità quando si traducono in indottrinamento. Ritornando ai visionari, quelli sono come i poeti, vedono cose che noi umani non saremmo mai in grado di osservare; ma spesso in quelle visioni si perdono e sono facile preda poi, degli stessi umani miopi.

20 Riot e chat (06/11/2016)

Non sto dicendo che lo Iaconelli sia una cattiva persona, ci mancherebbe altro visto che non lo conosco. Dico solo che questa abitudine, che mi pare diffusa, a prenderla alla lontana denota, a mio avviso, anche poca professionalità. A cinquantaquattro anni potrei cominciare a dire per metà della mia vita e forse anche per poco più della metà della mia vita ma a ventisei è solo una sparata da ragazzino e basta fare due conti. Il fatto poi che abbia contribuito per pochi anni della sua vita ad un progetto come il KDE tanto di cappello e bravo. Il discorso è che però lo pagano 80.000 euro in un anno e un po' di professionalità e serietà non solo me l'aspetto ma la pretendo (visto che i soldi sono pure i miei). L'articolo non è sul coding o anti-coding è sui bootcamp. Certo che ce ne sono tanti di articoli pro o contro ma vanno distinti bene. Il pro è spesso un irrazionale pro intriso di facilonerie varie; mentre il contro lo possiamo dividere almeno in due tronconi diversi: il contro irrazionale e retrogrado ed il contro ragionato e pro. Ormai abbiamo l'abitudine a passare velocemente alle conclusioni e le cose sono solo o pro o contro quindi di frequente non si analizzano le argomentazioni. Io sono contro ma soprattutto pro, come molti altri. Questo vuol dire che siamo contro il coding? Contro perché non mi piace il come viene portato avanti attraverso semplificazioni, a mio avviso anche dannose, in questi ultimi anni? Sono altamente pro invece, verso un sistema ragionato di insegnamento del coding; un sistema che innanzi tutto non mortifichi la professionalità di chi ogni giorno lavora seriamente e duramente. Il mantra che tutti possono programmare è una bufala colossale o peggio che programmare è facile. Il discorso è complesso e andrebbe affrontato senza cacce al tesoro, magliette e gadget.

Comunque, come detto sopra, l'articolo non era sul coding (perché coding è solo questa semplificazione che si fa a scuola) ma sui bootcamp che dovrebbero preparare professionisti del settore. La conclusione è semplicemente che non servono a nulla, che sono stati una meteora e che le aziende serie non li usano. Si puù essere d'accordo come no ma dei fatti esistono: molti di questi bootcamp hanno effettivamente chiuso. Va detto che programmare non è fare l'ultima app di grido con qualche centinaio di righe di codice assistito da un IDE avanzato (che ci manca che l'app la fa lui da solo), programmare non è coding ma spesso affrontare problemi complessi e molto articolati e per farlo occorre esperienza, occorre conoscere molte cose e di quelle per cui non bastano i quindici minuti canonici di concentrazione. In un bootcamp di tre o sei mesi se partono da più o meno zero, grasso che cola se saranno in grado di mettere su un sito web dal nulla. Questi bootcamp producono skill (domain specific skill), ma queste non servono a nulla perché le skill acquisite sono solo aspetti di manovalanza specializzata. A chi fa software sul serio non interessa la skill in javascript o in python o java o quello che è, interessa che le persone abbiano delle basi robuste semmai, in analisi del problema o matematiche o capacità di visioni ampie dei domini da affrontare. Il javascript se serve glielo insegnano loro e quando non servirà più lo faranno magari con un altro. Certo questa non è la realtà italiana (anche se all'estero non è che sia tutto rose e fiori) dove il lavoro del programmatore è degradato al livello della magia, di cartomazia digitale. Non si distingue tra gli sfilamettischede, gli amministratori di sistema ed i programmatori: tutti tecnici del computer.

…e che? Vuoi essere anche pagato? Ma se ti diverti… Quindi sono contro.

Un altro tema da affrontare molto importante è l'eticità del software e l'approccio etico al software ed al suo sviluppo. Non va dimenticato che se una cosa può essere fatta non è detto che sia eticamente giusto farla. L'enfasi inserita nel concetto di facilità e nell'idea della nuova app di successo (successo=soldi) oscura questo principio importante. Un principio che si acquisisce anche con l'avanzare dell'età e l'esperienza. A questi geni del computer che iniziano a programmare a dieci anni va insegnato che non tutto è giusto fare, perché il software impatta le persone. Il progresso ad ogni costo e dove i più sono sacrificabili non è cosa buona e giusta. Quindi sono contro.

L'insegnamento della programmazione dei computer stimola il pensiero algoritmico si dice e quindi siamo d'accordo che esso contribuisca ad una forma mentale particolare. Proprio per questo non dovrebbe essere affrontato alla vogliamoci bene. I linguaggi di programmazione sono espressione del pensiero umano, sono linguaggi formali ed artificiali che noi abbiamo inventato per uno scopo preciso: comunicare con la macchina. Ognuno di questi è espressione del pensiero di chi li ha ideati e portati avanti quindi sono indirettamente una materializzazione della forma mentis di qualcuno. Siamo quindi sicuri che quella particolare forma sia adatta a tutti? Siamo sicuri che sia adatta a tutte le età? Siamo sicuri che una volta stimolata profondamente una struttura mentale questa abbia poi la capacita di auto-modificarsi nel tempo? Questa problematica non è del tutto affrontata (almeno per quello che ne so) ma è una problematica molto complessa nell'industria del software: la riconversione dei programmatori da uno stile o paradigma ad un altro è una cosa estremamente complessa e lenta. Comporta il cambiare un modo di pensare e di vedere il mondo. Per questo credo che ci dovrebbe essere collaborazione tra diverse figure nell'elaborare un metodo che sia il più adatto alle varie fasce di età ma anche flessibile e progressivo. Dovrebbero collaborare informatici (come esperti in linguaggi e paradigmi) ed educatori, nonché neuropsichiatri, scienziati dell'educazione…

Insomma sono contro tutto quello che mi pare sospetto, almeno finché non mi dimostrano il contrario. Alcune enfasi mi paiono ancora sospette.

21 tristi e allegri (29/11/2016)

http://www.professionistiscuola.it/23-didattica/2432-giannini-coding-obbligatorio-alla-primaria-ma-e-proprio-questo-che-serve-ai-nostri-studenti.html

Proprio di questo alcune persone che hanno una visione critica e forse più ampia del problema si stanno interrogando. Cercando di trovare definizioni e metodi rispondenti al meglio senza sottostare al 'mantra' diffuso. C'è bisogno di una attenta riflessione a moltissimi livelli ed anche su cosa e quali siano le priorità di una scuola italiana oggi in seria difficoltà. Per questo ci vorrebbe un confronto ed una attenta riflessione, senza scadere nel pro o contro, ma portando anche a favore delle proprie tesi una adeguata ed eventuale documentazione. Al di là degli entusiasmi che sono legittimi ma che non dovrebbero offuscare il metro di giudizio o impedire di rendersi conto della realtà. Oggi gli insegnanti, non tutti certo ma molti, non sono pronti a questo cambiamento così repentino. Come in tutte le cose ci vuole tempo e comprensione ed a maggior ragione perché si tratta di bambini e ragazzi in cui noi dovremmo confidare per il futuro. Questo è un mare in tempesta che si tenta di affrontare in barca a remi e senza salvagente e non è cattiveria ma molti in caso di ribaltamento non saprebbero nuotare. Non vuol dire essere retrogradi o contro l'innovazione ma anzi è per poter avere una reale innovazione, un percorso che possa rendere i nostri figli migliori di noi.

Ci sono momenti in cui mi prende una grande tristezza, nel vedere bambini il cui potenziale sarebbe enorme sprecato. Sprecato perché in questo nostro gioco dell'ipotecargli il futuro li renderemo probabilmente delle nullità in un mondo dominato da poche persone. Li abituiamo a pensare ma non troppo, sopravvalutati per un verso e sottovalutati per molti altri. Questa è una realtà che va al di là degli slogan e dei numeri, numeri presentati da esperti di marketing sociale perché questo sono; sono numeri presentati da chi rassicura e poi svende al 'migliore' offerente. Non voglio pensare che ci sia dolo in questo, ma perlomeno una certa inaccuratezza.

Il divertente della cosa è che che chi ogni tanto mi accusa di non far parte della scuola poi accetta direttive che non vengono dal mondo della scuola, né da pedagogisti ma da economisti e social media manager. Personalmente lo trovo un controsenso, perché se si accettano idee da chi non fa parte di questo mondo educativo perché non le nostre? Idee che ripeto non sono contro, ma solo contro il modo di attuare questa idea di 'coding'. Che poi non ci si dovrebbe soffermare solo sul 'coding' ma ampliare il discorso a tutta l'idea della scuola in digitale. Tra questi accusati di essere anti-scuola-digitale ci sono professionisti informatici che hanno magari un passato di software educativi, formatori ed insegnanti che hanno creduto e che ancora credono in una didattica diversa e laboratoriale, genitori (perché no), pedagogisti e matematici e via dicendo. Molte persone con cultura ed estrazione diversa che in qualche modo pensano. Perché il loro pensiero deve essere diverso da quello di un social media manager o di un ministro? Perché non potrebbe avere dignità anche quello?

Ci accusano di essere aggressivi, può anche darsi, se aggressività è portare documentazione su come solo in Italia non ci sia discussione nel merito o se ci si sofferma su testi di pagine ad una sola battuta goliardica. In fondo perché persone così allegre dovrebbero scomporsi per una battuta? La prendessero a ridere e tutti contenti.

22 wings e lambda calculus (30/09/2016)

In giro c'è un problema sulla carta igienica, che senza entrare nell'idea della pubblicità ad una famosa marca si può affrontare in due modi: andare a cercare nel sito della nota marca la lunghezza oppure affrontarlo matematicamente.

Il mio modo è il secondo, un po' perché di 'sgrufolare' nel sito web di uno che mi vuol vendere una cosiddetta volgarmente 'carta da culo' non mi interessa, un po' perché le sfide mi piacciono.

Penso che che mostri il problema sul pensiero computazionale: chi cerca le caratteristiche sul sito ed io che dico che è un problema matematico sulla lunghezza delle bobine (affrontabile direi con i teoremi sulle spirali, integrali curvilinei e qualche ritocco per lo spessore della carta, ma volendo anche con qualche approccio più empirico). Ambedue le soluzioni direi che in questo caso siano accettabili, in fondo alla soluzione ci si arriva.

Questo è il discorso, ho l'abitudine ad affrontare i problemi collegando varie informazioni e cercando di astrarre modelli perché questo è anche il mio lavoro di analista programmatore informatico. Una deformazione mentale.

Insegnare a pensare lo si faceva già prima, prima delle crocette intendo. Oggi molto meno. I ragazzi hanno poca capacità di concentrazione perché bombardati da informazioni frammentarie continuamente, abituati alla soluzione facile ed immediata. L'uomo è un animale pigro e sedentario, non si sforza senza motivo.

Invece io penso che si debba insegnare a programmare (senza voler far diventare tutti programmatori) ma nel modo giusto, facendo pensare.
Chi non lo fa (o chi lo fa a livello infimo ;) ) probabilmente non capisce bene cosa voglia dire. È una attività particolare, perché abbisogna di forti capacità di astrazione (per creare un modello che rappresenti il problema da affrontare) e generalizzazione, ma nella nostra mente l'idea di computer è quella di una macchina infinita: memoria infinita, potenza di calcolo infinita… In realtà un computer è una macchina finita, con grossi limiti. Dobbiamo far rientrare questo modello in questo. L'atto del programmare usando un paradigma specifico ci riporta alla realtà. Il nostro modello dovrà essere modificato e si dovranno affrontare ulteriori problemi. Questo è il processo iterativo: problema -> modello -> problema -> modello -> … esecuzione.

Questo tipo di forma mentale è data da questo lavoro continuo. Non si può prescindere dalla programmazione in sé come atto catartico.
Questa è la reale difficoltà di insegnarlo. Solo chi pensa in questa maniera può eventualmente insegnarlo.

Arrivare a questa visione della realtà è frutto di lavoro, di anni di lavoro e di una predisposizione inevitabile. Non tutti i programmatori ne sono in grado. La stessa Wing parla di computer science, definizione che è difficile da tradurre in italiano nel senso in cui la intendono (come coding, che noi pieghiamo a nostro piacimento). Computer science è analisi e programmazione. La Wing dice che dopo aver lasciato gli studi di ingegneria ed essere approdata nei corsi di computer science ha avuto l'illuminazione. L'illuminazione dovuta all'affrontare il lambda calculus (http://www.women.cs.cmu.edu/What/Interviews/jeannetteWing.php):

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.

Questo intendo quando parlo della programmazione funzionale di cui il lambda calcolo è anche fondamento. Il paradigma funzionale apre la mente come nessun altro paradigma. Il riscontro sarà anche pratico, perché oggi si sta riaffermando e sarà il paradigma con cui ci scontreremo per i prossimi dieci anni. Ogni linguaggio nuovo che esce ha estensioni funzionali (indipendentemente dal suo formalismo strutturale).

Oltre al fattore pensiero, insegnare a programmare e far capire ai ragazzi cosa sia un programma, serve per renderli consapevoli al software e critici verso di esso. Li abitua a rendersi conto della sua funzionalità per non subirlo semplicemente. Se si sa come un software è fatto, i meccanismi che intercorrono tra le sue parti ed il sistema operativo che lo ospita, ci si può rendere anche conto se esso è malevolo o no. Qui entriamo anche nel concetto di software Open Source, software il cui codice è ispezionabile ed eventualmente anche riutilizzabile. Il software Open Source ha valenza educativa (il vero Open Source) perché è inoltre etico e collaborativo. Credo che il software proprietario ed a codice chiuso debba essere bandito dalla scuola, una istituzione educativa e formativa. La scuola non deve fidelizzare gli studenti ma renderli consapevoli. Una volta uscito dalla scuola lo studente potrà fare quello che vuole in piena libertà.

Se i nostri governanti, i nostri insegnanti e le gerarchie scolastiche avessero il 'pensiero computazionale' lo capirebbero da soli, invece a quanto pare non devono averlo dato non sono in grado di avere una visione di insieme e del futuro. Certo presumo questo, piuttosto che pensare che siano solo dei furbi dal ritorno economico.

Data: 2019-03-28

Autore: Massimo Maria Ghisalberti - pragmas.org

Created: 2019-04-18 gio 11:35

Validate