How I got Started in Software Development

Taggato da Matteo, Daniele e Omar

Ok, detesto le catene ma non rispondere potrebbe sembrare scortese. Quindi eccomi qua (iper prolisso come sempre!):

How old were you when you started programming?

A 15 anni, frequentando il liceo sperimentale Virgilio, di Roma. Era una scuola curiosa, con i primi due piani utilizzati per il liceo classico, dove gli studenti studiavano e sgobbavano da matti e si confrontavano con i voti (altro che crediti e debiti!), mentre noi al terzo piano eravamo liberi di studiare come e quanto ci pareva, e non era infrequante vederci in cortile a giocare a pallavolo o pallacanestro, salvo poi essere inesorabilmente bocciati (senza alcun preavviso) a fine anno. Ciascuno era (o sarebbe dovuto essere) responsabile del proprio impegno, una sorta di anteprima dell'università.

All'interno della stessa classe, oltre alle materie principali c'erano i diversi "rami", quali classico, scientifico, linguistico e (dulcis in fundo) informatico. Così le classi si scioglievano e si ricomponevano di ora in ora come pesciolini nel mare, e i professori erano in generale bravi e motivati. Dopo pochi mesi io avevo libero accesso all'aula di informatica e al computer, e ci restavo sino alle 8 di sera, quando il bidello e custode della scuola mi cacciava via dicendo: "Ma una casa, tu, non ce l'hai?".

How did you get started in programming?

Primo trimestre di informatica: i diagrammi di flusso. Primo esercizio: scrivere un diagramma di flusso per far uscire un automa da un labirinto. Il tutto fatto con carta matita e gomma. Ho subito capito che non avrei fatto nient'altro nella vita (... e sbagliavo, visto che ora faccio l'imprenditore agricolo).

What was your first language?

Una versione del BASIC del P6060 Olivetti (andate a vedere la descrizione su old-computers.com)

Olivetti_P6060_System_1

What was the first real program you wrote?

Su quella mostruosa macchina, dopo essere uscito fulminato dalla visione dell'animazione in "fil di ferro" dell'astronauta che si perde nello spazio nel film "2001 Odissea nello spazio", mi sono lanciato con totale incoscienza nella realizzazione di un programma di grafica 3D che mi consentisse di descrivere un ambiente fatto di oggetti tridimensionali, con la possibilità di farli ruotare nello spazio.

Data l'esiguità dei mezzi, mi sono concentrato sulle piramidi tronche (5 soli vertici). Per il gusto della ricerca e della sfida ( a 15 anni...) non ho letto alcun testo sull'argomento, e dotato di una conoscenza rudimentale della trigonometria (sen, cos e tang) mi sono immerso in nottate e disegni a mano libera.

Me li ricordo ancora come momenti fantastici, col cervello che ti frulla a tremila, tante strade sbagliate e continue frustrazioni, ma anche con grandi e intense soddisfazioni.

Alla fine ce l'ho fatta, e riprendendo il miei fogli in occasione dell'esame di geometria analitica è stato bello ritrovare, semplificando le mie formule, proprio quelle del libro di testo.

Certo, niente calcolo matriciale, che avrebbe enormemente migliorato le prestazioni, ma volete mettere la soddisfazione di aver fatto tutto da solo?

What languages have you used since you started programming?

AppleBasic su Apple//, DBIII e il mitico Clipper sui PC, vari orrendi programmi di sviluppo per Mac, Turbo Pascal, Lisp (solo per studio), C (che ho sempre detestato), Borland Delphi dalla versione 1 alla 7, ed ora C#.

What was your first professional programming gig?

Il programma di contabilità su Apple// che ha funzionato egregiamente per molti anni nell'azienda di mio padre.

If you knew then what you know now, would you have started programming?

Anch'io quoto Andrea Saltarello: Tutta-la-vita!

If there is one thing you learned along the way that you would tell new developers, what would it be?

Ai miei tempi non c'era internet e il massimo che potevi avere era una copia di Byte all'edicola di Via Veneto (che aveva le riviste straniere). Io ho sbagliato nel voler reinventare tutte le volte la ruota, con un atteggiamento spaccone di chi può fare tutto. Grandissimo errore, grandissima perdita di tempo. Quindi mi sento di dare due consigli:

  1. Studiare l'inglese: le traduzioni in italiano del libri di informatica sono orrende. Sul web la gran parte del materiale è in inglese. Non c'è via di scampo.
  2. Googlare, googlare, googlare. Se solo avessi avuto internet... (mica tutti si chiamano Raf e pokano la RAM per fare reverse engineering...)

