Programmazione di Sistemi Programmazione di Applicazioni Desktop Programmazione Web Programmazione di Librerie/Piattaforme/Framework/Core Programmazione di Applicazioni Distribuite Informatica
Questo settore si occupa della "scienza" della programmazione e non delle sue specifiche implementazioni. Per questo non devi limitarti a una singola piattaforma.     Puoi farlo nei modi seguenti:  Fatti un'idea di come sono installati i sistemi operativi. Impara come installare più sistemi operativi su un solo PC (facoltativo, ma consigliato). Installa più di un sistema operativo. Non aggiungere alcun pacchetto di supporto, ma limitati a esplorare le funzionalità di base.   In seguito apprenderai assembly per altre piattaforme.  Fai particolare attenzione alla liberia Standard Template (STL) e magari a quella Active Template (ATL).     Questo passaggio è più semplice se hai adottato un sistema operativo basato su Unix. Devi comprendere appieno il sistema che utilizzerai in seguito. Comincia creando delle piccole utilità di sistema. Di solito ti sarà d'aiuto:  Provare a ricreare piccoli strumenti già presenti nel sistema. Provare a importare sul tuo sistema utilità disponibili in altri. Questa occasione è l'unica in cui la scelta del primo linguaggio di programmazione conta. Comincia da ANSI C, non da C++, né C#, né Java o D. Poi passa a C++. Limitare il primo linguaggio a C è utile perché la programmazione di sistemi richiede che il programmatore conosca i concetti seguenti:  Compilazione reale e completa del codice sorgente. File di output oggetto di basso livello. Collegamento dei binaries. Programmazione di basso livello in linguaggio macchina/assembly. Secondo alcune persone C è un modo camuffato/più semplice per imparare assembly. Dà anche la possibilità di inserire codice in assembly quando preferisci e ammette solo la programmazione procedurale (come assembly). La maggior parte dei professionisti in questo campo scrivono codice per applicazioni commerciali, quindi farti un'idea sulle società, sulla loro struttura organizzativa e finanziaria può permetterti di risparmiare molto tempo. Un corso introduttivo in design dei circuiti digitali e un altro in architettura dei computer possono esserti utili; tuttavia, alcune persone li considerano argomenti troppo avanzati come punto di partenza, quindi può essere sufficiente leggere due o tre tutorial (come questo e questo). Potrai tornare a questo passaggio in seguito, dopo aver imparato il tuo primo linguaggio di programmazione. Non vergognarti di partire con un linguaggio simile, come Scratch, solo perché non sei più un bambino. Questi linguaggi possono aiutarti moltissimo a entrare nel mondo della programmazione. Tuttavia, questo passaggio è facoltativo. Se preferisci, puoi svolgerlo prima dello step precedente.  A prescindere dal linguaggio con cui sceglierai di lavorare in futuro, devi apprendere le basi della programmazione procedurale. Inoltre, questo tipo di scrittura di codice è considerato il più semplice da usare come punto di partenza in questo campo.  Puoi utilizzare gli esercizi presenti in quasi tutti i libri didattici. Scegli uno strumento che ti permette di creare programmi con il linguaggio che hai adottato. Assicurati di comprendere alla perfezione i concetti seguenti e di riuscire ad applicarli con relativa facilità prima di proseguire:  Acquisire le informazioni dall'utente e restituirne altre; Il flusso logico e di esecuzione dei programmi nei linguaggi procedurali; La dichiarazione, l'assegnazione e la comparazione delle variabili; Costrutti di ramificazione dei programmi come if... then... else e select/switch... case; Costrutti di creazione di loop come while... do, do... while/until, for... next; La sintassi del linguaggio di programmazione che hai scelto per creare e chiamare procedure e funzioni; Tipi di dati e il modo di manipolarli; Tipi di dati definiti dall'utente (records/structs/units) e il loro utilizzo; Se il linguaggio supporta le funzioni di overload, impara a utilizzarle; Il metodo di accesso alla memoria del linguaggio che hai scelto (pointers, peeking, eccetera); Se il linguaggio supporta l'overload degli operatori, impara a utilizzarlo; Se il linguaggio supporta i pointer delegati/di funzione, impara a utilizzarli.  È consigliabile conoscere almeno un linguaggio per ciascun paradigma, come fanno quasi tutti i programmatori più esperti. Tuttavia, devi partire da uno solo, fare pratica con esso e lavorare per qualche tempo grazie alle tue conoscenze, prima di impararne un altro, dopo aver già avuto esperienze lavorative nel settore. Prova uno dei campi seguenti:  Paradigma di programmazione orientata a oggetti; Paradigma di programmazione logica; Paradigma di programmazione funzionale. Considera i punti di forza e quelli deboli di entrambi. Di solito puoi farlo nei modi seguenti:  Riscrivi il codice di uno dei tuoi primi lavori con un linguaggio di programmazione usando quello nuovo. Crea un nuovo progetto e prova a implementarlo con entrambi i linguaggi. In alcuni casi, in base alla scelta del progetto e dei linguaggi, potresti non riuscire a utilizzarli tutti e due! Scrivi una tabella riassuntiva che mette a confronto i costrutti simili dei due linguaggi e le caratteristiche uniche. Prova a trovare dei metodi per imitare le caratteristiche uniche di un linguaggio nell'altro. Quasi tutti i linguaggi hanno delle versioni/librerie che supportano la programmazione visuale e altre che supportano la programmazione da console. Segui questi passaggi:  Impara le basi della programmazione basata su eventi. La programmazione visuale fa quasi sempre affidamento sugli eventi e sulla loro gestione (utilizza il linguaggio che hai appreso). Prova tutti i software su cui riesci a mettere le mani e cerca di capire come funzionano. Quasi tutte le società di sviluppo di software offrono versioni beta dei loro prodotti per permettere agli utenti di provarli. Resta aggiornato sui progressi delle interfacce grafiche. Leggi alcuni articoli o guide sulle interfacce grafiche. Prova a utilizzare la tua competenza nella programmazione per risolvere i problemi che affronti nella vita di tutti i giorni. Ad esempio, scrivi un programma in grado di rinominare molti file contemporaneamente, di confrontare visivamente dei file di testo, di copiare i nomi dei file in una cartella in un documento di testo e simili. Inizia da problemi semplici. Completalo applicando le tecniche di programmazione visuale che hai appreso.   Ti sarà molto utile se desideri riuscire a creare interfacce accattivanti. La programmazione di giochi è considerata per lo più programmazione desktop. Se hai intenzione di proseguire in questo campo, devi approfondire l'argomento dopo aver completato i passaggi dell'articolo. Un corso di grafica è fondamentale per i professionisti di questo settore e il secondo linguaggio di programmazione più appropriato è uno logico/funzionale (preferibilmente Prolog o Lisp). Le applicazioni web sono componenti software progettati per funzionare sull'architettura di internet. Questo significa che vengono utilizzate attraverso dei browser, come Firefox o Internet Explorer. Il fatto che sono costruite sull'architettura di internet, non significa necessariamente che richiedono una connessione alla rete attiva, ma che sono basate su tecnologie web standard come:  HTTP FTP POP3 SMTP TCP Protocolli IP  HTML XML Coldfusion ASP JSP PHP ASP.NET F12). Cerca le differenze nei contenuti del sito e non limitarti a visitare decine di pagine simili. Cerca di studiare almeno un sito di ciascuno dei tipi seguenti:  Siti di società (attività commerciali, organizzazioni no-profit, enti governativi) Motori di indexing (motori di ricerca, siti di meta ricerca, motori di ricerca specializzati, directories) Siti di data mining Siti personali Pagine informative o a carattere enciclopedico (wiki, tabelle di dati, specifiche tecniche, elenchi manuali di directories, blog e diari, siti delle agenzie di notizie, pagine gialle, eccetera) Siti sociali (social network, siti di segnalibri, siti per prendere appunti) Siti collaborativi (questa categoria include pagine già citate in precedenza, come wiki e blog) Ad esempio: diagrammi di brainstorming e MS Visio. Questo significa creare diagrammi concettuali, mappe del sito e strutture di navigazione. Cerca di imparare a usare almeno un pacchetto software di editing (facoltativo, ma molto consigliato). Devi farti un'idea di base di:  Protocolli dei servizi di base del web (HTTP, FTP, SMTP, POP3 o IMAP4) Software per web server (preferibilmente quello che userai sulla piattaforma che hai scelto) Programmi per navigare in rete Software dei server e-mail e dei client Puoi scaricare il pacchetto software "What You See Is What You Get (WYSIWYG)" per modificare il codice HTML.   Quasi tutti i programmatori imparano JavaScript, mentre altri preferiscono VBScript, che tuttavia non è compatibile con la maggior parte dei browser. Cerca di esprimere tutto il tuo potenziale utilizzando solo quel linguaggio. Procedi al passaggio seguente solo dopo questo step. Se decidi di utilizzare solo un software per i server, apprendi uno dei linguaggi supportati da quell'applicazione. In caso contrario, impara un linguaggio per ciascun software.  e inizia a fare esperimenti online con la tua pagina. I professionisti in questo campo sono semplicemente programmatori avanzati che sono passati dalla progettazione di applicazioni alla scrittura di codice che può essere utilizzato da altri utenti.  Quasi tutti gli sviluppatori di librerie utilizzano una o entrambe queste tecnologie.  Più linguaggi e paradigmi conosci, più sarai bravo come sviluppatore di librerie.   Cerca di usare il codice standard ogni volta che hai la possibilità di farlo. Questo ti sarà molto utile nelle prime fasi della tua carriera. Comincia con pacchetti semplici, come le unità di conversione e i pacchetti di calcoli scientifici di media complessità. Se vai ancora all'università, prova a creare delle librerie utilizzando le formule e le equazioni dei corsi che non trattano di programmazione. Comincia scaricando l'eseguibile del pacchetto. Prova a usarlo e individua i punti di forza e quelli di debolezza. A quel punto, scarica il codice sorgente e cerca di capire come è stato sviluppato. Cerca di ricreare quelle librerie o parte di esse. In principio, fallo dopo aver studiato il codice, poi riprova senza aiuti. Quando sarai più esperto, cerca di migliorarlo. Di solito i programmatori di librerie hanno la tendenza a pensare in modo ricorsivo e/o iterativo ai problemi che devono affrontare. Cerca di considerare ogni ostacolo come una serie di problemi più piccoli (o di attività più semplici) oppure come a un'operazione ripetuta di riduzione della complessità, prima di riunire il tutto in unico pacchetto. I programmatori di librerie hanno la tendenza a generalizzare. Questo significa che quando devono affrontare un problema specifico, di solito pensano a una formulazione più generale, che una volta risolta permette di trovare una soluzione per tutti i casi singoli. Questo campo è da molti considerato il più difficile da apprendere, perché richiede varie competenze tecniche nel settore delle telecomunicazioni e in quello dell'informatica. Questo passaggio è facoltativo, tuttavia, è molto utile per comprendere la topologia della rete.  Devi comprendere bene il modello Open Systems Interconnection (OSI), le tecnologie Ethernet, IP, TCP, UDP e HTTP prima di iniziare a programmare per le applicazioni distribuite.  In ambiente Windows, hai bisogno di script che funzionano con Windows Scripting Host. Su Linux, bastano gli script Bash e Perl. Il linguaggio più consigliato per entrambe le piattoforme è JavaScript, per le ragioni seguenti:  È supportato da quasi tutti i scripting host su ogni sistema operativo (Windows Scripting Host supporta JavaScript come impostazione predefinita e quasi tutte le distribuzioni Linux hanno un pacchetto per il supporto della console di scripting di JavaScript). Secondo molti sviluppatori è considerato il linguaggio più facile da imparare. La sua sintassi deriva da ALGOL e questo ti permette di imparare più facilmente un secondo linguaggio di programmazione (C, C++, C#, Java e J# hanno tutti sintassi derivate da ALGOL). Apprendendo JavaScript, prendi familiarità con lo scripting lato client delle pagine web, prendendo due piccioni con una fava! In seguito, potrai adottare tecniche e paradigmi più avanzati sulla base del linguaggio di scripting che hai scelto e sui pacchetti che supporta. Tutti i linguaggi di scripting hanno alcuni aspetti di programmazione procedurale integrati. Impara quali sono i requisiti per svolgere questa azione. Ti basta creare comunicazioni semplici. Preferibilmente, imparane uno che si può adattare a più paradigmi, come Python. Segui un semplice corso introduttivo a questo secondo linguaggio. Molti programmatori scelgono Java, ma anche C# sta rapidamente acquisendo popolarità. Questi due linguaggi sono i più diffusi per i motivi seguenti:  Sono linguaggi orientati a oggetti che consentono ai professionisti che fanno parti di grandi team di evitare le informazioni di implementazione, dato che entrambi supportano i componenti (unità di codice pre-compilate che svolgono un determinato compito e possono essere utilizzate in altri programmi). Supportano la programmazione a eventi, oltre a OO e la programmazione procedurale. Il framework su cui il linguaggio è costruito è distribuito per natura (nel caso di Java). Sono disponibili molti pacchetti già pronti che risolvono i problemi di networking, sotto forma di codice open-source e di pacchetti integrati nel framework; questo permette ai programmatori di sfruttare il lavoro di altri come base di partenza. di più sulle caratteristiche principali del linguaggio, in particolare di quelle che supportano il networking. Puoi considerare di meno gli elementi dell'interfaccia come l'output e il design delle finestre. Puoi farlo utilizzando libri, guide online o corsi accademici. Tuttavia, è necessario comprendere l'architettura di questo tipo di programmi e i concetti alla loro base.  È consigliabile apprendere almeno le basi di tutte. Quasi tutti i programmatori di applicazioni distribuite non si limitano a uno o due linguaggi di programmazione, ma ne imparano uno per sistema operativo. Questo perché se un'applicazione deve essere "distribuita", deve avere una versione funzionante su almeno tutti i sistemi operativi principali.  Common Object Request Broker Architecture (CORBA) Simple Object Access Protocol (SOAP) Asynchronous JavaScript and XML (AJAX) Distributed Component Object Model (DCOM) .NET Remoting XML Web Services Questi professionisti sono programmatori molto avanzati che invece di lavorare sullo sviluppo di applicazioni, cercano di progettare tecnologie di computazione, come metodi di crittografia, linguaggi di programmazione e algoritmi di data mining. Raramente viene raggiunto questo livello di preparazione senza studi accademici e dedizione. Puoi farlo nei modi seguenti:  Consegui una vera e propria laurea (la strada più semplice). Procurati il programma degli studi di un corso in informatica di un'università moderna e segui le lezioni da solo. In teoria puoi arrivare al livello di conoscenza richiesto anche attraverso questa via, ma il primo percorso è quello consigliato. Più l'argomento di cui ti occupi è specifico, meglio è. Scegli in base alle tue preferenze; tuttavia, di seguito troverai l'elenco di alcuni dei campi principali all'interno dell'informatica:  Progettazione di algoritmi (ricerca, ordinamento, crittografia, decrittazione e individuazione degli errori nelle comunicazioni sono alcuni esempi) Linguaggi di programmazione/progettazione di compiler/ottimizzazione Intelligenze artificiali (riconoscimento di schemi, riconoscimento della voce, elaborazione del linguaggio naturale, reti neurali) Robotica Programmazione scientifica Supercomputing Progettazione e modellazione supportata da computer (Computer aided design/modeling CAD/CAM) Realtà virtuale Computer grafica (la computer grafica viene spesso confusa erroneamente con il design grafico o la progettazione delle interfacce utente. Si tratta invece del campo che studia come rappresentare e manipolare la grafica nei sistemi computerizzati) Ad esempio, potresti conseguire un dottorato. 
Impara che cosa comporta la programmazione di sistemi. Segui i primi tre passaggi della sezione della programmazione di applicazioni desktop. Segui un corso introduttivo di algebra lineare. Segui un corso di analisi matematica. Segui un corso di logica e/o matematica discreta. Impara a conoscere vari sistemi operativi. Segui un corso (o in alternativa documentati con dei libri) sull'architettura dell'hardware dei computer. Impara a conoscere le varie piattaforme hardware del computer. Prendi familiarità con il linguaggio assembly della piattaforma hardware/sistema operativo di tua scelta. Impara i linguaggi ANSI C e C++, insieme ai concetti della programmazione procedurale. Studia le librerie standard C/C++ della piattaforma che hai scelto e prova a utilizzarle. Cerca guide online, libri e corsi per imparare a conoscere meglio il linguaggio C della tua piattaforma specifica. Esercitati a creare codice avanzato in C e C++. Impara tecniche più avanzate in assembly. Segui un corso di progettazione dei sistemi operativi. Trova e leggi le documentazioni sulla piattaforma che hai scelto. Metti in pratica le conoscenze che hai acquisito. Impara i linguaggi partendo nell'ordine migliore. Impara che cosa comporta la programmazione di applicazioni desktop. Informati sulle diverse architetture dell'hardware dei computer. Impara un linguaggio di programmazione di livello base (per bambini). Impara a conoscere i paradigmi di programmazione procedurale, orientata a oggetti e funzionale. Segui un corso introduttivo in uno dei linguaggi di programmazione procedurali. Impara almeno una tecnica di modellazione avanzata, come UML o ORM. Inizia a scrivere alcune semplici applicazioni da console o simili. Segui un corso più avanzato nel linguaggio di programmazione che hai scelto. Applica le tecniche avanzate che hai appreso. Segui un corso introduttivo in almeno un secondo linguaggio di programmazione che adotta un paradigma diverso. Cerca di confrontare i due linguaggi di programmazione che hai appreso. Impara i concetti di programmazione visuale utilizzando uno dei linguaggi che hai appreso. Inizia ad applicare le tue conoscenze a piccoli progetti software di tua invenzione. Crea un "progetto di laurea" virtuale. Amplia le tue conoscenze nel campo dei framework/librerie/pacchetti visuali che hai studiato in precedenza seguendo un corso avanzato, facendo particolare attenzione ai dettagli e apprendendo su internet tutti i trucchi per il framework che hai scelto. Cerca altri pacchetti/librerie di elementi visuali per il tuo linguaggio di programmazione e impara a usarli. Segui un corso di grafica (non design grafico). Diventa un programmatore di videogiochi (facoltativo). Impara in cosa consiste la programmazione web.  molti siti web diversi e nota come sono progettati (clicca con il tasto destro del mouse sulla pagina che ti interessa, poi clicca Visualizza sorgente oppure premi F12). Apprendi almeno una tecnica di brainstorming e un programma utilizzato per implementare questo metodo di progettazione. Prendi familiarità con la struttura di un sito web. Segui un corso accelerato in design grafico. Apprendi le basi dell'infrastruttura di internet. Impara i linguaggi HTML e CSS. Apprendi XML e le tecnologie correlate, come XSL e XPath (facoltativo ma consigliato). Crea semplici siti web statici finché non hai imparato a padroneggiare HTML. Apprendi un linguaggio di scripting lato client. Prendi familiarità con il linguaggio di scripting lato client che hai appreso. Impara almeno un linguaggio di programmazione lato server. Crea un progetto pilota dopo aver appreso un linguaggio di programmazione lato server. Ottieni un nome di dominio per il tuo sito web Impara a conoscere la programmazione core. Se non l'hai già fatto, impara un linguaggio di programmazione che supporta componenti e pacchetti riutilizzabili. Segui un corso avanzato di UML e ORM. Segui un corso di software engineering (ingegneria informatica). Impara almeno le tecniche e i concetti più semplici della programmazione modulare, di quella basata sui componenti, della orientata a oggetti e quella basata su eventi. Impara a conoscere i vari sistemi operativi e i framework di programmazione da essi supportati. Concentra il tuo impegno nell'apprendimento dei framework, dei linguaggi e delle tecnologie indipendenti dalle piattaforme. Se i linguaggi di programmazione che hai appreso fino adesso hanno versioni standard ANSI/ISO/IEEE/W3C, impara a conoscerle. Prova a imitare librerie semplici e già in uso, specialmente se open-source. Cerca e prova pacchetti open-source nel tuo campo di programmazione. Impara i vari approcci utilizzati per distribuire i componenti ai programmatori. Affronta la programmazione di applicazioni distribuite. Segui un corso accelerato sui sistemi di telefonia e sul loro hardware. Prendi familiarità con l'architettura dell'hardware di rete e dei dispositivi come hub, switch e router. Segui un corso sui protocolli e sul funzionamento della rete. Impara il linguaggio XML e prendi familiarità con esso. Inizia apprendendo un linguaggio di scripting via shell. In principio, utilizza il linguaggio di programmazione che hai scelto solo per la programmazione procedurale. Usa il linguaggio che hai appreso per scrivere script in grado di mettere due sistemi in comunicazione. Passa a un linguaggio di programmazione/scripting desktop. Concentrati Segui un corso sul design e sull'architettura delle applicazioni distribuite. Impara a creare serviced components e servizi utilizzando il tuo linguaggio di programmazione preferito. Impara a conoscere una o più delle tecnologie seguenti. Impara di cosa si occupa un informatico. Accumula le nozioni scientifiche equivalenti a una laurea magistrale in informatica. Decidi un campo in cui specializzarti. Considera di proseguire la tua carriera accademica. Impara le tecnologie e i linguaggi di programmazione relativi al settore che hai scelto.
https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer
System Programming Desktop Application Programming Web Programming Library/Platform/Framework/Core Programming Distributed Applications Programming Programming Science