Como dice el viejo chiste: "¿Cómo te comerías un elefante?... Pues trocito a trocito, claro. "
Aprender a programar en un nuevo sistema operativo es como comerse un elefante: no puedes hacerlo de golpe y si quieres tener éxito debes ir poco a poco, quemando etapas.
Uno de los principales mitos del desarrollo para iOS es que es difícil por culpa de Objective-C, un lenguaje críptico y propenso a errores que no perdona los fallos. Y el mito moderno derivado de este es que Swift, por el contrario, facilita mucho las cosas ya que su sintaxis es más sencilla y directa.
Sin embargo la realidad es que la verdadera barrera para aprender a programar para iOS es ¡dominar Cocoa Touch!. Cocoa Touch es la API para programar aplicaciones para el sistema operativo de la manzana, y ofrece una capa de abstracción por encima de iOS:

Es una API enorme que incluye también la creación de interfaces de usuario e interacciones, y que además tiene multitud de paradigmas propios que pueden resultar extraños a muchos programadores que vienen de otros entornos.
Objective-C y Swift son el pegamento que une todo lo que ofrece Cocoa Touch. Es decir, Cocoa Touch es la base que utilizan tanto Objective-C como Swift.
Por ello, aprender un lenguaje o el otro realmente es una cuestión casi "estética" y de preferencia, puesto que lo verdaderamente importante es aprender lo que hay debajo de ambos.
Pros y contras
Dado que Swift es el nuevo y moderno lenguaje que está impulsando Apple, ¿merece la pena aprender también Objective-C o vamos directamente a por Swift?
Sin duda Swift es el futuro y además es un lenguaje moderno que ofrece muchas ventajas frente a Objective-C:
- Código más conciso, claro y limpio que facilita la escritura y la comprensión
- Ofrece tipado fuerte de datos, inferencia de tipos, sobrecarga de operadores...
- Elimina los punteros, controla el desbordamiento de variables
- Gestión automática de la memoria
- Genéricos
- Estructuras con métodos, extensiones y protocolos
- Facilita mucho la depuración
- Facilita el uso de patrones de programación funcional
- Etc...
Por el contrario Objective-C es mucho menos transigente con los errores, tiene una sintaxis complicada y además ofrece ciertos conceptos que resultan complejos para programadores que vienen de otros lenguajes, como:
- Protocolos
- Categorías y selectores (aunque estos últimos se usan en Swift también tienen mucha más fricción)
- Dispatch dinámico
- First responders
- Bloques
- Etc...
Ante este panorama, claramente, parece que lo inteligente sería aprender directamente Swift ¿no?

La realidad es que, aunque Swift resulte más fácil para un programador que viene de otras plataformas, Objective-C se puede aprender en cuestión de unas pocas horas también, aunque parezca mentira.
Dado que ambos deben utilizar Cocoa Touch por debajo y esta API está escrita en su totalidad con Objective-C, aunque programes en Swift no te puedes librar de conocer igualmente los conceptos avanzados propios del otro lenguaje, como los principios de orientación a objetos de Objective-C, punteros, protocolos, delegados, montones, pilas.... simplemente para poder usar la base. Es decir, aunque programes en Swift debes jugar con las reglas de Objective-C. Vamos, es como aquel famoso anuncio de los 90 del juego Scatergoris
.
Por ello, en mi opinión lo más interesante es aprender los dos lenguajes. Swift es el futuro pero Objective-C es la base.
Conocer Objective-C además de Swift es bueno porque:
- Cocoa Touch está basado en este lenguaje y conocerlo te ayudará a comprender mejor sus paradigmas.
- Las principales bibliotecas para iOS están escritas con Objective-C.
- Existen infinidad de aplicaciones creadas desde 2007 a 2014-2015 en Objective-C. Si lo quieres para crear aplicaciones nuevas solamente, esto no te importará demasiado, pero si vas a trabajar para empresas te tocará mantener y retocar código anterior, para lo cual es indispensable conocer el lenguaje.
- Es mucho más fácil visualizar la ejecución de tus programas a bajo nivel y detectar problemas de memoria o CPU cuando trabajas en Objective-C que con Swift.
- Mucha de la documentación que existe para Swift parte de la base de que ya conoces Objective-C.
- No son excluyentes: ambos pueden trabajar en equipo, pudiendo crear programas con partes escritas con los dos.
De esta forma aunque luego en el día a día programes con Swift, en aquellas ocasiones en las que necesites sacar de tu chistera los conocimientos de Objective-C verás que te resultan indispensables y tenerlos marcará la diferencia.
Gracias a Eduard Tomàs por darle un repaso a este texto antes de su publicación.
Posts relacionados que te pueden interesar: