Programación en Mac OS X
Viendo el maravilloso interfaz gráfico y las guías de usabilidad de Mac OS X seguro que a alguno de vosotros le ha entrado el gusanillo (aparte de ganas de chupar las ventanas) de programar sobre Mac OS X. A mí, desde luego, sí. Ambos.
En la red hay un montón de recursos para iniciarse en el mundillo de la programación para Macintosh. No hay más que darse una vuelta por el sitio de desarrolladores de Apple o consultar al omnipotente Google. Sin embargo, a veces salen noticias como la de los chicos de Delicious Monster Software, que se curraron en un café de Seattle una aplicación que utiliza los web services de Amazon llamada Delicious Library y que es estupenda para organizar un catálogo multimedia personal, o presentaciones acerca de la programación sobre Macintosh como la de Will Shipley en la Apple WWDC que te meten más ganas todavía. Además, como suele decirse, programming is fun!
¿Cómo empezar? Programando, desde luego. No hay otra manera. Pero siempre viene bien tener cerca una buena lista de libros que le echen a uno una mano, y de eso es de lo que os voy a hablar.
A principios de este año hice un viaje a San Francisco para asistir a un evento de Sun Microsystems y aproveché para irme al Borders de Union Square a aprovisionarme de libros (sí, ya sé, Amazon es hasta más barato y no te tienes que pegar un viaje así, pero los caminos de la compra compulsiva son inescrutables). Cuando estaba tirado en la moqueta de la megatienda revisando la pila de libros que había sacado de la estantería de programación en Mac OS X se me acercó un chico y me recomendó uno de los que precisamente estaba revisando. Era desarrollador de software para Mac, y a raíz de la conversación que mantuvimos y de los utilísimos comentarios que deja la gente en Amazon, me hice con una lista de libros que al final me he ido comprando. Hace ya unos meses de ello, y ahora puedo confirmar que las recomendaciones no pudieron ser más acertadas.
Básicamente hay dos grandes entornos de programación: las aplicaciones cliente/servidor y el mundo web. Apple diferencia las apuestas que hace para los dos mundos, de tal forma que las cosas quedan suficientemente claras a la hora de saber a qué atenerse.
Aplicaciones cliente
Para cliente/servidor, el lenguaje por el que Apple apuesta es Objective-C, un derivado de SmallTalk que a su vez es un superset de C. A día de hoy la única manera de programar usando el framework Cocoa es con Objective-C y con AppleScript.
AppleScript, como su nombre indica, es un lenguaje más orientado al scripting del sistema que Objective-C, y por eso diría que Objective-C es más adecuado para aplicaciones más “serias”. Esto desde luego no significa que AppleScript no sea lo suficientemente rico; os podéis convencer echando un vistazo a su increíble potencia en el sitio web de Bill Cheeseman o a los libros de O’Reilly sobre el tema.
Me voy a centrar en Objective-C, y teniendo en cuenta su relación con Cocoa la primera recomendación es aprender Objective-C, luego pasar a aprender Cocoa y, por último, entrar en los detalles del sistema para optimizar la aplicación, conseguir un grado de integración mayor con el sistema operativo, o satisfacer nuestra curiosidad acerca de los detalles de Mac OS X.
Teniendo en cuenta este órden, esta es la lista de libros que recomiendo:
- Programming in Objective-C, de Steven Kochan.
Este libro enseña a programar en Objective-C sin necesidad de conocer C. Esto es bueno porque en Objective-C hay muchas estructuras de C que se utilizan con un propósito distinto y no conviene mezclar los conceptos. En particular, el gran logro del libro es mantener el foco en la orientación a objectos sin entrar en el detalle de lo que hay debajo de la implementación de los objetos y clases en Objective-C hasta que se han comprendido. La primera parte del libro cubre todo el núcleo del lenguaje Objective-C, y acaba viendo las características de C que hay tras Objective-C en un capítulo final que se puede saltar y usar sólo como referencia. La segunda parte del libro se centra en ver las Foundation Classes de Mac OS X, que son las clases que van a usarse con frecuencia en el desarrollo con Objective-C.
- Cocoa Programming for Mac OS X, de Aaron Hillegaas.
Con este libro todo lo aprendido sobre Objective-C y las Foundation Classes se lleva a la práctica (gráficamente hablando) de la mano de Cocoa. El desarrollo con Cocoa está enfocado con XCode y su Interface Builder, y a través de ejemplos potentes y sencillos uno se va haciendo rápidamente con el control de Cocoa. El libro es usado en las clases de programación del “Big Nerd Ranch”, donde Hillegaas es profesor. Hay varios libros de Cocoa por ahí, pero creo que este es el mejor escrito, y el que logra transmitir un mejor conocimiento de qué es Cocoa y cómo se usa. Si antes de ponerse manos a la obra queréis tomarle la temperatura a Cocoa y leer algo a modo de introducción, os recomiendo Introduction to developing Cocoa Objective-C applications: a tutorial que podéis encontrar en la web del Desarrollador de Apple.
- Core Mac OS X and Unix Programming de Mark Dalrymple y Aaron Hillegaas.
Este libro es sobre programación en y no tanto sobre Mac OS X. En él se analizan las relaciones de las aplicaciones con el sistema operativo que las está ejecutando por debajo. En realidad es un libro de programación UNIX, y lo que se cubre aquí son las tecnologías core de Mac OS X. Yo creo que es el paso final para quien está interesado no sólo en el desarrollo de aplicaciones sobre Mac OS X sino también en qué está ocurriendo por debajo y cómo puede optimizarse una aplicación. Es el más caro de los tres, pero también hay que decir que no hay mucha más literatura al respecto. Ni que decir tiene que el libro merece la compra; es claro, está bien escrito y va al grano.
Por último, como recursos sueltos que está bien tener a mano, yo recomendaría un libro de C. Practical C Programming de la editorial O’Reilly es un muy buen libro para comprender de manera fiable muchos de los conceptos de C como las estructuras o los punteros. Por supuesto, no voy a dejar de recomendar un clásico como el Kernighan y Ritchie, aunque si os soy sincero, el primer título que os he dicho me parece menos duro en algunos puntos. Cuestión de gustos.
Aplicaciones web
Para la programación web, la apuesta de Apple es por Java. Hasta hace poquísimo se podía programar en Java usando Cocoa. Esto significaba que aunque la programación se hacía en Java, como se invocaban clases de Cocoa los programas escritos sólo estaban pensados para ejecutarse en Mac OS X. Se pierde la portabilidad de Java, que es lo que realmente lo hace potente, con lo que Apple decidió descontinuar el soporte de Cocoa sobre Java y actualmente sólo puede programarse en Cocoa con Objective-C.
Se puede seguir haciendo aplicaciones cliente/servidor con Java, pero el look & feel será el estándar de Java: SWING/AWT. La apuesta de Apple por Java como lenguaje cliente/servidor queda validada por el hecho de que su servidor de aplicaciones WebObjects, que ahora se incluye de manera gratuita con XCode 2.1, dejó de soportar Objective-C para centrarse sólo en Java.
En este terreno os puedo recomendar la serie Head First de O’Reilly y en particular los títulos Head First Java y Head First Servlets & JSPs, ambos escritos por la gente que diseña los cursos de Java de Sun Microsystems. Su lectura es extremadamente amena y entretenida, y hacen la introducción al complejo mundo de Java un poco más sencilla. Por cierto, las capturas de pantalla son de un Mac OS X.
Por supuesto, ni que decir tiene que hay muchas alternativas a la programación web aunque no tan idóneas para lo que sería programación de grandes aplicaciones enterprise, aunque reconozco que esta última opinión está muy discutida ultimamente. Un lenguaje que merece la pena un vistazo y que es muy potente para aplicaciones medias o sencillas (como este website) es PHP o todavía mejor, el nuevo terror de la web, Ruby On Rails.
