Experimentalia

Appunti raminghi

Sapete programmare?

with 3 comments

In questi giorni, complici le vacanze sto recuperando il tempo perduto ed esplorando tutti i bookmark che mi sono lasciato indietro in questi mesi autunnali. Capita anche a voi di leggere un post che vi piace e salvarne l’url ripromettendovi di non aspettare le calende greche per leggere altri interventi dallo stesso sito? Si, lo ammetto prima che me lo facciate notare, a volte non ho neanche il tempo di leggerlo tutto il post.

Per farla breve, stasera stavo curiosando su codinghorror e mi sono imbattuto in un post intitolato Perché i programmatori non sanno programmare?

I più attenti si accorgeranno che non si tratta di un post freschissimo, data febbraio 2007, ma il contenuto mi ha lasciato interdetto.  La stragrande maggioranza dei candidati ad un posto di programmatore non è in grado di risolvere questo semplice quesito:

Scrivi un programma che stampa i numeri da 1 a 100 con alcune eccezioni. Se il numero è multiplo di 3 invece di stamparne il valore il programma deve stampare Fizz, per i multipli di 5 bisogna stampare Buzz; i numeri multipli di 3 e 5 contemporaneamente devono essere sostituiti dalla parola FizzBuzz.

Il programma è obiettivamente semplice e non dovrebbe impegnare un programmatore (neanche troppo bravo, aggiungo io) per poco più che un paio di minuti.

Ammetto che la situazione non è rosea, è difficile trovare bravi programmatori, ma non penso che risolvere un problema del genere di quello proposto significhi essere un bravo programmatore, al più signifca che si padroneggiano i costrutti base del linguaggio, sarebbe come pensare di potersi paragonare a Leopardi perché si riesce a non sbagliare la coniugazione dei verbi.

Inutile aggiungere che, nonostante le buone intenzioni, alla fine il codice l’ho scritto, in javascript e con il cronometro in mano. E che mi sto ancora chiedendo perché l’ho fatto

Che volete farci, sono un programmatore compulsivo. Talmente compulsivo che ho scritto questo post senza neanche controllare se c’era già qualcosa di simile in rete, ed ormai mi dispiace cestinarlo.

Written by Eineki

dicembre 27, 2008 a 4:06 am

Pubblicato su linguaggi, Varie ed eventuali

3 Risposte

Subscribe to comments with RSS.

  1. Bhè in effetti è un programma abbastanza semplice… ma c’ è sempre chi ha qualche problema; ad esempio io studio al primo anno di Informatica e mi accorgo di non saper programmare in linguaggio funzionale😦 e un esercizio del genere in CAML mi darebbe un pò di problemi

    Giacomo Marchetti

    dicembre 27, 2008 at 12:16 pm

  2. In ocaml il programma sarebbe più o meno così:

    let rec list a b = if a > b then [] else a :: list (a+1) b;;

    let rec fizzbuzz a =
    if a mod 15 = 0 then print_endline “FizzBuzz”
    else if a mod 5 = 0 then print_endline “Buzz”
    else if a mod 3 = 0 then print_endline “Fizz”
    else print_endline (string_of_int a)
    ;;

    List.map fizzbuzz (list 1 100);;

    Ho impiegato quasi mezzora a scriverlo perché non conoscevo il linguaggio ed ho dovuto impararlo mentre scrivevo il codice. Ovviamente conosco la programmazione funzionale (scheme).

    Parto con una premessa per farti la domanda che mi sta veramente a cuore, ovviamente sia chiaro che non c’è nessuna vena polemica.

    Sei al primo anno e se non vado errato, a meno di riforme, i primi corsi dell’anno dovrebbero essere già finiti. E’ molto improbabile che tu abbia studiato caml alle superiori e, anche in questo caso, dovresti essere in grado di risolvere un problema così semplice con un minimo di applicazione.

    Se il corso non ti ha inculcato il concetto che nel paradigma funzionale ciclo si legge ricorsione, al più su una lista, allora penso che ci sia qualcosa che non va.

    Secondo te cosa non ha funzionato? La scelta del linguaggio, l’approccio esposizione, la tempistica.
    Avevi delle conoscenze pregresse di altri linguaggi che ti hanno frenato? Ti hanno fatto pensare che i
    linguaggi funzionali non siano altro che interessanti strumenti didattici che lasciano il tempo che trovano e quindi non ti ci sei applicato abbastanza?

    Eineki

    eineki

    dicembre 27, 2008 at 16:05 pm

  3. Che bello, io ho provato a farlo in python e sembra funzionare:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #Scrivi un programma che stampa i numeri da 1 a 100
    #con alcune eccezioni. Se il numero è multiplo di 3
    #invece di stamparne il valore il programma deve stampare Fizz,
    #per i multipli di 5 bisogna stampare Buzz; i numeri multipli di
    #3 e 5 contemporaneamente devono essere sostituiti dalla parola FizzBuzz.
    numeri=range(101)
    del numeri[0]
    for i in numeri:
    multiplo3=”false”
    multiplo5=”false”
    if i%3==0:
    multiplo3=”true”
    if i%5==0:
    multiplo5=”true”
    if multiplo3==”true”:
    if multiplo5==”true”:
    print “FizzBuzz”
    else:
    print “Fizz”
    else:
    if multiplo5==”true”:
    print “Buzz”
    else:
    print i
    Tempo totale: 7 minuti (dalla creazione del file alla sua prima esecuzione con successo)

    comunque hai ragione tu, non è niente di straordinario, essere bravi programmatore è tutt’altra cosa, ma se è vero che la maggioranza dei candidati non è in grado di risolverlo allora siamo proprio messi male……..

    urturino

    dicembre 28, 2008 at 9:53 am


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: