Di recente alcuni lettori mi hanno scritto questo genere di mail:

Ho l’impressione di imparare i vari passi ma di non coglierne l’insieme. Una guida mi sarebbe molto utile. So che Swift è disponibile ma non conosco nemmeno la programmazione object-oriented. Mi piacerebbe poter avere un “piano di studi” che dice: “Se non conosci questo o quello, inizia da qui e poi impara quest’altro”.

Questa mail è una tra le tante. Parlando con le persone e leggendo commenti online ho scoperto che sono in molti a provare la stessa sensazione. Esiste una quantità enorme di informazioni sullo sviluppo iOS e un’infinità di cose da apprendere: è facile perdersi e non capire cosa è importante, cosa andrebbe imparato dall’inizio. Conosco io stesso questa sensazione.

Quando, nel 2005, avviai la mia avventura con la programmazione per Mac OS X (iPhone non esisteva ancora) mi ritrovai nella stessa, identica situazione. All’epoca il materiale didattico era ben più scarso rispetto ad oggi; mi affidavo alla documentazione Apple e così iniziai ad imparare Cocoa e Objective-C da autodidatta.

Presto incorsi nello stesso problema: troppe guide facevano riferimento a concetti di cui sapevo poco o niente. Sì, era materiale dettagliato ma non esisteva alcun piano di studi, nessuna roadmap. Da qui ebbe inizio una lunga fase di raccolta e categorizzazione delle informazioni: cercai di capire quali fossero i prerequisiti per ogni guida con lo scopo di inserire tutto in uno schema logico da seguire.

Sono arrivato all’ecosistema Apple dopo aver studiato Informatica all’università, quindi tale background mi ha aiutato a navigare nella marea di materiale. Per le persone che non hanno alcuna esperienza nella programmazione, ciò può risultare decisamente più arduo, talvolta paralizzante.

Spesso, quando si imparano nuovi concetti, non si ha idea del perché siano rilevanti né del quando debbano essere utilizzati.

Imparare il linguaggio di programmazione della piattaforma è il primo traguardo importante, indipendentemente dal proprio background di conoscenze. Molti tutorial lanciano il lettore direttamente nella realizzazione della prima app – e molte di queste guide sono addirittura destinate a persone senza esperienza di programmazione.

Nonostante possa sembrare produttivo partire direttamente dalla creazione della prima app, in tal caso viene a mancare un aspetto decisivo, ossia la conoscenza dei concetti fondamentali della programmazione. Sì, dare vita alla prima app è emozionante, soprattutto dopo un solo tutorial… ma la verità è che, molto probabilmente, non avrete idea del motivo per cui si eseguono determinati passaggi. Si tratta di una circostanza molto comune che può essere letta anche attraverso i commenti sul web.

Il seguente è un commento ricevuto su Reddit dopo aver chiesto ai developer lì presenti cosa trovassero di particolarmente difficile nell’apprendimento dello sviluppo iOS:

Sembra che l’approccio comune dell’insegnamento della programmazione iOS sia quello di saltare direttamente alla scrittura di codice e solo in seguito di spiegarne la teoria. Va bene così… peccato che abbia difficoltà a comprenderla dopo aver seguito i passaggi di un tutorial. Conosco il modo in cui un determinato metodo è stato utilizzato, tuttavia non ne comprendo i motivi né conosco le alternative. Ciò vuol dire, in pratica, che non saprei come sfruttare queste conoscenze nei miei progetti personali.

Alla realizzazione di un’app partecipano una serie di concetti complessi che non possono essere compresi nella fase iniziale. Quando si impara una lingua straniera, da dove cominciamo? Ci sono alte probabilità di iniziare da una frase del tipo “Hello, what is your name?”. Non si inizia leggendo un’opera letteraria dalla grammatica complessa.

Imparare lo sviluppo iOS non è diverso: quando non conosci il linguaggio alla base, cose come controllers, design patterns, table views, auto layout, ecc. rappresenteranno solo un bastone tra le ruote.

Devo studiare Swift o Objective-C?

Dall’introduzione di Swift, gli aspiranti developer si chiedono quale di questi due linguaggi dovrebbe studiare per primo, e quesiti come il seguente sono comuni:

Devo studiare Swift al posto di Objective-C se voglio diventare uno sviluppatore iOS? Ho intenzione di trascorrere l’estate imparando a programmare per iOS, ma dall’annuncio dell’introduzione di Swift non so più se concentrarmi comunque su Objective-C o saltare per dedicarmi a Swift. Il primo linguaggio è ancora fondamentale per quello più recente?

In giro per il web ho avuto modo di leggere diversi consigli: alcuni dicono di iniziare con Objective-C, altri con Swift. Se non si è mai programmato prima, alcuni consigliano addirittura di iniziare con un terzo linguaggio non legato ad iOS, ad esempio Python.

Ora il mio consiglio, indipendentemente dalla vostra esperienza con la programmazione: iniziate da Swift.

