<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SlashCode &#187; programmazione</title>
	<atom:link href="http://davideaversa.it/slashcode/tag/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://davideaversa.it/slashcode</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 14:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Tre motivi per cui preferisco i linguaggi statici</title>
		<link>http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/</link>
		<comments>http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 15:07:35 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[tipizzazione dinamica]]></category>
		<category><![CDATA[tipizzazione statica]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=808</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/"><img title="Tre motivi per cui preferisco i linguaggi statici" src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ducktyping.jpeg" alt="Tre motivi per cui preferisco i linguaggi statici"  width="200" height="166" /></a></div><br/>Ogni tanto mi capita di trovarmi immischiato nella discussione che da anni tormenta programmatori e informatici di ogni nazione ed etnia: meglio usare un linguaggio tipizzato dinamicamente o staticamente? Senza pretese di scientificità o di dogma o di starvi a rivelare chissà quale verità arcana nascosta, vi dirò la mia sull&#8217;argomento. Innanzitutto sappiate che sulla <a href='http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Ftre-motivi-per-cui-preferisco-i-linguaggi-statici%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Tre motivi per cui preferisco i linguaggi statici" data-url="http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Ogni tanto mi capita di trovarmi immischiato nella discussione che da anni tormenta programmatori e informatici di ogni nazione ed etnia: <strong>meglio usare un linguaggio tipizzato dinamicamente o staticamente?</strong></p>
<p>Senza pretese di scientificità o di dogma o di starvi a rivelare chissà quale verità arcana nascosta, vi dirò la mia sull&#8217;argomento. <span id="more-808"></span> Innanzitutto sappiate che sulla faida statico/dinamico ci sono tonnellate di discussioni filosofiche, euristiche, epistemologiche e tecniche capaci di far impallidire chiunque provi ad avvicinarsi alla questione.</p>
<p><img src="http://davideaversa.it/slashcode/wp-content/uploads/2012/04/ducktyping.jpeg" alt="Esempio di Duck Typing " title="Duck Typing" width="477" height="396" class="aligncenter size-full wp-image-810" /></p>
<p>Celeberrimo è il <em>duck test</em> di <strong>Whitcomb Riley</strong>: <em>&#8220;Quando io vedo un uccello che cammina come un&#8217;anatra, nuota come un&#8217;anatra e starnazza come un&#8217;anatra, io chiamo quell&#8217;uccello &#8220;anatra&#8221;"</em>. Concetto che i sostenitori della tipizzazione dinamica sintetizzano in: guardate la vignetta precedente, se la scritta vi è stata di aiuto allora la tipizzazione statica fa per voi.</p>
<p>In pratica la questione è prettamente filosofica: <strong>l&#8217;identità di un <em>oggetto</em>-barra-<em>valore</em> deve derivare dalle sue caratteristiche o da una specifica esterna?</strong> Ovvero: un&#8217;anatra è un anatra perché vola, nuota, ha le piume, etc&#8230; oppure è un anatra perché dico che è un anatra?</p>
<p>Dal punto di vista della rappresentazione della conoscenza possiamo essere d&#8217;accordo che un oggetto sia identificato dalle sue proprietà, dal punto di vista informatico invece la questione è più spinosa. In informatica tutto è un numero e i numeri non hanno proprietà per natura bensì caratteristiche che nascono dall&#8217;interpretazione che io ne do (tramite l&#8217;assegnazione di un tipo).</p>
<p>Ma chiudendo la parentesi filosofica torniamo all&#8217;atto pratico: perché dovrei scegliere un linguaggio statico rispetto ad un linguaggio dinamico? Non c&#8217;è risposta, serve solo l&#8217;esperienza e il gusto personale. Tuttavia negli ultimi dieci anni ci hanno distrutto l&#8217;anima raccontandoci che i linguaggi statici (C, Java e compari) erano obsoleti e che il futuro era dinamico. Il risultato di questa campagna è che attualmente abbiamo decine di linguaggi dinamici liberi e di ottimo livello (Python, Ruby, PHP e molti altri) e solo un paio di linguaggi statici decenti. Io, da estimatore dei linguaggi statici, vengo qui per raccontarvi le mie personali considerazioni sull&#8217;argomento.</p>
<p><strong>1. Ordine nel caos</strong></p>
<p>Quando mi sono messo ad usare il Python per progetti di media complessità (vedi <a href="http://code.google.com/p/cobra-draughts/">CobraDraughts</a>) ho sempre avuto l&#8217;impressione che tutto era avvolto dal disordine. Il fatto che non bisognava dichiarare da nessuna parte gli attributi di una classe mi inquietava.</p>
<p>Oltre ai miei problemi psicologici però c&#8217;era un comportamento oggettivamente fastidioso: presa la classe A non c&#8217;era verso dalla classe B di sapere durante la digitazione del codice quali attributi avesse e, soprattutto, di che tipo fossero. Questo perché non esiste nessun tipo associato alle variabili di un linguaggio dinamico!</p>
<p>Questo comporta due grossi problemi:</p>
<ul>
<li>Il compilatore è quasi inutile come strumento di correzione degli errori. Se passo una stringa ad una variabile che nell&#8217;intero arco della sua vita <strong>deve</strong> contenere solamente interi non lo vengo a scoprire fino a quando non eseguo quella porzione di codice e il programma muore. Insomma, l&#8217;analisi statica del codice è praticamente nulla. Bisogna armarsi di pazienza e code-coverage ed  eseguire il codice.</li>
<li>L&#8217;overloading di funzioni con lo stesso numero di parametri è un parto greco. Probabilmente non si usano ma il mio cuore ne ha sofferto.</li>
</ul>
<p>A me personalmente tutta questa cosa fa sembrare che il programma si regga su un sottobosco di magia che non apprezzo. Inoltre la stretta maglia dei tipi mi costringe anche a strutturare meglio il codice e ad essere più rigoroso nello sviluppo.</p>
<p><strong>2. Prestazioni</strong></p>
<p>Qui c&#8217;è poco da fare. I linguaggi statici stracciano spesso e volentieri un linguaggio dinamico sul campo prestazionale, sia per il tempo che per la memoria. Ciò è causato semplicemente da tutto l&#8217;overhead necessario a gestire la &#8220;naturalissima&#8221; dinamicità delle variabili. Per alcune applicazioni ciò non è un problema (anche grazie all&#8217;uso di librerie che wrappano codice C) ma per molte altre invece si!</p>
<p>Molti dicono che questo non è un gran problema perché abbiamo macchine sempre più efficienti. Io credo che questo sia come dire che posso ingrassare venti chili perché tanto ho i pantaloni con l&#8217;elastico.</p>
<p><strong>3. Didattica</strong></p>
<p>Un aspetto da non trascurare. Quando mi trovo davanti la solita domanda su quale linguaggio sia meglio per cominciare a programmare, sento che molti consigliano linguaggi come il Python perché sono più semplici. Questo è sicuramente vero, la tipizzazione dinamica permette di trascurare una gran parte di aspetti della programmazione, ma mentre ciò può essere buono per chi già programma, a mio avviso, è un problema per chi comincia. Sarebbe come se un maestro di scacchi mi insegnasse a giocare senza cavalli, alfieri e 4 pedoni perché così è &#8220;più facile&#8221;.</p>
<p>Il risultato di certe politiche è l&#8217;inondazione di brutto codice e la prolificazione di programmi orrendamente progettati. Senza contare i bimbominkia del development che vanno in giro a raccontare che &#8220;il C è inutilmente complesso e fa schifo&#8221; mentre &#8220;il PHP ruleggia&#8221;.</p>
<p>È quindi importante per chi tiene corsi o si vuole avvicinare alla programmazione senza tutta la vicinanza alla macchina del C, di mantenersi almeno all&#8217;inizio sui linguaggi statici (come il Java o il C#) che aiutano a creare quella <em>forma mentis</em> necessaria anche per i linguaggi dinamici.</p>
<p>Inoltre, se ciò non bastasse, è più facile passare dallo statico al dinamico che viceversa. Quindi sul lungo periodo si risparmia anche fatica.</p>
<p><strong>In conclusione:</strong> questi sono i motivi per cui trovo molto molto più divertente lavorare con linguaggi staticamente tipizzati rispetto ai linguaggi dinamicamente tipizzati. Non sono leggi assolute e potete benissimo rispondermi che &#8220;io col Python ho programmato un AI senziente ed è stato facilissimo&#8221;. Ci credo, anche io uso il Python spesso.</p>
<p>Chiudo con una speranza. La speranza che i linguaggi statici vengano riscoperti e portati avanti in modo da avere la stessa scelta che abbiamo oggi con quelli dinamici. Lasciare questo mondo solo al C/C++, allo sgangherato Java e al controverso C# secondo me è una grandissima occasione sprecata.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=808&amp;md5=777bb2d421c30e0936d5dc695bd7dc5b" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2012/04/tre-motivi-per-cui-preferisco-i-linguaggi-statici/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2012%2F04%2Ftre-motivi-per-cui-preferisco-i-linguaggi-statici%2F&amp;language=it_IT&amp;category=text&amp;title=Tre+motivi+per+cui+preferisco+i+linguaggi+statici&amp;description=Ogni+tanto+mi+capita+di+trovarmi+immischiato+nella+discussione+che+da+anni+tormenta+programmatori+e+informatici+di+ogni+nazione+ed+etnia%3A+meglio+usare+un+linguaggio+tipizzato+dinamicamente+o+staticamente%3F+Senza...&amp;tags=programmazione%2Ctipizzazione+dinamica%2Ctipizzazione+statica%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Difendersi dai Programmattori</title>
		<link>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/</link>
		<comments>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 08:03:21 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[flame]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=766</guid>
		<description><![CDATA[Fra le parole più abusate su internet un posto d&#8217;onore va a programmatore (o developer e varianti). Forse secondo solo a &#8220;H4ck3r&#8221;. In ogni caso, programmatore fa fico, creare programmi e dire alla gente &#8220;questo l&#8217;ho fatto io&#8221; non ha prezzo. Ma la realtà è ben diversa. Spesso molti di questi individui sono programmAttori e <a href='http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fdifendersi-dai-programmattori%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Difendersi dai Programmattori" data-url="http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Fra le parole più abusate su internet un posto d&#8217;onore va a <strong>programmatore</strong> (o developer e varianti). Forse secondo solo a &#8220;H4ck3r&#8221;. In ogni caso, programmatore fa fico, creare programmi e dire alla gente &#8220;questo l&#8217;ho fatto io&#8221; non ha prezzo. </p>
<p>Ma la realtà è ben diversa. Spesso molti di questi individui sono <em>programmAttori</em> e nulla più. Molti conoscono la <em>programmazione sciamanica</em>, l&#8217;arte di scrivere mantra tantrici su dei file .c o .py e passarli ad un compilatore per ottenere qualcosa in cambio. Questa non è programmazione, almeno non al suo livello più nobile. Il web è pieno di questi arroganti developer. Vediamo come disinnescarli.</p>
<p><span id="more-766"></span></p>
<p><strong>1 &#8211; Programmare non significa assemblare</strong></p>
<p>Se trovate persone che vi propinano programmi scritti da loro il primo modo per verificare la potenza della loro capacità. Verificate il numero di librerie e cosa fanno. Molto spesso troverete programmi assemblati. I programmi assemblati sono i software semplici costruiti a partire da un numero enorme di librerie (che fanno tutto il lavoro sporco) che vengono <em>assemblate</em> dal programmatore. Un esempio di questi programmi sono player musicali o programmi di pulizia del sistema. In realtà tali programmi usano librerie grafiche, librerie audio e collegano il tutto in modo piuttosto lineare.</p>
<p>Questo è essere programmatori allo stesso modo di come cucinare un piatto leggendo una ricetta da un libro di cucina usando prodotti surgelati fa di noi degli Chef.</p>
<p>È una programmazione hobbistica, che ha il suo rispetto, la sua dignità e spesso sforna programmi utilissimi. Ma i programmAttori te lo spacceranno come una meraviglia dell&#8217;informatica e pretenderanno, alla luce di ciò, di parlare alla pari con un developer del kernel.</p>
<p><strong>2 &#8211; Programmare non significa sapere un linguaggio</strong></p>
<p>Un programmatore non conosce il C, non conosce il Java, non conosce il Python: li conosce tutti. Un programmatore esperto non ha paura di imparare un linguaggio nuovo perché con venti minuti di letta al manuale del linguaggio entra già nel meccanismo. Questo perché sa che cos&#8217;è la programmazione al di là del singolo linguaggio, ha appreso i concetti informatici che stanno dietro ai linguaggi di programmazione e sa riconoscerli in tutti i linguaggi del mondo. </p>
<p>Ovviamente sto esagerando, ma un programmatore esperto può semplicemente imparare un linguaggio nuovo in due ore (se rientra nei paradigmi che conosce, altrimenti un paio di giorni).</p>
<p>Il programmatore farlocco invece no. Se gli dici &#8220;facciamo un progetto XYZ&#8221; non ti dirà di farlo nel linguaggio più adatto allo scopo bensì nel linguaggio che conosce.</p>
<p>Si può essere più programmatori scrivendo in pseudocodice su carta che scrivendo uno script di pulizia in bash.</p>
<p><strong>3 &#8211; Programmare non significa fare finestre</strong></p>
<p>Altro comportamento classico del programmatore wannabe è il classificare come più dignitose le applicazioni grafiche rispetto alle applicazioni a riga di comando. Se sentite frasi del tipo &#8220;io faccio programmi con le finestre, mica quelle schifezze a riga di comando&#8221; accendete l&#8217;allarme: è molto probabile che vi troviate di fronte ad un programmAttore montato dei più classici.</p>
<p>Le finestre sono un aspetto (minimale) dell&#8217;intera programmazione. Nonostante nell&#8217;uso desktop utilizziamo quasi tutte applicazioni a finestra queste rappresentano solo una minima parte del lavoro che <strong>milioni</strong> di programmatori fanno ogni giorno (ad esempio scrivendo librerie come quelle che loro usano per fare le amate finestre). Quindi scusate se mi innervosisco ma uno che si vanta di fare programmi a finestra invece di altro non solo non è programmatore: è un mentecatto.</p>
<p>Un programma come Gazebo, tanto per dirne uno che sto usando ora, è un programma estremamente sofisticato e complesso dato che serve a simulare insiemi di Robot in ambienti 3d. Eppure è un programma a riga di comando. Il tanto amato dpkg di Debian è a riga di comando eppure svolge tutto il lavoro pesante dell&#8217;installazione dei pacchetti.</p>
<p>Inoltre, se vogliamo dirla tutta, la programmazione una finestra grafica non è complessa (in generale), si va dalla quasi banalità del Visual Basic e del Gambas alla media complessità di Gtk e Qt. Saper fare finestre grafiche significa studiare e conoscere bene una libreria fra le infinite disponibili, non conoscere la programmazione nel suo complesso. </p>
<p><strong>4 &#8211; Programmare non significa conoscere HTML e CSS</strong></p>
<p>Fra i programmAttori web spesso giara questa balla. Io conosco HTML e CSS quindi sono un programmatore. Sbagliato. Al massimo sei un Web Designer ma non un programmatore.</p>
<p>La ragione è semplice: HTML e CSS non sono linguaggi di programmazione e, se non il presunto developer non sa questo allora è garantito che non è un developer. Essere esperti di HTML equivale ad essere esperti di CSV, LaTex e altre metodologie di formattazione dei dati. Potete fare un ciclo in HTML? No. E quindi non è chiaramente un linguaggio di programmazione.</p>
<p><strong>5 &#8211; Programmare non significa scrivere codice</strong></p>
<p>O almeno non significa solo quello. La programmazione è una cosa più vasta di cui lo scrivere codice è probabilmente la cosa più noiosa. L&#8217;atto di sviluppare un&#8217;applicazione parte da prima, da quando si analizzano gli aspetti di ciò che si vuole fare e si progetta l&#8217;applicazione, e arriva fino alla fase di test. È la progettazione soprattutto, la sensazione di analizzare un problema, smontarlo e risolverlo che fa di noi un programmatore. Non ha ancora scritto una riga di codice ma nella sua mente il programma è già scritto e questo, vi assicuro, da una bellissima sensazione.</p>
<p>Il programmAttore invece scrive codice su codice spesso in mega malloppi di file per nulla modulari e invece di lamentarsi di come sta gestendo il suo progetto probabilmente si lamenterà del linguaggio (che secondo lui non permette di fare la cosa X o la cosa Y).</p>
<p><strong>6 &#8211; Programmare significa progettare strutture dati</strong></p>
<p>Probabilmente, se non vi siete mai trovati a progettare una struttura dati o almeno a pensare a quale struttura dati sia migliore per la vostra applicazione, non siete veri programmatori. L&#8217;unica cosa che fanno i programmi è manipolare l&#8217;informazione e l&#8217;informazione è manipolata e memorizzata nelle strutture dati. Quindi programmare È fare strutture dati.</p>
<p>Molti linguaggi coprono molte funzioni base. In Python per fare una lista dinamica non ci vuole certo un tecnico esperto, ma per programmi complessi anche il Python necessita di un po&#8217; di progettazione nelle strutture dati (anche solamente organizzare gli oggetti che popoleranno la nostra applicazione).</p>
<p>Tutti i programmatori che conosco e che stimo almeno una volta hanno avuto la necessità di scrivere manualmente una lista, un array, un heap e così via. Anche io ne ho avuto bisogno. Credo che tutti ne abbiano bisogno prima o poi.</p>
<p>Se il vostro interlocutore tentenna sulla struttura firstchild-nextsibling di un albero probabilmente siete davanti ad un programmAttore.</p>
<p><strong>Per concludere.</strong> Forse ci sarebbe molto altro da dire e molte altre cose che al momento mi sfuggono ma il punto credo sia chiaro: per chi, come me, ama questa disciplina è fastidioso veder impazzare per il web tanti tromboni che vantano una conoscenza di programmazione accademica e danno la colpa dei loro fallimenti sempre a qualcos&#8217;altro. È irritante sentire cose stupide come quelle al punto 3.</p>
<p>C&#8217;è chi studia anni, legge libri su libri per apprendere una tecnica, che scrive tonnellate di righe di codice praticamente inutile solo per implementare e mettere a punto una particolare struttura dati o un particolare algoritmo che ha studiato. Poi arriva il ragazzino di turno che ti sbatte in faccia l&#8217;ennesimo programma con GUI per pulire il tuo sistema e pretende di parlarti alla pari.</p>
<p>Vorrei che tutti questi individui imparassero l&#8217;umiltà e capissero, come me, che abbiamo ancora molto da imparare. Molto.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=766&amp;md5=cbfacbc7d7eed783ef8d2da93f4bb2c1" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fdifendersi-dai-programmattori%2F&amp;language=it_IT&amp;category=text&amp;title=Difendersi+dai+Programmattori&amp;description=Fra+le+parole+pi%C3%B9+abusate+su+internet+un+posto+d%26%238217%3Bonore+va+a+programmatore+%28o+developer+e+varianti%29.+Forse+secondo+solo+a+%26%238220%3BH4ck3r%26%238221%3B.+In+ogni+caso%2C+programmatore+fa+fico%2C+creare+programmi...&amp;tags=flame%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Le Tabelle Lua</title>
		<link>http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/</link>
		<comments>http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 17:26:14 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Lua]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[strutture dati]]></category>
		<category><![CDATA[tabelle]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=760</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/"><img title="Le Tabelle Lua" src="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/5808774813_d2525d2167-150x150.jpg" alt="Le Tabelle Lua"  width="200" height="200" /></a></div><br/>Volevo parlarvi di come utilizzare il paradigma a oggetti con Lua ma, rileggendo vari appunti, mi sono accorto che non posso assolutamente tralasciare una parte vitale del linguaggio: <strong>le tabelle</strong>.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fle-tabelle-lua%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Le Tabelle Lua" data-url="http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/5808774813_d2525d2167.jpg"><img src="http://davideaversa.it/slashcode/wp-content/uploads/2011/07/5808774813_d2525d2167-150x150.jpg" alt="" title="Parentesi Graffe" width="150" height="150" class="alignleft size-thumbnail wp-image-761" /></a></p>
<p>Nulla è più importante di quello che è racchiuso nelle parentesi graffe. Se dovessi scegliere una frase per descrivere Lua sceglierei proprio questa. Volevo parlarvi di come utilizzare il paradigma a oggetti con Lua ma, rileggendo vari appunti, mi sono accorto che non posso assolutamente tralasciare una parte vitale del linguaggio: <strong>le tabelle</strong>.</p>
<p>Se in Lisp il tipo di dato base del linguaggio è la lista, se in Python è l&#8217;oggetto in Lua è la tabella. Non esiste nessun&#8217;altra struttura dati in Lua all&#8217;infuori della tabella: niente array, niente vettori, niente liste, solo ed esclusivamente tabelle.</p>
<p><span id="more-760"></span></p>
<p>Una tabella vuota si crea in un modo semplice:</p>
<div class="codecolorer-container lua dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tab <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span></div></div>
<p>Una nota tecnica. Le tabelle in Lua sono anonime ovvero <code class="codecolorer text dawn"><span class="text">tab</span></code> non contiene la tabella ma un riferimento ad essa. Infatti se faccio:</p>
<div class="codecolorer-container lua dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tab1 <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#125;</span><br />
tab2 <span style="color: #66cc66;">=</span> tab1<br />
tab2<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">2</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab1<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span></div></div>
<p>Otterrete come risultato 2. Le due variabili infatti si riferiscono alla stessa tabella!</p>
<p>Il modo più semplice per usare una tabella Lua è di usarla come un classico array.</p>
<div class="codecolorer-container lua dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tab <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#125;</span><br />
tab<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">3</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span></div></div>
<p>Nulla di difficile. Dovete fare occhio a due cose:</p>
<ul>
<li><strong>Il primo elemento di una tabella ha indice 1</strong> (invece di 0 come nel 99% dei linguaggi di programmazione. Non esiste quindi nessun <code class="codecolorer text dawn"><span class="text">tab[0]</span></code></li>
<li><strong>Non esistono limiti</strong> quindi se chiamate <code class="codecolorer text dawn"><span class="text">tab[-3]</span></code> o <code class="codecolorer text dawn"><span class="text">tab[3090]</span></code> non otterrete nessunissimo errore. Semplicemente queste locazioni contengono il valore vuoto di Lua: <strong>nil</strong></li>
</ul>
<p>Non avete idea di quanti problemi possa causare la numerazione che parte da uno.</p>
<p>Per scorrere tutti i valori di un array definito in questo modo possiamo usare</p>
<div class="codecolorer-container lua dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #aa9900; font-weight: bold;">for</span> i<span style="color: #66cc66;">,</span>item <span style="color: #aa9900; font-weight: bold;">in</span> <span style="color: #0000aa;">ipairs</span><span style="color: #66cc66;">&#40;</span>array<span style="color: #66cc66;">&#41;</span> <span style="color: #aa9900; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>item<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #aa9900; font-weight: bold;">end</span></div></div>
<p>Il comando <code class="codecolorer text dawn"><span class="text">ipairs</span></code> restituisce indice e valore di ogni elemento di una tabella fino al primo &#8220;nil&#8221;.</p>
<p>Le tabelle Lua però, come potete immaginare, vanno ben oltre il semplice uso come array. Prendiamo questo codice d&#8217;esempio:</p>
<div class="codecolorer-container lua dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="lua codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tab <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><br />
x <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">9</span><br />
tab<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff6666;">&quot;index is 9&quot;</span><br />
tab<span style="color: #66cc66;">&#91;</span><span style="color: #ff6666;">&quot;x&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff6666;">&quot;index is x&quot;</span><br />
tab<span style="color: #66cc66;">&#91;</span><span style="color: #ff6666;">&quot;slashcode&quot;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff6666;">&quot;index is slashcode (great site!)&quot;</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab<span style="color: #66cc66;">&#91;</span>x<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab<span style="color: #66cc66;">&#91;</span><span style="color: #ff6666;">&quot;x&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab<span style="color: #66cc66;">.</span>x<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #0000aa;">print</span><span style="color: #66cc66;">&#40;</span>tab<span style="color: #66cc66;">&#91;</span><span style="color: #ff6666;">&quot;9&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span></div></div>
<p>Prima cosa, le tabelle possono essere indicizzate da qualunque tipo di dato e, in particolare, da stringhe. Questo permette una grande versatilità alle tabelle Lua che diventano, a tutti gli effetti, un dizionario. È possibile cioè usare chiavi generiche per memorizzare gli elementi in una tabella.</p>
<p>Secondo, provate a indovinare l&#8217;output dei quattro print. </p>
<ul>
<li>Il primo print restituisce <code class="codecolorer text dawn"><span class="text">&quot;index is 9&quot;</span></code>. Abbiamo scelto di prendere il valore nella posizione indicata dalla variabile x che è uguale a 9.</li>
<li>Il secondo print restituisce <code class="codecolorer text dawn"><span class="text">&quot;index is x&quot;</span></code>. Abbiamo scelto infatti di prendere il valore indicizzato dalla stringa &#8220;x&#8221; (e non dalla variabile x).</li>
<li>Il terzo print restituisce lo stesso valore del secondo. Questa <strong>è infatti una notazione alternativa che permette di richiamare i valori nella tabella indicizzati da stringhe</strong>. Potete, ad esempio, chiamare anche <code class="codecolorer text dawn"><span class="text">tab.slashcode</span></code></li>
<li>Il quarto print restituisce <strong>nil</strong>. Stiamo cercando di accedere alla locazione della tabella indicizzata dalla stringa &#8220;9&#8243; ma non abbiamo inizializzato nessuna locazione con quell&#8217;indice!</li>
</ul>
<p>Come potete vedere le tabelle in Lua sono una struttura dati estremamente efficiente e versatile ma bisogna fare attenzione a non confondersi con gli indici (specie a non confondere indicizzazioni tramite stringhe o tramite variabili).</p>
<p>Le tabelle sono, inoltre, lo strumento principale per implementare il nostro meccanismo ObjectOriented in Lua. Ma questo lo vedremo la prossima volta.</p>
<p>PS: Nulla è più importante di quello che è racchiuso nelle parentesi graffe. In questo caso, nella foto, c&#8217;è <a href="http://www.flickr.com/photos/jox1989/">la mia ragazza</a> ed è veramente la cosa più importante. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=760&amp;md5=1cf8319a4b354f25100328e5a28bd41d" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/07/le-tabelle-lua/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fle-tabelle-lua%2F&amp;language=it_IT&amp;category=text&amp;title=Le+Tabelle+Lua&amp;description=Nulla+%C3%A8+pi%C3%B9+importante+di+quello+che+%C3%A8+racchiuso+nelle+parentesi+graffe.+Se+dovessi+scegliere+una+frase+per+descrivere+Lua+sceglierei+proprio+questa.+Volevo+parlarvi+di+come+utilizzare+il+paradigma...&amp;tags=array%2Clua%2Cprogrammazione%2Cstrutture+dati%2Ctabelle%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Il muro del tre</title>
		<link>http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/</link>
		<comments>http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 21:05:28 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[click]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[usabilità]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=749</guid>
		<description><![CDATA[C&#8217;è un principio molto noto dell&#8217;informatica che spesso viene dimenticato dagli sviluppatori tutti. Tale principio recita più o meno così: se una cosa è a 3 schermate di distanza allora non esiste. È un principio basilare nell&#8217;usabilità del computer per l&#8217;utente medio: se una cosa necessita di più di 3-4 click e si trova oltre <a href='http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fil-muro-del-tre%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Il muro del tre" data-url="http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>C&#8217;è un principio molto noto dell&#8217;informatica che spesso viene dimenticato dagli sviluppatori tutti. Tale principio recita più o meno così: <strong>se una cosa è a 3 schermate di distanza allora non esiste</strong>. È un principio basilare nell&#8217;usabilità del computer per l&#8217;utente medio: se una cosa necessita di più di 3-4 click e si trova oltre i 3 passaggi allora, indipendentemente da quanto sia importante, per l&#8217;utente finale, non esiste.</p>
<p>Al riguardo ci sono un po&#8217; di considerazioni da fare.</p>
<p><strong>Perché viene dimenticata?</strong></p>
<p>Il motivo è semplice: i programmi vengono scritti dai programmatori. Non è un gioco di parole, è la verità. Ai programmatori piace la soluzione arguta, l&#8217;opzione contorta, l&#8217;arzighigolo programmativo. Non possono farci nulla, è più forte di loro. Non di rado quando parli dell&#8217;usabilità d&#8217;uso di un programma con un programmatore ricevi come risposta cose tipo &#8220;vabbè è semplice. Basta che aggiungi /percorso/assurdo nella variabile ENV e avvii il programma con nomeprogramma -opzione1 -opzione2 -opzionen=boh e ottieni quello che vuoi!&#8221;. E tutto ciò è normale: se non gli piacessero le cose complicate non sarebbero programmatori.</p>
<p><strong>Tutti se le dimenticano?</strong></p>
<p>No. Ovviamente in molti programmi ci sono persone incaricate appositamente di frenare l&#8217;indole complicatrice degli sviluppatori. Ma allora perché troviamo ancora questi grossolani errori? Alcune volte per disattenzione e altrettante per malafede. Un esempio? Le impostazioni della privacy di Facebook. Quanti click servono per arrivarci? Sono tre per visualizzarle e 4 + n per modificarle a piacimento, tutto questo attraversando 2 schermate e un menù piuttosto dimenticato.</p>
<p><strong>Solo malafede?</strong></p>
<p>No. A volte nascondere una possibilità oltre la soglia dei 3-4 passaggi è una &#8220;features&#8221; che permette allo sviluppatore di evitare la scrittura di complicati meccanismi di blocco, criptaggio, ecc, contando sui grandi numeri. </p>
<p>Un esempio è dato da un applicazione Android per impostare lo sfondo del terminale. L&#8217;applicazione da accesso a una sterminata galleria di sfondi ma, ovviamente, non da la possibilità diretta di scaricare tali sfondi. Il motivo è che, giustamente, lo sviluppatore vuole che tu apra il programma ogni volta che vuoi cambiare sfondo: se te li facesse scaricare facilmente l&#8217;utente se ne scaricherebbe 30 nel giro di due minuti e poi si dimenticherebbe dell&#8217;applicazione! </p>
<p>Tuttavia per impostare uno sfondo è necessario scaricare l&#8217;immagine. Come fa il programma? La scarica e la imposta. Quando cambiate sfondo, cancella la precedente e la sostituisce con la nuova.</p>
<p>Ora capirete che è ancora teoricamente possibile scaricarsi 30 sfondi e buttare l&#8217;applicazione, basta copiarsi in una cartella l&#8217;immagine scaricata ogni volta che il programma la scarica. Ma quanti passaggi necessita? Troppi. Non tanti, ma troppi, più di 3-4. E così statisticamente il 99% delle persone utilizzerà il programma nel modo voluto dallo sviluppatore nonostante sia teoricamente fare diversamente.</p>
<p><strong>Altri esempi?</strong></p>
<p>Google. Fate una ricerca su Google e notate a che pagina desistete dalla ricerca. Sono quasi sicuro che smettete di cercare entro la 3° 4° pagina, se arrivate a 6 siete parecchio insistenti, a 10 significa che siete disperati (come io quando cerco tutorial su roba strana).</p>
<p>Se il vostro blog cade oltre la 4° pagina <strong>non esistete</strong>. È come se fosse alla pagina 100 mila.</p>
<p><strong>Quindi?</strong></p>
<p>Quindi pensateci. Tutto qui. Se programmate qualsiasi cosa che non sia destinata ad altri programmatori, fate caso a non collocare nulla oltre la soglia dei 4 click/schermate. I vostri utenti ne gioveranno e voi pure.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=749&amp;md5=efd2c17f06ec638e88a874ce8862407e" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/07/il-muro-del-tre/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fil-muro-del-tre%2F&amp;language=it_IT&amp;category=text&amp;title=Il+muro+del+tre&amp;description=C%26%238217%3B%C3%A8+un+principio+molto+noto+dell%26%238217%3Binformatica+che+spesso+viene+dimenticato+dagli+sviluppatori+tutti.+Tale+principio+recita+pi%C3%B9+o+meno+cos%C3%AC%3A+se+una+cosa+%C3%A8+a+3+schermate+di+distanza+allora...&amp;tags=click%2Cprogrammazione%2Cusabilit%C3%A0%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Ragioni per Vala/Genie</title>
		<link>http://davideaversa.it/slashcode/2011/06/ragioni-per-valagenie/</link>
		<comments>http://davideaversa.it/slashcode/2011/06/ragioni-per-valagenie/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 16:38:57 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[genie]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[vala]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=740</guid>
		<description><![CDATA[Se avete visto l'ultimo articolo sui venti linguaggi <em>di tendenza</em> forse avete notato una triste assenza. Nella top-50 infatti manca completamente l'accoppiata Vala/Genie. Se non l'avete notata allora è il momento che vi presenti questi due giovani virgulti.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F06%2Fragioni-per-valagenie%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/06/ragioni-per-valagenie/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Ragioni per Vala/Genie" data-url="http://davideaversa.it/slashcode/2011/06/ragioni-per-valagenie/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Se avete visto l&#8217;ultimo articolo sui venti linguaggi <em>di tendenza</em> forse avete notato una triste assenza. Nella top-50 infatti manca completamente l&#8217;accoppiata Vala/Genie. Se non l&#8217;avete notata allora è il momento che vi presenti questi due giovani virgulti.</p>
<p><strong>Chi o cosa sono Vala e Genie?</strong></p>
<p>Vale e Genie sono due linguaggi di programmazione OpenSource ad alto livello ed orientati agli oggetti portati avanti dalla fondazione di GNOME. La <em>raison d&#8217;etre</em> di questi due linguaggi, la loro missione, consiste nel limitare la diffusioni di linguaggi controversi come C# e le librerie Mono nel mondo Linux. Non credo serva ripetere quali sono i problemi di Mono in un ambiente open con Linux.</p>
<p><strong>Oh no! L&#8217;ennesimo linguaggio fotocopia!</strong></p>
<p>In realtà Vala e Genie sono qualcosa di più che una copia di C#. Ma partiamo dall&#8217;inizio. </p>
<p>La sintassi di Vala è presa quasi interamente da C# ma adattata alla struttura degli oggetti GObject (strutture dati ancestrali della programmazione Gnome). La sintassi di Genie invece ricopia la sintassi del Python.</p>
<p><strong>Quali sono i vantaggi rispetto a usare C# o python?</strong></p>
<p>Potrei elencare una lista di piccoli vantaggi. Tuttavia preferisco dirvene uno enorme: Vala e Genie sono compilati in C. Nessuna macchina virtuale, nessuna interpretazione del linguaggio, bensì tutta la potenza binaria del C. Volendo Vala e Genie vi forniscono anche il file .c e l&#8217;header .h in modo tale da poter integrare librerie in Vala all&#8217;interno di progetti in C.</p>
<p>Ovviamente il codice è meno prestante di un codice scritto in C nativamente (e scritto per bene) ma è comunque più veloce di una versione interpretata da una macchina virtuale.</p>
<p><strong>Bellissimo! Un esempio?</strong></p>
<p>Vala nasce dal progetto GNOME ed è quindi naturale che integri un supporto praticamente nativo con le librerie Gtk. Le Qt purtroppo non sono ancora supportate. Come esempio creiamo quindi una bella finestra in Gtk (l&#8217;esempio è preso da Wikipedia).</p>
<div class="codecolorer-container vala dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="vala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF;">using</span> <span style="color: #008080;">Gtk</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
<span style="color: #FF0000;">int</span> main <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; Gtk.<span style="color: #0000FF;">init</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">ref</span> args<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">var</span> window <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Window <span style="color: #000000;">&#40;</span>WindowType.<span style="color: #0000FF;">TOPLEVEL</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">title</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;First GTK+ Program&quot;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">set_default_size</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">300</span>, <span style="color: #FF0000;">50</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">position</span> <span style="color: #008000;">=</span> WindowPosition.<span style="color: #0000FF;">CENTER</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">destroy</span>.<span style="color: #0000FF;">connect</span> <span style="color: #000000;">&#40;</span>Gtk.<span style="color: #0000FF;">main_quit</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">var</span> button <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Button.<span style="color: #0000FF;">with_label</span> <span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Click me!&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; button.<span style="color: #0000FF;">clicked</span>.<span style="color: #0000FF;">connect</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>source<span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; source.<span style="color: #0000FF;">label</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Thank you&quot;</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">add</span> <span style="color: #000000;">&#40;</span>button<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; window.<span style="color: #0000FF;">show_all</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp;<br />
&nbsp; &nbsp; Gtk.<span style="color: #0000FF;">main</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">return</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br />
<span style="color: #000000;">&#125;</span></div></div>
<p>Il programma può essere compilato con:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">valac --pkg gtk+-2.0 gtkexample.vala -o gtkexample</div></div>
<p>Il risultato sarà un file binario perfettamente funzionante.</p>
<p><strong>Mi piace! Ma funziona solo su Linux?</strong></p>
<p>Vala e Genie sono nati per Linux. Esiste tuttavia un porting sperimentale per Windows.</p>
<p><strong>E come mai questi due linguaggi tanto promettenti non sono nella top 50?</strong></p>
<p>La risposta è una: gioventù. Il fatto che sia un linguaggio nato per linux da poco più che un anno sicuramente non aiuta. Tuttavia le premesse sono ottime.</p>
<p><strong>Sono interessato. Da dove comincio per programmare in Vala?</strong></p>
<p>Il vala non è molto diffuso e informazioni specifiche scarseggiano. Potete innanzitutto cominciare dal <a href="http://live.gnome.org/Vala">sito ufficiale</a>.</p>
<p>Io, personalmente, non ho in programma di scrivere nulla su Vala e Genie. Per SlashCode nel prossimo periodo ho intenzione ancora di trattare Lua, l&#8217;AI e alcune cose di simulazione fisica. Comunque, se mi capiterà di trovare libri, siti e guide interessanti non mancherò di linkarle. </p>
<p>Buon Vala a tutti. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=740&amp;md5=f43f90de30db885b0e36ad2dca7f341c" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/06/ragioni-per-valagenie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F06%2Fragioni-per-valagenie%2F&amp;language=it_IT&amp;category=text&amp;title=Ragioni+per+Vala%2FGenie&amp;description=Se+avete+visto+l%26%238217%3Bultimo+articolo+sui+venti+linguaggi+di+tendenza+forse+avete+notato+una+triste+assenza.+Nella+top-50+infatti+manca+completamente+l%26%238217%3Baccoppiata+Vala%2FGenie.+Se+non+l%26%238217%3Bavete+notata+allora+%C3%A8+il...&amp;tags=genie%2Cprogrammazione%2Cvala%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Linguaggi di programmazione: Top-20</title>
		<link>http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/</link>
		<comments>http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 09:16:36 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=738</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/"><img title="Linguaggi di programmazione: Top-20" src="http://davideaversa.it/slashcode/wp-content/uploads/2011/06/classifica-150x150.png" alt="Linguaggi di programmazione: Top-20"  width="200" height="200" /></a></div><br/>Intanto che rifinisco l&#8217;ltimo articolo di Lua o mi viene in mente qualcosa di intelligente da dire, vi presento i venti linguaggi più quotati nel mese di giugno 2011 così come rilevati da TIOBE. 1 &#8211; Java Conoscete già tutti Java, uno dei linguaggi più fastidiosi della storia (almeno secondo i miei canoni xD) che <a href='http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F06%2Flinguaggi-di-programmazione-top-20%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Linguaggi di programmazione: Top-20" data-url="http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2011/06/classifica.png"><img src="http://davideaversa.it/slashcode/wp-content/uploads/2011/06/classifica-150x150.png" alt="" title="Classifica" width="150" height="150" class="alignleft size-thumbnail wp-image-739" /></a></p>
<p>Intanto che rifinisco l&#8217;ltimo articolo di Lua o mi viene in mente qualcosa di intelligente da dire, vi presento i venti linguaggi più quotati nel mese di giugno 2011 così come rilevati da <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE</a>.</p>
<p><strong>1 &#8211; Java</strong></p>
<p>Conoscete già tutti Java, uno dei linguaggi più fastidiosi della storia (almeno secondo i miei canoni xD) che però detiene la prima posizione per due motivi: l&#8217;uso aziendale intensivo e il fatto di essere il linguaggio di programmazione nativo per Android.</p>
<p><strong>2/3 &#8211; C/C++</strong></p>
<p>Aggrego queste due posizioni in una a causa della strettissima correlazione fra i due linguaggi. Il fatto che siano nelle parti alte  della classifica non sorprende.</p>
<p><strong>4 &#8211; C#</strong></p>
<p>Il clone (migliorato) di Java targato Microsoft è competitivo. Non avevo dubbi, molte aziende utilizzano il framework .net per le loro applicazioni.</p>
<p><strong>5 &#8211; PHP</strong></p>
<p>PHP è il linguaggio di scripting più usato del Web. Dopo anni ancora nessun linguaggio riesce a competere in modo significativo con questo mostro sacro dei linguaggi (anche se, la sintassi del PHP sembra fatta apposta per rendere il codice illeggibile).</p>
<p><strong>6 &#8211; (Visual) Basic</strong></p>
<p>Qui c&#8217;è la prima <em>sorpresa</em>. Il Visual Basic, per chi bazzica la rete, è praticamente un linguaggio morto e solo un pazzo consiglierebbe a qualcuno di mettersi a studiare il Basic. Tuttavia è bene ricordare che VB era usato massicciamente per uso aziendale circa dieci anni fa e che il mondo aziendale è dannatamente lento. Ed è anche comprensibile: quale azienda spenderebbe tempo e denaro per riconvertire migliaia di linee di codice che in VB funzionano perfettamente ai loro scopi?</p>
<p><strong>7 &#8211; Objective-C</strong></p>
<p>Questo stupendo spin-off del C/C++ è il linguaggio di programmazione usato per iPhone e iPad, motivo per cui mi verrebbe la voglia di comprarmi un suddetto dispositivo e programmarci su. L&#8217;Objective-C è un estensione ad oggetti del C, come il C++, ma da un punto di vista sintattico rispetto a quest&#8217;ultimo sembra più organico e versatile.  L&#8217;uso nei dispositivi di casa Apple è sicuramente la causa principale del suo successo.</p>
<p><strong>8 &#8211; Python</strong></p>
<p>Onestamente il Python me lo immaginavo più alto. Il linguaggio di scripting più famoso e chiacchierato del decennio si ferma a 8 perdendo una posizione rispetto ad un anno fa.</p>
<p><strong>9 &#8211; Perl</strong></p>
<p>Perl è un linguaggio che ha perso un po&#8217; di fama e notorietà negli ultimi anni spodestato da linguaggi più complessi e completi come Python. Tuttavia, a livello di script di sistema, ci sono ancora tonnellate di script che utilizzano Perl. Dopotutto la sua integrazione nativa con le espressioni regolari lo rendono adattissimo allo scopo.</p>
<p><strong>10 &#8211; Lua</strong></p>
<p>Scalando ben 10 posizioni in un anno Lua arriva dalla ventesima alla decima posizione! Se non conoscete l&#8217;esistenza di Lua dopo gli articoli che ho fatto vi picchio! <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Questa è la novità più rilevante del rapporto tant&#8217;è che TIOBE gli dedica un approfondimento. Il motivo? Semplice, un anno fa Apple ha deciso di permettere l&#8217;esecuzione di Lua su iOS.</p>
<p><strong>11 &#8211; JavaScript</strong></p>
<p>Incremento per JavaScript. Il motivo a mio parere può essere solo uno: HTML5. Con i nuovi browser e le meraviglie che si possono fare con HTML5 e JavaScript quest&#8217;ultimo ha beneficiato di un notevole interesse da parte della comunità. Ricordo ancora quando il JavaScript veniva dato per morto a causa di Flash e altre tecnologie emergenti ora superate.</p>
<p><strong>12 &#8211; Ruby</strong></p>
<p>Ruby è un linguaggio di scripting strano: o lo si ama, o lo si ignora. Questo perché non offre molto più di un Python qualunque ma allo stesso tempo ha una sintassi molto piacevole. Un motivo per cui si mantiene attorno alla dodicesima posizione è la presenza del framework web RubyOnRails.</p>
<p><strong>13 &#8211; Delphi/OjectPascal</strong></p>
<p>Lo usavo a undici anni. Poi, ovviamente, è quasi scomparso dalla programmazione mainstream. Comunque, nonostante abbia perso ben 4 posizioni ancora rimane nella top 20. Il motivo per la sua permanenza è comunque storico e legato all&#8217;uso aziendale.</p>
<p><strong>14 &#8211; Lisp</strong></p>
<p>Questo meraviglioso linguaggio funzionale di &#8220;nicchia&#8221; è in posizione 14. Ho fatto qualche guida al suo dialetto Scheme che potete trovare nell&#8217;archivio di Slashcode.</p>
<p><strong>15 &#8211; Pascal</strong></p>
<p>È stupendo notare che un dinosauro dell&#8217;informatica come il Pascal sia ancora nella top 20. Il Pascal ha smesso di essere usato come linguaggio didattico già da anni eppure, a quanto pare, l&#8217;impatto che ha avuto negli anni 90 è stato talmente elevato che può vivere ancora di rendita.</p>
<p><strong>16 &#8211; Assembly</strong></p>
<p>Con Assembly TIOBE aggrega tutti i vari linguaggi macchina. L&#8217;uso di tali linguaggi è fondamentale per la programmazione di OS, Driver e altri moduli di bassissimo livello.</p>
<p><strong>17 &#8211; Transact-SQL</strong></p>
<p>Transact balza di 4 posizioni ed entra nella top-20. Questo linguaggio è un estensione proprietaria targata Microsoft del classico linguaggio SQL. Tuttavia, a differenza di SQL <strong>è Turing completo</strong> e quindi può essere considerato linguaggio di programmazione.</p>
<p><strong>18 &#8211; RPG (OS/400)</strong></p>
<p>Sale di ben 7 posizioni RPG. RPG è un linguaggio ad alto livello della IBM dalla sintassi scoppiacervello (tenete conto che è un evoluzione di un linguaggio pensato per schede perforate). Onestamente potete ignorarlo e vivrete comunque felici.</p>
<p><strong>19 &#8211; Ada</strong></p>
<p>Noto con piacere che un linguaggio dal nome così evocativo sia tornato nella top-20. Ada infatti prende il nome da Ada Lovelace la prima programmatrice del genere umano (ebbene si, era una donna). Ada si ispira molto alla sintassi del Pascal.</p>
<p><strong>20 &#8211; Scheme</strong></p>
<p>Dialetto del Lisp. Per cui valgono le stesse considerazioni del suo papà.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=738&amp;md5=d6cc1a8fb29279a939a37265caaf3b66" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/06/linguaggi-di-programmazione-top-20/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F06%2Flinguaggi-di-programmazione-top-20%2F&amp;language=it_IT&amp;category=text&amp;title=Linguaggi+di+programmazione%3A+Top-20&amp;description=Intanto+che+rifinisco+l%26%238217%3Bltimo+articolo+di+Lua+o+mi+viene+in+mente+qualcosa+di+intelligente+da+dire%2C+vi+presento+i+venti+linguaggi+pi%C3%B9+quotati+nel+mese+di+giugno+2011+cos%C3%AC...&amp;tags=News%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Come NON si scrive del codice</title>
		<link>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/</link>
		<comments>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:44:38 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=617</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/"><img title="Come NON si scrive del codice" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman-150x150.jpg" alt="Come NON si scrive del codice"  width="200" height="200" /></a></div><br/>Leggere del codice scritto da altri (o scritto da noi mesi o anni fa) può essere un esperienza spiacevole condita da molti tentativi di suicidio. Per non finire impiccati e per non far impiccare migliaia di colleghi nel mondo ci sono solo 8 punti da tenere a mente... e da non fare.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fcome-non-si-scrive-del-codice%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Come NON si scrive del codice" data-url="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman.jpg"><img class="alignleft size-thumbnail wp-image-618" title="hangman" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman-150x150.jpg" alt="" width="150" height="150" /></a>Ultimamente, lo ammetto, sto scrivendo parecchio meno del solito. Sono oscillazioni naturali, non si possono avere sempre cose intelligenti da dire e in questo caso è meglio tacere piuttosto che scrivere diecimila post uguali sull&#8217;ultima emissione gassosa di Google o di chissà quale altro software. Ho passato le ultime settimane per lo più a studiare (anche se non al ritmo che mi aspettavo causa mancanza di fonti e concentrazione) e ad approfondire alcuni miei interessi. Siatene giulivi poiché dispenserò a breve tale conoscenza a fiotti sulle vostre menti assetate.</p>
<p>Ma torniamo a noi. Nell&#8217;ultima settimana mi sono trovato a mettere le mani sul sorgente di <strong>KPackageKit</strong>. Questo sorgente è un vero lavoro machiavellico di ingarbugliamento di idee, completamente privo di documentazione e saltuariamente infarcito di commenti di poco aiuto come granella di nocciola sul gelato. Allorché, in preda al deliro causato dall&#8217;essermi letto migliaia di righe di codice senza averci capito quasi nulla, se non a grandi righe, mi è venuta l&#8217;idea di buttare due righe su come <strong>NON</strong> si programma.</p>
<p>Ci sono infatti <strong>una manciata di cose che un programmatore non deve mai fare</strong>. Una lista di <strong><em>COSE DA </em></strong><strong><em>NON FARE</em><span style="font-weight: normal;"> che troppo spesso vengono fatte al grido di &#8220;tanto funziona&#8221; e &#8220;tanto si capisce&#8221;. Risulta quindi più facile spiegarvi cosa </span><span style="font-weight: normal;">non fare</span><span style="font-weight: normal;"> piuttosto che insegnarvi il contrario.</span></strong></p>
<p><strong>1) NON DOCUMENTARE IL CODICE</strong></p>
<p>La risposta del tizio di KPK alla richiesta di documentazione è stata:</p>
<blockquote><p>I don&#8217;t create documentation for KPackageKit because I think libs needs to be docummented, and if you read the lib&#8217;s docs you will understand KPackageKit</p></blockquote>
<p>Permettetemi di dissentire. E&#8217; normale che un programmatore debba conoscere la documentazione delle librerie Y alla base di un progetto X, ma ciò non toglie che anche il progetto X debba essere documentato! La documentazione di X infatti serve, come minimo, a spiegare <strong>come viene utilizzata la libreria Y all&#8217;interno di X</strong>. La documentazione serve per aiutare chi mette le mani sul codice per la prima volta, fornisce un filo rosso da seguire per muovere i primi passi all&#8217;interno del codice senza perdersi e in modo efficiente, spiega quali sono i moduli, il loro funzionamento e come sono relazionati fra di loro. Tutte cose che si possono apprendere dal codice ma che necessita di un enormità di tempo.</p>
<p>Questo fa quindi perdere tempo al <em>novello programmatore</em> e spesso perdere tempo significa far perdere la voglia.</p>
<p><strong>2) DESCRIVERE IL CODICE</strong></p>
<p>Altro errore frequente è quello di descrivere il codice nei commenti. I commenti devono descrivere le intenzioni di un passaggio non tutti i dettagli. Dovete infatti assumere che chi legge il codice conosca il linguaggio e gran parte delle librerie sottostanti.</p>
<pre>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/* COMMENTO ERRATO:<br />
&nbsp;* Se a è maggiore di b restituisce a, altrimenti b.<br />
&nbsp;*/</span><br />
<br />
<span style="color: #ff0000; font-style: italic;">/* COMMENTO GIUSTO:<br />
&nbsp;* Restituisce il più grande fra a e b.<br />
&nbsp;*/</span><br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span> b<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> a<br />
<span style="color: #0000ff;">else</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> b</div></div>
</pre>
<p>Ora, quello sopra era un esempio piuttosto idiota ma spero sia chiaro il concetto. In sintesi i commenti dovrebbero descrivere tutto ciò che non è chiaramente intuibile leggendo il codice nei dintorni.</p>
<p><strong>3) USARE CONVENZIONI AD-PERSONAM</strong></p>
<p>Questo si traduce in un semplice <strong>usate le convenzioni del linguaggio</strong>. Questo va fatto sempre. Anche se una cosa è sintatticamente corretta non vuol dire che lo sia. Se nel linguaggio le classi cominciano per maiuscola <strong>NON</strong> fate classi che non cominciano per maiuscola. Questo serve a far subito capire ad altri programmatori il significato di una parola all&#8217;interno del codice. Se io leggo in un codice C++ la parola <code class="codecolorer text dawn"><span class="text">supereroe</span></code> io penso che sia una variabile e non una classe. Se invece scrivete <code class="codecolorer text dawn"><span class="text">SuperEroe</span></code> allora è chiaro che tale parola si riferisce ad una classe. Semplificando di molto il mio lavoro.</p>
<p>Oltre a questo le convenzioni di un linguaggio indicano la via corretta per molti altri aspetti. Se avete intenzione di infrangere delle convenzioni <strong>documentatelo</strong>. Come, ad esempio, fa Google con le <a href="http://google-styleguide.googlecode.com/svn/trunk/pyguide.html">linee guida per python</a>.</p>
<p><strong>4) NON MANTENERE UNA COERENZA INTERNA</strong></p>
<p>Cosa più semplice a farsi che a dirsi ma che spesso viene del tutto ignorata. Un esempio di coerenza interna è la posizione dei parametri di un metodo o di una funzione oppure il nome delle funzioni. Se decidiamo che tutte le funzioni che accettano in ingresso un vettore finiscano con la lettera v allora dobbiamo accertarci di seguire questa regola per tutto il progetto. Se decidiamo che il primo parametro delle funzioni che si riferiscono ad una <em>Persona</em> sia il nome allora dobbiamo accertarci che sia sempre così.</p>
<p><strong>5) LASCIARE BOLLE DI CODICE SOTTO COMMENTO</strong></p>
<p>Può capitare che, nel corso della scrittura di un programma si commentino grandi parti di una funzione o interi metodi. Questo può servire ad isolare del codice buggato o a nascondere funzionalità incomplete. Tuttavia, sebbene questo vada bene in rami locali personali non dovrebbe mai essere lasciato in rami pubblici. Se una funzione funziona bene, altrimenti la togliamo. Queste bolle di codice creano gran confusione  e soprattutto un programmatore intento a modificare il codice se le ritrova in mezzo alle scatole senza sapere se le può togliere oppure no.</p>
<p><strong>6) CHIAMARE LE VARIABILI CON UNA LETTERA O CON NOMI A CASO</strong></p>
<p>I nomi delle variabili dovrebbero essere piuttosto esplicativi. Ad esclusione di contatori ed iteratori, una variabile non dovrebbe <strong>mai</strong> avere un nome di una sola lettere. A meno che l&#8217;oggetto a cui si riferisce non sia proprio un qualcosa identificabile da una lettera (ad esempio le coordinate x e y di un punto). Non vedo dove sia il problema a scrivere variabili di una decina di caratteri considerando che tutti gli editor hanno l&#8217;auto-completamento.</p>
<p><strong>7) ORGANIZZARE IL CODICE SENZA CRITERIO</strong></p>
<p>Il codice va diviso e organizzato in macro-moduli (o <em>package, </em>come si chiamano in molti linguaggi) che siano coerenti fra loro. Questo per consentire un rapido accesso all&#8217;insieme dei moduli che gestiscono una data funzionalità. <strong>Questi macro-moduli vanno assolutamente documentati</strong>.</p>
<p><strong>8 ) SCRIVERE CODICE SENZA PROGETTO</strong></p>
<p>Questo è il punto fondamentale. I programmi vanno prima scritti a computer spento. Non fatevi prendere dalla fretta di scrivere e compilare perché al 90% esce un casino. Questo può andare bene per piccoli progetti e roba semplice ma per qualunque cosa di complesso è un suicidio. Programmate tutto su carta. Scrivete le classi di cui avete bisogno, le relazioni fra le stesse, le operazioni salienti, i moduli da fare e i package in cui suddividerli. Dopo <strong>un paio di giorni</strong> di analisi a computer spento vedrete che con mezza giornata scriverete migliaia di righe di codice come se fossero sonetti in rima baciata.</p>
<p>Ovviamente mentre scriverete e proverete il codice sul serio salteranno parecchie cose di cui non avevate tenuto conto o errori di progetto. Ma non fa nulla. Questa è la prassi, è il modo in cui vanno fatte le cose.</p>
<p><strong>CONCLUSIONE</strong></p>
<p>Ora spero che appenderete questi 8 punti sulla vostra parete perché io non ho più voglia di impiccarmi mentre leggo del codice scritto e documentato da un macaco. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Se seguite i miei consigli e <strong>non</strong> fate questi 8 punti (in realtà potrebbero essere di più ma oggi sono buono) vedrete che sarà tutto più facile per voi, sia per chi ha intenzione di aiutarvi.</p>
<p>Buona giornata. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=617&amp;md5=8599e16600e8e12240828285f8b7ac87" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fcome-non-si-scrive-del-codice%2F&amp;language=it_IT&amp;category=text&amp;title=Come+NON+si+scrive+del+codice&amp;description=Ultimamente%2C+lo+ammetto%2C+sto+scrivendo+parecchio+meno+del+solito.+Sono+oscillazioni+naturali%2C+non+si+possono+avere+sempre+cose+intelligenti+da+dire+e+in+questo+caso+%C3%A8+meglio+tacere+piuttosto+che...&amp;tags=programmazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>La posta di Slashcode &#8211; Come iniziare a programmare</title>
		<link>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/</link>
		<comments>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 17:47:45 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[lettere]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=599</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/"><img title="La posta di Slashcode &#8211; Come iniziare a programmare" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/scrivere-150x150.jpg" alt="La posta di Slashcode &#8211; Come iniziare a programmare"  width="200" height="200" /></a></div><br/>A parte il titolo stupido di questa &#8220;rubrica&#8221; volevo pubblicare la risposta ad una domanda che mi è arrivata da Facebook. La domanda è la tradizionale &#8220;Come faccio a programmare come un Dio?&#8221;. Domanda la cui risposta basterebbe da sola a riempire corsi e tonnellate di guide. Tuttavia ho scritto un mezzo poema e, unito <a href='http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fla-posta-di-slashcode-come-iniziare-a-programmare%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="La posta di Slashcode &#8211; Come iniziare a programmare" data-url="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-600" title="scrivere" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/scrivere-150x150.jpg" alt="" width="150" height="150" /></p>
