Gli strumenti e i fondamentali
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/apache2/vhosts/blog/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/apache2/vhosts/blog/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/apache2/vhosts/blog/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
La parte più difficile dell’imparare a programmare è iniziare. Ci serve tutto, che poi significa gli strumenti e i fondamentali. Andare con ordine è sempre una buona idea, quindi cominciamo con
Gli strumenti
Quando si viene alla scelta degli strumenti per programmare, ognuno ha il suo: ai fisici piace Fortran, psicologi e statistici usano R, i linguisti computazionali amano alla follia Prolog, i matematici sono un po’ confusi al riguardo ma gli insegnanti di matematica delle superiori sognano in Pascal, gli ingegneri del software sono cresciuti col mito di Java, economisti ed ingegneri usano quelle vecchie calcolatrici HP, i ragazzetti con troppo tempo libero scelgono PHP, gli over 50 non hanno ancora scoperto che c’è un mondo oltre il C, gli elegantoni sfoggiano Ruby, gli artistoidi audiovisuali masticano un po’ di Supercollider e Pure Data, e via così. Gli informatici, se possono, non programmano: ne hanno già avuto abbastanza e passano il tempo a fare battute sceme.
Per quanto riguarda noi, cerchiamo di fare una scelta intelligente in prospettiva. Tutti quei linguaggi che ho nominato [1] hanno le loro caratteristiche e peculiarità che li rendono più o meno utili per questo o quello scopo. Il nostro scopo è imparare a programmare, non necessariamente imparare un linguaggio, ma senza imparare un linguaggio sarà difficile vedere i frutti del nostro lavoro. Come tutte le cose, anche programmare è difficile all’inizio, e la cosa migliore è scegliere gli strumenti che hanno meno probabilità di confonderci le idee. Un punto a favore è che siano anche facili da installare ed usare, ed è per questo che, dopo molto cosare di cervello, ho scelto per voi Processing.
Processing è un linguaggio basato su Java [2] che ne maschera al meglio le complicazioni inutili [3]. È stato sviluppato proprio per avvicinare principianti e artisti al magico mondo dei computer e dell’elettronica, ed è anche il linguaggio ufficialmente scelto per chi usa Arduino [4]. La sintassi è abbastanza semplice e pulita, molto simile a quella di molti altri linguaggi, e quindi è un buon punto di partenza. Inoltre Processing è anche una libreria [5] che ci fornisce strumenti fighissimi per non morire di noia e divertirci a trollare [6] gli amici smanettoni. In più ha il vantaggio di funzionare in Windows, Linux e OS X [7] che è un vantaggio mica da poco.
Installare Processing rasenta la banalità, se avete mai installato qualcosa nel vostro computer: basta andare sul sito di Processing, alla pagina di download, e scaricare la versione 2.0 appropriata per il vostro computer [8]. Per chi usa Windows, basta scompattare l’archivio e avviare il file Processing.exe che trovate nella cartella, con OS X è ancora più facile dato che scompattando l’archivio esce direttamente l’app bundle, lo schiaffate nella cartella delle applicazioni e siete felici, e se mi metto a indagare ogni variante di Linux diventiamo vecchi [9] quindi per questa volta vi giro a San Google che sicuramente ha la risposta giusta. Il bello di tutto ciò è che Processing viene in soluzione unica: libreria, compilatore e ambiente di sviluppo. Non vi dico che impresa sarebbe stata installare un compilatore C sensato in Windows. Java sarebbe stato più facile ma io odio Java e quindi…
In ogni caso, il risultato dovrebbe essere più o meno questo:
I programmi in Processing si chiamano “sketch”, e quello che abbiamo davanti è uno sketch vuoto, pronto per essere riempito. I bottoni nella barra in alto servono per avviare e fermare il programma, creare un programma nuovo, aprire quelli vecchi, salvare quelli che modifichiamo, ed esportarli, operazione che per il momento ignoriamo mentre procediamo con
I fondamentali
Nella migliore tradizione informatica, scriviamo nel riquadrone bianco
println("Hello, world!"); |
premiamo il primo bottone in alto a sinistra, quello tondo tipo Play, oppure ctrl+R (o cmd+R sui Mac), e vediamo il risultato della nostra prima erculea fatica: in quella antiestetica barra nera in basso è comparsa la scritta
Hello, world!
Ora, voi non lo potete sapere ma in una sola riga abbiamo già usato un casino di roba! Quello che è successo è che, in un posto su cui non avevamo il controllo diretto, è comparsa una scritta incredibilmente simile a quella che abbiamo inserito a mano: Hello, world!
In effetti è proprio quello che abbiamo detto al computer di fare, usando il comando println
(contrazione di print line, “stampa una riga”) e dicendogli cosa volevamo stampare. Dato che il 99% delle righe di codice che scriveremo avranno più o meno tutte questa forma, forse vale la pena capire cos’abbiamo appena scritto.
println
è una cosa che in gergo si chiama funzione [10]. Una funzione è un cosino [11] che fa delle cose che ha deciso chi l’ha realizzato. Alcune funzioni accettano parametri (nel nostro caso "Hello, world!"
è un parametro), la lista dei parametri è racchiusa tra parentesi subito dopo il nome della funzione e i parametri sono separati da virgole. Una funzione può anche non richiedere parametri, ma in ogni caso le parentesi sono obbligatorie:
funzione(4, 8, 15, 16, 23, 42); altrafunzione(); |
Alla fine della riga c’è un punto e virgola che è importantissimo non dimenticarsi perché, appunto, segnala la fine di una riga, o meglio quello che in gergo si chiama statement che è un po’ l’equivalente di una frase, e le frasi si terminano sempre con un punto, no? Ora, lo so che tutti voi fan di Joyce ritenete la punteggiatura un superfluo orpello barocco ma i computer non sono per niente fan di Joyce, e neanche io.
C’è anche un’altra cosa che fanno le funzioni, ma per oggi abbiamo già visto abbastanza cose noiose e quindi la vedremo la prossima volta: è ora di divertirci un po’. I più acuti tra voi avranno notato che, quando Processing ha fatto partire il nostro complicatissimo programma, si è aperta un’altra piccola finestrella quadrata che è sparita quando avete fermato il programma [12]. Ebbene, Processing è un ambiente di programmazione dedicato agli artisti audiovisuali e quella è la finestrella dove possiamo disegnare le nostre opere d’arte.
C’è tutta una fila di funzioni che Processing ci fornisce per fare un sacco di cose, non solo grafica, ma al momento non vi consiglio di avventurarvici, specie se siete particolarmente digiuni di programmazione. Vedremo tutta quella roba un po’ alla volta, promesso. Intanto, giusto perché l’acquolina in bocca fa sempre bene, provate un po’ a indovinare cosa fanno queste righe (e ho detto indovinare perché prima indovinate e poi le fate eseguire, così vi abituate a pensare con la testa e non con la tastiera):
size(640, 360); background(0, 0, 0); fill(32, 128, 192); ellipse(250, 180, 50, 50); fill(192, 64, 32); rect(295, 155, 50, 50); fill(32, 192, 32); triangle(390, 155, 360, 205, 420, 205); |
Sì, insomma, sembra che non abbiamo imparato niente ma in realtà già sappiamo una buona fetta di quello che ci serve e nelle prossime lezioni impareremo il resto. L’ho presa molto alla larga perché l’idea è che tra voi ci sia gente del tutto digiuna di queste cose, e non è che si può insegnare la matematica partendo dagli integrali [13], quindi la seconda lezione in realtà è già in lavorazione ma ve la pubblico tra qualche giorno in modo che possiate digerire le funzioni e magari cercare quello che la gente fa con Processing, tanto per farvi venire ancora più voglia.
- Ce ne sono molti altri, diciamo nell’ordine delle centinaia per non esagerare.[↑]
- Non è esattissimo: Processing È Java, solo abilmente camuffato.[↑]
- E credete a me: Java ne ha di complicazioni inutili…[↑]
- Arduino è un piccolo computer dalle prestazioni limitate e senza un vero sistema operativo. Può essere usato in svariati modi, molti lo usano come interfaccia tra il mondo fisico e quello virtuale, ed è estremamente popolare tra hobbisti e artisti vari.[↑]
- Peraltro “libreria” non sarebbe il termine corretto dato che è l’italianizzazione dell’inglese library, biblioteca, ma ormai si dice così… e comunque cosa sia una libreria lo vedremo marginalmente e non tanto presto.[↑]
- Trollare non ve lo spiego. Problem? :) [↑]
- Anche se gli sviluppatori consigliano almeno OS X 10.6.8, in teoria dovrebbe andare abbastanza bene anche con la 10.5…[↑]
- La 2.0 è attualmente in beta ma questo non vuol dire molto: l’ho testata un po’ e non sembrano esserci problemi gravi, semmai ne parliamo nei commenti.[↑]
- No, dott. Vacchi, non puoi gongolare…[↑]
- Qualcuno dice routine ma tra routine e funzione c’è una differenza più che altro filosofica, e comunque è più comune dire funzione, comunque l’importante è conoscere il gergo per essere il più chiari possibile quando si spiega il proprio codice agli altri o si chiede aiuto.[↑]
- Termine tecnico.[↑]
- Per chi ancora non l’avesse fermato, basta schiacciare il pulsante tondo col quadrato.[↑]
- Sebbene ci sia chi sostiene che potrebbe essere una cosa fruttuosa, e io tenderei a non trovarla un’idea del tutto stupida.[↑]
Lorenzo Breda dice:
Il Fortran è roba da ingegneri. Di vecchia data o nucleari (ché c’è una marea di codice già scritto in Fortran 77). I fisici tendono a C.
Ah, e se usi Linux, sai installare Processing :P
Andrea Franceschini dice:
Non giurerei tantissimo sull’implicazione usi Linux => sai installare roba… io a lungo ho ponderato come comportarmi con pacchetti che non venivano dal package manager. Non che avessi un problema particolare, è che mi pareva sporco non installare i file nei posti appropriati.
La cosa di Fortran l’ho presa da Wikipedia, e da un mio vecchio amico fisico :)
Lorenzo Breda dice:
Ma Processing è in qualunque scrausa distro, dai.
Quanto è vecchio il tuo vecchio amico? Che sí, qualche anno fa si usava Fortran, cosí come ad ingegneria si usava Fortran e ora si preferisce Java.
Andrea Franceschini dice:
L’amico in questione ha la mia età, è la base di codice esistente che costringe a studiare Fortran, e poi una volta che l’hai imparato continui ad usarlo. E la stessa cosa mi conferma un altro amico ingegnere civile: è vero che i software più moderni non si scrivono in Fortran, ma ai corsi di calcolo numerico e roba così si insegna Fortran come “base”.
Sul fatto che Processing sia nei repo di qualunque distro non saprei, ma gurada solo quello che dicono sul wiki ufficiale…
Lorenzo Breda dice:
Sí, ricordo che ad uno stage che feci all’INFN ai tempi del liceo, la nostra tutor (ingegnere nucleare) lavorava in Fortran 77 (che poi è stravecchio) proprio a causa della base di codice preesistente.
Però il Fortran a Fisica, almeno a Roma, non lo insegnano piú da tempo, e calcolo numerico lo si insegna in C.
In effetti sí, la situazione di Java, grazie ad Oracle, su Linux non è banale.
Cico dice:
Aggiungerei che il Fortran ha uno dei migliori compilatori di sempre, o almeno così dicevano fonti autorevoli quali Bilardi e Pucci.
Andrea Franceschini dice:
Se lo dicevano loro, è vero WHP. Certo è che insistere col Fortran quando abbiamo LLVM che a momenti ci parallellizza un programma in C senza neanche chiederlo… :)
Francesco (@il_letterino) dice:
la funzione funzione(4, 8, 15, 16, 23, 42) stampa questo: http://images4.wikia.nocookie.net/__cb20060529173026/lostpedia/images/6/64/Hieroglyphics.jpg?
Andrea Franceschini dice:
Prova. Non mi assumo responsabilità per comportamenti ossessivi del computer, interferenze magnetiche, cataclismi temporali e incidenti aerei.
Francesco dice:
Infatti avevo paura di quello. Piuttosto quando ci insegnerai a importare le immagini, gli faremo stampare esattamente quei geroglifici.