What's the most fun you've ever had ... programming?

Lo so, è puerile, ma ho fatto bippare il P6060 a ritmo di samba...

Now, let’s tag someone else…

Taggo chi vuole partecipare e non è stato ancora taggato.

Nota bene: questo anonymous tag vale solo per un post, il primo che lo usa (citandolo) lo consuma.

ILazy Vs. ISmartLazy

E' universalmente risaputo che tutti gli sviluppatori software implementano l'interfaccia ILazy, ossia sono pigri per definizione. Dopo due giorni di Community Days, mi sono convinto dell'esistenza di due diversi modi di essere pigri:

  • ILazy
  • ISmartLazy

Alcuni esempi di implementazione ILazy:

  • Scrivo il codice senza fare testing, e schedulo il debugging il più tardi possibile, possibilmente facendolo fare a qualcun altro;
  • Documentazione? No grazie, tanto io lo so quello che ho scritto...
  • Studiare TDD, OR/M, IoC, Design Patterns... Non ho mica tempo da perdere, io!
  • Refactoring di ciò che "puzza". Ma perchè? Se funziona, non lo tocco.

Alcuni esempi di implementazione ISmartLazy:

  • Ogni elemento dell'applicazione dev'essere corredato della sua suite di tests, così non faccio le 3 di mattina di domenica perché lunedì devo consegnare...
  • Documento oggi, per non impazzire (o non far impazzire qualcun altro) domani
  • Se uso un framework di IoC, posso faticare mooooolto meno dopo, perchè posso iniettare logica di logging, testing e quant'altro senza toccare il codice testato, anche se non abbiamo necessità architetturali di più alto livello (applicazioni  estendibili e configurabili "a caldo").
  • Se studio NHibernate (o un altro OR/M), e imparo a usarlo bene, mi risparmio una montagna di lavoro per persistere il domain model sul database relazionale.
  • Scrivere secondo i principi OO, per gestire il cambiamento senza dover ricominciare tutto da capo, sapendo che non basta usare un framework e un linguaggio object oriented per scrivere applicazioni object oriented!

Chiaro no?

Il mio primo "Community Days"

CDays2008

Il dado è tratto (o quasi)

Leggendo il post di Roberto Messora ho finalmente deciso quali sessioni seguire:

Mercoledì:

Ovviamente, mercoledì sera a cena con gli amici.

Giovedì

Tutto perfetto? Quasi. Perchè mi perdo la sessione SP1303 - WPF 3.5 SP1 di Corrado Cavalli e visto che nell'ultimo mese non ho fatto altro che studiare WPF e 'sta cosa proprio non mi va giù.

XX: Xtreme Xperience

Tranquilli: manca una x, quindi non è un post osceno. Ma godurioso si, almeno per me.

Ho partecipato al corso di Andrea Saltarello su Architettura delle Soluzioni .NET, che si è tenuto presso la sede Microsoft di Milano.

Alcune impressioni (e sono tutte orientate a slappare il suddetto docente):

  • Il corso è una ficata pazzesca. Due giorni spaccatutto, dove l'adrenalina si somma alla stanchezza per mantenere altissima l'attenzione. Ogni minuto è denso di informazioni, ogni informazione passata è preziosa.
  • Per quel che mi riguarda, mix di teoria e pratica veramente azzeccato. Tutti i temi che mi interessavano sono stati toccati, e anche quando ti sembra che Andrea stia divagando, poi ti accorgi che era propedeutico al pezzo successivo e che tutto torna, e sei sempre rimasto sul tema.
  • Sono riuscito ad interagire parecchio (spero di non aver spaccato gli zibidei agli altri partecipanti) cosa che da una parte mi ha chiarito i vari dubbi o incertezze che volta volta si sono presentati, dall'altra mi ha dato una soddisfazione tremenda (ecco dove sta la goduria) perchè per capire cosa diceva Andrea era necessario avere un background di base che personalmente mi sono fatto studiando in questi due ultimi anni. In parole povere: dua anni fa se avessi seguito il corso non avrei capito una mazza, quindi tutte le notti che ho passato sui libri e sul PC sono valse a qualcosa, e per me non è poco.

