|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
riflessioni personali: organizzazione e metodi di lavoro
io dovrei ringraziare fek per varie cose che ho imparato da lui, sia insegnatemi esplicitamente che implicitamente.
ricordo che in una vecchia discussione si parlava dei metodi di lavoro che insegnano in genere alle università, in particolare di UML e di come questo linguaggio sia utile a formalizzare il funzionamento del software che si vuole creare, fase progettuale secondo molti assolutamente essenziale e da risolversi prima della stesura di qualsiasi riga codice; io sono appena all'inizio secondo anno, ma già vedo benissimo il tipo di metodo che ci vogliono inculcare nella testa all'università. fek in quella discussione intervenne in un modo che mi piacque molto (adoro quando si scopre che i prof dicono cavolate ![]() ![]() ![]() ![]() 1) una semplice proporzione: Microsoft Word sta al numero di persone che l'hanno creato (che saranno svariate decine, probabilmente centinaia) come x sta a una sola persona: quanto è grande x? ![]() 2) la pigrizia: a volte capita che una sola persona si scoccia di fare il programma che aveva inizialmente pensato, perciò semplicemente lo interrompe senza finirlo e non arriva a nulla di concreto; al contrario nelle aziende il lavoro è lavoro, e sei obbligato a farlo. secondariamente una ragione percui il metodo che ci insegna fek è migliore è che evidentemente ha ragione lui (fek) quando dice che nessuno conosce la soluzione finale fin dall'inizio, ne' il programmatore ne' il "customer" (questo fa parte della terminologia che usiamo nel team del progetto Diamonds ![]() ora una parentesi: una cosa che mi chiedo è come si fa in una grande azienda a dimostrare tutto questo? per quali motivi una grande azienda può arrivare a decidere di procedere by refactoring e di abbandonare il suo caro UML? dove stanno i numeri? il giudizio empirico di 71104 e le prediche di fek non bastano: le aziende ragionano a soldi e a numeri. sicchè mi piacerebbe anzitutto sapere questa cosa, chiusa parentesi. ora, qualcuno ha mai visto il film "Scoprendo Forrester"? be', per citarlo, il mio concetto di programmare non è pensare, è programmare; questa è la mia filosofia, la quale sembra sposarsi perfettamente col metodo di lavoro che ci insegna fek. ![]() a quanto pare secondo la libera interpretazione di un regista era anche il metodo di un famoso scrittore inglese ![]() ![]() ![]() MA (c'è un ma) è possibile che in alcuni casi in realtà il metodo di iniziare a scrivere codice solo *dopo* aver progettato *tutto* si riveli più efficiente dell'altro? è possibile che in alcuni casi si abbia fin dall'inizio un'idea estremamente precisa della soluzione finale (possibile in effetti), e che aspetti ancora ignoti si possano chiarire in futuro senza il minimo ritardo nello sviluppo del lavoro? mi pongo questa domanda perché lavorando nel Night Sun Network oggi io e un membro dello staff abbiamo capito che dobbiamo darci una metodologia di lavoro più precisa e razionalmente scandita, e che dobbiamo stabilire delle timelines, anche approssimative (o almeno, quest'ultima cosa era quello che ho pensato io, ma l'altro tizio non so se ci è arrivato ancora ![]() dunque abbiamo iniziato a scrivere un txt in questo modo: lui ha scritto un primo abbozzo di quella che poteva essere una scaletta di lavoro; non aveva restrizioni di alcun tipo, ha semplicemente scritto qualsiasi cosa che poteva essere utilizzata come scansione del proprio lavoro; siccome il lavoro a cui mi riferisco è un software che bisogna realizzare per il network, si da il caso che il tizio abbia scritto una scaletta tipo gerarchica delle varie funzionalità di questo software; bene. il passo successivo era che io avrei dovuto perfezionare il txt e ripassarglielo; poi lui avrebbe dovuto riperfezionarlo e ripassarmelo, e così via. ebbene siamo giunti a qualcosa; anzi per l'esattezza siamo giunti a due cose ESTREMAMENTE diverse: per farla breve posso dirvi che io ho usato un metodo un po' alla fek, ed ero sul punto di definire delle timelines, mentre lui è partito in quarta andandoci giù non proprio di UML ma di schemi concettuali su come funzionerà il software (in altre parole ha usato un metodo che assomiglia molto a quello delle università e dell'UML). ora ho osservato la seguente cosa: lui ha avuto una ispirazione, e le ispirazioni sono sempre utilissime perché estremamente produttive (dico sul serio); è estremamente probabile che il suo metodo funzioni, mentre se lui avesse usato il mio probabilmente la cosa sarebbe stata controproducente perché lui non ci si capacitava: non gli era congeniale e non gli ha suggerito nessuna ispirazione. molto probabilmente riuscirà ad essere più produttivo procedendo come insegnano i miei prof (doh -.-' odio quando si scopre che i prof dicono cose giuste) anziché come insegna fek; come è possibile tutto ciò? ho pensato che tutto questo potesse costituire uno spunto per una discussione interessante (e nessuno risponde ![]() PS: scusate la lunghezza del post e scusate se sono stato prolisso ![]() |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
aggiungo una possibile spiegazione che sono riuscito a darmi all'ultimo quesito del precedente post: io penso che in effetti qualsiasi metodologia vada bene, purché sia basata su un criterio razionale.
quando si progetta un metodo di lavoro l'obiettivo primario dovrebbe essere la velocità e la produttività: bisogna agire il meno possibile producendo il più possibile, e questo vale sia per il pensare sia per lo scrivere righe di codice (soprattutto per la seconda però). se il metodo di lavoro che si è progettato si basa su un criterio razionale e corretto a mio parere il metodo può essere molto produttivo. perché allora nelle aziende UML non si usa (o comunque non si usa all'inizio del lavoro)? premesso che non so se veramente nessuno lo usa, magari non lo usano solo alla LionHead e solo per certi lavori ![]() ![]() ![]() more likely un'azienda di grosse dimensioni impegnata in un grande progetto preferirà fare centinaia degli spikes di fek per vedere che possibilità ha, poi inizierà a porsi i primi rudimentali obiettivi, inizierà a scrivere tonnellate di codice, e man mano gli obiettivi si perfezioneranno e raffineranno fino a raggiungere la soluzione finale con un rischio quasi nullo (perché purtroppo quello c'è sempre) di finire nel costoso vicolo cieco; dico che quello c'è sempre perché gli spikes per quanti siano purtroppo non possono prevedere ogni tipo di imprevisto: noi ad esempio in Diamonds abbiamo appena scoperto che le librerie che usiamo per interfacciare Java con OpenGL non accettano textures le cui dimensioni non siano potenze di due; in caso contrario parte una simpaticissima eccezione. tutto questo mi suggerisce una situazione un po' diversa: che avremmo fatto se non fossimo riusciti a scoprire il motivo di quella eccezione, o se addirittura il motivo fosse stato un vero e proprio bug di qualche libreria??? fortunatamente avevamo già pronti gli spikes (fatti da me ![]() c'è da dire che più grosso fosse stato il problema incontrato, più sarebbe stato improbabile incontrarlo (caso estremo: hardware failure che si verifica in tutti i modelli di schede grafiche ATI e che impedisce solo a noi di realizzare il videogioco perché nessun altro se n'è mai accorto; dire che è impossibile è dir poco ![]() Ultima modifica di 71104 : 14-10-2005 alle 01:14. |
![]() |
![]() |
![]() |
#3 | ||||
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
![]() Quote:
Quote:
Quote:
![]() ![]() ps: ma quante volte hai scritto "fek" in questo messaggio ? ![]() ciao ![]() |
||||
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
Innanzitutto è meglio ribadire che UML != progettazione. Detto questo, la giusta via è anche in questo caso nel mezzo: se il dominio del problema riesce a stare nella testa di una singola persona, questa riuscirà con qualsiasi metodo a lui più congeniale a venirne a capo, ma non appena si aggiunge un'altra persona al team le cose cambiano. Oltre al problema del 'mi metto a pensarci ad occhi chiusi, butto giù qualcosa su carta o scrivo direttamente il codice', sorge il problema della comunicazione fra gli elementi del team. Personalmente è il problema più costoso e difficile da risolvere. Senza poi dimenticare l'aspetto manutenibilità: una buona documentazione a tutti i livelli è essenziale in questi casi, altrimenti si finisce per metterci meno a riscrivere il codice tutto da capo piuttosto che cercare di capire il perchè e il percome del suo (non) funzionamento...
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Dec 2003
Messaggi: 217
|
Qualche domanda
![]() ![]() UML è il fatto di mettersi prima su carta e buttare giu tutto il progetto (funzionamento, grafici, diagrammi, etc) per poi passare al codice vero e proprio? A quanto ho capito in diamonds lavorate a task, ognuno si occupa di una piccola parte basata su dei test, quando è finita (e funzionante) si cerca di sistemare un pò le cose (proprie o altrui) e poi si continua, ho capito bene? I task come si fanno a definire dall'inizio? Cioè, sotto un progetto di game 2d ok, devo partire dal fatto di creare una finestra, caricare le basi, etc etc, ma per esempio per un'applicazione come si potrebbe iniziare? E ancora, questo stile dei test è applicabile anche per programmi e quindi non giochi? Come ci si basa per iniziare da un test? Il problema è scriverlo, poi il codice si implementa in modo che non fallisca (penso). Ci sono delle regole da seguire per scriverli? Cos'è uno spike? ![]() ![]() Molto interessante questo metodo, e spero di capirci qualcosa... ![]() Per ora è tutto (non uccidetemi ![]() |
![]() |
![]() |
![]() |
#6 | ||||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
1) versione iniziale a) progettazione di primo livello (livello di dettaglio basso; abbozzo di idee insomma :)) b) strutturazione e definizione delle priorità (secondo il criterio make it look good, make it work) c) implementazione delle varie funzionalità I) progettazione di secondo livello relativamente alla funzionalità scelta (alto livello di dettaglio, ma solo relativamente alla funzionalità prioritaria corrente) II) implementazione della funzionalità 2) aggiunta di una nuova funzionalità a) progettazione di una strategia di refactoring (spesso questa fase è considerata implicita, cioè la si fa semplicemente "a mente") b) preparazione del codice alla nuova aggiunta: refactoring e adattamento c) implementazione della caratteristica 3) aggiunta di un'altra funzionalità a) ecc. ... NB: i punti 2a e 2b vanno minimizzati il più possibile. come puoi leggere nella scaletta, le priorità andavano stabilite in base ad un criterio "first make it look good, then make it work" ![]() nel senso che nello stabilire le priorità, ovunque possibile avremmo dovuto dare la precedenza ad aspetti esteriori appetibili dalla nostra utenza. Quote:
Quote:
![]() Quote:
![]() |
||||
![]() |
![]() |
![]() |
#7 | |||||||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
![]() |
|||||||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
IMHO anche "il metodo fek" necessita di progettazione... Prima una progettazione d'insieme: vengono individuate le parti topiche del progetto, scelte gli strumenti e le metodologie di programmazione...
Poi la progettazione viene svolta ogni qual volta si scrive una storia e un task... Di fatto è una progettazione continua...e che tiene conto dei problemi che ogni volta si presentano... Ma sono problemi concreti, che la maggior parte delle volte potrebbero non presentarsi durante la progettazione preventiva dei canoni classici dell'ingegneria del software...e di fatto, appena si presentano (perchè bene o male in UML non si potrà mai generare TUTTO il codice) si dovrà ritornare a progettare, magari a sconvolgere l'intero progetto buttando via decine di mesi uomo di programmazione... Stessa cosa per i bug...nella progettazione classica un bug prevede un ritorno alla fase di progettazione e di testing... Con il test driven development un bug corrispondente a trovare un test che fallisce se il bug è presente...dopo si scrive il codice che non fa fallire quel test... Ecco...siamo pronti... Il nostro programma non ha bisogno di ulteriori test (sempre che vengano passati tutti i test)...visto che ci sono sempre gli altri test a garantirmi che la mia correzione non ha introdotto ulteriori bug già testati... L'unico difetto che si può inputare al "metodo fek" è che il capo del progetto deve essere una persona veramente competente...se questo si verifica il metodo è perfetto... In una progettazione di team (ognuno progetta interamente un componente rispettando delle specifiche) se non sono tutti competenti allo stesso modo si avrà uno sbilanciamento che porterà a perdere moooolto tempo... 71104 : hai ancora visto la progettazione con UML all'uni ? Guarda che arrivi quasi a schematizzare il codice che scrivi...ad un dettaglio che forse non ti immagini... In pratica programmi prima in UML e poi il programma ti genera il codice ![]() Ultima modifica di cionci : 14-10-2005 alle 19:30. |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Dec 2003
Messaggi: 217
|
Uhm, forse è che sono abituato a fare direttamente in maniera visuale per inserire qualcosa (lo sò, è un metodo sbagliato, infatti pian piano sto studiando anche per fare tutto solo da codice)
Però mi sfugge una cosa, qual'è proprio il modo per creare dei test? Cioè, devo pensare e vedere nella palla di cristallo che quel determinato metodo avrà determinati problemi che devo prevedere oppure esiste un modo per creare/pensare in maniera più semplice un test? Se ora ne dovessi scrivere uno non saprei nemmeno da che parte iniziare ![]() ![]() Tornando all'esempio del programma di videoscrittura, quali potrebbero essere dei test iniziali? fek/vicius mostrateci i vostri arcani poteri... ![]() Ultima modifica di Giakino : 14-10-2005 alle 19:52. |
![]() |
![]() |
![]() |
#10 | ||
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
![]() Qualsiasi metedologia va bene se le persone sono sufficientemente capaci di portare a termine il progetto (e quindi soddisfare il cliente, e portare a casa la pagnotta) 'nonostante' questa. La scopo dei metodi e' di permettere alle persone di dare il meglio, e a seconda dei contesti, ma se chi deve fare il lavoro non e' capace c'e' poco da fare.... Per una analisi relativa all'impatto delle persone vs metodi, puoi dare un occhio a questo articolo: http://alistair.cockburn.us/crystal/...nonlinear.html E' stato scritto dell'autore del libro "Agile Software Development" (http://www.amazon.com/exec/obidos/tg...ooks&n=507846), che tratta proprio del problema di come "costruire" una metodologia, in un modo magari un po teorico ed accademico, ma sicuramente ricco di spunti interessanti. Quote:
L'uso di metodi agili demolisce il mito del programmatore introverso e non comunicativo e richiede un affinamento delle skills di comunicazione, presentazione, mediazione e interazione personale. Proprio per quest' ultimo motivo penso che il progetto che state affrontando sia un esperienza utile ed interessante. Ciao e Buon lavoro ![]()
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
||
![]() |
![]() |
![]() |
#11 | |
Junior Member
Iscritto dal: Oct 2005
Città: Cosenza
Messaggi: 10
|
Quote:
Io invidio chi ci riesce,e stai pur certo che di "luminari" del settore che riescono ad utilizzare extreme programming ce ne sono,ma sono davvero mosche bianche. Non penso ci si possa illudere di fare dei progetti utilizzando metodologie agili tranne se non si e' sotto determinate condizioni. Forse meglio chiarirci sul "cosa" intendiamo per metodologie agili; Un team coordinato da un esperto con la E maiuscola. Un team che enfatizza il codice alle "scartoffie" di UML. Un team che a fine giornata deve ottenere dei "build" eseguibili. Un team che include il customer,in modo da proporgli ogni build realizzato per ottenere un feedback istantaneo. Un team che fa uso di pair programming avvidendando programmatori ogni due ore in quanto si e' visto che facendo cosi aumenta la qualita' del codice anche se ne risente il tempo di realizzazione. Ma questo tipo di team impone anche : - Metafora condivisa,ossia descrivere a tutti il progetto -Collettivizzazione del codice,ogni persona del team interviene sul codice scritto da altri -Integrazioni di codice e test frequenti. E qui ti sorge spontanea la domanda.Ma e' cosi facile creare un team di sviluppo che riesca ad intervenire sul codice scritto da altri e a sviluppare lo stesso progetto software senza fare uso di "scartoffie UML" che descrivano un percorso guida? Non e' facile,sicuramente puo' esistere, ma trovare delle persone "affiatate" che riescano a realizzare un tipo di progettazione software di questo tipo e' abbastanza difficile da realizzare. Sicuramente se fossi una azienda e avessi un team del genere,me lo terrei abbastanza stretto ![]() P.s. Se ti interessa l'argomento c'e' questo libro Giancarlo Succi, Michele Marchesi, Extreme Programming Examined |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ozn ZzZ: guarda la sottosezione...stiamo proprio facendo un gioco tramite XP + TDD
![]() |
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
la documentazione in generale è un discorso a parte, quella serve sempre; noi (io
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Poi se non sbaglio anche fek è d'accordo ad utilizzare UML per generare la documentazione alla fine dello sviluppo...e meno male ci sono strumenti che generano tutto in maniera automatica...
|
![]() |
![]() |
![]() |
#15 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
*alla fine* però
![]() dopo che si sa con precisione che cosa si è fatto ![]() |
![]() |
![]() |
![]() |
#16 | |
Junior Member
Iscritto dal: Oct 2005
Città: Cosenza
Messaggi: 10
|
Quote:
Che utilita' avrebbe l'uso di UML a fine progetto? Alla fine la potenzialita' di un linguaggio di modellazione come UML sta proprio nel rendere visibile lo schema concettuale che ogni progettista si fa in testa.Con il livello di dettaglio che riesce a raggiungere nei diagrammi di classi e di sequenza si raggiungono livelli di precisione notevoli. La cosa che piu' mi ha sorpreso di uml e' la possibilita' di definire automi a stati finiti e le varie interazioni tra oggetti.Nulla e' lasciato al caso e questo tutto prima di scrivere una sola linea di codice Io penso sia un must per realizzare prodotti solidi.Ma ovviamente e' una mia opinione ![]() Ultima modifica di Ozn ZzZ : 15-10-2005 alle 11:16. |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#18 | |
Junior Member
Iscritto dal: Oct 2005
Città: Cosenza
Messaggi: 10
|
Quote:
![]() Come si fa a fare un software per la gestione di un magazzino dell'iperstanda o un virtual store senza fare a monte uno studio concettuale.Il rischio di perdersi per strada penso sia elevatissimo.Si rischia di accorgersi solo alla fine dell'inconsistenza del proprio prodotto |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
La stessa cosa può avvenire in fase di manutenzione del codice... Nota che progettando il codice con UML bisogna ritornare alla fase di progettazione ogni volta che c'è anche un piccolo bug (ancora di più se il livello di dettaglio è molto alto)...e dopo bisogna nuovamente fare tutta la trafila del testing... Tutto tempo perso...anche perchè magari correggendo il bug abbiamo reinserito un bug che avevamo corretto tempo fa !!! Con il TDD non è possibile reinserire bug già corretti precedentemente perchè per ogni bug trovato ci deve essere un test che fallisce se questo viene reintrodotto... |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:48.