giovedì 17 settembre 2009

How many proprietary stuffs... - part 1


...must a man face, before you can call him an engineer?
Troppi. Lasciate che vi racconti l'inferno che vivo ormai da quasi due settimane, nella speranza che questo post sia utile a convincere i meno informati su quanto dannosi possano essere i brevetti software e l'uso di software proprietario in generale.

Si da il caso che io, giovane e inesperto allievo ingegnere informatico debba, per superare l'esame di Tecniche di Programmazione Avanzata, realizzare un sistema software distribuito utilizzando il linguaggio C# (!) , lavorando con Micro$oft Visual Studio (!!) e utilizzando tecnologie quali wcf, wpf(!!!).

(Scrivete le vostre facezie su micro$oft e winzozz qui e non inondate il blog con i soliti commenti scontati!)

Per poter realizzare quanto sopra, ho bisogno di installare sul mio portatile quello che gli esperti amano chiamare ambiente di produttività.

Step 1: installazione Visual Studio
come prima cosa devo installare Visual Studio, ovvero l'IDE più pesante e avido di risorse della storia dell'informatica. L'installazione della suite completa dura ben quarti d'ora e si mangia qualcosa come 3.4 GB di spazio su disco. I primi brividi mi salgono su per la schiena. E siamo solo all'inizio.

16 commenti:

  1. E qui, caro Loris, nasce un problema.

    Cosa deve insegnare l'Universita'? A usare tecnologie gia' pronte in modo che si sia pronti per il mondo del lavoro (ma solo per un "certo" mondo del lavoro)? Oppure deve insegnare i modelli, i concetti, le tecniche, le astrazioni, i principi, e poi proporre alcune tecnologie come casi di studio?

    Mi piacerebbe sentire i vostri commenti ....

    RispondiElimina
  2. Tutti felici di pensare che a tre anni passati male (e forse anche sprecati) ne seguiranno due in cui impareremo ad usare qualcosa che un dodicenne usa già leggendo giornaletti...dodicenni che forse hanno cultura informatica (e generale) superiore a quella di alcuni professori della triennale (che ci ritroviamo in specialistica).
    Tutti felici di pensare ad un corso di laurea privo di materie fondamentali come "Algoritmi", "Strutture Dati" e "Crittografia" (e non dite che è già inclusa in sicurezza).
    Tutti felici di essere iscritti in un ateneo in cui i corsi vengono imposti con mezzi più politici che didattici (così come i professori che dovranno gestirli) e risultano perlopiù ripetitivi e inutili.
    Tutti felici di doversi preparare la notte su argomenti che l'università non ci insegna.
    Tutti felici e questa volta senza sarcasmo di aver accumulato abbastanza rabbia da poter essere sicuri di concludere qualcosa negli prossimi anni sebbene attaccandosi a forza di mascelle al futuro.

    RispondiElimina
  3. E' giusto che l'universita' fornisca tecniche, astrazioni e principi sugli argomenti giusti. Fare troppe materie di base (come le varie Analisi Matematiche) e non fare neanche una materia di algoritmi non è la scelta giusta secondo me. E' ancora più sbagliato sopprimere completamente le astrazioni e le nozioni di progettazione perchè non serve una laurea per usare delle tecnologie.
    Quindi secondo me l'obbligo di usare un determinato ambiente di sviluppo e una determinata architettura è molto fuori luogo; C# è un linguaggio e come tale ha IDE e supporto in tutte le piattaforme: non ha senzo proibire le alternative. L'universita' non puo' sponzorizzare e adattarsi ad una situazione di monopolio; chi vuole usare prodotti Microsoft userà Visual Studio, chi non vuole non lo farà.

    RispondiElimina
  4. Io sto quasi finendo la specialistica e ho avuto modo, durante questi due anni, di realizzare progetti sia in ambienti totalmente open source che in ambienti "chiusi" e queste sono alcune delle mie conclusioni:

    Realizzare un web service usando axis e tomcat è decisamente molto più complicato rispetto a realizzarlo sul famigerato Visual Studio.

    Provare a debuggare agevolmente un'applicazione distribuita su eclipse è utopistico rispetto a fare la medesima cosa sul famigerato Visual Studio.

    Vogliamo parlare degli strumenti open source messi a disposizione per sviluppare sui cellulari? Tremendi...Follia allo stato puro. Fare un client per un web service sul famigerato Visual Studio è come bere un bicchier d'acqua cosa che non avviene col plug in di android per eclipse.

    Vogliamo poi parlare degli ambienti per sviluppare codice di modellazione dell'hardware? Datemi il nome di un IDE opensource migliore di ModelSim.

    Vogliamo continuare con gli ambienti utilizzati nell'ambito industriale? Ditemi se esiste qualcosa in grado di programmare PLC alternativo a programmi "a pagamento" della Siemens o altre fabbriche.

    Secondo me quello che deve contraddistinguere gli ingegneri informatici dagli informatici è il fatto di essere il meno possibile fanatici rispetto a certi modi di pensare. Secondo me si deve innanzitutto conoscere entrambi i mondi e poi cercare di essere obiettivi e capire quando per fare una cosa impiegherei un terzo del tempo rispetto a farla in un altro modo e quindi scegliere la tecnologia più adeguata. Certo meglio se libera per non avere vincoli di alcun genere... ma ci dobbiamo rendere conto che il più delle volte i programmi a pagamento alias chiusi se la cavano meglio di quelli aperti in termini di produttività. Tutto qua


    Se fossi un imprenditore ragionerei molto sul fatto di comprare licenze per un ambiente produttivo o spendere molti mensili in più per i programmatori che lavorano a lumaca.

    RispondiElimina
  5. prima di rispondere, permettetemi di darvi il bevenuto: sono contento del fatto che ci seguiate e spero che i post di questo blog possano sempre essere un buon punto di partenza per riflessioni e confronti.

    Una delle intenzioni di questo post (e degli altri che seguiranno) era quella di mostrare quanto sia difficile, per chi ha avuto poco a che fare con i sistemi Microsoft, accettare la logica apparentemente assurda che sta dietro certe soluzioni nate come proprietarie e fatte diventare standard (il C# è uno standard ISO!) a suon di quattrini.

    Quanto al discorso su cosa sia meglio proporre in un corso universitario, propendo per il secondo degli scenari proposti da Corrado. Aggiungo che, IMHO, l'università non dovrebbe preoccuparsi di formare futuri sviluppatori .NET (qui stiamo parlando di Microsoft ma il discorso può essere esteso a tutte le soluzioni proprietarie) quanto, piuttosto, di formare professionisti in grado di capire, caso per caso, se l'utilizzo di soluzioni basate su .NET sia o meno la soluzione *ottima*. Per diventare sviluppatore .NET si può benissimo frequentare un corso Microsoft e ottenere una certificazione Microsoft.

    Concludo con questo intervento di Bruce Perens che rispecchia tout court il mio pensiero riguardo l'uso di soluzioni proprietarie:
    http://pollycoke.net/2009/04/03/perens-rincara-via-fat-ooxml-mono-silverlight/

    RispondiElimina
  6. Qui non si parla di formare uno sviluppatore .NET. Ti ricordo che il corso che ti fa mettere mano al .NET è solo uno, mentre ci sono altri dieci corsi in cui ti propinano in continuazione tecnologie che vertono su Java. Se qualcuno ha pensato ad un corso per insegnarti cos'è C# (che a mio parere da pedate in faccia al "giava" :) ) e cosa si può fare col Visual Studio, cosa ti assicuro attualissima uscendo da qua, non credo sia da crocifiggere.

    RispondiElimina
  7. Che l'universita' sia politicizzata e che l'affidamento dei corsi sia strumentalizzato non me lo toglie nessuno dalla testa.
    Il discorso che si sta affrontando e' un altro ed e' sicuramente interessante.
    Un mio parere e' che sia giusto fare entrambe le cose, cioe' insegnare le astrazioni, i concetti ecc e poi come vanno messi in atto. Per mettere in atto io intendo con gli strumenti che vengono usati quotidianamente nell'ambito lavorativo e (purtroppo) gli strumenti proprietari sono utilizzati da moltissime aziende del settore.
    Di sicuro viene utilizzato anche Java, ma la piattaforma .Net e' molto diffusa.
    Certo, io in python ho fatto lo stesso che si fa in .net con una fatica forse pure minore pero' io lavoro per i fatti miei e posso usare gli strumenti che voglio. Ma se si guarda a largo spettro il mercato del lavoro le richieste sono principalmente per lavori su .net e java.
    Quindi che si insegni ad usare VS non lo vedo cosi' sbagliato a patto che come ci sia una spiegazione preventiva dei concetti che stanno dietro e che esulano dalla scelta della piattaforma.

    Saluti
    Davide

    RispondiElimina
  8. Forse c'é stato un qui pro quo. :)
    Qui nessuno sta crocifiggendo nessuno. Non ho né l'autorità né l'autorevolezza né la competenza per farlo. Ho semplicemente detto che, IMHO:

    1. la logica che sta dietro certi sistemi di sviluppo proprietari (tra cui Visual Studio) mi è *poco chiara* e a volte incomprensibile. (Nei prossimi post racconterò delle disavventure che ho vissuto per settare i permessi della directory "Inetpub" dove sta IIS - sembrerebbe una operazione da nulla e invece è successo di tutto!)

    2. la logica che muove certe aziende a fornire sistemi di sviluppo software basati sulle loro piattaforme *chiuse* è - ahinoi - *chiarissima*: renderci tutti loro clienti (nel migliore dei casi), renderci tutti dipendenti dai loro aggiornamenti e dalle loro release.

    RispondiElimina
  9. Mamma mia che commenti!! :-)

    Be', dico la mia...

    Concordo con il 90% di quello che dice Sebastiano, eccezion fatta per il discorso sui corsi, che non e' del tutto errato, secondo me, ma meriterebbe una riflessione un po' piu' accurata. Vi ricordo infatti che uno dei problemi della laurea in Ingegneria Informatica e' quello di capire in cosa deve essere diversa da Informatica. Per Algoritmi e Strutture Dati, ok, ma forse Crittografia risulterebbe un po' eccessiva. Dopo tutto, ricordo anche che non e' *fisicamente possibile* insegnare e/o parlare in 5 anni di tutto quello che c'e' nel mondo dell'informatica. Ne converrete :-)

    Per quanto riguarda la politicizzazione, in certi ambiti e' molto peggio di quanto possiate immagiare.

    Massimo, secondo me, dice cose giuste, ma nel contesto sbagliato. Ancora una volta, secondo me, l'Universita' deve formare "esseri pensanti" e non "operai specializzati": diventare cretini dietro a Tomcat ed AXIS, non avere strumenti per il debug e affidarsi ai printf o System.out.println per risolvere i problemi e', secondo me, molto piu' formativo che usare il metodo "click&go"! Quando sarai in azienda, non avrai piu' tempo di imparare come impazzire dietro tomcat e axis (nel caso lo volessi fare), ma sarai chiamato a usare il "click&go", essere produttivo e rilasciare il prodotto ancor prima che sia stato regolarmente debuggato (quindi goditi questi anni!!!) Io ho iniziato programmando gli Z80 in esadecimale, e di certo il debugger allora non c'era, e, vi assicuro, quella ed altre esperienze del genere, mi hanno dato moltissimo!

    Quanto a Davide, la sua diplomazia e il suoi colpi al cerchio e alla botte sono fantastici :-) Ma non posso fare a meno di essere d'accordo con lui!

    RispondiElimina
  10. Io sono convinto che l'universita' deve insegnare i modelli, i concetti, le tecniche, le astrazioni ed i principi, in modo da far uscire gente meno settorializzata e in grado di poter applicare cio' che ha imparato a alle diverse applicazioni pratiche che poi si trovera' d'avanti. Altrimenti finisce che esce gente che sa usare un programma X e se il mercato cambia fa molta fatica ad adattarsi alle nuove tecnologie.

    Un esempio pratico, ha poco senso a basi di dati fare solo access, che se poi ti ritrovi davanti ad un database serio poi non sai minimamente da dove iniziare.

    Sopratutto le materie in cui c'e' da svolgere una tesina ha poco senso costringere lo studente all'uso di un'unica tecnologia in particolare, ma sarebbe meglio lasciare allo studente la liberta' di scegliere gli strumenti appropriati, compatibilmente con la materia.

    RispondiElimina
  11. Ho dimenticato di firmare il commento: sono Mancausoft

    RispondiElimina
  12. @Loris: quello che tu poni e' un problema molto piu' ampio e che esula dal sw.
    E' il classico problema etico del denaro... perche' se ci pensi si tratta sempre e solo di quello.
    La M$ tiene i suoi pacchetti belli chiusi, ha i suoi agganci e continua a fare il bello e cattivo tempo. Ma e' pure vero che lo fa perche' ha i numeri per farlo. Il mercato winzoz ricopre il 90% e quindi sviluppare su windows e' spesso piu' redditizio. Si forma il circolo vizioso che riconduce ai soldi (mercato = $$).
    Chi mi conosce sa che non sono un sostenitore delle "cose chiuse" (le case chiuse magari si :D, scherzo), ma mi sono dovuto scontrare con la realta'... vaglielo a spiegare tu ad un avvocato/architetto/chi_volete_voi che usare linux e' meglio ma che non avra' tutti i software che oggi usa...

    Oggi solo una cosa ci puo' piano piano fare staccare da windows e sono le web application. E' l'unica (imho) vera realta' nell'ambito della portabilita' (ormai c'e' pure il supporto opengl :P). Non me ne vogliamo i sostenitori di java, python ecc ecc io il deployment di alcune applicazioni l'ho fatto e installare una valanga di roba come JVM, framework ecc ecc non lo vedo come sinonimo di portabilita'.

    @Corrado: tu mi conosci e sai (vedi Erlang) che il mio approccio alle problematiche e' quello del classico smanettone. Io devo CAPIRE anche a forza di printf che succede e perche'.
    Pero' questo mi rendo conto che e' molto difficile da insegnare a qualcuno e per questo motivo credo che le facolta' che insegnino a pensare siano davvero difficili da realizzare. Sono pienamente daccordo con te sulla voglia di formare "essere pensanti" solo che non lo vedo facilmente realizzabile, anzi con le teste che ci sono oggi (studenti e professori) lo vedo davvero molto difficile. Parliamoci chiaro, non sono solo i professori che spesso non sanno spiegare spesso siamo pure noi studenti che non vogliamo andare oltre il nostro naso.

    Io credo che spesso sarebbe meglio calmare la frenesia: imparare a capire e poi imparare a fare.

    Ok dopo questa mia massima (che chi mi conosce sa che non so da dove mi sia uscita :D) sappiate che continuo ad essere quel vecchio anarchico insurrezionalista che un tempo aveva piu' forza di schiantare il sistema ma che oggi a SOLI 25 anni si sta cominciando a scontrare con la realta' che ci circonda :/

    RispondiElimina
  13. @"Cosa deve insegnare l'Universita'? A usare tecnologie gia' pronte in modo che si sia pronti per il mondo del lavoro (ma solo per un "certo" mondo del lavoro)? Oppure deve insegnare i modelli, i concetti, le tecniche, le astrazioni, i principi, e poi proporre alcune tecnologie come casi di studio?"

    Sono senza dubbio pro alla seconda, gli strumenti che servono sono le conoscenze dei concetti ed astrazioni, che sono applicabili a qualsiasi tecnologia si utilizzi.. Il nostro lavoro è diverso dal semplice tecnico che conosce delle cose nello specifico e va avanti a testa bassa solo su quello, bisogna invece saper risolvere problematiche diverse da progetto a progetto, le tecnologie da usare in fondo sono solo degli strumenti.. Conoscerli serve per avere il lavoro semplificato e la soluzione implementativa a portata di mano ma l'università appunto non può dare tutto lo scibile informatico :P consideriamo poi che sono tecnologie che vanno e vengono negli anni! Averne qualcuna come casi di studio è la soluzione migliore.. Peccato che le materie non siano tutte così!

    RispondiElimina
  14. @"Ancora una volta, secondo me, l'Universita' deve formare "esseri pensanti" e non "operai specializzati": diventare cretini dietro a Tomcat ed AXIS, non avere strumenti per il debug e affidarsi ai printf o System.out.println per risolvere i problemi e', secondo me, molto piu' formativo che usare il metodo "click&go"! "

    Su questo siamo totalmente d'accordo, dico solo che occorre un buon tradeoff nel conoscere tecnologie che ti richiedono un alto dispendio di tempo per l'utilizzo nonostante diano una maggiore conoscenza di meccanismi altrimenti nascosti da tecnologie più evolute. Ripeto che io propendo per un giusto mix, conoscere a fondo i meccanismi alla base delle tecnologie facendo pratica con ambienti meno evoluti e non negare l'uso di sistemi che evitano di "fare sistematicamente a manina operazioni facilmente automatizzabili" così da essere pronti uscendo da qua. Credo che l'università debba fare questo.

    RispondiElimina
  15. Be', a quanto vedo dalle risposte, le opinioni sembrano convergere verso una soluzione nella quale il giusto trade-off tra "principi" e "strumenti" (chiamiamoli cosi') sembra essere l'ottimo! Come sempre "in medio stat virtus" :-)

    A questo punto, se volete fare un servizio a voi e a chi verra' dopo di voi, non lasciate al vento (o alla rete) queste parole e queste opinioni: proprio in questi giorni (si iniziera' domani pomeriggio) si sta discutendo sulla riorganizzazione del corso di Ingegneria Informatica (secondo le nuove regole della riforma DM270). Fate avere i vostri commenti alla Prof. Di Stefano, sensibile a questi discorsi e giusto oggi riconfermata Presidente del CAD per altri quattro anni. Sensibilizzare anche i vostri rappresentanti su questi punti (altrimenti che rappresentanti sono??)!!

    Io, da parte mia, provero' a far qualcosa, ma non posso far molto visto che tra un mese usciro' dal CAD di Ingegneria Informatica :-)

    RispondiElimina
  16. Parlando dei contenuti dei corsi accademici, non possiamo non tenere conto del famigerato 3 + 2. L'idea alla base del processo di Bologna era quello di uniformare i sistemi universitari europei attraverso l'istituzione di:
    - corsi di laurea di primo livello (o Bachelor)
    - corsi di laurea di secondo livello (o Master)

    Negli altri paesi la laurea Bachelor è generalmente un corso fatto di poca teoria e molta pratica che fornisce, a chi la consegue, una base solida di competenze che permette di iniziare a lavorare (tant'è che molti conseguono la laurea triennale intorno ai 21-22 anni e poi iniziano a lavorare).
    D'altro canto, per chi vuole proseguire gli studi, ci sono le lauree specialistiche che, a differenza di quelle nostre, sono realmente *specializzanti*: alla university of technology di Sydney, ad esempio, esiste il corso di laurea Master in Computer Engineering con specializzazione in Software Engineering: il piano di studi è composto per la maggior parte da materie inerenti l'ingegneria del software, dalla pianificazione del ciclo di vita alla manutenzione del codice, ai patterns per la riusabilità.
    Per chi vuole continuare la propria carriera accademica ci sono i PhD.

    Da noi, invece abbiamo:
    - una laurea triennale che fa tantissima teoria e pochissima pratica. Non basta, da sola, a fornire competenza sufficienti per lavorare. Magrissima consolazione è quella di avere accesso al titolo di "dottore". E più una presa in giro che altro.
    - una laurea specialistica che di specialistico non ha proprio niente: è un agglomerato incasinatissimo di 18 (!) materie, ciascuna delle quali tratta argomenti e problematiche specifici, e i cui corsi si sviluppano - quando va bene - in 50/60 ore. Ovvero si fa di tutto e lo si fa di corsa. Di conseguenza, lo si fa male.
    Per non parlare dei finti percorsi di specializzazione: differiscono tra loro solo per 9 crediti. Inutili.

    Ripensare il contenuto di certi corsi non basta. Occorre ricalibrare l'intero corso di laurea.

    PS
    Il corso di laurea della University of Technology of Sydney a cui mi riferivo è questo:
    http://www.eng.uts.edu.au/courses/postgraduate/msem.htm

    RispondiElimina