La sede Microsoft è molto bella, e sono riuscito a farmi fare una rapidissima demo di roundtable, che mi è piaciuto molto.

Ciliegina sulla torta, la sera siamo andati con Andrea a cena fuori in un birrificio dove ci siamo fatti del male. Birra buona, carne spettacolare. Ho anche fatto amicizia con alcuni "colleghi di corso", tutti in gamba e molto simpatici, coi quali spero di potermi rincontrare presto, spero ai Community Days.

Grazie Andrea!

 varie 28 giu 2008 087 varie 28 giu 2008 088 varie 28 giu 2008 089 varie 28 giu 2008 090 varie 28 giu 2008 086

Come una goccia d'acqua nel mare...

image 

anch'io ne sono parte!

Community Days 2008

image

image

Caro Raf, vengo nella tua track per continuare a studiare WPF! :-)

WPF: Ready to go?

Dopo circa due mesi di studio (notturno e frammentato) mi sono fatto una mia idea di WPF: potente e affascinante, ma pericoloso.

Sulla potenza e sul fascino non mi soffermo, il web è pieno di info al riguardo.

Sul fatto che sia pericoloso, faccio un semplice esempio, basato sull'interazione tra XAML e codice c#.

L'uso promisquo di codice XAML e codice c#, oltre ad essere una necessità, è la pietra angolare della filosofia di progetto di WPF, che prevede la separazione tra i layer di presentazione e di logica (permettetemi questo obbrobrio, tanto avete tutti capito cosa intendo).

Questa promisquità da una parte è un bene, perchè usando una programmazione dichiarativa, è possibile esprimere cosa si vuole ottenere, lasciando che il framework implementi il come si ottiene.

Dall'altra è male, perchè abbiamo fatto tanto per avere sistemi di sviluppo che verifichino quanto più possibile a "compile time" la correttezza (almeno formale) dei nostri sorgenti, mentre con WPF si fa allegramente uso di valori testuali per utilizzare dal codice c# gli oggetti definiti in XAML.

Un esempio semplicissimo, con una TextBox e un Button:

<Window x:Class="WpfApplication.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Esempio" Height="300" Width="300"> <StackPanel> <TextBox Name="textBox1" Margin="5"/> <Button Click="Button_Click" Margin="5">Mostra il valore</Button> </StackPanel> </Window>

private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show(this.FindName("textBox1").ToString()); }

Il risultato di questa complicatissima applicazione è a dir poco spettacolare:

image 

Ora, se per qualsivoglia motivo cambiamo nel sorgente XAML il nome del TextBox, sostituendo "textBox1" con "pippo", abbiamo due effetti collaterali indesiderati:

  1. L'ambiente di sviluppo (VS 2008), visto che sto cambiano un valore testuale, non prevede alcun avviso del tipo "cerca e sostituisci";
  2. La compilazione fila liscia come l'olio.

Peccato che ora l'esecuzione del programma vada in crash.

image

Mi sa che tocca lavorare di brutto con i test, ma al momento non ho alcuna esperienza di TDD con WPF, perchè (come mio solito) ci ho solo giocato per capire cos'è.

E voi cosa ne pensate? Se interessa potremmo spostare la discussione sul forum.

Io, per non saper ne leggere ne scrivere (e ne sicuramente programmare), torno a WinForm.

Bill Gates Capo della Difesa USA

Ho appena ascoltato su "StrisciaLaNotizia" una fantastica chicca: secondo il TG3, il Capo della Difesa Americana è nientepopodimeno che Bill Gates!

Linq per Java

Anche se non si tratta di .NET mi sembra interessante segnalare che  db4objects  sta conducendo un'iniziativa per promuovere LINQ for Java:

· LINQ for Java follows db4objects approach of Native Queries. To know more about this initiative read Carl's blog.

· Having a common interface on .NET and Java that is natively supported would create a easy to use, efficient standard for database developers.

To read along or participate in this effort join the JLINQ group.

Incredibile ma vero. Una volta tanto la comunità di sviluppatori si ispira e implementa qualcosa già realizzato da Microsoft, e non viceversa.

«agosto»
domlunmarmergiovensab
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456