I linguaggi di programmazione di Android

La prima domanda che ogni aspirante sviluppatore Android certamente si pone è certamente:

“Quali linguaggio di programmazione dovrei imparare?”

La risposta è meno semplice di quanto qualunque programmatore impaziente vorrebbe ascoltare: Android viene eseguito su ogni tipo di dispositivo, dagli ovvi smartphones agli orologi, ai tablet, alle automobili, ai televisori, fino ai sistemi di sicurezza domestici e molti altri.

Questa grande varietà di target può essere raggiuta solo al costo di separare i compiti da eseguire, in particolare dividendo tutto ciò che legato alla interfaccia grafica dalla logica delle applicazioni: in questo modo il “succo” dei programmi rimani sempre più o meno lo stesso, mentre l’aspetto può adattarsi a differenti schermi e a differenti aspettative.

Per questo motivo in Android non c’è un “unico” linguaggio di programmazione, ma un insieme di essi per eseguire differenti scopi.

Non è necessario conoscere tutto alla perfezioni sin dall’inizio, ma se si vuole avere vita più facile come programmatori (si badi bene: più facile, ma non facile in assoluto), è sicuramente necessario avere una infarinatura di ognuno di essi.

Elencherò i linguaggi in tre sezioni:

– la base, cioè i linguaggi utilizzati per la logica dei programmi

-l’aspetto, per gestire la UI

– gli utili extra: linguaggi per gestire spefifiche parti di un programma, che si può volore o meno approfondire, in prima battuta.

La base: Java e Kotlin

JAVA

javaFino al Google I/O del Maggio 2017, quando Google ha annunciato a sopresa il pieno supporto a Kotlin come linguaggio di programmazione supportato in Android, Java sarebbe stata l’unica scelta possibile per questa sezione.

Al momento le cose sono leggermente differenti, ma nonostante tutto Java rimane sempre un “must have” per qualunque programmatore Android: infatti la gran parte, se non quasi tutta, la documentazione su Android usa Java, la gran parte delle più popolari librerie non native per Android sono in Java, il codice sorgente è in Java, il 99.9% dei libri su Android sono in Java e la gran parte dei tutorial sul web è in Java.

Java è un classico linguaggio di programmazione orientato agli oggetti super verboso, il tipo di linguaggio che si accompagna tipicamente con grandi quantità di parentesi graffe e punti virgola.

Java compila bytecode che può essere letto sulle macchine su cui viene eseguito tramite una java virtual machine. In pratica basta scrivere il codice una volta per poterlo eseguire ovunque o come dice un tradizionale motto “scrivi una volta e debugga ovunque”.

La portabilità di Java sui più diversi dispositivi è sicuramente una delle maggiori ragioni per cui è stato scelto come linguaggio per Android.

Java è stato creato da James Gosling nel lontano 1995 e lanciato da Sun Microsystems, mentre a partire dal 2009 è sotto il controllo della Oracle Corporation.

Ma veniamo al punto: è possibile evitare di imparare Java se si vuole programmare per Android?

La mia personale opinione è che questo al momento non sia possibile, perché pur potendo e volendo programmare in Kotlin, è comunque necessario avere una base di Java (quantomeno a livello di comprensione del codice) per capire cosa abbia scritto la gran parte dei programmatori su Android fino a questo momento.

Comprendo perfettamente i sentimenti di color che provengono da linguaggi più “amichevoli” (praticamente qualunque creata più o meno recentemente), ma guardate al lato positivo: Java è il linguaggio di programmazione più popolare in assoluto, siete in buona compagnia.

Si badi bene: tutto cambia, e in fretta, nel mondo della programmazione, Kotlin ha più di un asso nella manica per poter dare del filo da torcere a Java, se non subito, nel lungo periodo.

Qui, i tutorial ufficiali su Java

KOTLIN

kotlin_android3Kotlin è il nuovo arrivato: è conciso, elegante e promette un mondo senza Null Pointer Exceptions a meno che non si voglia lanciarle esplicitamente (magari perché siete dei javisti nostalgici e le eccezioni vi ricordano il passato).

Come riportato sulla pagina ufficiale, Kotlin è al 100% interoperabile con Java e Android, infatti, nel contesto di Java e Android, Kotlin usa la Java Virtual Machine esattamente come Java, da qui la compatibilità e la possibilità di usare Kotlin con le librerie già esistenti per Java e Android.

Cosa cambia quindi con Kotlin? Questo linguaggio di programmazione è progettato per usare meno righe di codice, spingere all’uso di classi immutabili e limitare la nullabilità degli oggetti: in poche parole, meno possibilità di errori.

Sembra che Kotlin sia molto simile a Swift, quindi potrebbe essere un buon punto di partenza per sviluppatori IOS che vogliano provare a lanciarsi in Android.

Kotlin sarà incluso di default in Android Studio a partire dalla versione 3.0, attualmente in beta, ma può già da ora essere usato in versioni recenti di Android Studio semplicemente installando un plugin.

Kotlin è stato sviluppato da JetBrains, la nota compagnia che ha IDE praticamente per tutto, la stessa che produce Android Studio, e viene sviluppato da un team a San Pietroburgo: infatti il nome Kotlin deriva proprio da una omonima isola nei pressi di questa città.

Più info su Kotlin:

Kotlin and Android

FAQ (in inglese) su Kotlin e Android

Risorse per imparare Kotlin

L’aspetto: XML

xmlTutti i layout, le immagini, i menu e le varie componenti che formano l’interfaccia grafica di una app Android sono definiti in file XML.

Ognuno di essi può essere descritto con un elemento XML con attributi per modificarne l’aspetto.

L’XML non viene usato solo per elementi strettamente grafici, ma anche per tutto ciò che può modificare l’aspetto di una app, comprese stringhe di testo, in quanto queste possono cambiare, ad esempio, a seconda della lingua utilizzata dall’utente.

In Android è piuttosto semplice configuare una app usando set completamente differenti di stringhe per differenti lingue (inglese, italiano o giapponese tanto per fare qualche esempio), semplicemente mettendole nelle opportune cartelle: sarà il sistema a scegliere quelle appropriate.

Inoltre XML è utilizzato per definire risorse come dimensioni, colori, stili degli elementi grafici e così via: le possibilità di personalizzazione dell’interfaccia a seconda dei dispositivi, della lingua, delle dimensioni dello schermo sono praticamente infinite.

XML è molto simile all’HTML e facile da capire al volo per la gran parte dei programmatori con un po’ di esperienza, ma non è troppo difficile da imparare nemmeno per i principianti.

L’unica cosa talvolta difficile, non sta tanto nella lingua, quanto nel fatto che non è sempre semplice trovare le liste di valori che ogni attributo di un oggetto XML può avere: molto spesso l’unica soluzione è googlare e cercare su Stack Overflow, piuttosto che guardare la documentazione.

Gli utili extra: Gradle DSL (a.k.a. versione Gradle di Groovy), SQLite.

Gradle DSL

GradleLogoRegAndroid Studio, l’editor ufficiale di Android fornito da Google, usa Gradle come strumento per gestire le build e le librerie da usare nelle app Android.

Gradle applica i plugin (in primis il plugin Android), collega il codice alle librerie, firma digitalmente la app, in modo tale che possa essere trasformata in un APK e distribuita sul market preferito (molto probabilmente Google Play).

La gran parte dei file che un principiante in Android troverà sicuramente più oscuri ed inquietanti (ma solo perché a prima vista non immediatamente comprensibili) sono prorprio file di gradle, scritti in un linguaggio chiamato Gradle Domain Specific Language o in breve Gradle DSL. Gradle DSL è una versione di Groovy, un linguaggio di scripting interoperabile con Java.

Le più comuni operazioni sui file build.gradle consistono nell’aggiungere dipendenze a librerie o fornire indirizzi di repository da cui scaricarle: è qualcosa di relativamente semplice anche per un principiante, ma avere una più approfondita conoscenza di cosa Gradle sia davvero facendo può sicuramente tornare utile.

Gradle infatti può configuare build differenti a seconda di differenti versioni di una stessa app (ad esempio una versione gratuita ed una a pagamento), permettendo ad ogni versione di accedere a risorse e librerie specifiche. In questo modo invece di avere una unica gigante versione di una app con tutte le risorse per ogni uso, si possono realizzare più versioni ognuna delle quali più leggera e con risorse specifiche.

Potete saperne di più su Gradle DSL qui

Se volte una introduzione “amichevole” ed orientata ad Android a Gradle, vi consiglio questo corso di Udacity (in inglese):

Gradle For Android and Java.

SQLite

sqlite2I Content Provider sono tra i principali componenti del sistema operativo Android.

Un Content Provider è un itermediario fra il codice e ed i dati e viene utilizzato per accedere a dati tipicamente immagazzinati in un database.

In pratica per ragioni di sicurezza e modularità, in Android si preferisce non chiamare direttamente i metodi del database, ma delegare questa operazione ad un Content Provider, in quale a sua volta esegue del codice su database permettendo solo un set di azioni predeterminate, in modo da mantenere i dati al sicuro da errori ed attacchi.

In questo modo, qualora si decidesse di usare un database completamente differente, non si dovrebbe cambiare il modo in cui i dati sono richiesti in java (o kotlin), perché il Content Provider fornirà sempre gli stessi metodi, cambierà solo la loro implementazione.

In teoria un Content Provider puà chiamare qualunque tipo di database, ma Android fornisce delle classi helper pensate per usare SQLite.

SQLite è un tipico database relazionale (basato su tabelle), è molto leggero e piuttosto veloce, in modo da non rendere le app troppo pesanti.

Non tutti i programmatori implementano un database dalle fondamenta, molti programmatori preferiscono usare database già pronte all’uso e testate, ma in caso pensiate di usare solo il puro Android per le vostre app, potrà esservi utile avere qualche nozione di SQLite (o SQL in generale). La conoscenza di un minimo di SQL è inoltre richiesta per superare l’esame di Associate Android Developer di Google.

Spero che nessuno si sia spaventato per questa lista, soprattutto spero nessuno si spaventi troppo dopo la prima occhiata ad Android Studio: anche la più semplice delle app è una piccola cittadella di file, ma con un po’ di tempo non sarà difficile avere familiarità con ognuno di essi e ogni pezzo troverà il suo posto nella vostra mappa mentale.

Ci sono comunque sempre due modi per ritrovare la strada in caso doveste perdervi: Google e Stack Overflow, nessuno può sopravvivere senza di loro, non siete soli.

 

Annunci

Google lancia la sua Associate Android Developer Certification

Come molti altri giganti del software, Google ha deciso di offrire una certificazione ufficiale per permetta ai programmatori di dimostare la propria competenza in una delle sue piattaforme tecnologiche più popolari: Android.
Per ottenere la Associate Android Developer Certification bisogna stostenere un esame al costo di 99$ (offerta lancio iniziale, in futuro costerà 149$).
L’esame è al momento solo in inglese ed è composto da due fasi: in una prima parte l’esaminando riceve un progetto starter che ha alcuni bug da eliminare e al quale si richiede di aggiungere alcune funzionalià.
Il progetto deve essere completato entro 48 ore ed è pensato per coprire cinque argomenti principali:

– Testing and Debugging:
Esempi:Scrivere unit test per JVM e per la UI, riprodurre un errore, usare il system log per fare debugging, correggere un crush, debuggare i problemi di lifecycles diuna activity e quelli legati al binding dei dati alle views.
-Application User Interface (UI) and User Experience (UX)
Esempi: creare View class personalizzata, implementare una RecyclerView, localizzare una applicazione, adattare una view con elementi legati alla accessibilità.
– Componenti Fondamentali delle Applicazioni (Activity, Service, BroadcastReceiver e Content Provider)
Esempi: usare un JobScheduler per programmare una task in background, propagare i cambiamenti dei dati alla UI con un Loader, creare una Activityche setti una risorsa di layout.
-Data Storage persistente
Esempi: creare un database, usare un ContentProvider, etc.
-Integrazione avanzata nel Sistema.
Esempi: creare Widget che possono interagire con l’utente anche al di fuori della applicazione.

Una volta completato il progetto, questo deve essere reinviato a Google entro 48 ore, accompagnato da una copia pdf di un documento di identità valido e rilasciato da un ente governativo (passaporto, patente, etc). Il compito sarà valutato in parte in modo automatizzato e in parte da esaminatori in carne ed ossa.
Se si passa l’esame scritto, si dovrà sostenere un esame orale: nella documentazione ufficiale non è specificato in modo esplicito, ma molto probabilmente si tratterà di un esame che avverrà comunque tramite internet, vista la vasta platea internazionale di programmatori android.
L’intero processo, dall’esame alla “interrogazione” dovrebbe avvenire in non più di 45 giorni.
Se un esaminando sbaglia lo scritto, può tentarlo una seconda volta immediatamente, se l’esame scritto viene sbagliato nuovamente, prima di ritentare una terza volta bisognerà aspettare 2 mesi, in questi casi non si dovrà pagare di nuovo il prezzo dell’esame.
Se invece si è così sfortunati da fallire anche una terza volta, prima di poter ritentare l’esame si dovranno attendere 6 mesi e per sostenerlo nuovamente si dovrà pagare nuovamente il contributo previsto.
Il certificato rilasciato da Google non dura a vita, ma ha una scadenza di tre anni, se trascorso tale periodo ci si vorrà qualificare di nuovo come Associate Android Developer si dovrà sostenere di nuovo l’esame.
Per aiutare gli aspiranti sviluppatori android a rinfrescare la propria preparazione, Google ha stabilito una partnership con la nota piattaforma per l’insegnamento online Udacity e con General Assembly per dei corsi dal vivo.
Udacity in particolare ha lanciato una nuova Associate Android Developer Fast Track, specificatamente pensate per preparare i programmatori al nuovo esame di Google. Secondo l’Android Blog Developers, Udacity ha anche rinnovato uno dei suoi corsi più famosi, “Developing Android Apps” per tenerlo aggiornato ai più recenti cambiamenti della piattaforma android: adesso sono compresi argomenti come il Job Dispatcher di Firebase e il nuovissimo Constraints Layout, inoltre venendo incontro alle richieste degli studenti, il corso è stato modificato in modo da renderlo più semplice per i principianti di Android (anche se è comunque richiesta una conoscenza del Java di almeno 1-2 anni): ora gli studenti dovranno realizzare prima delle piccole app di esempio che servono a comprendere le nuove funzionalità da aggiungere poi al più complicato progetto “Sunshine”, la app che viene costruita lungo tutto il corso.
I corsi di Udacity sono in inglese e possono essere seguiti gratuitamente per intero, si paga solo per avere il certificato e dei supporti aggiuntivi come l’aiuto da parte di “coach” che esaminano le app realizzate dagli studenti, correggono gli errori e chiariscono i punti oscuri del codice android. Si tratta quindi di una gran bella occasione sia per chi voglia solo approfondire la propria conoscenza di android che per chi voglia sostenere l’esame di certificazione di Google.

Per saperne di più:

Google Developer Certification

Associate Android Developer Fast Track

Android Developers Blog

Hello World!

C’è forse un modo migliore di ‘Hello World!’ per iniziare un blog sulla programmazione?
Foofologia è un blog dedicato alla programmazione java e allo sviluppo per Android ed il gemello italiano di Foofology, un blog identico nel contenuto e nell’aspetto (o quasi) ma in inglese.
Perchè iniziare un blog sulla programmazione?
Leggendo i posti di molti blogger e coder americani ed inglesi ho visto spesso sottolineato un concetto: scegliendo di parlare di un argomento, di condividerlo si migliora la propria conoscenza dell’argomento stesso. Questo blog è quindi fondamentalmente un tentativo di migliorare me stessa come programmatrice. Lo considero come un taccuino virtuale sul quale annotare le cose che ritengo rilevanti.
In secondo luogo, credo che le risorse sulla programmazione in italiano siano molto meno numerose di quelle in inglese, quindi un tentativo di contribuire ad ampliare questa offerta mi sembra non del tutto inutile.
Infine amo scrivere quasi quanto amo programmare: spero ne venga fuori qualcosa di buono!

Happy Coding!

Cookie Policy

Cosa sono i cookie?

I cookie sono piccoli pezzi di informazione, conservati sotto forma di file di testo che sono conservati sul computer o su altro device utilizzato per navigare, quando il browser carica un sito web. Sono ampiamenti usati per ricordare l’utente e le sue preferenze sia per una singola visita (cookie di sessione) o per multiple visite ripetute (cookie persistenti). I cookie servono ad assicurare una esperienza efficiente e sempre simile ai visitatori e per funzioni essenziali come quella di consentire ad un utente di registrarsi ad un sito e di rimanere loggato.
I cookie possono essere settati sia dal dal sito che si sta visitando (cookie di prima parte) che da altri siti che forniscono contenuto al sito che si sta visitando (cookie di terza pate).

I cookies e WordPress.com

Foofology è ospitato sulla piattaforma di blogging WordPress.com, come utente di WordPress questo blog non setta direttamente nessun cookie, perché gli utenti di WordPress.com non hanno accesso al codice della piattaforma,  ma WordPress.com fa uso invece di cookie per una varietà di scopi: cookie necessari per ragioni tecniche, cookie che servono per mostrare esperienze personalizzate per i visitatori e gli utenti registrati e quelli che consentono ci mostrare pubblicità di network di terze parti. Alcuni di questi cookie sono caricati quando la pagina viene caricata, o quando il visitatore compie qualche particolare azione come ad esempio premere il tasto ‘like’ o ‘follow’ su un bottone di un post.

Molti di questi coookie vengono settati solo se si è un utente registrato di WordPress.com, mentre altri vengono settati per tutti i visitatori in seguito a specifiche azioni.

Esempi di cookies settati sia per utenti registrati e non registrati:
ab – usato per l’AB testing di nuove funzionalità
akm_mobile – usato se ricordare se l’utente ha scelto la versione mobile del sito.
Esempi di cookie settati solo per utenti registrati a WordPress.com:
twostep_auth – settato quando l’utente usa l’autenticazione a due fattori.
wp-settings-{user_id} usato per ricordare la configurazione di un utente come wp-admin.

Qui di seguto un elenco dei cookie usati da WordPress.com:

Strettamente necessari
Questi sono cookie essenziali per tutti i siti web su WordPress.com per garantire le loro funzioni base. Questo tipo di cookie includono quelli utilizzati dall’utente per autenticarsi e per le relative operazioni relative al proprio account, come pure, in caso di siti che abbiano e-commerce (non è il caso di Foofology) per operazioni di acquisto.
Esempi di cookie strettamente necessari:
cookietest – verifica che i cookie siano abilitati per garantire l’appropriata esperienza utente.
twostep_auth – utilizzato quando l’utente usa l’autenticazione a due fattori.

Funzionali
Questi cookie sono usati per ricordare le preferenze dell’utente come ad esempio il nome dell’account, la lingua, la località. Non sono usati per tracciare i visitatori o siti non ospitati su WordPress.com.
Esempi:
akm_mobile – usato per ricordare se l’utente ha scelto di vedere la versione mobile del sito.
botdlang – usato per ricordare la lingua scelta dall’utente per vedere blog popolari.
wordpress_logged_in* –
usato per ricordare se l’utente è loggato a WordPress.com.
wp-settings-{user_id} – usato per la configurazione wp-admin
wp_sharing_{id} – usato per ricordare se un utente ha già compiuto una azione.

Cookie di Performance

 

Questo tipo di cookie raccoglie informazioni su come l’utente interagisce con i siti web ospitati su WordPress.com, incluse quelle relative a quali pagine sono più visitate, come pure altri dati analitici. Questi dati sono usati solo per migliorare il funzionamento dei siti web.
Esempi:
ab – usato per l’ AB testing di nuove funzioi
nux_flow_name –
identifica quale flusso di operazioni per la registrazione viene mostrato all’utente.
signup_partner_ref – traccia la fonte da dove nuovi utenti si stanno registrando.
signup_referrer – traccia la fonte da dove nuovi utenti si stanno registrando.
tk_ni|tk_ai|tk_qs – raccoglie metriche interne sull’attività dell’utente, usate per migliorare la sua esperienza.

Pubblicità/Tracking

Questi cookie sono usati per mostrare pubblicità che siano rilevanti per i visitatori dei siti di WordPress.com, così come pure per tracciare il volume complessivo di visitatori del network di WordPress.com. Questo tipo di cookie tracciano dettagli sui visitatori come ad esempio il numero di visitatori unici, il numero di volte che un particolare annuncio pubblicitario è stato mostrato, il numero di click che l’annuncio ha ricevuto e sono anche una misura della efficacia di una campagna pubblicitaria, attraverso la costruzione di profili utente. Questi cookie sono settati da Automatic e da terze parti di fiducia e sono in genere persistenti in natura.
Esempi:
ads –traccia se un visitatore ha cliccato un banner in precedenza.
wordpress_eli – riduce il numero di annunci per visitatori ripetuti.

Cookie di terze parti

I siti ospitati su WordPress.com possono fare uso di differenti applicazioni di terze parti e di servizi per migliorare l’esperienza dei visitatori. Questi includono piattaforme di social media come Facebook, Twitter (attraverso l’uso dei loro bottoni di condivisione) o contenuto innestato nei post come video di Youtube o di Vimeo. Come risultato i cookie possono essere settati da queste terze parti e usati da tali parti per tracciare la tua attività online. WordPress.com (e Foofology) non hanno diretto controllo sulle informazioni raccolte da questi cookie.

Cookie di controllo

Alcuni visitatori possono decidere di limitare l’uso di cookie o di disabilitarli completamente. La gran parte dei browser provvede modi di controllare il comportamento dei cookie, come ad esempio il tempo per il quale vengono conservati, sia mediante funzioni proprie dei browser stessi che mediante plugin.

Per saperne di più su come gestire i cookie puoi visitare questo sito informativo:

YourOnlineChoices (anche se il nome è in inglese, c’è una versione in italiano)

NOTA: la gran parte di questo testo è la traduzione della cookie policy di WordPress in inglese.