Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 3347, trackbacks - 4248

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Essere strattonati dalla keyword virtual ed Enterprise Library

Ho letto con molto, molto interesse questi post di Raffaele, Lorenzo e Marco che dicono in breve di stare attenti e di conoscere bene certi meccanismi intrinseci di .NET quando si lavora a basso livello. Memory leak, metodi virtual, handle, finestre, generazioni della garbage collection, heap, stack, intermediate language sono tutti argomenti che io reputo affascinanti ma credo anche che non si possa chiedere a tutti di avere conoscenze di questo tipo.

Da una parte viviamo in un mondo che ci spinge ad usare framework più o meno complessi capaci di eliminare problemi, o per meglio dire nascondere problemi. Da una parte Microsoft ci pubblicizza prodotti come Enterprise Library e XNA, esistono ORM capaci di farci dimenticare SQL & company. Ma allo stesso tempo ci viene richiesta una conoscenza a basso livello. Lorenzo all'ultimo workshop ha parlato di software factories, blocchi applicativi di una certa importanza che un giorno potranno incastrarsi l'uno con l'altro per fornire funzionalità ad alto livello. Esattamente come accade un po' oggi con Enterprise Library. Ma allora?

Ma allora...mi chiedo...da che parte gira il mondo? Dobbiamo pendere di più verso la conoscenza del basso livello o dell'alto livello? Non potete farmi sbavare facendomi vedere le meraviglie di WPF o di WWF, e poi d'altro canto mettermi in guardia su argomenti come la keyword virtual. Attenzione, non è Igor Damiani che dice queste cose, sto solo cercando di impersonare, di mettermi un po' dalla parte dello sviluppatore a cui non si può davvero chiedere di avere una conoscenza approfondita di cosa fa il CLR quando viene eseguito un metodo fatto in chissà quale modo.

Non per niente mi piace e mi sto studiando WPF, XAML e trovo sublimi strumenti come NHibernate che astraggono i problemi e mi semplificano la vita. Trovo assolutamente giuste le osservazioni di Raffaele e di Lorenzo, ci mancherebbe, ma mi viene in mente anche tutto quello che ho imparato leggendo Code Complete 2: non fatevi troppe paranoie mentali senza un valido motivo. Steve McConnell in molti punti del libro dice chiaramente di non preoccuparsi inizialmente di scrivere codice performante, perchè potrebbe essere fatica sprecata. Concentratevi sulle performance solo se vi rendete conto che ne avete bisogno davvero. Lavorare sulle performance vuol dire innanzitutto poterle misurare, capire che il metodo di una classe potrebbe essere molto più veloce, oppure che un altro metodo va riscritto perchè troppo esoso in termini di risorse (risorse = memoria o cpu time o handle, o decidete voi). Non è che io posso preoccuparmi di certe questioni ad ogni riga di codice che scrivo, altrimenti impazzisco, non credete? Se il cliente a cui ho consegnato un mio software mi chiama per segnalarmi problemi di stabilità, allora devo cominciare a prendere in considerazione il refactoring di certe parti del codice, analizzando per bene cosa succede, dove e perchè. Allora sì che entrano in gioco concetti importanti come quelli evidenziati nei post accennati prima. Ma fino ad allora....

Print | posted on lunedì 8 gennaio 2007 17.30 | Filed Under [ Tecnologia ]

Feedback

Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Occhio Igor, evitare il cast di un int a object per nn avere box/unbox può essere anche un'ottimizzazione e magari puoi badarci anche in un secondo momento, ma dimenticare una connessione aperta perché non si è usato un blocco using, o una qualsiasi altra risorsa unmanaged perché non è stato implementato correttamente il pattern Disposable, per quanto mi riguarda, ricadono tranquillamente nella definizione di BUG. E di solito si tratta di quelli più fastidiosi e complessi da eliminare, perché si verificano saltuariamente, di solito in produzione e non sono facilmente riproducibili.

E' vero, ci sono tanti framework che ci semplificano la vita e, come tu ben sai, io sono un accesissimo sostenitore di questi strumenti. Ma non è che per il semplice fatto che li usi possa fregarmene altamente del codice CHE SCRIVO IO.
08/01/2007 18.57 | Marco De Sanctis
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Conoscere virtual è come conoscere class...
Se non conosci class è dura usare qualsiasi cosa... se non conosci virtual meno, ma i danni sono anche peggiori...
08/01/2007 20.27 | Lorenzo Barbieri
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Igor devo concordare con Lorenzo.
08/01/2007 20.37 | Rosalba Fiore
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Concordo sul fatto che "early optimization is the root of all evil" (famosissima massima) ma non preoccuparsi per _nulla_ di ciò che si sta scrivendo equivale a scrivere codice di merda in buona parte dei casi. Quindi la differenza tra il conoscere solo i tool (oggi XNA domani QuaQuaRaQQuà) e l'ambiente sotto è tra scrivere applicazioni giocattolose ma di merda o scrivere applicazioni giocattolose ma fatte bene.
08/01/2007 20.47 | Lawrence Oluyede
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Igor... posso dirti che hai mancato il punto...
Nessuno vuole ottimizzare il bit... ma da quello a evitare di fare vaccate...
08/01/2007 20.54 | Lorenzo Barbieri
Gravatar

