Cómo estoy aprendiendo a programar en Cocoa Touch para iOS

En el post en el que anunciaba que mi primera App para iOS, MyEvents, ya estaba disponible en el App Store, David me pedía en un comentario que escribiera algo de cómo me he ido preparando para programar en Cocoa. Este post ya me estaba rondando por mi Things desde hacía tiempo, y un par de correos pidiendo lo mismo, unido a que en las NSCoder Nights mucha gente va a preguntarlo (y es una lata repetir siempre lo mismo ;-)) me han llevado a escribir mi experiencia.

No esperes aquí un camino formativo «de academia», con unos objetivos, etc. Es mi experiencia. Y por ello mismo, está en contínuo cambio. Os agradecería que, si habéis leído otros libros, consultáis otras webs, tenéis otros ejemplos, etc. los pongáis en los comentarios de forma que todos los programadores que lean el post se beneficien de las experiencias de todos.

Antes de empezar, disclaimer al canto. Probablemente son los años, o el haber estado alejado de los teclados unos años, o el tener mis neuronas seriamente perjudicadas por el abuso de alcohol en mi juventud y cafeína en la actualidad, pero a mí Cocoa / ObjectiveC / XCode no me han resultado «un juego de niños». He tenido que esforzarme, leer mucho, probar cosas, equivocarme, frustrarme, volver a empezar, ver vídeos, etc. Lo digo, porque he leído en muchos sitios por Internet que la gente se pone a toda máquina con Cocoa Touch en dos/tres meses. Pues yo tengo que ser tonto de remate. Si tú tampoco eres capaz de saberte toda la API (incluyendo la parte privada) de iOS en dos meses, que sepas que tienes mi solidaridad.

El comienzo

Cuando me planteé meterme en Cocoa Touch, yo partía con tres grandes ventajas. Por un lado, en mi juventud programé mucho en C y C++, y C siempre ha sido mi lenguaje favorito. Sobre todo, porque fue el primero con el que hice cosas. Por otra parte, tras el intensivo machaque con las certificaciones Java e impartir un montón de cursos tenía bastante claro el patrón MVC. Ambas cosas son básicas: C + MVC, así que, si no tienes claro C te recomiendo lo primero que te mires el libro clásico de Kerninghan y Ritchie «The C Programming Language» para tener claro qué es un #define, un puntero, los tipos de datos que hay, estructuras de control (if, switch), el operador ternario ?, etc. MVC lo explican fantásticamente bien en los vídeos de iTunes U de la Universidad de Stanford, «Developing Apps for iOS», capítulos 1 y 2. El cap. 2 es un ejemplo de cómo aplicar MVC.

La última ventaja, algo que me sigue sorprendiendo que sorprenda, es que hablo Inglés. Dominar el Inglés te da acceso a un montón de información escrita, vídeos, podcasts, y la posibilidad de charlar con gente si vas a la WWDC (de momento, un sueño para mi, pero ya veremos en 2011). Hay muchas formas de aprender Inglés, y distintos métodos. Escoge el que quieras, pero ponte ya. Sin excusas. Lee comics, ve las películas subtituladas en Inglés y con la pista de audio en Inglés, mira videos en Youtube, lo que sea. Pero practica. Ya. Deja de leer estas líneas, en serio: el impacto en tu vida de aprender Inglés será más importante que cualquier cosa que yo pueda contar.

Los primeros libros

Para arrancar, lo tenía muy claro: iba a leerme de cabo a rabo un par de libros, uno para principiantes y de estilo tutorial, y otro avanzado que se metiera a más bajo nivel con Cocoa Touch. Los comenté en este post. Pero como soy así de bueno, listo los cuatro que he leído para que los tengáis a mano:

Beginning iPhone 3 Development, de Dave Mark y Jeff LaMarche. El primero por el que empecé. Te explica todo paso a paso, y trata un montón de temas. En un punto tuve que parar, porque no tenía clara la base de ObjectiveC, y cosas como el KVC, las categorías o la gestión de memoria se me escapaban. Así que lo aparqué y me leí:

Learn Objective C on the Mac, de Mark Dalrymple y Scott Knaster. Este libro me gusta mucho porque es muy directo, si sabes de lo que te está hablando. No es tan tutorial como el otro, va al grano y te da una base imprescindible para programar. Debería haber empezado con este 🙂

Tras estos dos, he leído algunos capítulos de More iPhone 3 Development, también de Dave Mark y Jeff LaMarche. No lo he leído completo, sino los capítulos que iba necesitando, de forma ad-hoc.

El último con el que estoy es iPhone SDK Programming, de Maher Ali. Más avanzado, prescinde de Interface Builder y lo construye todo a mano. Ideal, para saber qué pasa «detrás del telón» de IB. Y su introducción a Objective-C es muy buena, compacta, pero un poco densa.

Vídeo y audio

Mientras estaba leyendo esos libros he ido alternando con los vídeos de la Universidad de Stanford (que están disponibles en iTunes) sobre cómo programar para el iPhone. Son gratuítos y la única pega que se les puede buscar es que están en Inglés. El enlace para la versión en HD es este. También hay una versión en SD. Me parece casi perfecto ir leyendo y viendo un vídeo de vez de cuando, de forma que una cosa se apoya en la otra. Yo no tengo iPad donde verlo, pero se me ocurre que la forma perfecta es por la noche, en el sofá, con los auriculares puestos mientras tu media naranja ve otra cosa. El problema es que es mi media naranja la que lee en el iPad. Es suyo 🙂

En audio sólo he escuchado un podcast de Cocoa: 85% cocoa. Súper recomendable, tanto por el contenido como por la estructura. Y no sólo se tratan temas de programación estrictamente: se hablan de otros detalles necesarios para el desarrollo. Un gran trabajo de José A. Lobato, culpable junto con otros de la comunidad NSCodeCenter y de las iniciativas NSCoder Night en España.

