Ciao, mi chiamo Paolo sono nato a Modena nel 1972 e quì risiedo tranquillamente. (Non vorrei annoiarvi con la mia storia però mi sembra corretto un minimo di presentazione.) Coltivo l'hobby dell'informatica fin da quando ero bimbo. Mi diverto a scrivere programmi per computer: per me è quasi il massimo della vita. Uso i calcolatori pesantemente anche nella mia professione (non programmo tutto il giorno, faccio il progettista, il mio mestiere in pratica consiste nel risolvere problemi, con il cervello, ma oltre a quello, lo strumento sucessivo è il computer; la ditta dove lavoro si occupa di oleodinamica ma faccio anche l'amministratore di sisitema, il system manager, e quindi vivo con network e supercomputers). Spesso scrivo programmi di sumulazione e di calcolo scientifico per risolvere compiti specifici, e ammetto che questo rende il lavoro più interessante. Scherzando, ma non poi tanto, potrei dire che quando mi stanco di fare qualcosa... scrivo un programma che lo fa per me! Più o meno... Ma la maggior parte dei programmi che mi piace sviluppare sono quelli che posso fare nel poco tempo libero che ho a disposizione; infatti posso programmare quello che più mi aggrada senza gli impegni del lavoro, anche se a causa della mancanza cronica di tempo di cui soffro, spesso rimangono progetti molto trascurati. Mi piace affrontare ogni genere di problema, uno dei miei passatempi è appunto individuare un problema, trovare un modello software e delle strutture dati che lo rappresentino e poi giù algoritmi per farci sopra tutto quello che posso. Della programmazione sopratutto mi piace la possibilità di condividere idee e progetti con altri. Per questo, a mio giudizio, la programmazione non può che essere Open Source, ovvero la carta in più che dovrebbe avere il software: la possibilità di sviluppare le idee di alcuni con l'esperienza di altri sviluppatori. Ognuno deve mettere le proprie capacità e le proprie conoscenze a disposizione, per arricchire gli altri; questa propensione, per me, dovrebbe essere tanto più forte, quanto più si è intellettualmente dotati. Il computermi ha sempre affascinato, fin dalla tenera età. A dieci anni, tentando di risolvere un noto enigma famoso tra i giocatori di scacchi, la coabitazione di otto regine sulla scacchiera, cominciai a intuire che i computer ed io saremmo diventati molto amici, se loro avessero potuto aiutarmi nella soluzione. La soluzione del problema sono tutte quelle posizioni dove nessuna delle otto regine (contemporaneamente presenti su di una scacchiera) condivide con un'altra una traversa orizzontale o verticale o una diagonale. Vi assicuro che trovarle "a mano", muovendo i pezzi sulla scacchiera è tutt'altro che semplice. Avevo dieci anni e i miei genitori mi avevano appena regalato un Commodore64 (con processore MOS Technology 6510) ! Loro temevano che avessi giocato e tanto ai videogiochi, ma fortunatamente penso di essere il videogiocatore più negato del XX secolo. I miei amichetti vincevano ai giochi elettronici sempre contro di me, così, ho rinunciato per sempre a quelle sfide (qualche volta giocavo a schacchi col computer e spesso vincevo, ora raramente lo sfido perché ho poco tempo, comunque perdo il 99% delle partite, la potenza dei computer e l'evoluzione del software ha fatto si che sia pressoché imbattibile al gioco; per me il programma degli scacchi non è un videogioco, è una Utility per la mente ancora oggi vinco facilmente contro tutti quei miei amici che mi umiliavano ai videogames entro una trentina di mosse, "tié, beccate questa!"). Guardando quel gioiello di tecnologia (che oggi farebbe ridere, ma non nel 1982! Era una cosa seria), speravo che mi potesse aiutare a risolvere i problemi di calcolo che avevo in testa… ma non parlava la mia lingua e allora cominciai a studiare il linguaggio Basic, per potergli chiedere di fare per me tutti quei lavori dove la velocità di calcolo (e non di pensiero)non era dalla mia parte. Allora pieno di entusiasmo cominciai a leggere il manualetto blu con le istruzioni del Basic e a comprare riviste dove c'erano dei listati, volevo imparare! Dovevo imparare... Poi ho comprato tanti libri (che conservo gelosamente ancora oggi), e che continuo anche oggi a comprare, pieni di strepitosi algoritmi che risolvono problemi complicatissimi. Vedere il lavoro di gente che ha dedicato una vita all'informatica ( Dijkstra, Huffman , Knuth , tra i più grandi, ma anche altri maestri, Sandra Carberry, Hatem Khalil, Leon Levy),aiuta a capire il tipo di atteggiamento e di ragionamento che va fatto quando si affrontano problemi al computer. Poi, abbiamo l'immensa fortuna che "questa gente", per una vita, la loro preziosa vita, ha cercato quasi esclusivamente, di spiegarci tutte quelle meraviglie che avevano in testa, per quanto ci possano apparire complicate... Con tutto il rispetto che nutro per i grandi maestri che ho citato, il mio insegnante dell'istituto tecnico ha avuto sicuramente il più grande insegnamento da darmi (per la mia carriera al computer, s'intente), egli soleva ricordare a me e agli altri studenti : - "Possiamo pensare che il calcolatore sia come a un amplificatore dei nostri pensieri: se gli forniamo spazzatura, lui ci restituirà grossa spazzatura: quindi cura sempre i tuoi pensieri prima di darli in pasto a un cervello elettronico", voleva dire che quello che veramente importa sono le "rotelline" della nostra testa, sembra una stupidaggine ma al giorno di oggi si sopravvaluta forse troppo il calcolatore e si ha meno cura delle persone che gli stanno davanti. Poiché non si può imparare tutto subito (tutto s'impara per gradualità) e dovetti accantonare per un po’ l’idea di risolvere quel gioco delle otto regine, perché per le mie capacità (di allora) era un problema troppo complesso… Però ero già in grado di farmi i compiti con programmi da me sviluppati. Impiegavo molto più tempo che non facendolo con carta e penna, tuttavia i compiti che risolvevo con il computer avevano una importante proprietà: una volta ultimato, questo, risolveva qualsiasi problema di quel tipo, anche cambiando i valori del problema (ovvero i parametri) senza che vi fosse necessità, come quando si fanno con carta e penna, di rifare i calcoli ogni volta. Dopo poco tempo ero talmente esperto che il basic non mi soddisfava più e dovetti passare all’assembler per avere più velocità per le mie applicazioni. Per arrivare alla soluzione del problema che mi assillava dovetti aspettare fino all’età di quattordici anni, nel 1986, grazie alla potenza di calcolo di un Intel 8088 a 4.77Mhz e al fatto che le mie capacità erano cresciute con gli anni e l’esercizio. Mi fu possibile scrivere un programma in grado di trovare almeno una tra le configurazioni vincenti di questo gioco che mi assillava. Il programma (scritto in Pascal) impiegò, mi pare, una trentina di secondi... e riusciva a fare quello che per me sarebbe stato impossibile fare in anni ed anni di prove. La cosa che mi stimolava è che nemmeno il computer aveva pronta una soluzione, ma attraverso la mia attività di programmazione, gli conferivo le regole ed i metodi per ricercare tra le umanamente infinite combinazioni almeno una di quelle che risolvevano il gioco. Se fossi stato più esperto, quel programma avrei potuto ottimizzarlo e farlo eseguire in circa un decimo del tempo che impiegava… ma non importava… quello era e rimane tutt’ora il programma più bello che io abbia mai fatto… Non importa se ora posso fare cose anche più complesse. Quello per me rimane il più importante, il sogno di un bimbo… Nell'informatica le cose cambiano velocemente, conobbi il linguaggio "C" nel 1987 e divenne il mio preferito; a mio parere meno rigido del Pascal, più sintetico e a “basso livello”, garantiva quindi un controllo più “stretto” della potenza del calcolatore. I programmi giravano più velocemente e si scrivevano in meno tempo con il C rispetto a prima, quindi il tempo che intercorre tra quando decido di risolvere un problema e di proporlo al computer (si usa un termine particolare, "implementarlo") a quando vedo sul monitor il risultato diminuiva. Il C era ed è ancora considerato potente rispetto ad altri linguaggi perché fa le stesse cose che si fanno in altri linguaggi, con molte meno righe di codice (oltre che l'esecuzione del codice sul calcolatore avviene ad una velocità di poco inferiore ma comunqua paragonabile a quella del linguaggio macchina). Già da qualche tempo (1984) c’è il Linguaggio C++, che eredita dal C diverse cose ma è molto più potente e ancor più flessibile, grazie alla programmazione orientata agli oggetti OOP (un nuovo modo di strutturare i programmi, che si adatta particolarmente alla soluzione di algoritmi complessi, è il più utilizzato nel Software Engineering) che soppianta il vecchio modo di programmare con linguaggi procedurali. Ho programmato in C fino al 1993 e poi ho messo le mani sul C++ e, non ho più smesso di usare quest'ultimo perché è qualcosa di fenomenale. Non solo i linguaggi si sono evoluti: il processore 6510 a 8 bit del Commodore 64 a malapena arrivava a 350 mila operazioni al secondo (0.35 MIPS, ma io avevo trovato il modo di spegnere lo schermo durante le elaborazioni e la velocità saliva di poco) e poteva indirizzare "solo" la "sbalorditiva" memoria (per quei tempi) di 64 Kilobytes (basti pensare che le missioni lunari Apollo degli anni '70 andavano sulla luna con due Intel 4004 a 4 bit delle potenza complessiva molto inferiore a quella di un solo Commodore64, le missioni degli anni '60 non avevano nemmeno quelli, ma il computer deputato al controllo di guida del razzo era composto da 5000 chip, ognuno a sua volta composto da tre transistor e 4 resistenze!). Una nota: il primo microprocessore fu appunto l'Intel 4004 a 4 bit (e andò sulla luna!) è stato progettato nel 1971 da Ted Hoff e dall' italiano Federico Faggin che era il responsabile di progetto: costava 60 mila dollari e nella prima versione con clock a 108 KHz faceva 0.06 MIPS e conteneva 2300 transistor, si spinse fino quasi a 0.74 MHz di frequenza. Poteva, fin dalla sua prima versione, contere programmi di 1 KByte e allocare 4 Kbyte per i dati. (Tanto per fare un raffronto, un Intel P6, della seconda metà degli anni '90, venticinque anni dopo, aveva 133MHz, 5.5 milioni di transistor e poteva fare già 300 MIPS e indirizzare 2^32 bytes di memoria). Ora ci sono microprocessori come Alpha, Itanium2, PowerPC, Opteron, ma anche i Pentium, Athlon o Athlon64 (64 bit) che sempre più entrano nelle nostre case e che possono oggi tranquillamente sfiorare i 5-10 miliardi di operazioni al secondo (5000-10000 MIPS o 5-10 GIPS e altrettanti milioni di operazioni in virgola mobile al secondo) e avere quantitativi di memoria di 4 Gigabytes. Negli ultimi venti anni la velocità dei computer è aumentata di 30000 (trentamila) volte !!! Che cosa ce ne facciamo di tutta questa potenza? Eppure serve ancora e serve sempre... E' quindi tutto pronto per i nostri esperimenti in C++. Sicuramente non li pieghiamo questi nuovi microprocessori ma vogliamo dargli del filo da torcere. Tra gli altri miei hobby, anche se avrete capito che l'informatica la fa da padrona, ci sono la fisica, la matematica, la musica classica (adoro Vivaldi, Bach, Mozart, Beethoven e Giuseppe Verdi) e infine mi piace giocare a scacchi (sono terza categoria nazionale anche se da anni ho lasciato i tornei: non vuol dire essere tra i più forti giocatori italiani e del mondo, però si è un pò sopra alla media, divenni terza nazionale all'età di 15 anni, poi il tempo mi consente di giocare sempre meno; il tempo è l'assillo della mia vita: avere poco tempo... ecco perché adoro i computer veloci e li voglio sempre più veloci, vorrei anche poter pensare sempre più veloce se avessi la bacchetta magica). In queste pagine troverete alcuni dei miei esperimenti. Non li voglio proprio definire dei programmi... Ho un amico sviluppatore molto bravo che scrive programmi commerciali molto belli e potenti... quelli sono programmi testati per mesi e corretti continuamnete contro eventuali bug, e con un'interfaccia grafica spettacolare...Io questa possibilità non ce l'ho, facendo tutto nel poco tempo che ho a disposizione. Anche se penso che il cuore del programma sia un buon algoritmo e per fare un buon algoritmo l'interfaccia grafica non è molto utile (confesso che per me è una perdita di tempo), serve di più una buona idea! Scrivo i miei programmi nei ritagli di tempo (a volte ho il computer sotto assedio), il mio codice non è forse il massimo come ottimizzazione o eleganza… però in un qualche modo assolve i suoi compiti, tra i bug che ci scappano quando si fanno le cose di fretta. L’idea di questa sezione non è quella di far concorrenza a ottimi siti dove c’è ottimo codice, ma è invece quella di divulgare la programmazione, soprattutto quella open source, alla portata di tutti, nel modo in cui posso fare, vale a dire con il mio piccolo contributo. Se c'è qualcosa che ritieni carino e vuoi sviluppartelo meglio per conto tuo allora sarò lieto di lasciartelo scaricare... Se sei un programmatore esperto, questo sito forse non ti servirà ma, se sei invece alle prime esperienze con la programmazione in C/C++ , o semplicemente t'interessa leggere qualche articolo, allora questa sezione potrebbe darti qualche idea o darti l'opportunità di considerare le cose da un'altro punto di vista. Se invece sei alle prime esperienze non ti devi buttare giù... t'invidio tantissimo! Anche io ho ancora tantissime cosa da imparare, ma ricordo quando giorno facevo una nuova scoperta... Sei all'inizio di un viaggio che ti porterà a capire tantissime cose. Se invece non sei un programmatore ma sei solo in visita, sei ugualmente il ben venuto e ogni tuo commento sarà comunque gradito, anche perché tra gli articoli potrebbero esserci argomenti dove comunque sei ferrato e più esperto di me, quindi potresti decidere di contattarmi e insegnarmi molto di più di quel poco che so... Purtroppo però, questo non è un corso di C++ o di programmazione in generale (mi piacerebbe farlo ma non ne ho il tempo, purtroppo) e presuppone una discreta conoscenza del linguaggio e una sufficiente conoscenza della programmazione (solo nel caso che si voglia prendere visione dei codici sorgenti e magari modificarli). Ci sono programmi tuttavia semplici che tutti gli studenti possono seguire. Chi non conoscesse il C++ e decidesse di compiere il grande salto, consiglierei di procurarsi subito un compilatore e di scaricarsi dal sito di Bruce Eckel i suoi due fantastici libri (distribuiti gratuitamente in formato elettronico oppure acquistandoli in libreria) intitolati Thinking C++ volume 1 e 2. Mentre il primo introduce alla programmazione il 2 entra molto nello specifico e alla fine sarete dei programmatori provetti. Quando sarete esperti, poi, per dotare di grafica i vostri lavoretti, potrete usare una libreria (chiamata Framework) di classi e funzioni per sfruttare facilmente le possibilità messe a disposizione dai moderni sistemi operativi. I compilatori usati sono per mia scelta, freeware... ed il framework di riferimento è wxWindows perché è libero (Open Source), rilasciato con licenza GPL in modo che tutti lo possano utilizzare per i propri scopi e che chiunque possa dotarsi di questi strumenti. Significa che potete tranquillamente scaricarvi compilatore e tutto quello che serve gratuitamente e avere licenza di utilizzarlo come riterrete opportuno. I progetti per Windows sono stati compilati con il Dev-C++ compiler, mentre quelli per Unix con il GNU C/C++ Compiler che è già disponibile per tantissime piattaforme differenti. I programmi sono in standard C++ ANSI/ISO o possono avvalersi del framework wxWindows per avere funzionalità evolute come finestre, menu ed altre caratteristiche dei software più evoluti messe a disposizione dai sistemi operativi. In ogni caso la potenza di calcolo non dipende dal framework utilizzato, quelli con il framework avranno solo un'aspetto grafico e d'interfaccia migliore, ma il programma in C++ standard è potente allo stesso modo di uno realizzato con un framework o chiamando direttamente il sistema operativo per avere finestre ed interfacciabilità varie. Ho fatto queste scelte proprio per la mia vocazione Open Source: se avessi usato Microsoft Visual Studio o il fantastico Borland C++ Builder (adoro quest'ultimo e mi fregio di possederlo perché è veramente un ottimo prodotto per chi desidera sviluppare velocemente programmi per Windows) non tutti avrebbero potuto seguire questi articoli, avrei fatto meno fatica a scrivere codice, ma sarebbe venuto meno quell'aspetto di condivisione che per me è fondamentale. Tutti invece possono scaricarsi il Dev-C++ o meglio installarsi Linux (lo Unix per processori IA32, quelli dei PC per intendersi, fantastico, infallibile e gratuito: io consiglio la distribuzione Fedora )e scaricarsi wxWindows per compilare i programmi proposti o ancora meglio crearne di nuovi. Nel sito, oltre a due articoli ai quali tengo particolarmente, uno sulla notazione Polacca postfissa e l'altro sulla compressione digitale di Huffman , c'è o ci saranno altre cose che mi vengono in mente o che avevo in mente e ho trovato da poco il tempo per farle o le farò... Insomma questo è come un "brodo biologico primordiale"... AVVISO: Per il fatto che questi sono articoli e programmi fatti solo nel tempo libero, quindi ci dedico poco tempo, proprio per questo motivo possono presentare diversi bug, errori, imprecisioni o anche inefficienze nei calcoli, ottimizzazioni non previste... Si potrebbe dire - "per quello che costano...", è vero, però chiaramente mi dispiace se un mio programma non dovesse dare il risultato che ci si attende. Tuttavia, il fatto che questo sito è nato soltanto dalla passione mia e della mia ragazza per i computer e lo mandiamo avanti solo noi e nei ritagli di tempo (di solito per le ferie di agosto), spero vi induca ad essere indulgenti quando trovate errori, imprecisioni o bug (la vostra segnalazione a tal proposito sarà gradita). Devo però DECLINARE ogni responsabilità per errori dovuti alle procedure presenti nei miei software! Comunque non tutto quello cha nasce male finisce peggio... C'è comunque un listato e magari sarai proprio tu a migliorarlo. Al momento sono più le idee che le cose che effettivamente ci sono... però con il tempo... avrò il piacere di farle. Questo vorrebbe essere il mio (modesto) contributo alla nobile causa dell’open source. |