# Re: Essere strattonati dalla keyword virtual ed Enterprise Library

secondo me, ancora una volta, dipende soprattutto che tipo di applicazione sto sviluppando...se sto scrivendo un gestionale - torniamo sempre lì - certi dettagli a basso livello me li perdo. Lorenzo, non mi dirai che durante lo sviluppo del tuo plug-in stai lì a pensare a certi dettagli. Stessa cosa per Marco e NHibernate Domain Mapper...boh, magari sbaglio io...
ben venga se ho mancato il punto, però un po' di puzza sotto il naso francamente ce l'ho...istintivamente, diciamo...
08/01/2007 21.00 | Igor Damiani
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

quando scrivo il plug-in faccio delle scelte di design "nulle"
quando scrivo qualcos'altro dipende naturalmente da cosa devo scrivere...

ma se non sai la differenza tra virtual e non virtual, o non sai come funziona "un minimo" il GC... che cavolo di gestionale stai scrivendo...

non lamentiamoci poi...

il punto è di NON FAR PASSARE IL MESSAGGIO che basta essere dei CAPRONI per andare avanti...

ah si... l'ha detto Igor che posso scrivere il codice con il culo e andare avanti lo stesso, tanto l'ha letto su Code Complete...
Peccato che Code Complete dice un'altra cosa... su cui tutti siamo d'accordo.
Non dice però di fregarsene del design, dei bug o di tutto il resto...

P.s... nella frase "codice con il culo" mi scuso per aver usato la parola "codice"... :-D

Un altro post così e chiamo BillG in persona per levarti la Team Suite, che non te la meriti più :-P
08/01/2007 21.46 | Lorenzo Barbieri
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Igor, Igor, Igor, Igor...

mi spiace ma stavolta hai toppato :-D

Attenzione a non confondere ottimizzazione, refactoring e performance (Code Complete) con memory leak e bug vari.
Durante la stesura di goni singola riga di codice, sia esso il gestinale più figo del mondo, il motore di gestione dei sistemi si sopravvivenza dello shouttle o la più scacciona delle applicazioni, lo sviluppatore deve stare attento a tutti i possibili errori che introducono portenziali BUG che a posteriori sarebbero molto più subdoli da scovare, quindi l'introduzione del blocco using{} non è un'operazione di refactoring ma è un must da subito

Ciao!
.m
09/01/2007 2.27 | Mauro Servienti
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Su NHDM apro una parentesi a parte, perché si tratta di un progetto su cui mi sono inserito dopo che era già avviato, se janky ha scritto cagate non so :D

A parte gli scherzi, Igor... stai sicuro che nel codice che scrivo cerco sempre di seguire il più possibile quelle regole che ho imparato passando le serate a legger libri, altrimenti chi me l'avrebbe fatto fare? Poi la distrazione, l'errore, ecc.ecc. possono scappare, ma ti assicuro che, se mi accorgo che uso un oggetto Disposable, lo piazzo dentro un blocco try..finally e ne chiamo il metodo Dispose (o ancora meglio, lo metto dentro ad un blocco using). Oppure, se il mio metodo consuma membri statici, mi chiedo se può darmi problemi in un contesto multi-threaded. O ancora, se creo un oggetto che deve rilasciare risorse, implemento IDisposable seguendo il noto pattern e mi assicuro di chiamare GC.SuppressFinalize perché SO che quali sono i vantaggi che questa istruzione comporta quando verrà effettuato il collect dell'heap.

Sono meticoloso in quello che faccio Igor, pignolo e meticoloso, anche se al lavoro realizziamo gestionali, e i dettagli cerco di non perdermeli, neanche quando sono impegnato in progetti di 50anni uomo. E chi in azienda lavora con me, all'inizio ha l'impressione di perdere un sacco di tempo. Poi però spiego le motivazioni e capisce che per lavorare bene non basta mettersi lì e fregarsene di tutto.

Ciao.
09/01/2007 8.20 | Marco De Sanctis
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Dai.... dopo il defunto ot del venerdì puoi sempre inaugurare "la vaccata del lunedì"... :-D
09/01/2007 9.20 | Lorenzo Barbieri
Gravatar

# Re: Essere strattonati dalla keyword virtual ed Enterprise Library

ragazzi, rileggete il mio post e ditemi dove ho detto:
1) di scrivere "codice con il culo"
2) di non essere attenti o meticolosi quando si scrive codice
3) di non chiamare la Dispose quando necessario

detto questo: io uso il blocco using, io faccio tante bellissime cose magari peggio di voi, però il discorso è che se io assemblo Enterprise Library + XNA + Spring .NET + altri n framework ad alto livello, certe sfumature me le perdo. Parlavo di uno strattonamento in questo senso, perchè ho un pieno controllo sul *mio* codice (e ci mancherebbe), ma non sulle parti interne dei framework di cui faccio utilizzo.
Parliamo di questo, per favore?
09/01/2007 9.26 | Igor Damiani
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Hai citato me e il mio post (in cui parlavo di memory leak) e hai detto che secondo te il sottoscritto non pensa anche a questi dettagli in un tuo feedback. Da qui la mia risposta.

Il tuo è un discorso che non sta in piedi, e ti spiego anche perché: quando usi librerie scritte da altri (EntLib, NH, Spring.Net, ma anche lo stesso .NET Framework) sei ovviamente costretto a fidarti della bontà del codice che le compongono. Ma lo fai a ragion veduta, perché, ad es., usi EntLib che oramai è giunta alla versione 3 e non è sviluppata da un pinco pallino qualunque, perché NH oramai son 2 anni che è in giro, e quindi magari molte magagne son state eliminate.

Il punto è che, cmq, tu scrivi anche codice TUO ed è una TUA responsabilità scriverlo bene e alle sfumature devi badare anche quando istanzi una session di NH, perché devi sapere come lavora e che non è threadsafe, e perché devi farne la dispose quando non la usi più.

Ciao
09/01/2007 9.39 | Marco De Sanctis
Gravatar

# Re: Essere strattonati dalla keyword virtual ed Enterprise Library

x Marco:
certo che mi devo fidare dei framework con i quali lavoro, ma sta di fatto che i dettagli tecnici interni me li perdo alla grande. Questo è quello che dico. Man mano che passa il tempo assembliamo "mattoncini" sempre più grandi e più complessi, allontanandoci dai problemi reali e a basso livello del codice. Mi stai dicendo che hai letto tutto il codice di NHibernate e mi assicuri che tutto è scritto esattamente come se l'avessi fatto tu? :-) Se NH è arrivato ad essere l'ORM migliore, probabilmente è scritto ottimamente, però cerca di capire la "morale" di quello che voglio dire. Quando in XNA uso la classe Game, o la classe GameDevice che mi inizializza lo schermo, non so cosa accade realmente: diverso è se invece lo faccio con le DirectX SDK e C++ come ho fatto in passato.

x Lorenzo:
il VSTS me lo tengo stretto, mi farò perdonare.
09/01/2007 10.05 | Igor Damiani
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Igor, non ho letto ogni singola riga di codice di NH, ci mancherebbe (anche se i sorgenti me li son spulciati parecchio, sono un piccolo capolavoro di architettura)!

Qui si parla di bug, di leakage di risorse, si tratta di aspetti che sono stati limati da un test sul campo di mesi e mesi, in centinaia di progetti. E quindi mi fido.

Probabilmente un FW appena uscito, in versione alpha, realizzato da pinco pallino, non lo utilizzerei in un progetto importante.

Ciao
09/01/2007 11.08 | Marco De Sanctis
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

Tu puoi assemblare quello che vuoi... ma se un oggetto che stai assemblando implementa la IDisposable sei tu che devi chiamare la Dispose o usare la Using...

Se un framework che stai usando ha dichiarato un metoodo virtuale sei tu che devi capire il significato di quello che succede quando lo vai a ridefinire...

Il problema è che a certe cose devi pensarci subito, e non quando fai il refactoring o "fino ad allora"... e questa cosa SBAGLIATA l'hai scritta tu, mica io...
09/01/2007 14.17 | Lorenzo Barbieri
Gravatar

# Re: Essere strattonati dalla keyword virtual ed Enterprise Library

<quoting>...se un oggetto che stai assemblando implementa la IDisposable sei tu che devi chiamare la Dispose o usare la Using...</quoting>
ovviamente quoto.
Ma mi offro una tazzina di caffè se tu *ogni volta* che ridefinisci un metodo stai lì a capire cosa fa davvero il CLR. :-))) Puoi farlo in sw critici, su grossi progetti, su un ws che deve essere scalabile e performante. Scrivere bene il codice è una cosa che bisogna fare fin da subito, e non ho mai detto il contrario. Questo post mi ha annoiato ed è colmo di...lascio perdere.
09/01/2007 16.25 | Igor Damiani
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

"stai lì a capire cosa fa davvero il CLR" non il CLR... ma la classe del cui metodo stai facendo override...

P.s. il post è colmo di.. ma i commenti hanno portato un po' di luce nelle tenebre... :-D
09/01/2007 20.02 | Lorenzo Barbieri
Gravatar

# re: Essere strattonati dalla keyword virtual ed Enterprise Library

considerando che una parte dei commenti sono anche miei, mi sta bene. :-)
09/01/2007 23.03 | Igor Damiani
Comments have been closed on this topic.

Powered by: