Come iniziare a programmare

« Older   Newer »
 
  Share  
.
  1. diosantos
        Like  
     
    .

    User deleted


    Sezione A

    Come iniziare a programmare


    Questa guida è rivolta in particolare a tutti coloro che hanno intenzione di intraprendere lo studio di un linguaggio di programmazione, ma anche a chi ha bisogno di qualche delucidazione su questo argomento. Preannuncio che, nel capitolo "Scelta del linguaggio", non analizzerò in maniera accurata i linguaggi web, poichè questa guida è indicata per lo studio dei linguaggi "offline" :)

    Compilatori e IDE

    La macchina (il PC) non può interpretare autonomamente i codici sorgente dei vari linguaggi di programmazione. Per questo motivo, quando un programmatore termina la stesura del codice sorgente della propria applicazione, esegue un particolare tipo di software, chiamato compilatore. Quest'ultimo, legge e analizza il codice sorgente (che è scritto in un linguaggio di programmazione), e successivamente lo "converte" in un determinato tipo di codice, chiamato "codice oggetto". Entrerà poi in azione un altro programma, chiamato linker, che ha il compito di "collegare" il codice oggetto alle varie librerie delle quali necessita per il suo corretto funzionamento. Da questo momento, il programma è pronto per essere utilizzato.

    Stando a quanto ho detto fino ad ora, per scrivere un programma bastano 3 componenti fondamentali:

    - La conoscenza di un linguaggio di programmazione;
    - Un compilatore per il suddetto linguaggio (a meno che non si tratti di un linguaggio Interpretato, ma questo argomento verrà trattato nel capitolo successivo);
    - Un editor di testo (ad esempio il Blocco Note di Windows) per scrivere il codice.

    In effetti sono sufficienti questi tre elementi, ma quando si devono sviluppare applicazioni molto complesse e pesanti, lavorare solo con il Blocco Note risulta alquanto confusionario e stancante. È per questo che sono nati gli IDE ("Integrated Development Environment", ovvero "Ambiente integrato di sviluppo"). Ogni IDE è essenzialmente formato da un compilatore (descritto sopra) ed un Editor di codice sorgente.
    Quest'ultimo è coadiuvato da moltissimi tools e accorgimenti, atti a semplificare la "vita" del programmatore.

    Adesso elencherò i principali strumenti presenti all'interno dell'Editor di un IDE.

    - Syntax Highlighting: le parole chiave del linguaggio vengono scritte in colori diversi, in modo da renderne più facile l'individuazione;
    - Indentazione automatica: il codice viene "ordinato" con le adeguate spaziature, consentendo una lettura più rapida e chiara;
    - Completamento automatico: durante la scrittura di una parola, vengono fornite automaticamente tutti i possibili utilizzi della stessa.

    Altre due definizioni: un IDE può anche essere definito RAD (Rapid Application Development), quando comprende ulteriori strumenti, che consentono un rapido sviluppo delle applicazioni.
    La GUI (Graphical User Interface) di un programma è l'interfaccia grafica, ovvero la parte "visuale" del software.

    Tutti questi concetti appariranno notevolmente più chiari al momento della stesura del codice.

    La scelta del linguaggio


    Introduzione

    Scegliere il primo linguaggio di programmazione da studiare è alquanto difficile, sia per la grande quantità di linguaggi esistenti, sia per le enormi differenze presenti tra questi, che in alcuni casi non possono essere facilmente recepite da chi non ha mai studiato programmazione.
    Esistono dei linguaggi specifici per la programmazione delle pagine Web, ma (come ho già detto nella Prefazione) non li tratterò nello specifico.
    Cominciamo col differenziare i linguaggi Object-Oriented da quelli Procedurali.

    Programmazione procedurale oppure Object-Oriented?

    I linguaggi procedurali seguono un'ideologia alquanto primitiva. Lo scopo del programma viene raggiunto attraverso vari passaggi, con un semplice ordine chiamato top-down, ovvero "dall'alto verso il basso". Solo nel 1967 qualcuno si è accorto che non si poteva continuare così, poiché bastava che la complessità di un programma aumentasse di poco, per rendere il sorgente lungo ed inutilmente intricato. Così nacquero i primi esempi di Programmazione Orientata agli Oggetti (Object-Oriented).
    Quest'ultima prevede che ogni singolo "oggetto" del programma, sia rapportato ad una situazione reale, e in questo modo si ottiene un sorgente notevolmente più comprensibile ed ordinato, e questo favorisce anche la possibilità di modificarlo in pochissimo tempo.
    La spiegazione in dettaglio del funzionamento della programmazione ad oggetti non è compresa tra gli obiettivi di questa guida, quindi fornisco solamente questo piccolo gruppo di concetti, in modo da poter far comprendere al lettore gli scopi dell'ideologia Object-Oriented.
    Riassumendo, possiamo affermare che la programmazione ad oggetti sfrutta una logica reale e definita, al contrario della programmazione procedurale.

    Alcuni esempi di linguaggi orientati agli oggetti sono: Java, tutti i linguaggi .NET, C++ (non completamente); mentre C, Visual Basic sono linguaggi procedurali (saranno trattati in seguito).

    Linguaggi Interpretati e Compilati

    I linguaggi di programmazione possono essere ulteriormente suddivisi in Interpretati e Compilati. Vediamo cosa significano questi termini.
    Ho già fatto un'ampia introduzione sui compilatori, che (come dice il nome) servono per i linguaggi compilati, ovvero quelli che vengono tradotti in un codice comprensibile per la macchina (in caso di dubbi, leggere il capitolo precedente).
    I linguaggi interpretati invece, vengono letti e "compresi" da un interprete specifico per il linguaggio, e quindi le istruzioni presenti all'interno del sorgente vengono eseguite (un esempio di linguaggio interpretato è il Python).
    I programmi scritti con un linguaggio compilato risultano più veloci di quelli interpretati, dato che questi ultimi vengono "riletti" ad ogni esecuzione, ma hanno una minore possibilità di essere eseguiti su altri Sistemi Operativi.
    Esistono inoltre dei linguaggi che costituiscono una sorta di "via di mezzo" tra la compilazione e l'interpretazione. Essi infatti vengono "compilati" in un particolare codice, che viene poi eseguito da un interprete (Come il Java, in cui l'interpete e la JVM [Java Virtual Machine]).

    Linguaggi ad alto e basso livello

    Si sente spesso parlare di linguaggi ad "alto" e "basso" livello. La differenza sostanziale è che i linguaggi a basso livello (l'Assembly ad esempio) operano a stretto contatto con la macchina e le loro istruzioni vengono eseguite direttamente dal processore. Questo dà origine ad una serie di pregi e difetti tra i quali si notano la possibilità di eseguire operazioni altrimenti impossibili tra i primi, e la grande complessità del codice tra i secondi. Quest'ultima è una conseguenza logica del funzionamento dei linguaggi a basso livello, poiché bisogna "specificare" nel codice ogni singola operazione da eseguire, mentre nei linguaggi ad alto livello questo è svolto automaticamente, rendendo il codice molto più chiaro e veloce da scrivere, ma allo stesso tempo consentendo la creazione di programmi con funzionalità limitate a livello di sistema. Dicendo "funzionalità limitate" non intendo dire che ci sia una grande limitazione nei linguaggi ad alto livello. È meglio specificare perché, seguendo la mia spiegazione fino ad ora, si sceglierebbe sicuramente di imparare l'Assembly, e francamente non lo consiglio come primo linguaggio. Con un linguaggio ad alto livello, si possono scrivere vastissime quantità di programmi, anche complessi (programmi di grafica [anche a livello di Photoshop], giochi 3D, chat e milioni di altre categorie) con moltissime righe di codice in meno rispetto ad uno stesso programma scritto in Assembly. Vorrei inoltre chiarire che l'uso di un linguaggio a basso livello non sempre coincide con la creazione di un programma complesso (inteso come software ricco di funzioni particolari). I linguaggi a basso livello (non basso come il Java, ma basso come l'Assembly) vengono perlopiù utilizzati per scrivere programmi piuttosto semplici (ovvero con poche funzioni, grafica scarna, etc) ma che eseguono delle operazioni strettamente connesse con la macchina. Si sente anche parlare di linguaggi "a basso livello" parlando ad esempio del Java. Bisogna specificare che il Java è considerabile a basso livello solo se paragonato ad un linguaggio ad un livello ancora più alto, come il Visual Basic, ma non ha nulla a che vedere con l'Assembly.

    Complessità del linguaggio

    Quanto è difficile imparare un linguaggio? Dipende da quale linguaggio si sceglie. Nel capitolo precedente ho già accennato all'aumento della complessità del codice man mano che il "livello" del programma si va abbassando. Per questo motivo ci sono dei giovani programmatori che decidono di iniziare con un linguaggio a basso livello, anche a costo di trovarsi di fronte una sintassi ardua da comprendere, ed altri che preferiscono imparare le prime nozioni con un linguaggio più semplice, per poi incrementare la complessità dei linguaggi studiati.
    Inutile dire che entrambe le strade sono positive, ma l'impegno è l'aspetto fondamentale.
    Inizio a citare qualche linguaggio, in modo da poter presentare alcune alternative all'aspirante programmatore (in questa sezione mi occupo solamente di descrivere i vari linguaggi dal punto di vista grammaticale e funzionale. Per maggiori informazioni sui vari IDE esistenti, leggere la Sezione B).

    Linguaggi con tecnologia .NET (Visual Basic .NET, C#, Visual C++, J#...)
    Descrizione: La tecnologia .NET si basa sul ".NET framework", ovvero quell'ambiente di lavoro che permette di creare ed eseguire applicazioni .NET. L'esecuzione delle applicazioni scritte in .NET è affidata al CLR (Common Language Runtime), che esegue il codice IL (Intermediate Language), ovvero quel tipo di codice che costituisce i programmi compilati in .NET.

    Vantaggi: l'IDE è ben strutturato; VB.NET ha una sintassi molto semplice; sono Object-Oriented.

    Svantaggi: sono linguaggi ad alto livello; NON sono multi-piattaforma.

    Visual Basic 6 (e precedenti)
    Descrizione: è (anzi era, dato che ormai è stato dichiarato deprecato) uno dei linguaggi più utilizzati al mondo. Le ragioni di questo successo sono soprattutto costituite dalla grande semplicità del linguaggio. Nelle versioni 5 e 6, si trova un limitato supporto all'Object-Oriented.
    Ormai viene sfruttato solamente da chi programma da molto tempo, e quindi è "nato" con Visual Basic. Non è consigliabile studiarlo, dato che è stato interamente soppiantato dalla tecnologia .NET.

    Vantaggi: sintassi molto semplice

    Svantaggi: supporto Object-Oriented molto limitato; dichiarato ormai deprecato dalla stessa Microsoft.

    Java
    Descrizione: Java è un linguaggio interamente Object-Oriented. Il suo funzionamento è basato sulla JVM (Java Virtual Machine), che è in grado di eseguire il codice Bytecode, ovvero quello scritto dal compilatore. Questa caratteristica rende Java un linguaggio facilmente "portabile", cioè multi-piattaforma. A livello teorico, Java è potenzialmente portabile anche su sistemi ancora inesistenti :)

    Vantaggi: è Object-Oriented; sintassi non troppo complessa; è "sia interpretato che compilato", quindi è multi-piattaforma.

    Svantaggi: pochi :)

    C
    Descrizione: Il C è un linguaggio di programmazione a basso livello. Non essendo Object-Oriented ed avendo di per sè una sintassi non molto semplice da apprendere, non è una delle principali scelte degli aspiranti programmatori.

    Vantaggi: è a basso livello.

    Svantaggi: NON è Object-Oriented; la sintassi può risultare complessa.

    C++
    Descrizione: E' il successore del linguaggio C, con l'innovazione dell'Object-Oriented. Purtroppo però, pur di mantenere la compatibilità con il C, nel C++ l'Orientamento agli Oggetti è stato mediamente sacrificato, pertanto non si può parlare di un linguaggio Object-Oriented puro.

    Vantaggi: è il successore del C, ma è in parte Object-Oriented.

    Svantaggi: proprio per la compatibilità con il C, NON è interamente Object-Oriented.

    Maggiori informazioni sui vari linguaggi possono essere trovate facilmente sul web.


    Sezione B: "I migliori IDE"

    In questa sezione mi occuperò di descrivere gli IDE più famosi dei principali linguaggi, affinchè il lettore possa scegliere quello che soddisfa maggiormente le sue esigenze. Li suddividerò ovviamente per linguaggio, e successivamente ne elencherò caratteristiche, pregi e difetti.

    Linguaggi .NET (Visual Basic .NET, C#, Visual C++, J#...)
    L'IDE per eccellenza rivolto a chi ha intenzione di sviluppare applicazioni con tecnologia .NET è senza dubbio Visual Studio (Microsoft).
    Oltre agli strumenti comuni ad ogni IDE (già citati nella Sezione A, capitolo "Compilatori e IDE"), Visual Studio mette a disposizione dello sviluppatore l'IntelliSense, una forma di completamento automatico davvero utile, che consente di scrivere "a mano" molto meno codice di quanto ne sarebbe necessario. Inoltre è un RAD (ho spiegato cosa significa nella Sezione A, capitolo "Compilatori e IDE"), poichè è fornito di un editor visuale delle forms (le "finestre" dei programmi).
    Visual Studio, ormai giunto alla versione 2008 (ufficialmente, dato che viene distribuita l'anteprima della versiona 2010), è disponibile sia gratuitamente, che non. L'edizione Express è gratuita, ed è più che sufficiente per qualsiasi sviluppatore, a meno che non si tratti di un'azienda o di programmatori ad alti livelli commerciali. Per questi ultimi tipi di utenza, esistono le edizioni Standard, Professional e Team System, che ovviamente sono a pagamento.
    Per gli amanti dell'OpenSource, esiste Mono.

    Java
    Tra gil IDE più famosi per Java, troviamo Eclipse e NetBeans.
    Eclipse è OpenSource ed è considerabile un RAD, dato che permette di modificare graficamente le GUI delle applicazioni sviluppate. Lo stesso vale per NetBeans, ma c'è una differenza che li separa: le librerie grafiche utilizzate. Eclipse utilizza le SWT, mentre NetBeans sfrutta le Swing, ovvero le librerie grafiche standard di Java, che però sono più pesanti a livello di prestazioni.

    C++
    Oltre al già citato Eclipse, per C++ esistono altri IDE, tra i quali Dev-C++ e Code::Blocks.
    Dev-C++ è un IDE gratuito per ambiente Windows, che purtroppo è stato abbandonato nel 2005. Esiste anche un IDE creato da altri sviluppatori che ha migliorato le funzionalità di Dev-C++, aggiungendo un designer per le applicazioni che sfruttano le wxWidgets, infatti questa modifica dell'IDE si chiama wxDev-C++.
    Code::Blocks è un IDE OpenSource multipiattaforma. E' possibile "estenderlo" utilizzando dei plugin.

    Sezione C: "Come si studia un linguaggio di programmazione"

    Lo scopo di questa sezione è quello di spiegare (per quanto possibile a parole) il modo migliore di affrontare lo studio di un linguaggio di programmazione. Seguendo meticolosamente il processo che descriverò, si potranno ottenere ottimi risultati in un tempo relativamente ridotto.

    1. La scelta della guida
    Esistono migliaia di manuali, sia cartacei che online, sui vari linguaggi di programmazione. Quando si decide di studiare un linguaggio, bisogna prestare particolare attenzione alla scelta della guida, dato che il nostro modo di programmare verrà influenzato permanentemente proprio dal modo in cui vengono spiegati i contenuti all'interno della guida.
    Ma che caratteristiche deve avere una buona guida? Ovviamente chi si è appena affacciato al mondo della programmazione non può rispondere a questa domanda, e pertanto potrebbe scegliere una guida non proprio ottima. Una buona guida non deve solo descrivere la sintassi (cioè la parte "grammaticale" del codice), dato che bene o male questa si può trovare in tutte le guide, ma deve spiegare tutto ciò che sta dietro al codice, in modo che lo studente possa davvero capire il funzionamento del linguaggio. Questo andrà ovviamente a favore dell'apprendista programmatore, poichè è più semplice memorizzare dei concetti realmente capiti e assimilati, piuttosto che impararli a memoria.
    Spesso non basta aprire il primo risultato che ci fornisce Google per trovare una guida veramente completa ed esaustiva. I manuali cartacei sono soggetti ad una selezione molto più "severa" di quelli rintracciabili sul web, dato che questi ultimi possono essere pubblicati da chiunque, senza che vengano segnalate eventuali imprecisioni o mancanze. Questo non vuole assolutamente dire che sul web sia impossibile trovare una buona guida, anzi. Ne esistono diverse che ho sperimentato personalmente e devo dire che sono allo stesso livello di quelle stampate su carta. Un altro aspetto che spesso è la causa di un cattivo apprendimento da parte di un apprendista programmatore, è il prezzo delle guide. Quelle cartacee costano (e non 1€ :)), mentre quelle sul web sono gratuite. Per questo motivo, in buona parte dei casi, si è portati a scegliere una guida online.
    Un grande aiuto può essere fornito da chi ormai è esperto in questo campo, e quindi può consigliare ai "nuovi arrivati" le migliori guide in circolazione sulla rete. Nel caso in cui però non si trovino i contenuti adatti, è obbligatorio dirigersi ad acquistare un buon manuale cartaceo (anche in questa scelta conviene farsi aiutare da chi ne sa di più).

    Lo studio vero e proprio
    Dopo l'acquisto (o il download) di un buon manuale, occorre armarsi di moltissima pazienza ed impegno. Questo è uno degli errori più frequenti nei giovani programmatori, che tendono a sottovalutare lo studio dai manuali, e alla fine ne piangono le conseguenze, dato che imparano una piccola infarinatura del linguaggio, non sono in grado di sviluppare applicazioni proprie senza aiuti esterni e si ritrovano a dover riguardare in continuazione la guida, senza peraltro apprendere i contenuti inizialmente tralasciati.
    Se la guida è davvero ben scritta, sarà alquanto lunga, ma questo non deve scoraggiare il lettore. Infatti un buon manuale è strutturato per guidare il lettore nello studio passo passo, magari anche con la presentazione di piccoli esercizi al termine di ogni capitolo.
    L'aspetto più importante è l'attenzione che si pone durante la lettura. Personalmente sconsiglio di svolgere altre attività in contemporanea allo studio di un linguaggio di programmazione (ascoltare musica, etc), poichè questo influisce negativamente sull'apprendimento. Inoltre la lettura non deve essere svolta "di corsa", ma con la lentezza che lo studio richiede. Leggendo troppo velocemente, il nostro cervello non assimila parti del testo che nella gran parte dei casi sono molto importanti, e spesso forniscono la base per lo studio degli argomenti successivi. Quindi anche una piccola disattenzione, che quindi porta ad una comprensione incompleta del capitolo o del paragrafo, deve essere immediatamente corretta con una seconda lettura, perchè non si potranno apprendere i capitoli sucessivi, senza avere incamerato appieno i concetti dei precedenti.

    E' più importante la teoria o la pratica?
    Questa domanda introduce l'ennesimo grave errore che viene spesso commesso dagli apprendisti programmatori. Spesso la teoria viene sottovalutata, ed ampiamente soppiantata dalla pratica. Questo rappresenta un errore madornale, che non bisogna assolutamente commettere. La pratica deve seguire la teoria.
    Come ho già accennato, quasi tutti i manuali sono provvisti di una parte pratica, che di solito serve a far comprendere allo studente se ha davvero appreso i concetti descritti nel capitolo. Nel caso in cui il manuale fosse sprovvisto di esercitazioni, è buona pratica effettuarle autonomamente, creando dei programmi a piacere (anche senza una particolare utilità), dove vengono sfruttati tutti i concetti appresi nel capitolo appena letto. Questo tipo di prova aiutare a far emergere eventuali lacune, delle quali possiamo non accorgerci in altro modo.

    L'esperienza aiuta
    Terminato lo studio della guida, si inizieranno a creare le prime applicazioni "utili". Potrà capitare di non riuscire a creare un determinato programma, ma questo non è obbligatoriamente una causa dell'aver studiato male. Per poter programmare senza difficoltà in un linguaggio di programmazione, non bisogna solo studiarlo, ma anche esplorare l'immensa quantità di librerie utilizzabili. Queste ultime non possono essere raccolte interamente in una guida (dove si trovano solo le fondamentali), pertanto sarà l'esperienza a permetterci di realizzare svariate tipologie di software. Non si deve quindi pretendere di poter sviluppare applicazioni complesse appena terminato lo studio di un manuale. Bisogna procedere per gradi, concentrandosi su applicazioni relativamente semplici, per poi aumentare gradualmente la difficoltà. In questo modo si prenderà sempre più dimestichezza con il linguaggio e non si avranno problemi.

    Come bisogna rapportarsi ai malware?
    Questo paragrafo descrive uno degli aspetti più significativi dell'apprendimento di un linguaggio di programmazione.
    All'inizio del proprio percorso, è molto comune restare "affascinati" dal mondo dei virus, che vengono spesso accostati al famoso termine "hacker". Non è un obiettivo di questa guida spiegare la differenza tra hacker, lamer, cracker ed altre categorie, anche perché reperire queste informazioni sul web è semplicissimo. Ciò che invece voglio porre al centro dell'attenzione, è che bisogna cercare di non cadere in queste trappole. E' molto importante informarsi sul funzionamento dei malware, infatti ciò può anche aiutare a proteggersi meglio, ma lo sviluppo di applicazioni dannose deve essere soltanto sporadico e a scopo didattico. Intendo dire che spesso viene voglia di creare qualche virus per testare le proprie abilità, ma ciò non deve diventare il nostro obiettivo futuro. Dopo poco tempo, bisogna cercare di "distaccarsi" (sempre che si voglia diventare programmatori seri) da questo mondo, e di osservarlo solo per conoscerlo.
    Capita anche che i giovani studenti siano portati a sviluppare applicazioni dannose perchè ritengono troppo complesso realizzare un software "benigno". In questi casi, si devono sfruttare le immense risorse presenti sul web, come forum e community di programmatori, per chiedere aiuto. Di certo si troveranno persone disponibili ad aiutare chi è meno esperto. Questo approccio alla programmazione rende anche più "fieri di sè stessi", oltre ad aprire le porte per un possibile futuro lavorativo

    LA GUIDA è FINITA :D !!!

    Edited by diosantos - 16/2/2010, 11:38
     
    .
  2.     Like  
     
    .
    Avatar

    millenium member

    Group
    Member
    Posts
    2,455
    Reputation
    0
    Location
    Middle Earth

    Status
    Offline
    cavoli! ma l'hai scitta tutta tu!?!?!? perchè se è così sei un grande!

    in ogni caso ho iniziato a leggerla e mi è sembrata molto interessante! appena ho tempo e concetrazione la leggo tutta!

    grazie!!!
     
    .
1 replies since 15/2/2010, 15:22   83 views
  Share  
.