web log di marco mangia http://blogs.ugidotnet.org/marcomangia/Default.aspx staccato dalla tastiera, dal codice mi aspetto solo che esso non mi perseguiti più it-IT marco mangia Subtext Version 2.6.0.0 web log di marco mangia http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/marcomangia/Default.aspx 77 60 Sviluppatori .Net. Quale salario (in Italia)? var http://blogs.ugidotnet.org/marcomangia/archive/2013/07/22/salario-sviluppatori-net.aspx Da molto tempo che mi faccio questa domanda. E non mi sono mai dato una risposta quanto minimo chiara.<br /> Ho cercato di fare un giro largo larghissimo andando a leggere qua' e la', ma non ho trovato qualcosa di preciso in merito alla nostra mansione.<br /> E' un tema scottante, specie poi in Italia, dove le offerte di lavoro pubblicate non hanno mai in chiaro il salario offerto. Ma da un po' di anni a questa parte, la domanda sulla tariffa e' diventata la prima che mi viene posta. Al secondo posto, forse trovano spazio le competenze. E questo la dice lunga su, come nel giro di circa dieci anni, le cose siano cambiate e tutti guardano al prezzo.<br /> Beh visto, che io non so rispondere, perche' non chiedere alla community?<br /> Perche' non metterci la faccia direttamente e fare un piccolo sondaggio?! Si si un sondaggio che abbia una qualche utilita' molto diversa dai soliti snippet di codice o altro.<br /> Dopo tutto scrivere codice C# significa pane, vestiti, sopravvivenza. Che male c'e' a farsi un po' di conti?<br /> Con uno spirito da dilettante ho creato questo piccolo sondaggio<br /><br /> <iframe height="689" allowtransparency="true" frameborder="0" scrolling="no" style="width:100%;border:none" src="http://mamagarage.wufoo.com/embed/m7x3z9/"><a href="http://mamagarage.wufoo.com/forms/m7x3z9/">Fill out my Wufoo form!</a></iframe> <br /> Mi piace riportare questo dato di un sondaggio di <a href="http://visualstudiomagazine.com/articles/2012/01/01/developer-salary-survey.aspx">VisualStudio Magazine Aprile 2012</a><br /> <blockquote cite="http://visualstudiomagazine.com/Articles/2012/01/01/Developer-Salary-Survey.aspx?p=1">We polled software development professionals who subscribe to Visual Studio Magazine and related eNewsletters (.NET Insight and Redmond Developer News) in November 2011. More than 1,300 subscribers who currently work in the United States participated in the survey and filled out the online questionnaire. The median base salary was $92,000. On average, VSM Salary Survey respondents were college graduates with a four-year degree or higher level of education and more than a decade of industry experience.</blockquote><br /> Supposto che il Base Salary stia a significare il lordo, corrisponde ad un importo (cambio Dicembre 2011 EUR/USD pari 1,295) 71.042 euro. Penso che il sondaggio lo abbiamo fatto escludendo i bonus(performance), eventuali stock option, il fondo pensione e l'assicurazione sanitaria. La domanda che mi sorge spontanea e': quale sarebbe il fattore di conversione (non il tasso di cambio!) per ottenere l'equivalente italiano? <br /><br /><br /> PS: I commenti e/o critiche costruite sono ben accette. Tenuto conto poi che questo post cerchero' di tenerlo il piu' aggiornato possibile<img src="http://blogs.ugidotnet.org/marcomangia/aggbug/101622.aspx" width="1" height="1" /> marco mangia http://blogs.ugidotnet.org/marcomangia/archive/2013/07/22/salario-sviluppatori-net.aspx Mon, 22 Jul 2013 21:40:24 GMT http://blogs.ugidotnet.org/marcomangia/archive/2013/07/22/salario-sviluppatori-net.aspx#feedback 260 http://blogs.ugidotnet.org/marcomangia/comments/commentRss/101622.aspx http://blogs.ugidotnet.org/marcomangia/services/trackbacks/101622.aspx Mica sono un tipo perfetto.. http://blogs.ugidotnet.org/marcomangia/archive/2011/07/03/mica-sono-un-tipo-perfetto.aspx <br /> e va bene mi metto a studiare.. <br /> <img src="http://www.kamelasa.com/public/ms_72504.jpg" alt="fail" width="650px" /> <img src="http://blogs.ugidotnet.org/marcomangia/aggbug/100191.aspx" width="1" height="1" /> marco mangia http://blogs.ugidotnet.org/marcomangia/archive/2011/07/03/mica-sono-un-tipo-perfetto.aspx Sun, 03 Jul 2011 14:09:03 GMT http://blogs.ugidotnet.org/marcomangia/archive/2011/07/03/mica-sono-un-tipo-perfetto.aspx#feedback 321 http://blogs.ugidotnet.org/marcomangia/comments/commentRss/100191.aspx http://blogs.ugidotnet.org/marcomangia/services/trackbacks/100191.aspx Ioc: e adesso ciak Design Patterns Screen Cast http://blogs.ugidotnet.org/marcomangia/archive/2009/09/11/ioc-e-adesso-ciak.aspx Ecco la versione video dell'articolo pubblicato <a href="http://blogs.ugidotnet.org/marcomangia/archive/2009/09/09/ioc-maccheroni-per-programmatori-procedurali-again.aspx">qui</a> . Ho inserito qualche vignetta di Scott Adams che sono riuscito a trovare in giro, modificandola. Dilbert che esce fuori dal suo cubicle e finisce su una ppt..<br /> <br /> NB:<br /> <ul> <li> non sono uno speaker professionista !!</li> <li>a causa di settaggi forse errati, stiamo cercando di capire il problema di alcune distorsioni</li> <li>volevo ringraziare <a href="http://www.vivendobyte.net/">Igor</a> per l'incoraggiamento</li> </ul> Qui le slides: <a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/marcomangia/DesignPattern_Integration_DIP.pptx">Dependency Inversion Principle</a><br /> <br /> <br /> <object height="498" width="640"> <param value="http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/flvplayer.swf" name="movie" /> <param value="high" name="quality" /> <param value="#FFFFFF" name="bgcolor" /> <param value="thumb=http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=498&amp;content=http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/DependencyInjection.mp4" name="flashVars" /> <param value="true" name="allowFullScreen" /> <param value="showall" name="scale" /> <param value="always" name="allowScriptAccess" /> <param value="http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/" name="base" /> <embed height="498" width="640" scale="showall" base="http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/" allowfullscreen="true" flashvars="thumb=http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=498&amp;content=http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/DependencyInjection.mp4" allowscriptaccess="always" type="application/x-shockwave-flash" bgcolor="#FFFFFF" quality="high" src="http://content.screencast.com/users/MarcoMangia/folders/Design%20Patterns/media/149be8e0-5c70-4efd-904d-21425c1629d2/flvplayer.swf" /><br /> <br /> <br /> <br /> </object><img src="http://blogs.ugidotnet.org/marcomangia/aggbug/97034.aspx" width="1" height="1" /> marco mangia http://blogs.ugidotnet.org/marcomangia/archive/2009/09/11/ioc-e-adesso-ciak.aspx Fri, 11 Sep 2009 12:34:40 GMT http://blogs.ugidotnet.org/marcomangia/archive/2009/09/11/ioc-e-adesso-ciak.aspx#feedback 1218 http://blogs.ugidotnet.org/marcomangia/comments/commentRss/97034.aspx http://blogs.ugidotnet.org/marcomangia/services/trackbacks/97034.aspx IoC: maccheroni per programmatori procedurali Design Patterns http://blogs.ugidotnet.org/marcomangia/archive/2009/09/09/ioc-maccheroni-per-programmatori-procedurali-again.aspx In questo primo articolo darò un'introduzione "infantile" al concetto di Inversion of Control(IoC) ed ad una sua implementazione tramite il pattern di Dependency Injection(DI). Sebbene IoC e DI siano considerati sinonimi, mi è sembrato di capire che DI sia una implementazione particolare di IoC, a mano o tramite framework. Comuque, qui non farò riferimento a framework particolari, ma solo al principio di base che dovrebbe condurci a scrivere codice a basso accoppiamento (low coupling).<br /> <br /> <font size="4">P</font>er una mia innata prigrizia, mi piace di più usare le immagini per fissare i concetti. Non sto qui ad elencare i motivi biologici. <br /> <br /> <img hspace="10" height="400" width="500" vspace="10" align="absbottom" src="http://www.mamagarage.com/wp-content/uploads/DependencyInversionPrinciple_5F00_0278F9E2.jpg" alt="Dependendency Inversion Principle" /><br /> Già, chi collegherebbe una lampada saldandola ai cavi elettrici nella parete ? A patto che abbia voglia di vincere il <a href="http://www.darwinawards.com/">premio Darwin</a> di quest'anno. Il problema è che non sono sicuro del risultato finale ... <br /> <br /> <span style="font-weight: bold;">DIP in pratica ci spinge a utilizzare e dipendere da interfacce</span> (o astrazioni). Quasi non c'è più niente da dire, vista la banalità della cosa. Pigro sì, ma pragmatico: <br /> <ul> <li>Nessuna classe dovrebbe derivare da un tipo concreto </li> <li>Nessuna variabile dovrebbe avere un riferimento ad un tipo concreto </li> <li>Nessun metodo dovrebbe fare l'override di un metodo implementato in qualcuna delle sue classi base </li> </ul> <p>Altre due imaginette ci aiutano a capire ancora meglio: <br /> <img hspace="10" height="336" width="338" align="left" src="/images/blogs_ugidotnet_org/marcomangia/BeforeDIPzip.jpg" alt="" /> <br /> <br /> Nella prima una classe consumer ha delle dipendenze con le classi concrete, ovvero ha il comp ci creare uno dei tre tipi facendo ricorso all'operatore <span style="color: rgb(51, 102, 255); font-weight: bold;">new</span> <br /> <br /> <br /> E' il caso appunto in ciui <span style="font-style: italic;">componenti  ad alto livello</span> dipendono da <span style="font-style: italic;">componenti a basso </span>livello <br /> <br /> <br /> Il verso della dipendenza imita molto quello della tipica programmazione procederale <br /> <br /> </p> <br /> <br /> <!-- code formatted by http://manoli.net/csharpformat/ --> <pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> Dependent<br />{<br /> <span class="kwrd">public</span> IDependent _dependent;<br /> <span class="kwrd">public</span> <span class="kwrd">void</span> DoSomething(<span class="kwrd">string</span> dependent)<br /> {<br /> <span class="kwrd">if</span> (dependent.EndsWith(<span class="str">"1"</span>))<br /> _dependent = <span class="kwrd">new</span> DependentClass1();<br /> <span class="kwrd">if</span> (dependent.EndsWith(<span class="str">"2"</span>))<br /> _dependent = <span class="kwrd">new</span> DependentClass2();<br /> <span class="kwrd">if</span> (dependent.EndsWith(<span class="str">"3"</span>))<br /> _dependent = <span class="kwrd">new</span> DependentClass3();<br /> _dependent.DoSomethingInDependent();<br /> }<br />}<br /><br /></pre> La seconda invece ci mostra gli effetti della cura dopo aver implementato DIP: <img hspace="10" height="389" width="336" vspace="10" align="left" src="/images/blogs_ugidotnet_org/marcomangia/AfterDIPzip.jpg" alt="" /> <br /> <br /> <br /> L'iniettore della dipendenza stesso dipende da una astrazione (classe <span style="color: rgb(51, 102, 255);">abstract</span> o tipo <span style="color: rgb(51, 102, 255);">interface</span>). Ovvero possiede un riferimento all'interfaccia tramite un campo privato <br /> <br /> <br /> <br /> <br /> <br /> Così i tipi concreti che derivano dall'interfaccia, implementandola <br /> <br /> <br /> Il verso della dipendenza si è <span style="font-style: italic;">invertita, </span>da questo il nome di Inversione di Controllo (mesi fà mi dicevo: inversione de che ??) <br /> <br /> <!-- code formatted by http://manoli.net/csharpformat/ --> <pre class="csharpcode"> <span class="kwrd">public</span> <span class="kwrd">class</span> Injector<br /> {<br /> <span class="kwrd">private</span> IDependent _dependent;<br /> <span class="kwrd">public</span> IDependent Dependent<br /> {<br /> get { <span class="kwrd">return</span> _dependent; }<br /> set { _dependent = <span class="kwrd">value</span>; }<br /> }<br /> <span class="kwrd">public</span> <span class="kwrd">void</span> DoSomething()<br /> {<br /> Dependent.DoSomethingInDependent();<br /> } <br /> }<span style="font-family: Arial,Verdana,Sans-Serif;"><br /></span><br /></pre> Persino il class diagram, uhh: <img style="width: 614px; height: 210px;" src="/images/blogs_ugidotnet_org/marcomangia/UmlDIPzip(1).jpg" alt="" /> <br /> <a href="http://martinfowler.com">Martin Fowler</a> in suo <a href="http://martinfowler.com/articles/injection.html#FormsOfDependencyInjection">famosissimo articolo</a> ci insegna 3 tipi di DI: <br /> <ul> <li>Iniezione tramite metodi d'interfaccia di Tipo 1 <br /> </li> <li>Iniezione tramite proprietà di Tipo 2 <br /> </li> <li>Iniezione tramite costruttore di Tipo 3 <br /> </li> </ul> La prima è quella che obbliga a definire un'interfaccia (da non confondersi con l'<span style="font-style: italic;">astrazione</span> necessaria al DIP) , dalla quale poi l'iniettore dovrà derivare, constringendolo ad implementare i metodi <br /> La seconda invece è la proprietà che si preoccupa di valorizzare il campo privato che rappresenta la dipendenza verso l'interfaccia <br /> La terza invece è quella in cui, il riferimento viene risolto nel momento in cui l'iniettore viene creato, dovendolo passare come parametro. <br /> <br /> Forse Martin si era sparato tutti i cofanetti di Spielberg prima di scrivere l'articolo, diciamo che non farei una distinzione così ferrea tra tipi, basta capire quando ci servono. <br /> Delle tre, la prima non l'ho mai usata nè vista usare. Dopo tutto devo scrivere del codice in più. Preferisco la seconda e la terza modalità o un misto delle due, poichè mi risulta comodo per lo "state based unit-testing", cioè posso governare e controllare come viene risolta la dipendenza. Userei solo la seconda o al massimo la prima solo quando ho bisogno di posticipare l'iniezione. <br />   <img hspace="10" height="105" width="104" align="left" src="/images/blogs_ugidotnet_org/marcomangia/anti-if.gif" alt="" /> <br /> Dimenticavo, appena posso mi comprerò questa simpatica magliettina che fa parte della <a href="http://www.antiifcampaign.com/index.html">campagna anti-if</a> promossa da xplabs. <br /> <br /> E' proprio IoC, uno dei mezzi che ci aiutano in questa battaglia. Non per <span style="font-style: italic;">if</span> stesso ma per un suo abuso, chiaro.<br /> <br /> <br /> <br /> <br /> NB: ho fatto anche un versione video, o <span style="font-weight: bold;">screencast</span>, di questo articolo. Devo un attimo sistemare il "montaggio". Ho Sergio Leone in chat che mi sta dando dei validi consigli. Lo pubblico più tardi o al max domani mattina.<img src="http://blogs.ugidotnet.org/marcomangia/aggbug/97027.aspx" width="1" height="1" /> marco mangia http://blogs.ugidotnet.org/marcomangia/archive/2009/09/09/ioc-maccheroni-per-programmatori-procedurali-again.aspx Wed, 09 Sep 2009 17:28:03 GMT http://blogs.ugidotnet.org/marcomangia/archive/2009/09/09/ioc-maccheroni-per-programmatori-procedurali-again.aspx#feedback 1208 http://blogs.ugidotnet.org/marcomangia/comments/commentRss/97027.aspx http://blogs.ugidotnet.org/marcomangia/services/trackbacks/97027.aspx