Swift vs.Objetivo-C: la tendencia en ascenso vs. el dinosaurio

Una breve historia de Swift

Recuerdo lo fundamental que fue cuando se presentó Swift en la WWDC (Conferencia Mundial de Desarrolladores) de Apple en 2014. Fue la comidilla de la ciudad y todos los desarrolladores con los que trabajé estaban ansiosos por probarlo. La comunidad de iOS estaba a tope y había mucho entusiasmo en torno al nuevo idioma.

Fue desarrollado para llevar a cabo algunos conceptos que vimos en Objective-C, como la programación extensible. Pero avanzó hacia un enfoque diferente de la codificación con el diseño orientado a protocolos y una mayor seguridad con la escritura estática.

Fue un gran éxito y vio su crecimiento como un cohete en los años posteriores a su introducción. Fue el lenguaje de programación más querido en 2015, el segundo más querido en 2016, el undécimo lenguaje de programación más popular en 2017, superando a Objective-C, y también superó a Objective-C en 2018.

Swift también es una apuesta de Apple para ganarse a los novatos para que se conviertan en desarrolladores de iOS. La esperanza es que los nuevos desarrolladores aprendan el idioma y lo usen para crear aplicaciones iOS. Esto luego aumenta el ecosistema de la tienda de aplicaciones. Dado que Swift está optimizado para funcionar con aplicaciones de iOS, esto garantiza que las aplicaciones que se escriben sean de alta calidad.

La popularidad de Swift solo continúa aumentando, especialmente para aplicaciones más pequeñas y nuevas empresas. La brecha entre Swift y Objective-C solo seguirá creciendo. El futuro es brillante para este joven idioma.

Una breve historia de Objective-C

Objective-C es un lenguaje de programación orientado a objetos que es un superconjunto de C, como podría revelar el nombre del lenguaje. Esto significa que cualquier programa C válido se compilará con un compilador Objective-C. Deriva toda su sintaxis no orientada a objetos de C y su sintaxis orientada a objetos de SmallTalk. Fue desarrollado en 1984, por lo que ha tenido tiempo de madurar como lenguaje y es mucho más estable que Swift.

La mayoría de la gente conoce Objective-C como el lenguaje que se usa para desarrollar aplicaciones para iPhone, pero la historia es mucho más profunda que eso. Recomiendo leer este artículo para una mirada más profunda.

Las fortalezas de Swift

Swift ha ganado enormemente popularidad por algunas razones clave. En primer lugar, hay muchas herramientas de desarrollo excelentes que Apple ha proporcionado para trabajar en conjunto con Swift. Uno de mis favoritos personales es Playground, que solo es compatible con Swift. Apple presentó Playgrounds en 2016. Se introdujeron como una forma de aprender a codificar, pero me encantaron por una razón diferente.

El desarrollo móvil siempre ha tenido más obstáculos que el desarrollo web. Necesita un simulador, normalmente necesita un entorno de desarrollo integrado (IDE) patentado, y necesita configurar un proyecto completo solo para probar algún pequeño prototipo. En el caso de Apple, también necesita una cuenta de desarrollador. Lo bueno de Playgrounds es que puedes evitar algo de esto. Necesita Xcode o la aplicación Playgrounds, pero eso es todo. Y puede comenzar a codificar y compilar su código de inmediato.

Sin embargo, otra gran ventaja de Swift es el hecho de que es de código abierto. Si alguna vez te has preguntado cómo funciona un lenguaje de programación bajo el capó, ¡puedes ir a verlo por ti mismo! Esta es una excelente manera de comprender el lenguaje de programación con el que trabaja a diario en un nivel más profundo.

Una mención de honor es para una buena utilidad que solo está disponible para Swift, el Swift Package Manager. Swift Package Manager es simplemente un administrador de dependencias que está integrado con el sistema de compilación Swift. No es un cambio de juego de ninguna manera, ya que CocoaPods y Carthage estaban haciendo este trabajo hace mucho tiempo, pero es otra solución disponible si es necesario.

Hay mucha evidencia aquí que respalda el hecho de que Apple está haciendo mucho para que Swift sea más deseable como el lenguaje de programación elegido por los desarrolladores de iOS. Están creando utilidades y auxiliares agradables para atraer a las personas a comenzar a usar el lenguaje. Esto muestra que Apple está presionando por Swift con toda su fuerza.

Características del idioma

Entremos en algunos de los detalles del lenguaje en sí. Swift es más seguro debido a su escritura estática y al uso de opcionales. En Swift, si su código requiere una cadena, las características de Swift garantizarán que su código obtenga una cadena y no otro tipo, como un int. Esto, por supuesto, depende de si está utilizando el lenguaje como está previsto y no obliga a desenvolverlo todo.

Otra gran característica de Swift es su sintaxis. Especialmente en comparación con Objective-C. La mejor palabra para describir la sintaxis sería "sucinto". No hay necesidad de usar punto y coma, llamadas a sí mismo o paréntesis en las declaraciones if. Se siente como si se estuviera saltando muchas cosas que de todos modos no necesita. Puede hacer que el proceso de escribir mucho código “fluya” mejor.

Algunas personas dicen que esto conduce a mejoras en la velocidad de desarrollo, pero yo no diría exactamente eso. La necesidad continua de desenvolver objetos para cumplir con la seguridad de tipos de Swift compensa las ganancias de desarrollo que vienen con la concisión.

Swift también tiene muchas opciones de flujo de control excelentes con guardia, si se permite, declaraciones de cambio avanzadas, repetir mientras y aplazar. Me gustan todas las diferentes opciones porque les permite a las personas controlar el flujo de su código de una manera que tenga sentido para ellos. Mucha gente odia los aplazamientos pero ama a los guardias y viceversa. Realmente no importa lo que le guste o no le guste, pero las opciones están ahí y puede codificar de la manera que le parezca mejor.

No puedo olvidar todas las funciones de programación funcional como filtrar, mapear y reducir. Esto es ideal para manejar colecciones y es útil con bastante frecuencia.

Las debilidades

Swift es un idioma joven y, con eso, se producen algunos cambios. Las migraciones entre versiones son simplemente un fastidio. En una empresa pequeña, la herramienta de migración proporcionada por Apple puede ser útil y cubrir la mayoría de los casos. Se vuelve menos útil cuanto más código tenga. Es incluso peor si su base de código contiene código Objective-C y Swift que interoperan.

En mi última empresa, el esfuerzo de migración le llevó a un grupo dedicado todo un fin de semana. Tenían que hacerlo el fin de semana para no encontrarse con conflictos de fusión de otros desarrolladores que empujaban el código. Esto fue increíblemente doloroso para todos los involucrados.

Una razón de estas migraciones es el hecho de que Swift no es estable con ABI. Eso significa que las versiones más nuevas de Swift no pueden funcionar con versiones anteriores de Swift. Eso también significa que el idioma no se puede empaquetar con el sistema operativo. Este es un gran problema para las empresas con aplicaciones grandes que combaten activamente el tamaño de la aplicación porque Swift se incluye con la aplicación y aumenta el tamaño.

Otro problema es que Swift no funciona bien con Xcode. Xcode se siente muy entrecortado cuando se trabaja con Swift y el autocompletado simplemente no funciona a veces. Esto es extraño dado lo duro que Apple está presionando a Swift. Uno pensaría que querrían que la experiencia de usar Swift con Xcode fuera una delicia.

Swift también tiene problemas con el manejo de cadenas, consulte el ejemplo de código anterior. Es torpe como el infierno. En tu día a día, esto no está tan mal. Donde esto entra en juego más es durante las entrevistas. Desafortunadamente para los desarrolladores de Swift, a los entrevistadores les encanta hacer preguntas que involucran la manipulación de cadenas. Esto se ve agravado por el hecho de que la forma en que se manejan las cadenas ha cambiado entre las versiones de Swift.

Las fortalezas de Objective-C

Objective-C es un lenguaje orientado a objetos altamente dinámico. Es dinámico hasta el punto de que puede intercambiar las invocaciones de métodos en tiempo de ejecución utilizando técnicas como Swizzling. Es capaz de hacer este tipo de cosas debido a su paradigma de envío de mensajes. Esto permite que los objetos envíen mensajes a otros objetos en tiempo de ejecución para determinar la invocación del método que se llama.

