Il miglior editor di testo in assoluto (per me)

Negli ultimi tempi ho avuto voglia di studiare più da vicino Ruby On Rails, seguendo in particolare questi tutorial: http://www.youtube.com/user/RubyOnRailsVideos/featured.

Ho avuto modo quindi di conoscere l’editor usato in questi video: Sublime Text 2. Si tratta di un editor multipiattaforma (quindi sia linux sia Windows) molto piacevole alla vista che offre tutte le feature che desideravo (autocompletamento per molti linguaggi, su tutte) e molte altre che non sapevo di desiderare. Non è gratuito, ma la versione trial è illimitata, e comunque i suoi 70 dollari li vale tutti (licenza illimitata: quante copie si vuole, su tutte le piattaforme).

Sono davvero dispiaciuto di non averlo incontrato prima: mi sarei risparmiato ore a cercare di far funzionare IDE come Eclipse.

Annunci
Il miglior editor di testo in assoluto (per me)

Programmazione Cargo-Cult, o “per regali”

Bazzicando per la rete sono incappato in questo post, dal blog di Eric Lippert, che parla della cosidetta “programmazione Cargo-Cult”, altrimenti detta in italiano “programmazione per regali“.

Si tratta in sostanza della programmazione “copia-incolla”, che risolve il problema momentaneamente ma non dà una piena comprensione di quello che il codice fa. Il consiglio che viene dato è quello di capire il codice, non solo di compilarlo.

C’è tutta una serie di post dedicata a questo argomento sul blog in questione, che descrivono il “tipico programmatore”: Mort (quello business-oriented, che pensa a solo al risultato e può ricorrere alla programmazione per regali), Elvis (il programmatore professionista, che non può assolutamente ricorrere a questo tipo di programmazione, in quanto verrebbe subito licenziato) e Einstein (il programmatore onnipotente e onnisciente).

Il termine “Cargo-Cult” indica un fenomeno reso famoso da Richard Feynman, per cui alcuni indigeni alla fine della seconda guerra mondiale iniziarono a venerare gli aerei perchè portavano cibo e altri beni. Alla fine della guerra gli aerei smisero di arrivare, e per richiamarli gli indigeni si mettevano lì con delle bandierine, come se fossero state le bandierine a “evocare” questi “dei”. Sul sito italiano di Wikipedia sono disponibili più dettagli.

Programmazione Cargo-Cult, o “per regali”

Gödel, Escher, Bach. Ovvero come far sfigurare Eliot e Joyce.

Ho iniziato recentemente a leggere questo libro di Douglas Hofstadter, vincitore tra l’altro del premio Pulitzer per questa stessa opera, dopo aver visto quasi per caso il corso appositamente dedicato sul sito MIT Opencourseware.

L’argomento del libro mi ha affascinato fin da subito: la ricerca dell’intelligenza artificiale, come una coscienza possa emergere da un insieme di atomi apparentemente privi di collegamento. Nel condurre questa ricerca, l’autore indaga alcuni tra i temi più interessanti della matematica e dell’informatica moderna: dal teorema di Godel alla macchina di Turing, passando per la ricorsione. Condisce tutto con una spruzzata di musica e arte (rispettivamente Bach ed Escher) che non appesantisce l’esposizione, ma sembra anzi amalgamarsi alla perfezione.

Inutile dire che la difficoltà media di comprensione è elevatissima: anche con l’uso di metafore, semplificazioni, esemplificazioni e addirittura dialoghi che hanno un che di platonico, i concetti spiegati sono incredibilmente complessi. Il dialogo “Piccolo labirinto armonico” riuscirebbe a far girare la testa anche al più sistematico dei pensatori razionali, in quanto mette a dura prova le capacità ricorsive della nostra mente.

Tratterò di questo libro più approfonditamente in seguito, ora invece vorrei concentrarmi su un giudizio di Martin Gardener riportato in quarta di copertina, che afferma: “La struttura di questo libro è satura di complicato contrappunto non meno dell’Ulisse di Joyce”.