<p>A parte il titolo stupido di questa &#8220;rubrica&#8221; volevo pubblicare la risposta ad una domanda che mi è arrivata da Facebook. La domanda è la tradizionale &#8220;Come faccio a programmare come un Dio?&#8221;. Domanda la cui risposta basterebbe da sola a riempire corsi e tonnellate di guide. Tuttavia ho scritto un mezzo poema e, unito al fatto che la risposta può servire anche ad altri, mi sembra sprecato lasciarla nella mia casella di posta in uscita.</p>
<p>La domanda era la seguente:</p>
<blockquote><p>io avrei bisogno di un consiglio se possibile: vorrei sapere come sei arrivato e dove hai imparato a fare queste cose cosi complesse?io provo provo e provo ma fallisco miserabilmente.</p></blockquote>
<p>Ed ecco la risposta.</p>
<p><em>Mi fanno in molti questa domanda e difficilmente riesco a dare risposte soddisfacenti.</em></p>
<p><em>Per primo credo che sia necessario apprendere una </em>forma mentis<em> che va al di là del linguaggio usato per programmare. Questo permette di passare facilmente da un linguaggio ad un altro e di &#8220;progettare&#8221; un applicazione ancor prima di scrivere una sola riga di codice.</em></p>
<p><em>Tale impostazione è la cosa a mio avviso più importante. Bisogna imparare a trattare le cose che vogliamo fare come entità matematiche perché , fondamentalmente, i computer sanno fare solo calcoli matematici.</em></p>
<p><em>Il problema è, come sempre, trovare il modo per entrare in quest&#8217;ottica. Il primo modo è avere una preparazione matematica basilare: la matematica è di per se un &#8220;linguaggio&#8221; e conoscerlo aiuta molto. Secondo c&#8217;è il lato puramente informatico. Riguardo a questo ci sono un paio di consigli che con l&#8217;esperienza mi sento di dare:</em></p>
<p><em>1) <strong>Scegliersi un linguaggio e concentrarsi su quello</strong>. Non cambiare quindi linguaggio nella speranza che vada meglio: le basi concettuali sono sempre le stesse. </em></p>
<p><em>2) La scelta del linguaggio è molto importante: linguaggi troppo &#8220;severi&#8221; rischiano di farti concentrare troppo sul lato &#8220;macchina&#8221; del linguaggio, linguaggi troppo &#8220;di bocca buona&#8221;, al contrario, astraggono talmente tanto la programmazione che difficilmente si imparano i suoi aspetti fondamentali. <strong>Io quindi solitamente consiglio delle buone vie di mezzo come C# o Java</strong> (tanto per usare i più famosi). Python è molto facile ma lo trovo &#8220;poco istruttivo&#8221;: è molto più facile passare da C# o Java ad un altro linguaggio piuttosto che passarci da Python.</em></p>
<p><em>3) <strong>Perseverare</strong>. Una volta appresa la sintassi di un linguaggio non si sa programmare. A programmare si impara programmando: piazzarsi un obbiettivo non troppo elevato e iniziare a portarlo avanti. Anche abbandonarlo se si rivela troppo alto ma l&#8217;importante è provarci. Il 90% delle cose che ho imparato le ho imparate sbattendoci la testa, cercando soluzioni su Google, chiedendo a gente più esperta. Quindi ti consiglio caldamente di imparare la sintassi di un linguaggio e di usare quello per realizzare piccoli progetti personali. Roba anche inutile ma utile per imparare. Ad esempio scoprirai che è molto istruttivo cercare di implementare una specie di rubrica da terminale.</em></p>
<p><em>4) <strong>Ultimo consiglio: le librerie.</strong> Quando si padroneggia un linguaggio è giunge il momento di imparare qualche libreria: interfacce grafiche (Gtk o QT ad esempio), sistemi audio (gstreamer o Xine), per l&#8217;interazione col web, e così via&#8230; Questa è l&#8217;unica parte veramente difficile <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  E a questo punto non puoi far a meno di chiedere e domandare in giro e dovrai pensarci solo a tempo debito.</em></p>
<p><em>Mi sono dilungato anche troppo. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Ti ringrazio per la domanda che mi ha spinto a una piccola riflessione e spero che tu possa continuare a provarci. Per ogni domanda che ti verrà in mente durante il tuo percorso puoi sempre trovarmi su <strong>Slashcode</strong> o chiedere sul forum di <strong>LinuxQualityHelp</strong>.</em></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=599&amp;md5=5e021cba9c8eccb1f416399539abf26f" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fla-posta-di-slashcode-come-iniziare-a-programmare%2F&amp;language=it_IT&amp;category=text&amp;title=La+posta+di+Slashcode+%26%238211%3B+Come+iniziare+a+programmare&amp;description=A+parte+il+titolo+stupido+di+questa+%26%238220%3Brubrica%26%238221%3B+volevo+pubblicare+la+risposta+ad+una+domanda+che+mi+%C3%A8+arrivata+da+Facebook.+La+domanda+%C3%A8+la+tradizionale+%26%238220%3BCome+faccio+a+programmare...&amp;tags=lettere%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Come organizzare un progetto</title>
		<link>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/</link>
		<comments>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/#comments</comments>
		<pubDate>Mon, 24 May 2010 10:47:51 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=584</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/"><img title="Come organizzare un progetto" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/05/House_of_cards-150x150.jpg" alt="Come organizzare un progetto"  width="200" height="200" /></a></div><br/>Stavo attrezzando un piccolo progettino scemo sulle OpenGL (più didattico che altro) e così ho pensato di condividere quelle regole non scritte che servono ad organizzare e gestire un progetto software. Sono piccole &#8220;tips&#8221;, struttura delle cartelle e file che non devono mai mancare. Presenterò anche altri strumenti, come ho fatto per Python, ma questa <a href='http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F05%2Fcome-organizzare-un-progetto%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Come organizzare un progetto" data-url="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-585" title="House of cards" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/05/House_of_cards-150x150.jpg" alt="" width="150" height="150" />Stavo attrezzando un piccolo progettino scemo sulle OpenGL (più didattico che altro) e così ho pensato di condividere quelle regole non scritte che servono ad organizzare e gestire un progetto software. Sono piccole &#8220;tips&#8221;, struttura delle cartelle e file che non devono mai mancare. Presenterò anche altri strumenti, come ho fatto per Python, ma questa volta saranno strumenti &#8220;generici&#8221;, ovvero utilizzabili con qualunque linguaggio.</p>
