Un programador me dijo que no le gustaba Apple Swift. ¿Qué aspectos de Swift podrían hacerle decir eso?

La oposición que he visto a Swift normalmente se divide en dos campos:

1. Programadores experimentados de Objective C que parecen tener miedo de algo nuevo . O al menos temeroso de perder productividad mientras se acelera en el nuevo idioma.

Como ejemplo, un amigo mío era escéptico de Swift, porque “no tiene enmascaramiento de bits, por lo que debe ser más lento / no está listo para la producción / inexpresivo”. En realidad, los creadores de Swift han ideado una forma más concisa y legible pero igualmente eficaz de tratar este problema en forma de OptionSets . En caso de que te lo estés preguntando, también puedes enmascarar bits si realmente quieres (o tienes que hacerlo, cuando usas una API más antigua).

2. Los programadores de idiomas que Swift ha tomado prestados de quienes están seguros de que su camino es mejor que la reinvención de Swift

A menudo veo comentarios sobre las mónadas “rotas” de Swift (en la forma de los opcionales muy útiles e intuitivos de Swift), o sobre su sistema genérico “roto” (generalmente de personas que quieren hacer algunos trucos serios de programación funcional pura). No puedo comentar aquí directamente porque no tengo experiencia con Haskell o Scala u otros lenguajes de programación funcional.


Lo que puedo comentar es que Swift ciertamente no es un lenguaje de programación roto o malo de ninguna manera. Todo lo contrario: he descubierto que es una alegría escribir, una alegría aún mayor para leer, es eficaz, potente y versátil.

Para aquellos en el campo 1 , dudo mucho que quede mucho para obligar a alguien a usar el objetivo C para la gran mayoría de las tareas. Creo que es sobre todo el miedo a lo desconocido y una leve pereza que obliga a la mayoría, si no a todos, a seguir disgustando a Swift por este motivo. Dicho esto, hay algunas razones para seguir usando el Objetivo C, al que volveré en breve.

Para aquellos en el campo 2 , estoy convencido de que muchas de las razones y argumentos presentados aquí son válidos. Swift no es un lenguaje puramente funcional. Es un lenguaje para hacer una muy amplia gama de tareas muy bien. En ese sentido, es un lenguaje “convencional”, no un lenguaje indie, hipster o académico (leí un buen artículo sobre esto una vez y lo publicaré aquí si puedo encontrarlo nuevamente).

Por lo tanto, Swift no es tan innovador como algunos otros idiomas, pero lo compensa con la familiaridad (lo que ciertamente no es un gran argumento en sí mismo, aunque sí reduce la barra de entrada en comparación con los idiomas con construcciones de sintaxis completamente diferentes, y mucho menos arquitecturas de programa) y, lo que es más importante, en versatilidad. Usted puede:

  • realice algunas composiciones funcionales extremadamente concisas y potentes y una combinación de números, con un soporte bastante decente para los tipos genéricos (que mejorará nuevamente en el próximo Swift 3.0).
  • escriba una interfaz de usuario basada en programación orientada a objetos de manera cómoda y mucho más concisa que en el objetivo C. ¿Hay marcos de interfaz de usuario decentes en Haskell de uso común? Esto muestra mi ignorancia pero me resulta difícil de imaginar (por favor, escríbame en los comentarios si este es el caso)
  • use las técnicas que Apple llama Programación Orientada a Protocolo para hacer un gran uso de la inmutabilidad y los tipos de valor mientras programa de una manera que maximice la reutilización del código. Sí, la idea de los Protocolos (también conocidos como Interfaces) no es nueva, pero Apple ha hecho un gran trabajo al expandir lo que puede hacer con ellos y mantenerlos en funcionamiento sin hacer que las cosas sean incómodas para el lector (aparte de algunas idiosincrasias en el modelo de enlace, que tomar un tiempo para acostumbrarse)
  • Use un REPL y / o parques infantiles para probar ideas de forma rápida y gráfica. Para algunos esto es ENORME. Al igual que muchos de estos puntos, si no todos, individualmente, no es exclusivo de Swift, pero es otra parte que hace que el valor de Swift sea mayor que la suma de sus partes.

La lista continúa, el punto es este: Swift hace muchas cosas, y las hace más que suficientemente bien como para que en la gran mayoría de los casos probablemente no te veas obligado a usar nada más.

Además de esas áreas ya mencionadas en comparación con algunos idiomas más especializados, todavía hay algunos puntos en los que Swift podría (algunos podrían decir desesperadamente) mejorar algo:

  • Soporte de C ++. Actualmente no hay forma de interactuar con clases u objetos C ++ desde Swift. Este es un problema solo si está tratando de usar bibliotecas de C ++ heredadas, lo que probablemente terminará haciendo si desea escribir código multiplataforma (es decir, para iOS, OSX y Linux / Android, en el futuro tal vez también Windows ) Esta es una cosa que Objective C hace mejor, en forma de Objective C ++. Por otro lado, el Objetivo C, aunque de código abierto, nunca tuvo mucho tiempo del día más allá del ecosistema de Apple (Swift, por otro lado, ya está explotando).
  • Para el caso, soporte C. Actualmente es posible (y a menudo bastante sencillo) usar el código C de Swift, e incluso viceversa. Pero necesita trabajo.
  • Enlace estático a la biblioteca estándar. En la mayoría de los casos, el enlace dinámico está bien, pero hay ciertos casos (como compilar el código Swift para el navegador web a través de Emscripten) donde la compilación estática sería un gran salto adelante.
  • Las mejoras genéricas y de extensiones serían excelentes, el ejemplo clásico es una matriz de cierto tipo genérico o protocolo que también puede realizar funciones del tipo contenido.

Al final del día, si usa Swift depende de los requisitos de su proyecto, la familiaridad con otras herramientas y (triste pero inevitablemente) las preferencias personales. Si ha pospuesto aprender Swift simplemente por los comentarios de que es “malo”, ¡puedo asegurarle que no se arrepentirá!

Soy un desarrollador experimentado de Objective-C y ahora he escrito algunos proyectos en Swift. Dada la opción, comenzaría un nuevo proyecto hoy en Swift dada la opción porque es más rápido y seguro.

Para cualquiera que esté haciendo la transición, existen las frustraciones de intercambiar algo que conoces bien por algo que no sabes. Es natural atribuir estas frustraciones no a la inexperiencia de uno, sino al lenguaje que uno simplemente no conoce tan bien.

Swift no es solo un idioma diferente, sino que representa una forma diferente de abordar y resolver problemas. Las personas razonables pueden tener diferentes opiniones y preferencias. Swift es “más seguro”, pero esto se produce a expensas de cierto control por parte del programador. Considere el caso del automóvil autónomo que nunca podría pasar por una rotonda porque no era lo suficientemente agresivo.

Objetivamente, Swift no es tan maduro como Objective-C. Aunque se está desarrollando rápidamente, carece de algunas características concretas. Swift 1.0, por ejemplo, carecía de un método para identificar el índice de un objeto dado en una matriz. Por supuesto, esto cambiará, gran parte de lo hizo con 2.0, pero en particular ahora con el código abierto del lenguaje.

Finalmente, con mucho, mi mayor queja material es que el soporte de Xcode para Swift no es equivalente a su soporte para Objective-C. La finalización del código es muy lenta y no hay soporte para características IDE como la refactorización. Esto (con suerte) cambiará con el tiempo.

  • Hay personas a las que no les gusta Apple. A la misma gente no le gustará Swift. Estas personas siempre existirán.
  • Soy bastante viejo He visto mucho Por ejemplo, a la mayoría de las personas que trabajan con tecnología no les gusta el cambio. El cambio los hace inseguros con su conocimiento. El cambio les crea una nueva competencia en un área en la que aún no son expertos. Con el tiempo, el número de estas personas disminuirá.
  • Tengo meses y años? de experiencia con Swift, y me encanta. En todos los aspectos. Muy abierto a mis intenciones. Muy rápido para codificarlo. El código fuente es compacto y efectivo. Muy lógico, legible y comprensible incluso meses después. Todavía se está desarrollando versión por versión. Por lo tanto, no hay razones técnicas reales detrás de que no le guste.
  • Lo que a la gente le gusta o dice que le gusta es una elección personal. Pregúntele a él o ella sobre los motivos. O simplemente acepta su elección.

Aquí hay una cita de Bjarne Stroustrup, el padre de C ++, para poner en perspectiva la opinión de su amigo:

Solo hay dos tipos de idiomas: los que la gente se queja y los que nadie usa.

Claro, es divertido, pero la mayoría de los programadores estarán de acuerdo en que es cierto.

Desde mi experiencia, todos los programadores tienen un idioma favorito, y muchos tienen idiomas que no les gustan, por varias razones.

Algunos consideran que Java es demasiado detallado, algunos piensan que Python tiene muchos defectos de diseño, y algunos piensan que Swift no es bueno, como tu amigo.

Sin conocer a tu amigo ni el idioma, no puedo decir por qué no le gusta. Podrías tratar de que te lo explique, tal vez en términos simples si no tienes conocimiento en el campo.

Como desarrollador de iOS, mi opinión es que Swift no sería tan complicado de usar, si todos los marcos de Cocoa no se hubieran escrito en Objective-C.

Lo que significa prácticamente que, incluso si se usa Swift, la mitad o más del código en realidad será un puente entre el Objetivo C y lo que está escrito. Por lo tanto, la mayoría de los casos Swift funcionará como un contenedor Objective-C. Las conversiones de tipos son un poco complicadas a veces, especialmente si alguien desea construir un marco Swift 🙂

Personalmente, me desarrollo en Swift y no tengo ningún problema en general, solo necesita evolucionar un poco más como lo hizo el manejo de errores en Swift 2.0. Me imagino una Swift 3.0 mucho mejor en el futuro …

Quizás no le gustan los idiomas que hacen que la codificación sea más rápida, fácil y menos propensa a errores.

O, más probablemente, probablemente esté mal informado sobre algún aspecto del lenguaje y haya llegado a una conclusión errónea.

Porque no estaba al tanto de la característica de Swift.

Comparta este artículo sobre “¿Cómo el desarrollo rápido de aplicaciones se convirtió en una buena opción empresarial para aplicaciones como Lyft y LinkedIn?”

Él podría tener una visión diferente.