Swift è il nuovo linguaggio preferito da Apple, ormai è chiaro. Swift sarà il linguaggio standard della piattaforma e, a mio parere, non vale la pena dedicarsi alle vecchie tecnologie.

Sì, ci sono molti motivi per cui Objective-C potrà tornare ancora utile per un periodo, ma ciò non vuol dire che sia necessario studiarlo dalle basi in modo approfondito, soprattutto quando ci si affaccia per la prima volta nel mondo della programmazione.

Objective-C è fermo al passato e il suo codice soggetto a difetti senza possibilità di cura. No, non vogliamo imbatterci in un tale ostacolo nella fase iniziale del nostro studio. Se più in là avremo bisogno di questo linguaggio, non sarà complicato andare a riprenderlo dopo aver già imparato Swift.

È anche vero che Swift, avendo un maggiore potenziale, dispone di molte più features da apprendere… ma non è detto che dobbiamo studiare tutto in un sol colpo. E questo è anche il motivo per cui non condivido il consiglio di partire dallo studio di un terzo linguaggio (Python) prima di iniziare con Swift. I concetti fondamentali sono gli stessi, e studiarli in Swift non sarà più difficile. Per finire, chi è che vuole studiare un linguaggio estraneo e poi dover ricominciare tutto da capo per apprendere una nuova sintassi? La risposta è… nessuno. Ecco spiegato perché consiglio di ignorare suggerimenti che vanno in tal senso.

Apple offre una guida per la programmazione in Swift, tuttavia è destinata alle persone che hanno già esperienza nella programmazione. Se non avete alcun background del genere, la documentazione Apple non fa per voi: dovrete cercare altre risorse. Tra l’altro, Cupertino ha rilasciato una guida sull’utilizzo di entrambi i linguaggi insieme, nel caso un giorno dovesse servire.

Cosa studiare quando non si ha esperienza

Se partite da zero senza aver mai programmato prima, è importante focalizzarsi sui concetti-base della programmazione. Segue un elenco delle più importanti features in Swift da studiare all’inizio.

Variabili, costanti e principali types numerici. Numeri interi, numeri a virgola mobile e booleani sono alla base di tutta la programmazione. Le variabili e le costanti sono il metodo per impostare questi valori e per modificarli. All’inizio sembrerà inutile lavorare solo sui numeri… quando le app dispongono di interfacce dinamiche con bottini, gestures e animazioni. Quando studiavo programmazione, avevo sempre la sensazione di perdere del tempo e che la “vera” programmazione fosse altra, ma la realtà è che i numeri sono una parte fondamentale di tutti i programmi. Si ha bisogno di numeri per qualsiasi cosa: contare cose, posizionare oggetti sullo schermo, le animazioni, ecc. Dietro un’app ricca e attraente vi è una grande quantità di numeri.

Operatori base. Assegnazione, operatori aritmetici, intervalli e operatori logici modificano le informazioni e controllano il flusso di un programma. Il fatto che i numeri appaino così spesso causa talvolta la falsa impressione di dover conoscere un sacco di matematica. No, non è vero, perché per imparare a programmare bisogna semplicemente essere in grado di pensare con una logica e di risolvere problemi. Useremo prevalentemente aritmetica di base: somma, sottrazione, moltiplicazione e divisione. Più tardi, quando si avrà un’esperienza tale da poter lavorare ad applicazioni più complesse, la matematica potrà tornare utile soprattutto per alcuni giochi.

Stringhe. Le stringhe rappresentano, nella programmazione, il testo e dunque le ritroveremo ovunque. È in questo modo che comunichiamo informazioni: le app prive di testo sono quasi inesistenti. Le stringhe sono spesso utilizzate anche per inviare dati ad un network; la loro manipolazione è indispensabile per creare un testo generato dinamicamente oppure per creare strutture di dati al fine di comunicare con altri programmi.

Strutture del flusso di controllo. Tali strutture ci consentono di programmare un’app affinché esegua qualcosa di più utile della semplice esecuzione di una lista lineare di istruzioni. Il control flow è alla base di qualsiasi app utile. I loops (for e while) ripetono le istruzioni, mentre le istruzioni condizionali (if e switch) prendono le decisioni che guidano il programma.

Array e dizionari (collezioni). Presto avrete bisogno di un metodo per manipolare non solo valori singoli con variabili, ma elenchi degli stessi. Gli array e i dictionaries sono le strutture di base utilizzate per manipolare piccoli e grandi set di valori. In un’app per la gestione di una cosiddetta to-do list, ad esempio, quella lista sarà proprio un array o un dizionario.

Funzioni. Questo è un concetto preso in prestito dalla matematica, anche se non vi è necessità di conoscere la materia specifica. Le funzioni sono un modo per raggruppare codice che produce un determinato risultato, dandogli un nome. Così sarà possibile riutilizzarlo in diverse parti dell’applicazione senza effettuare il copia e incolla del codice.

Strutture, classi e programmazione object-oriented. La programmazione object-oriented (OOP) è un ulteriore metodo per organizzare il codice e per renderlo più strutturato, comprensibile, gestibile e agevole da modificare. Nonostante ne esistano altri, è così che lo sviluppo funziona sulle piattaforme Apple. È importante comprendere bene l’OOP affinché si sia in grado di lavorare su progetti complessi. La programmazione funzionale è una di queste e dall’introduzione di Swift è diventata piuttosto popolare. Assicuratevi di studiare e capire i concetti-chiave OOP: incapsulamento, composizione, ereditarietà e polimorfismo.

Automatic reference counting. È così che si gestisce la memoria sulle piattaforme Apple. Non vi sarà bisogno di preoccuparsi di tale aspetto mentre si scrivono programmi, ma è necessario conoscere alcune insidie che potrebbero creare problemi nelle proprie app.

Cosa si può lasciare per un secondo momento

Questi sono, secondo la mia opinione, alcune features di Swift meno utili… almeno durante la fase di apprendimento. Alcune sono in realtà molto importanti, ma non all’inizio. Non vi sto consigliando di saltarle completamente, tuttavia quando si è alle prime armi potrebbero rappresentare un ostacolo.

Enumerazioni. Si tratta di una feature molto importante di Swift che consente di creare types diversi da quelli di base. Un must per scrivere codice più leggibile, ma ci si può dedicare a loro una volta apprese le basi della programmazione.

Optional. Anche questo è un concetto fondamentale di Swift per interagire con i valori che potrebbero non esistere, per cui non possiamo evitarlo e il suo uso sarà essenziale. Anche in questo caso, però, è un concetto al quale dedicarsi solo dopo aver imparato le basi.

Estensioni e protocolli. Aiutano nella struttura e nell’architettura del codice nell’ambito di un progetto complesso. Le estensioni consentono di aggiungere funzionalità ad un oggetto esistente, mentre i protocolli a specificare un set di funzionalità richieste ad alcuni oggetti. Da imparare solo in seguito ad una buona comprensione dei concetti base OOP.

Tuples. È un metodo per raggruppare un piccolo set di valori senza fare ricorso alle collezioni. Non sono necessari finché non si sarà capito perché e dove usarli, ma decisamente è una feature utile.

Switch statements con range e tuple. Si tratta di un tipo più complesso di switch statement, potente ed espressivo. Decisamente utile, ma vista la rarità dei casi in cui è necessario usarlo, si può saltare all’inizio e riprenderlo solo in un secondo momento, quando si ha più conoscenza della materia.

Function types, nested functions e closures. Le funzioni in Swift sono di per sé un type, come gli interi e le stringhe. Ciò vuol dire che si possono manipolare nello stesso modo in cui si fa per i basic types: assegnandoli a variabili o passandoli come parametri ad altre funzioni. Nonostante siano utili, si tratta di un concetto più avanzato che può essere rimandato. Molte API Apple li usano, quindi prima o poi toccherà impararli.

Generics. Permettono di creare types e funzioni più flessibili e riutilizzabili. Costituiscono senza alcun dubbio un must know, ma non nella fase iniziale dell’apprendimento, ossia quando non si hanno le basi per capirne la rilevanza.

Custom operators. Feature potente ma pericolosa. Tali operatori rendono il linguaggio più efficiente e conciso; talvolta, però, rendono il codice meno leggibile. Data la loro doppia natura, alcuni developer non li usano affatto, ma è quantomeno necessario conoscerli.

Asserzioni. È un metodo per testare la correttezza del codice: buono a sapersi, ma non fondamentale. Molti developer le trovano utili, molti altri non le utilizzano mai.

Operatore ternario. Un’alternativa concisa per esprimere decisioni senza utilizzare l’if statement. Molti developer non lo usano mai perché lo trovano illeggibile. Personalmente lo uso spesso, anche se non è necessario.

Stringhe Unicode. Unicode è uno standard internazionale per il testo. È essenziale solo quando si ha a che fare con alfabeti diversi dal proprio, oppure per caratteri speciali e simboli. In caso contrario, è inutile perdere tempo.

Subscripts. Consentono di creare dei custom types che si comportano come altri collection types. Sono una feature utile da conoscere, tuttavia non sono indispensabili e del resto usati raramente.

Nested types. Types definiti all’interno di altri types, una buona feature per migliorare la struttura del codice in alcuni casi, ma non fondamentali.

Operatori Bitwise. Necessari solo quando si lavora su numeri binari. Sono utili quando si ha a che fare con hardware, comunicazioni in un network o per costruire una struttura efficiente di dati. Si tratta di concetti avanzati, oltretutto è possibile non incontrarli mai nel corso della carriera di developer: personalmente non ho mai dovuto lavorare con tali operatori in nessuna app.

Diverse tipologie di interi (8, 16, 32 o 64 bits). Necessari solo quando si lavora su una architettura diversa o su trasmissioni low-level di dati su network. Non le ho mai usate nel corso di 10 anni di programmazione, quindi per il momento potrete evitarle e riprenderle solo se indispensabile.

***

Autore: Matteo Manferdini
Articolo originale: Swift Learning Roadmap

NO COMMENTS

LEAVE A REPLY