<p>Questo perché tenere in piedi un progetto male organizzato è come costruire un castello di carta. Ci vuole una base forte per rendere il più accogliente possibile il progetto per le persone interessate a collaborare, sia per i membri del vostro team (se ne avete uno).</p>
<p><strong>STRUTTURA CARTELLE</strong></p>
<p>Le cartelle vanno organizzate in modo piuttosto coerente. È importante non mischiare tutto in poche cartelle confuse specialmente per progetti destinati a crescere rapidamente. Una struttura minimale è la seguente:</p>
<ul>
<li><strong>src</strong> &#8211; La cartella <em>src</em> contiene il codice sorgente. Il codice al suo interno può essere organizzato come si desidera in accordo con le convenzioni del linguaggio. L&#8217;importante è che contenga solamente il codice del programma/libreria.</li>
<li><strong>test</strong> &#8211; La cartella <em>test</em> contiene il codice sorgente dedicato ai test. Il codice di test serve a provare il corretto funzionamento delle classi sviluppate o di alcuni moduli software oppure possono essere semplicemente test prestazionali.</li>
<li><strong>build</strong> &#8211; La cartella <em>build</em> contiene tutti i file ottenuti come residuo di una compilazione. Possono essere moduli parziali C/C++ (.o), classi Java (.class), file python compilati (.pyc) e così via. La cartella va a sua volta divisa nelle varie configurazioni di compilazione (ad esempio ci potrebbe essere una configurazione <em>Debug</em> con compilati ottimizzati per il debug e una configurazione <em>Release</em> con compilati ottimizzati per le prestazioni).</li>
<li><strong>dist</strong> &#8211; La cartella <em>dist<strong> </strong><span style="font-style: normal;">contiene il prodotto finito. Può essere il programma eseguibile, un file .jar, una libreria .so e così via. Tutto quello che sta in dist deve essere pronto per essere eseguito e distribuito.</span></em></li>
<li><em><span style="font-style: normal;"><strong>doc</strong> &#8211; La cartella <em>doc</em> contiene la documentazione dettagliata. Tale documentazione è per lo più la specifica dettagliata delle API la quale è solitamente auto-generata.</span></em></li>
</ul>
<p><strong>FILE MUST</strong></p>
<p>Nella cartella radice sono necessari alcuni file. Necessari è una parola grossa in quanto solitamente il programma funziona benissimo anche senza, ma sono un tocco di classe e di umanità verso chi vuole accedere ai sorgenti della vostra applicazione.</p>
<ul>
<li><strong>Tool di compilazione -</strong> Sia Makefile, o Cmake o qualunque altro tool utilizzate&#8230; <strong>DEVE</strong> esserci uno strumento per la configurazione e la compilazione. Molti IDE possono anche auto-generare roba simile.</li>
<li><strong>README</strong> &#8211; Il readme deve dire vita morte e miracoli sull&#8217;applicazione. Deve spiegare come può essere compilata  l&#8217;applicazione, quali sono le dipendenze, i bug noti, etc..</li>
<li><strong>README.src</strong> &#8211; Per applicazioni il cui README è eccessivamente complesso è bene separare le informazioni per sviluppatori in un file a parte. Il file README.src deve spiegare come è organizzato il codice, quale IDE si è usato (se si è usato), quale librerie di sviluppo servono, quale strumenti si sono usati per generare la documentazione, per i test e per altro. Insomma&#8230; tutto ciò che può essere utile per chi è interessato alla modifica del codice.</li>
<li><strong>COPYRIGTH </strong>- Il file che contiene le informazioni sulla licenza del progetto.</li>
<li><strong>CHANGELOG</strong> &#8211; Il file che contiene la lista dei cambiamenti apportati al programma nel corso della sua storia. Questo file può essere auto-generato da alcuni sistemi di CVS.</li>
</ul>
<p><strong>DOCUMENTAZIONE</strong></p>
<p>Scrivere a mano la documentazione è sempre l&#8217;ultimo dei problemi. Nonostante ci siano molte cose che debbano necessariamente essere scritte a mano, per le API è possibile usare dei tools automatici. Abbiamo visto Epydoc per python. Bene, per tutto il resto c&#8217;è <strong>Doxygen</strong>. Doxygen è un programma di auto-generazione della documentazione utilizzabile per una miriade di linguaggi.</p>
<p><strong>CVS</strong></p>
<p>Il programma per CVS è essenziale se programmate in gruppo ma è molto utile anche se programmate da soli. Vi permette di manipolare il codice con molta disinvoltura navigando fra branch diversi in modo del tutto trasparente.</p>
<p>Potete usare quello che vi pare come CVS anche se io consiglio sempre <strong>GIT</strong>. Lo trovo molto più veloce ed elastico dei concorrenti. Se volete convincervi potete sempre andare su <a href="http://it.whygitisbetterthanx.com/">http://it.whygitisbetterthanx.com/</a> <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>MESSAGGISTICA</strong></p>
<p>Ebbene si. Se avete un gruppo di persone con cui lavorate insieme non potete prescindere da un sistema rapido e veloce per lo scambio di informazioni, siano esse &#8220;OMG! Non funziona una cippa!&#8221; o messaggi più tecnici.</p>
<p>A questo punto avete le basi. Non vi resta che seguire questi consigli e lanciarvi nel tempestoso mondo del software libero sperando che il vostro progetto non sia un castello di carte spazzato via dal vento.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=584&amp;md5=80f2256c07614aa3f748c61afec9b950" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F05%2Fcome-organizzare-un-progetto%2F&amp;language=it_IT&amp;category=text&amp;title=Come+organizzare+un+progetto&amp;description=Stavo+attrezzando+un+piccolo+progettino+scemo+sulle+OpenGL+%28pi%C3%B9+didattico+che+altro%29+e+cos%C3%AC+ho+pensato+di+condividere+quelle+regole+non+scritte+che+servono+ad+organizzare+e+gestire+un+progetto...&amp;tags=cvs%2Cdocumentation%2Cgit%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Aggiornamento Guida Programmazione</title>
		<link>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/</link>
		<comments>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 13:20:39 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=531</guid>
		<description><![CDATA[Avevo promesso aggiornamenti settimanali ed eccomi qui. Il capitolo sulla logica booleana è grossomodo terminato. Mancano degli esercizi che inizierò a mettere presto. Inoltre c&#8217;è anche la prima parte del capitolo sugli algoritmi. Come al solito sono gradite segnalazioni di errori, commenti e richieste di maggiori chiarimenti su parti della guida che ho involontariamente lasciato troppo <a href='http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Faggiornamento-guida-programmazione%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Aggiornamento Guida Programmazione" data-url="http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Avevo promesso aggiornamenti settimanali ed eccomi qui. Il capitolo sulla logica booleana è grossomodo terminato. Mancano degli esercizi che inizierò a mettere presto. Inoltre c&#8217;è anche la prima parte del capitolo sugli algoritmi.</p>
<p>Come al solito sono gradite segnalazioni di errori, commenti e richieste di maggiori chiarimenti su parti della guida che ho involontariamente lasciato troppo fumose.</p>
<p>Trovate tutto al solito link: <a href="http://davideaversa.it/digital/main.html" target="_blank">DIGITAL MIND</a></p>
<p>Ciao</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=531&amp;md5=aaa25a7cfc26e4a4b0a91b81a045262c" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Faggiornamento-guida-programmazione%2F&amp;language=it_IT&amp;category=text&amp;title=Aggiornamento+Guida+Programmazione&amp;description=Avevo+promesso+aggiornamenti+settimanali+ed+eccomi+qui.+Il+capitolo+sulla+logica+booleana+%C3%A8+grossomodo+terminato.+Mancano+degli+esercizi+che+inizier%C3%B2+a+mettere+presto.%C2%A0Inoltre+c%26%238217%3B%C3%A8+anche+la+prima+parte+del+capitolo...&amp;tags=Guide%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