En la práctica, ¿qué significa esto? Bueno, una gran ventaja es la adaptabilidad en tiempo de ejecución. Esto significa que es posible acceder a API privadas o hacer cosas como burlarse de objetos en tiempo de ejecución. Esto puede resultar especialmente útil cuando se trata de pruebas unitarias. Bibliotecas como OCMock hacen que esto sea aún más fácil y permiten configuraciones de prueba muy elaboradas. Tener buenas pruebas unitarias hará que su aplicación sea más estable y confiable.

Hablando de estabilidad, Objective-C ha existido durante mucho tiempo, lo que lo convierte en un lenguaje muy estable. Con Swift, se encontrará con errores que son bastante sorprendentes y afectarían la estabilidad de su aplicación. En el ejemplo que vinculé anteriormente, este bloqueo sería causado por el idioma real que está utilizando para codificar su aplicación, no debido a ningún error creado por el código que escribió. Esto puede resultar frustrante.

El último punto, que es más importante para ciertas empresas, es la compatibilidad con las bibliotecas C y C ++. Dado que Objective-C es un superconjunto de C, es fácil usar código C y C ++ con Objective-C. Incluso puedes usar Objective-C ++ si te apetece. Esto es importante si depende de bibliotecas C y C ++ de terceros.

Las debilidades

La primera queja principal que escucho sobre Objective-C es la sintaxis. Comencé mi carrera profesional usando Objective-C, así que no tengo problemas con él. Es detallado y un poco poco convencional con el uso de corchetes. Pero las opiniones sobre sintaxis son solo eso, opiniones. Sin embargo, pensé que enumeraría este punto, ya que es una de las primeras cosas que surge cuando mencionas Objective-C.

Sin embargo, una cosa con la que estoy de acuerdo es que la sintaxis de bloques es frustrante. Incluso hay un sitio web dedicado a decodificar los misterios de los bloques en Objective-C. De hecho, utilizo este sitio web con bastante frecuencia como referencia.

El mayor problema al que se enfrenta Objective-C en este momento es el hecho de que un día Apple puede dejar de admitir Objective-C con Cocoa y otras bibliotecas comunes que se utilizan para crear aplicaciones iOS. Dado que Objective-C se usa principalmente para crear aplicaciones de iOS, esto sería una sentencia de muerte para el idioma. También significa que los recién llegados a la comunidad de iOS tienen miedo de comprometerse a aprender Objective-C en este momento, ya que es posible que ya no se use en el futuro.

Volvamos al lenguaje en sí. Es propenso a tener problemas de depuración debido a la naturaleza dinámica del lenguaje. La capacidad de enviar mensajes a cero y no fallar además de la falta de escritura estricta son algunos ejemplos de cosas que conducen a estos problemas difíciles de depurar.

Objective-C tampoco te lleva de la mano cuando se trata de estas cosas. Aunque es bueno que la aplicación no se bloquee cuando envía un mensaje a cero, puede poner su aplicación en un estado extraño. Es muy difícil depurar problemas como estos. El hecho de que Swift tenga una escritura estricta y el uso de opciones de desenvolvimiento evita estas cosas en tiempo de compilación.

¿Debería aprender Swift u Objective-C?

La respuesta para la mayoría de la gente será Swift. Apple claramente está impulsando Swift como el idioma elegido por su comunidad de desarrollo de aplicaciones iOS. Swift solo continuará mejorando su rendimiento a medida que se introduzca la estabilidad ABI y Swift se empaquete con el propio sistema operativo.

Si está buscando un trabajo como desarrollador de iOS, Swift será el idioma que desea aprender. La mayoría de las empresas emergentes y de nivel medio tendrán sus aplicaciones de iOS escritas completamente en Swift. Esto significa que podrá postularse y entrevistarse para más trabajos si aprende Swift.

Incluso en empresas más grandes donde Objective-C todavía se usa mucho, las entrevistas aún se pueden realizar en Swift. Para que pueda aprender Objective-C una vez que se una a la empresa y no se preocupe por cargarse con más cosas que aprender antes de la entrevista.

Querrá aprender Objective-C si ya está trabajando en una empresa nueva o de nivel medio y desea pasar a una empresa más grande. Las habilidades con Objective-C le brindarán conocimientos especializados y una ventaja sobre otros candidatos a entrevistas.

¿Te gustó lo que leíste? Eche un vistazo a algunos de mis otros artículos:

Consejos para su primera entrevista técnica.

Comenzar una carrera tecnológica de la nada.

¿Debería obtener un título en informática?