[Python] Python vs UML

Enrico Franchi enrico.franchi a gmail.com
Gio 7 Feb 2008 11:33:05 CET


On Feb 6, 2008, at 5:21 PM, Java wrote:

>> Non mi pare di avere letto alcuna di queste mail.
>> Ad ogni modo sono sicuro che portando anche la tua esperienza non  
>> puoi
>> che alzare il livello della discussione.
>>
> La mia esperienza è quella espressa all'inizio.

Io avevo chiesto anche un'altra cosa, in effetti.

> Non esiste dire che l'UML fa schifo. Come non ha senso dire Java fa  
> schifo, Perl fa schifo,
> il minestrone fa schifo.

E' una posizione 'strana'. In primo luogo sono perfettamente convinto  
che qualcuno che lavora nell'IT abbia tutto il diritto di farsi la sua  
idea su una data tecnologia/metodologia. Questo a prescindere dal  
fatto che abbia o meno ragione.

Non solo: qualcuno che lavora nell'IT ha spesso il *dovere* di farsi  
un'idea su una data tecnologia. Che può anche essere 'fa schifo'. Non  
è che tutto deve essere 'buono' o 'buonino'. Poi possiamo intenderci  
sulla terminologia; forse 'fa schifo suona male', ma non è che usando  
giri di parole si cambi la realtà dei fatti. Si, certo, forse si è  
meno estremi e tutto.

Perchè vedi in questo relativismo in cui il 'fa schifo' non esiste,  
non può esistere neppure il 'è fatto bene'. Per cui sospendiamo il  
giudizio e... cosa decidiamo?

Forse vogliamo contestualizzare tutto: non diciamo che Java fa schifo;  
diciamo che richiede hardware classe enterprise[0] per fare quasi  
qualunque cosa non banale e che è circa 3 volte meno produttivo di  
Ruby/Python? Wow, così suona molto più pro. Ma se leggi fra le righe  
cosa ho detto? Che fa schifo. Nota, poi posso anche sbagliare, ma sono  
semplicemente stato esplicito sulle ragioni per cui non mi piace  
(esempio), invece che dare la versione corta.

----
[0]: no, non è il vecchio discorso del 'è lento', è il discorso 'ha  
una gestione della ram allucinante'.

> Come già detto ci sono diversi campi di
> applicazione. Personalmente l'ho usato solo *una* volta, e con  
> profitto,
> durante lo svolgimento del tirocinio. Tutte le altre volte (siti web e
> robe del genere) mi sono fatto due pallini a penne in un foglio e ho
> risolto egregiamente.

E quindi? Ho anche scritto una piccola libc in asm, ma non per questo  
direi che è sensato farlo (a meno che -- apresi dibattito su embedded  
etc etc etc).

> Qualuno ha fatto notare che "If the implementation is hard to explain,
> it's a bad idea;". Ma purtroppo la mondo esistono cose complicate da
> spiegare a voce e/o con codice vario. Se devo fare un'applicazione che
> regola il braccio meccanico che esegue un'operazione laser sugli  
> occhi,
> l'UML serve.

Ugh? Ma qui siamo all'assurdo! Fai dell'UML per il codice praticamente  
macchina del controller del braccio e tutto?
Quello è un tipico caso in cui UML serve a *molto* poco; tipicamente  
non starai nemmeno usando un linguaggio ad oggetti, figuriamoci.

Non so chi ti ha dato l'idea del 'codice critico -> UML', ma questa è  
*totalmente* sbagliata, a prescindere da quello che pensi di UML. UML  
ha un'altra funzione. E' un linguaggio di *modellazione*: quando hai  
un problema che *non* richiede modellizzazione, *sicuramente* è lo  
strumento sbagliato.

E scrivere il codice che sopra dicevi ha bisogno di verifiche formali,  
test molto accurati, whatever. Non di 'modellazione'. Anche perchè  
quello che fa il braccio, dipende anche e in buona parte  
dall'hardware, il come lo fa, etc etc etc.


> Prima di tutto potrei non sapere che linguaggio di programmazione  
> usare:
>
> Capo:  "Hey tu? Ci serve un programma che permetta di utilizzare  
> questo
> fantastico dispositivo "embeddato" all'interno di un vibratore che
> regoli la frequanza degli impulsi."

Ma mi chiedo che accidenti di esempi fai. Questa è roba che è grazia  
ricevuta se ti lasciano usare il C.
Sempre ammesso che non sia fatto direttamente con una rete logica +  
eventualmente un po' di microcodice.

Sempre tipicamente, questa roba la modelli in verilog etc

> Capo: "Col cazzo, eccoti gli schemini UML. Tu devi estendere la classe
> "Vibro" implementando qualcosa per la regolazione dell'intensità"

ROTFL. Immagino ci sarà la manovella che chiama setIntensity. Non ho  
parole.

> Quindi mooolto prima che inizi l'implementazione, tutti i diagrammi
> vengo analizzati da diverse persone, in diretto rapporto con il
> commitente e con esperti del settore, ad esempio medici e ingegneri
> biomedici. Perciò il progetto subirà  svariate modifiche. Iniziare a
> scrivere codice ora, sarebbe una cosa piuttosto noiosa. Dato che molto
> di esso verrà cancellato e/o profondamente modificato.
>
> Poi supponiamo che questo software si faccia. E che il braccio  
> meccanico
> regoli male l'intensità del laser decapitando il paziente e  
> distruggendo
> l'intera ala ovest dell'ospedale. Di chi è la colpa?  Si prendono
> specifiche, progetto UML e implementazione. E si controlla se il
> progetto rispetta le specifiche, e se l'implementazione rispetta il
> progetto.

Ah. Ed è necessario l'UML. Faccio notare che se ti schianta una roba  
del genere, è per i *parametri* e l'*intensità*, non per il design.
Ammesso che ci sia design.

Che so, hai presente il software per avionica? (tipo quello che fa  
abbattere l'arianne 5?).

Ti assicuro che è *molto* diverso dal codice che vedi normalmente. E  
tipicamente hanno procedure iper-standardizzate e *molto* più strette  
di UP/RUP e whatever. D'altra parte la questione 'costi' è totalmente  
differente. E' un modo piuttosto differente *sia* dal software  
applicativo 'desktop' sia dalle infrastrutture di rete (dove la  
sicurezza dall'esterno è un problema molto più rilevante), sia da tool  
specifici (ottimizzatori di query, database systems, ottimizzatori di  
compilatori), sia da oggetti come il kernel di un sistema operativo  
general purpose.



More information about the Python mailing list