Questa affermazione non mi ha mai convinto più di tanto ma sembra che sia entrata nella cultura popolare dei programmatori, almeno della parte che usa Python.
Io mi sto trovando male con Python, e non mi sento più produttivo, di seguito vi racconto una delle mie ultime esperienze con Python e che dovrebbe farvi capire quali sono le mie perplessità riguardo a questa teoria della maggiore produttività.
Sono conscio del fatto che potrei non essere produttivo perché non lo conosco abbastanza bene, oppure perché conosco troppo bene il Java. Il problema è: quanto studio prima di diventare "produttivi" in Python?
Personalizzare la classe OptionParser. La classe optparse.OptionParser della libreria standard di python aiuta ad implementare in maniera semplice un'interfaccia a linea di comando.
La documentazione su http://www.python.org/doc/2.5.2/lib/module-optparse.html spiega come utilizzare la classe nel caso più semplice.
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
OptionParser è configurabile. Per esempio è possibile specificare un oggetto formatter diverso da quello di default per avere maggiore controllo sul formato del messaggio di help.
La signature del costruttore di OptionFormatter è la seguente:
class OptionParser (OptionContainer):
def __init__(self,
usage=None,
option_list=None,
option_class=Option,
version=None,
conflict_handler="error",
description=None,
formatter=None,
add_help_option=True,
prog=None,
epilog=None):
Per cui per utilizzare un oggetto formatter diverso da quello predefinito basterebbe fare:
from optparse import OptionParser
parser = OptionParser(formatter=MyFormatter())
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
Ma rimane il problema: come costruisco la classe MyFormatter? Quali metodi
deve implementare? La documentazione del costruttore di OptionParser non ci
aiuta: non c'è! La signature del metodo non ci aiuta: in Python non è richiesto
e non si usa specificare l'interfaccia che un oggetto in input deve
implementare. Come faccio a disegnare la mia implementazione di Formatter se non
esiste una specifica dell'interfaccia?
Perché dicono che il python è più produttivo? Dicono che Python è più produttivo "perché scrivi meno codice". E' questo il codice che si risparmia di scrivere? Lo scrittore di OptionParser ha risparmiato due secondi ha scrivere il nome dell'interfaccia nella signature del metodo, bene. Io quanto tempo devo perdere per capire quali sono i metodi che devo implementare per scrivere un Formatter? Per andarmi a rivedere il codice sorgente della classe OptionParser e le altre classi del modulo optparse?