Dopo essere stato costretto a studiare per anni autori come Laurence Sterne, Eliot e Joyce, posso dire che Gardener è “in torto”. Perchè in confronto a questo libro, Gente di Dublino è una storiella per depressi. In confronto ai disegni di Escher, i ghirigori di Sterne sono scarabocchi di un bambino. In confronto alla complessità di significato di quest’opera,  “The Waste Land” è un libro aperto.

Vorrei vedere i professori che in questi anni mi hanno costretto a studiare questi autori come se fossero portatori di verità rivelate, come se fossero il meglio della produzione dell’umanità, a leggere questo libro. O forse non hanno le palle per studiare abbastanza matematica da capire quest’opera d’arte e si rifugiano nell’ambiguo mondo della retorica?

Gödel, Escher, Bach. Ovvero come far sfigurare Eliot e Joyce.

Project Euler – Problema 5

Ecco la soluzione al problema 5 in Haskell:

divisibilefinoan (x, n)
|n==1 = if(x `mod` n)==0 then True else False
|otherwise = if(x `mod` n)==0 then divisibilefinoan (x, (n-1)) else False

loop n = if(divisibilefinoan (n, 20)) then n else loop (n+2)

— Ottimizzazione per far partire il loop che verifica se è divisibile fino a quel numero
— da un punto più avanzato: il numero che cerchiamo sarà sicuramente >2520 (che è multiplo
— di tutti i numeri fino a 10), comprenderà i fattori 11, 13, 17 e 19 (che sono numeri primi
— compresi tra 10 e 20) e un fattore 2 aggiuntivo (dovuto a 16, che è due alla quarta,
— mentre il due compariva al massimo con esponente 3 in otto). Praticamente equivale a
— risolverlo a mano.
result = loop (2520*11*13*17*19*2)

Il testo del problema:

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?

Project Euler – Problema 5

Project Euler – Problema 7

Riporto la soluzione al problema 7 in Haskell:

–Controlla se un numero è primo
isprime 2 = True
isprime t = if (filter (==0) (map (t`mod`)[2.. ceiling(sqrt (fromIntegral t))])==[]) then True else False

findnextprime x = if(isprime(x+1)) then x+1 else findnextprime(x+1)

addnextprime xs = [findnextprime (head xs)] ++ (xs)

milleeuno xs = if (length xs==10001) then head xs else milleeuno(addnextprime xs)

result = milleeuno [2]

Testo del problema:

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.^()

What is the 10001st prime number?^()

Project Euler – Problema 7

Project Euler – Problema 10

Riporto la soluzione al problema 10 in Haskell:

–Controlla se un numero è primo
isprime 2 = True
isprime t = if (filter (==0) (map (t`mod`)[2.. ceiling(sqrt (fromIntegral t))])==[]) then True else False

listadeiprimi = [x|x<-[3, 5..2000000], isprime x]
listaprimi = 2 : listadeiprimi
result = sum listaprimi

Il programma non è ottimizzato: è stato fatto in un paio di minuti ed è molto migliorabile.

Il testo del problema:

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

Project Euler – Problema 10

Project Euler – Problema 3

Riporto la soluzione in Haskell al terzo problema del Progetto Eulero:

n = 600851475143
–Controlla se un numero è primo
isprime 2 = True
isprime t = if (filter (==0) (map (t`mod`)[2.. ceiling(sqrt (fromIntegral t))])==[]) then True else False

— Risolve il problema
— N.B: L’algoritmo riporta solo i fattori primi, non l’esponente a cui compaiono
fattoriprimi = [x|x<-[x|x<-[2..ceiling((fromIntegral n)/2)], (n `mod` x)==0], isprime x]
result= maximum fattoriprimi

N.B: Testare il risultato può rihiedere molto tempo. Se e quando avrò tempo ottimizzerò il programma .

Ecco il testo del problema:

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

Project Euler – Problema 3