Webs

Además de los recursos de Apple (el Developer Center), uso mucho StackOverflow y ahora me estoy animando a entrar en NSCodeCenter. Con estos tres cubro prácticamente cualquier pregunta, además de blogs de programadores en Cocoa y otras cosas que me encuentro por Internet y guardo en Delicious.

Programar

Al final, a programar sólo se aprende programando. Por mucho que leas, por mucho que creas que sepas, la única forma de aprender a programar es haciendo programas. Puede parecer una perogrullada, pero no lo es. Así que ya sabes: programa. Aunque tu código sea feo, aunque no te apetezca enseñarlo (eso siempre pasa, somos muy pudorosos con nuestro código), sigue adelante. Ya aprenderás formas de hacerlo más bonito. Yo hasta que no me planteé algo propio no empecé a encontrarme con cosas que quería hacer y no sabía cómo.

Un compañero

Yo me he buscado recientemente un compi para hacer Apps a cuatro manos. De esta forma, puedo ver cómo programan otras personas, tengo que esforzarme en «hacerlo bonito», ya que van a leer mi código, y avanzo mucho más rápido. Y me motiva mucho. Otra opción son las NSCoder Nights. Y si no lo hay en tu ciudad, monta tu la tuya. No necesitas más que una cuenta en Twitter y un bar. De ambas cosas hay abundancia en España.

Así que ya sabes: happy coding!

13 comments

  1. Buena entrada Diego!, gracias por atender mi petición!.

    Yo de momento he acabado con el manual de macprogramadores sobre Objective-C, y ahora voy a mitad de iPhone and iPad Apps for Absolute Beginners de Rory Lewis.

    En cuanto termine ése libro, creo que me pondré a leer «Beginning iPhone 3 Development», que espero que no sea tán básico como el de Rory Lewis, ya que ya tengo bastantes conociemientos de java y se me está haciendo demasiado lento en las explicaciones.

    De momento no me he puesto a hacer ningúna app a las bravas, sino que sigo el guión de los libros, voy a esperar a ver el manejo de listas, matrices, etc y entonces ya me pondré a hacer pruebas para ir probando todo lo aprendido.

    Una pregunta, ¿con Beginning iPhone 3 Development se puede empezar a desarrollar ya aplicaciones que saquen datos de un servicio web y poder mostrar esos datos parseados utilizando Mapkit?, ¿o tengo mucha prisa?.

    En cuanto a compañeros…tengo que empezar a buscar alguna comunidad de programadores Mac por Zaragoza…porque mis amigos programadores de momento no quieren meterse en éste mundillo.

    Bueno, un saludo, y muchas gracias de nuevo por post como éstos!.

  2. En ello estoy, pero de momento no contacto con David ni con nadie más (no sé sí tu podrías mandarle un mail). Pero bueno, a partir del 19 de Enero asistiré a un curso que va a darse en el Centro de Tecnologías Avanzadas del Gobierno de Aragón. Ahí espero contactar con más gente y meterla en el lío… jejejeje.
    Y por supuesto, tu serás el padrino. Y te invitaremos a que te pases por aquí en cuanto puedas. Pero bueno, todo se andará…

  3. Perdonar por la tardanza en contestar chicos, pero es que ando un poco liadillo!.

    En cuanto a poder organizar la NSCoder Night en Zaragoza, lo veo complicado por mi parte, ya que ahora mismo estoy con mil frentes abiertos y no puedo llegar a encargarme de ponerla en marcha, pero si tiras para adelante Fernando, te prometo intentar difundir lo máximo posible la existencia de la misma, y como no, buscar un hueco para intentar aparecer por esas noches.

    Yo tmb estoy apuntado al curso de enero del CTA, ahora estoy a la espera de que me admitan, y luego que me dejen ir en el curro….

    Mi correo es olmos.david[at]gmail.com.

    Un saludo!!

  4. Aquí otro otro mañico interesado en hacer una NSCODER_ZGZ, puedo ayudar en todo lo que pueda.
    Estoy en NSCodecenter como Jorge Sanchez y en twitter como @memmaker650 y mi mail es memmaker650@gmail.com.

    A ver si creamos un nucleo duro de 3 o 4 personas y poco a poco ir creciendo.

    Un saludo.

    • Hola Jorge.
      Fernando (aaromnido) ya ha creado el Twitter de NSCoder_zgz. Siguiéndole podréis quedar y empezar vuestras NSCoder Nights. Yo tengo muchas ganas de ir ya a la segunda de Sevilla (este Martes). Aunque lo que debe ser la leche es asistir a la NSCoder Night de otra ciudad 🙂
      ¡Ánimo y como padrino espero que os salga bien!

    • Hola!
      No me tientes, no me tientes, que ya las podríais hacer en El Cornijal… O en la Plaza de las Flores… y me tenéis que echar con agua caliente y una espátula 🙂

      Me alegro de que tuviéseis overbooking. A programar se ha dicho!

  5. Diego, ya veo que te recuerdas los buenos sitios de tu ciudad de origen ;-).
    Pues que sepas que quedas invitado y como no, recibido como una RockStar de la AppStore española :-).

    un saludo iOSero…

  6. Me siento identificado en el 90% sobretodo en lo del deterioro neuronal y por lo solo que se siente uno leyendo y probando. Estoy por montar mi nscoder_xxx de mi ciudad. Saludos

    • Pues ni te lo pienses, y móntala. Si consigues quedar, aunque sea con otra persona, ya tendrás compañero para hablar de los problemas que te surgen, compartir código, etc.
      ¡Ánimo!

Comments are closed.