¡Buena pregunta!
Prueba alguna de estas ideas:
- Bucea en un framework. Simplemente descarga tu framework o librería favorita y empieza a leer el código. De arriba a abajo, intenta comprender lo que está pasando. ¿Dónde empieza? ¿Hacia dónde salta? ¿Cuál es el resultado? Mira a ver si puedes entender el panorama general. Recuerdo que descubrí que los métodos de Alamofire están vinculados al framework, no a una clase o a un singleton. Es emocionante!
- Aprende un acrónimo loco cada día. No porque sean tan importantes, sino porque hay muchos. Mejorar en tu oficio significa que tienes que encontrar cosas nuevas y aplicarlas a lo que ya sabes. Combinar lo que sabes con lo que aún no sabes crea nuevas ideas. Una lista para empezar: TDD, BDD, ORM, MVC, MVW …
- Conocer el lenguaje. ¿Ya usas Swift? Tiene muchas características elegantes, como closures, genéricos, manejo de errores, etcétera. Al igual que el lenguaje es un componente, el IDE también lo es. En realidad, Swift se ejecuta dentro de un «runtime», ¿qué es eso? Descubre cómo funciona.
- Consigue que un par de bibliotecas trabajen juntas. Creo que esta es una de las características agradables de un nuevo lenguaje como Swift: una gran cantidad de bibliotecas se ponen en marcha todos los días. Estas bibliotecas son nuevas, y crecen entre otras bibliotecas. Los autores intentan integrar sus bibliotecas con otras, por ejemplo, Alamofire funciona muy bien con SwiftyJSON. Mira si puedes encontrar una manera de trabajar con esas 2, y combinarlas en tu código. Su objetivo es reducir el número de líneas de su código, y hacer que las líneas sean más elegantes, más descriptivas, y de mejor rendimiento.
- Conozca cómo las cosas no funcionan. La creación de aplicaciones iOS tiene una larga historia. ¿Has oído hablar de ARC? Probablemente no, porque estás muy acostumbrado a usarlo. Cuando empecé a hacer aplicaciones, tenía que retener y liberar todas mis variables e instancias manualmente. ¡Qué horror! Pero… ¿qué pasa si intentas entrar en las profundidades de la gestión de la memoria? O los derechos de las aplicaciones, o el redimensionamiento automático (predecesor del diseño automático). No es muy productivo, pero amplía tu oficio (y probablemente también es divertido).
- Trabaja para un cliente real. Consigue una organización sin ánimo de lucro y pregunta si puedes crear una aplicación para ellos. Los negocios y las apps son 2 mundos muy distintos. Te encuentras con problemas como: mi cliente quiere XYZ, pero no puedo construir eso. ¿Qué hago ahora? En el mejor de los casos, ganas algo de dinero. (Un consejo: si eres bueno en esto, nunca lo hagas gratis)
- Escribe una biblioteca tú mismo. Puede ser cualquier cosa: una herramienta, un componente inteligente, un montón de utilidades. Sácala en GitHub, empieza a hablar con compañeros, haz que vean tu código y recibe comentarios sobre él.
- Mira el Proyecto Euler o Interview Cake. Combina tu habilidad en la programación con las matemáticas, las estructuras de datos, los algoritmos… lo suficiente para aprender.
- Enseña a otros a codificar. He aprendido mucho enseñando, con las preguntas que me hace la gente. En muchas ocasiones ni siquiera había pensado en las cosas que me preguntaban, me salía natural. En otras ocasiones me enteré de errores de comprensión, porque expliqué mal el tema. Muchos profesores profesionales te dirán: enseñar es el máximo aprendizaje.
Sólo una cosa: aprender es una cosa completamente diferente a construir. Podrías aprender toda tu vida y no hacer ni un ápice con ello. Mi consejo: aplica lo que aprendes, cada día. Construye proyectos reales. La única manera de aprender a construir aplicaciones complejas, es construyendo aplicaciones complejas.
Déjame un mensaje si buscas un recurso de aprendizaje específico, tengo toneladas :-).
¡Buena suerte!