Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

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 19: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 20: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 22:27 | Lorenzo Barbieri
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 22: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 22: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 23: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 23: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 04:27 | Mauro Servienti
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 11:20 | Lorenzo Barbieri
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 11:39 | Marco De Sanctis
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 13: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 16: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 18: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 22: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. :-)
10/01/2007 01:03 | Igor Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET