Si ya has leído alguno de mis anteriores artículos, sabrás que estoy aprendiendo a programar en Java de manera autodidacta, y que he superado el test de certificación oficial de Oracle de programador asociado. Por esta razón, me imagino que no te sorprenderá que mi siguiente paso fuese el de aprender a programar en Android 🙂 Tengo publicadas un par de aplicaciones en Google Play, pero quiero aprender a construir aplicaciones más complejas. ¿Por dónde empezar?
¿Qué significa aprender a programar en Android?
Con aprender a programa en Android quiero decir aprender a programar aplicaciones Java para dispositivos que funcionen con Android. Es decir, vas a aplicar tus conocimientos de Java para crear apps. Es cierto que, desde 2017, se pueden crear aplicaciones nativas utilizando Kotlin, otro lenguaje de programación, pero yo prefiero centrarme en Java. (Te recomiendo que le eche un vistazo a mi artículo 7 razones por las que debes aprender a programar en Java, donde te explico en qué basé mi decisión precisamente este lenguaje y no otro. En este mismo artículo, te explico la diferencia entre una aplicación nativa y una aplicación multiplataforma).
Además, puedes crear aplicaciones que se podrán instalar en teléfonos, tabletas, teléfonos inteligentes (Android Wear), televisiones (Android TV), coches (Android Auto) y dispositivos inteligentes (lo que se conoce como Internet de las Cosas, con Android Things).
Entonces, si sé Java, ¿puedo programar aplicaciones para Android?
Te lo digo desde ya: para programar en Android no basta con conocer Java.
Java es el lenguaje que vas a utilizar, pero para programar una aplicación para dispositivos con Android debes conocer las librerías de Android. Una librería (y las hay muchas, tanto para su uso en Android como para Java en general) viene a ser un set de herramientas específico para ser utilizado con un fin concreto.
Para ponerte un ejemplo, suponte que quieres hacer una mesa.
Y quien dice una mesa, dice una casa. Aquí tienes madera de sobra
Programar con Java, sin utilizar librerías, es como querer hacer esa mesa con un set de herramientas básico: un hacha, una sierra, un martillo, clavos y un bosque del que obtener la madera. Programar utilizando librerías sería como utilizar un kit de montaje: ya tienes las tablas cortadas, lijadas y barnizadas, una pistola de clavos y un manual de instrucciones. El resultado es el mismo, pero con mucho menos trabajo. Como regla general, utiliza librerías siempre que puedas, y no intentes reinventar la bicicleta.
En Android en concreto, tienes que aprender los entresijos de una aplicación: cómo crear una interfaz e interactuar con ella, cómo crear nuevas actividades (pantallas), menús, elementos móviles, notificaciones. El conocimiento de Java es imprescindible, pero no suficiente.
Quiero aprender a programar en Android. ¿Por dónde empiezo?
Si estás aquí, es porque quieres saber de manera específica cómo aprender de manera autodidacta.
Ten en cuenta que en internet puedes encontrar una gran cantidad de tutoriales, sobre todo en inglés, como Vogella o, en español, AndroidYa. No obstante, no te recomiendo que empieces con ellos.
¿Sabes por qué?
Porque los tutoriales no son para aprender, sino para consultar. Es decir, si quieres aprender a hacer algo concreto en tu aplicación, puedes utilizarlos como material de referencia, pero de poco te va a servir aprender desde cero a realizar cosas sueltas. Un aprendizaje tan caótico solo va a servir para que te frustres y abandones.
Aprende por proyectos
Cuando comencé a prepararme el test de certificación de Java (OCAJP8), utilicé muchos recursos y, aunque me resultaba a veces un poco aburrido, conseguí superar el test con buena puntuación a fuerza de repetir y repetir pequeños fragmentos de código, siguiendo el manual de Jeanne Boyarsky y Scott Selikoff. No obstante, cuando intenté hacer lo mismo con el siguiente test, tuve que abandonar.
¿Por qué?
Porque la cantidad de material que cubre el test de nivel profesional es demasiado grande. Demasiado grande para seguir con ese enfoque de "practicar cosas sueltas". Empecé bien, pero llegó un momento en el que me vi abrumado por la cantidad de información. Si bien me parece más fácil que el test OCA en lo que a comprensión se refiere (comenzar a programar desde cero me resultó al principio complicado), la cantidad de material que hay que aprender bien viene a suplir esa facilidad.
Es por eso por lo que me he propuesto aprender el test de certificación OCP aprendiendo mediante proyectos. La semana que viene te hablaré con más detalle al respecto.
En relación con Android, tenía claro desde el principio que quería aprender mediante proyectos. Probé con los cursos de Udacity. Son buenos y realizas paso a paso varias aplicaciones, pero he comprendido que, a mí personalmente, los cursos basados en vídeos se me hacen eternos. Así que en Amazon compré un par de manuales.
Mis manuales para aprender a programar en Android
El gran libro de Android, de Jesús Tomás Gironés
Jesús Tomás Gironés es doctor en informática, profesor titular del Departamento de Comunicaciones en la Universidad Politécnica de Valencia.
El que yo compré era este mismo, actualizado a la versión 6.0 de Android.
Este manual contiene dos proyectos, con los que vas creando una aplicación desde cero. En uno de ellos creas una aplicación denominada Mis lugares, que sirve para crear una lista de tus lugares favoritos, con datos como la localización del lugar, el nombre, contactos, etc.
El otro proyecto, mucho más interesante, creas todo un juego gráfico, llamado Asteroides. En él pilotas una nave espacial y has de ir esquivando los asteroides que aparecen en la pantalla. Tienes también la opción de hacerlos estallar con misiles.
Algo que me tiró para atrás de este manual es que esta última aplicación ya no se podía descargar de Google Play, y no parecía ir muy bien en mi teléfono (precisamente con Android 6.0), así que, entre eso y que empecé a prepararme el OCP, lo dejé de lado al poco de empezar. Más adelante te cuento por qué cambié de opinión y por qué lo considero un buen manual.
Android Programming: The Big Nerd Ranch Guide, de Bill Phillips, Kristin Marsicano y Chris Stewart
Este manual está basado en los cursos de programación que organiza Big Nerd Ranch.
Este manual lo comencé hace pocos meses y, cuando iba por la mitad, tuve que comenzar de nuevo. El problema es que, aunque aprendas mediante proyectos, tienes que practicar muchas veces todo lo que vas haciendo. Hay mucho material, y es imposible asimilarlo todo a la primera. La manera en que, por ejemplo, interactúan los Fragments con sus respectivas Activities puede ser un poco confuso al principio, así que comencé a crearme unos apuntes a partir del manual, donde reúno toda la información esencial de cada tema. A continuación, he empezado a practicar una y otra vez el material que ya he aprendido, creando variantes de cada aplicación que voy construyendo. Así, casi he automatizado el proceso y el funcionamiento interno de la aplicación se me hace más transparente.
La mejor, si no la única, manera de aprender (y aprender a programar en Android no es una excepción) es mediante proyectos.
Como ves, con estos dos manuales puedes crear 10 aplicaciones y, a partir de ellas, una cantidad indefinida de variaciones y combinaciones. Aprendes mucho, y aprendes bien, de manera organizada.
¿Qué opino de estos manuales?
Te dije más arriba que el manual de Gironés me tiró para atrás, pero que luego cambié de opinión.
El problema se encontraba en mi actitud. Pensé que, ya que la aplicación no funcionaba como debería (ahora creo que se debe a que mi teléfono no dispone de giroscopio), no valía la pena dedicarle el tiempo necesario. Más tarde me di cuenta de que esta es una oportunidad genial para aprender, ya que en mis manos está encontrar la solución. Si el problema está en la falta de giroscopio, poco puedo hacer; pero ¿y si no? En cuando termine el manual de The Big Nerd Ranch me voy a lanzar de cabeza a los Asteroides, te lo prometo. Además, he hojeado el manual y sé que contiene mucha información que no aparece en el de The Big Nerd Ranch.
El manual de The Big Nerd Ranch me parece muy completo, y ya el hecho de que contenga ocho proyectos ya me parece un gran plus. Ahora bien, habría que comparar la complejidad. Quizá el proyecto de los Asteroides sea mucho más complejo que algunos de los proyectos que aparecen en él, no lo descarto.
ACTUALIZACIÓN: he acabado el manual de The Big Nerd Ranch y me ha parecido estupendo. En serio, he aprendido un montón y me siento mucho más seguro a la hora de crear aplicaciones. Si vas en serio con tu aprendizaje, este es tu manual.
Lo he añadido a mi lista de recursos para aprender.
Ese manual está pensado para Android 6.0, ¿no se ha quedado atrasado?
No.
Una de las (muchas) diferencias entre Android y iOS (el sistema operativo del iPhone) es que Apple crea y distribuye tanto el sistema operativo como el dispositivo, y si quieres desarrollar aplicaciones para iPhone solo tienes que pensar en la última versión de ambos. Con Android, todo es más complicado.
Existen infinidad de dispositivos que funcionan con Android, con tamaños y densidades de pantalla distintos. Además, aún existen muchos teléfonos con versiones muy antiguas de Android (4.4, 5.0, o incluso anteriores):
Cuando creas un proyecto en Android Studio (el software gratuito que ofrece Google para crear las aplicaciones), una de las cosas que haces es seleccionar a partir de qué versión de Android va a funcionar tu aplicación. Si seleccionas Android 6.0, la cuota de teléfonos (y tabletas) en la que puedes instalar tu aplicación es del 66,4% 39,3%. ¿No es mucho, verdad? No obstante, si seleccionas Android 4.4, tu aplicación estará disponible para el 95,9% 90,1% de los dispositivos.
ACTUALIZACIÓN: resulta que la distribución de versiones de Android que muestra Android Studio no está actualizada (como puedes observar, no aparece Android Oreo 8.0 y 8.1, API 26 y 27). Mientras Android Studio sigue mostrando la misma distribución que te he puesto más arriba, en la página oficial de Android Developers aparece la gráfica adjunta.
Si seleccionas Android 6, el 66,4% de los dispositivos podrá instalarse tu aplicación.
No está actualizado: faltan Android 8.0 y 8.1
Pero esto tiene una pega.
Cada versión de Android trae alguna novedad. Si, por ejemplo, selecciono 4.4 Kitkat, solo podré utilizar las funciones de Android disponibles para dicha versión (todo lo que introduzca en mi aplicación tiene que funcionar en un teléfono con Android 4.4), y estaré muy limitado. No obstante, al seleccionar 6.0 Marshmallow tengo a mi disposición una gran cantidad de nuevas librerías y funciones que no estaban disponibles para versiones anteriores. Mientras aprendo, el porcentaje de dispositivos que pueden instalarse mi aplicaciones irá creciendo.
Así, puedo centrarme en aprender a crear una aplicación para Android 6.0 sin obsesionarme con que, cada año, Google publica una nueva versión de Android (en 2018 publicará la 9.0)
Para aprender a programar en Android no necesitas comprar la última edición de un manual, actualizado a la última versión de Android.
¿Y si quiero crear una aplicación que se vea estéticamente bien?
Esta parte es difícil, porque no basta con saber programar. En principio, si tu aplicación es sencilla, igual no necesitas muchos gráficos ni una interfaz compleja, y te las puedes apañar tú solo. No obstante, es posible que no sea así. Aprender a programar en Android es mucho más que aprender a programar 🙂
Cuántas veces me ha pasado a mí que tengo una buena idea para una aplicación pero, cuando intento diseñar la interfaz, se ve feísima. ¿Y sabes por qué? Porque no soy diseñador gráfico. No sé utilizar Illustrator, Photoshop o AfterEffects, todo herramientas de Adobe, muy potentes y con un funcionamiento complejo, si las quieres dominar. Así que no, no voy a poder crear las animaciones y gráficos tan bonitos que aparecen en otras aplicaciones.
Para resolver este problema, he encontrado tres soluciones posibles:
Yo ya le he echado un ojo a un diseñador gráfico en Envato Studio. Aún no lo he probado, ya te contaré.
Conclusiones: aprende a programar en Android, practicando
En resumidas cuentas, si quieres aprender a programar en Android, haz lo siguiente:
¿Y tú, te has planteado aprender a programar en Android? ¿Conoces algún otro recurso o manual? ¡Compártelo en los comentarios!