Se avete letto il mio precedente post su come cambiare lavoro e diventare programmatore, avrete avuto la possibilità di scegliere una delle professioni a oggi disponibili nel settore dell’informatica, e ora vi state chiedendo “Come posso imparare a programmare?“, “Qual’è la strada più semplice per imparare a programmare?”, “Programmare è difficile?”
Come si impara a programmare?
Innanzitutto facciamo chiarezza e sfatiamo i falsi miti: non si impara a programmare dai libri. Nessuno ti può insegnare a programmare, come nessuno ti può insegnare a dipingere. La pratica è fondamentale! Quello che si può acquisire è una tecnica che organizzi e velocizzi il flusso di stesura di un programma. La passione è la chiave di tutto. Non è una cosa che impariamo a memoria e poi ripetiamo, in quanto è un processo creativo, e spesso anche di problem solving. Di solito chi è bravo in matematica, trova semplice anche programmare, in quanto – mia opinione – è facilitato (o ha innata predisposizione) per la visualizzazione di concetti astratti.
Per essere chiaro, oggi come oggi gli schemi dei programmi li realizzo mentalmente, a una velocità che 20 anni fa mi era inimmaginabile. Tanto tanto esercizio. Se avete la possibilità di lavorare con un sviluppatore senior vi accorgerete che la sua velocità di visualizzazione è molto elevato, e fino a schemi complessi non necessità di carta. Questo però non vuol dire che chi inizia possa fare lo stesso. Dopo dieci anni di schemini sulla carta, vi accorgerete che non li state più facendo, e che il programma è ben progettato. Se implementate software senza una progettazione o uno schema, farete l’errore più comune e più dannoso: in pratica lavorerete il triplo (se non di più!).
Quale può essere un percorso?
In base alla mia esperienza sia come insegnante di tecniche di programmazione sia come consulente, vi fornisco quello che secondo me è un buon piano per inserirsi velocemente e produttivamente nel mondo del lavoro in circa un anno. Ovviamente l’indicazione di tempo è soggettiva, e dipende dalla passione, esperienze pregresse, tempo disponibile e se siete o no portati per questi argomenti.
Vi ricordo che sono disponibile per la formazione a distanza, tramite skype. Per accelerare il vostro percorso contattatemi e avrete la possibilità di fare lezioni uno-a-uno o di gruppo.
Innanzitutto suggerisco le tecnologie Microsoft, perchè l’ambiente globale è più integrato e uniforme, e il referente tecnologico è unico, quindi si può utilizzare un intero stack di applicazioni dello stesso produttore, che per Microsoft suggerisco in:
- comune per tutti i linguaggi: conoscenze di base di tecniche di programmazione e concetti di Object Oriented Programming (OOP)
- una benvenuta base di inglese (potete vedere questo mio precedente articolo)
- linguaggio: C#
- sviluppo di applicazioni web: ASP.NET MVC o il più recente ASP.NET Core
- implementazione del frontend: Razor incluso in asp.net
- Database: Microsoft SQL Server
- Database: Conoscenze di base della logica del modello relazionale (e sql)
- Ambiente di sviluppo: Microsoft Visual Studio
Dove trovo le risorse, magari gratuite?
Il tutto per vostra fortuna è anche gratuito! Per quanto riguarda MVC + Razor + Sql Server potete trovare molte risorse on-line, anche gratuite, piccoli corsi o esercizi passo-passo per implementare semplici applicativi. Quando vi sentirete pronti, il passo successivo è implementare qualcosa di vostro, un progetto “reale”, che non deve per forza essere venduto, ma che utilizzerete per risolverete in autonomia i vari dettagli che non potranno mai emergere dagli esercizi pre-pronti, e farvi un po’ le ossa e capire meglio i concetti che avete studiato (che all’inizio vi sembreranno ovvi). Punto importante sarà fare prima il disegno di tutte le form e le funzionalità che vi piacerebbe avere, alcune anche esotiche… perchè no! L’importante sarà rimanere – nella realizzazione – il più possibili fedeli al progetto, ovvero simulerete una reale situazione lavorativa, dove il cliente ha le sue esigenze e vi chiede di realizzare quanto stabilito. Questo si spingerà a trovare le soluzioni e ad imparare, invece che a by-passare i problemi (che non vi farà imparare nulla).
Le basi teoriche
Prima di tutto vi consiglio di iniziare con almeno un po’ di basi teoriche, il web è pieno di risorse. Magari per non annoiarvi (o appesantirvi) intervallate con esercizi pratici, in modo da poter applicare subito quello che imparate, e soprattutto guadagnare – fondamentale – in motivazione:
- tecniche di programmazione obbligatorie: saper disegnare un diagrammi di flusso (o chiamato flow chart), ad esempio per ordinare un array: se lo sapete fare allora potete chiamarvi programmatori!
- concetti di OOP: classi, metodi, funzioni, interfacce, tipi, valore vs referenza, ecc
- concetti di base di SQL: cosa è un DBMS, cosa sono tabelle, tipi di campi, query, relazioni (1:1, 1:N, N:N), primary key, foreign key, indici, ecc
- un po’ di conoscenze di terminologia di base: json, oauth, REST api, MVC, ecc
In pratica: un progetto reale
per poi passare ad un esempio reale. Ad esempio potreste implementare:
- Login + sicurezza: una form di Login, con autenticazione OAuth 2.0
- Master/Detail: una lista di clienti/anagrafiche (master), con la possibilità di visualizzazione e modifica dei dati di dettaglio (detail). Ogni anagrafica potrà avere un unico telefono, ma infiniti indirizzi.
- REST Api: Una gestione degli appuntamenti con i clienti, con la sincronizzazione bi-direzionale con il calendario di google tramite le Google Calendar Api
- Refactoring: modifica della anagrafica: ora modificala per poter inserire infiniti telefoni, non solo uno. Creare gli script sql di aggiornamento per mantenere i dati esistenti.
I punti sopra vi aiuteranno anche a comprendere meglio cosa vi piace fare, se frontend, backend, dba, o perchè no, anche tutto! La parte di html, css, javascript, colori e grafica, sono la parte frontend; l’autenticazione, la comunicazione con le Google Api, REST Api, database sono la parte di backend. La parte di ottimizzazione delle query per la ricerca sul database, indici, foreign key è la parte di Database Administration (DBA). La parte di definizione dei DTO (Data Transfer Object), dei protocolli, dell’infrastruttura, la scelta della tecnologia, l’interesse più su questioni tecnologie e strutturali è la parte di analista e/o architettura.
In seguito poteste implementare una soluzione più evoluta:
- sostituire il frontend Razor con un frontend Single Page Application (SPA) con Angular (o React, Vue, etc come preferite), riutilizzando lo stesso backend MVC, o ancora meglio riscriverlo in una soluzione “pura” con Web API. Per il trasferimento dati utilizzate il formato JSON.
- imparare a scrivere degli unit test: per fare questo dovreste conoscere i principi SOLID, praticamente – dal punto di vista pratico – a utilizzare correttamente le interfacce per l’astrazione e utilizzare la DI (dependency injection) e IoC (inversion of control).
Alcune risorse utili
Per acquisire le informazioni che vi saranno necessarie, vi consiglio di orientarvi verso corsi nelle vostre vicinanze, oppure utilizzare video corsi di piattaforme di alta qualità, come Pluralsight, hanno anche i sottotitoli in italiano. Ma vi ricordo che oggi l’inglese in informatica è praticamenete obbligatorio, il 80% (o forse anche più) di materiale di qualità è in inglese.
Alcuni risorse utili: