iOS 10 et macOS Sierra sont accompagnés sous le manteau d’une nouvelle version de Swift. Deux ans à peine après sa première apparition en public, Swift passe la troisième et se rend plus mature, plus utile, à tel point qu’Apple s’est engagée dans la réécriture de morceaux entiers de son système avec ce langage (Dock, Mission Control, etc).
L’heure n’est pas encore à l’abandon d’Objective-C, mais nous avons voulu savoir ce que pensaient les pros, développeurs et auteurs de livres, sur le sujet.

Pour mener l’enquête, nous avons posé nos questions à Matt Braun, Paul Hudson, Raphael Sebbe et Ling Wang. Commençons par les présentations !

Qui êtes-vous ? Quelle est votre activité ?

matt-braunMatt Braun : je suis consultant en développement d’applications mobiles iOS et web. Sur mon temps libre je développe l’application SketchPartyTV (voir notre test) sur iOS et Apple TV.
J’ai quelques autres applications en cours qui seront prêtes pour iOS 10 mais je ne peux pas en dire plus pour le moment.

paul-hudsonPaul Hudson :je suis ingénieur et développeur d’applications à plein temps. Je me suis récemment tourné vers l’écriture de livres, un hobby qui s’avère plutôt fun, détaillant comment écrire des applications.
Mon livre le plus populaire est disponible gratuitement sur hackingwithswift.com et j’en ai quelques autres plus spécialisés à mon actif.

raphael-sebbeRaphael Sebbe : je suis fondateur de Creaceed, startup spécialisée dans le développement d’applications Mac et iOS tournant autour de l’imagerie.
Nous avons à notre actif les applications suivantes : Prizmo (numérisation et OCR de documents), Hydra (prise de vue haute définition et HDR), Carbo (notes manuscrites et dessins).

ling-wangLing Wang : je suis développeur indépendant à plein temps depuis 2009, auteur récemment de l’application Annotable (testée ici), puissant outil d’annotation d’images sous iOS. Pour ce qui est de mes projets futurs… mystère ;)

Au quotidien, vous avez choisi Swift ou Objective-C, pourquoi ?

— À Matt Braun : pour vos applications, Swift ou Objective-C ?

J’ai appris à programmer dans ma jeunesse avec le BASIC et j’ai débuté ma carrière professionnelle avec Flash et ActionScript. Peu avant l’arrivée du premier App Store en 2008, j’ai décidé d’apprendre à créer des applications pour iPhone avec l’Objective-C. Quand Swift est arrivé, j’avais 6 ans d’expérience avec le langage Objective-C mais si je programme un peu en Swift, j’utilise encore principalement l’Objective-C au quotidien.

— À Paul Hudson : vous avez choisi d’écrire principalement au sujet de Swift, pourquoi ?

J’ai développé des sites en PHP, des jeux Xbox en C#, des outils pour Linux en Python et des apps Android en Java. Si j’apprécie ces langages, Swift est un curieux mélange réussi de toute cela et c’est très excitant à découvrir et partager.

swift-vs-objective-c

— À Raphael Sebbe : vos applications sont principalement développées en Objective-C, pourquoi peu de Swift ?

Nous avons commencé très tôt avec Swift mais de manière limitée : dès l’été 2014 nous avons développé le backend CloudKit de Carbo en Swift. Les outils ne fonctionnaient vraiment pas bien et cela a été pénible. Les évolutions du langage nous ont obligé à mettre à jour notre code, heureusement que nous l’utilisions de façon limitée.
Notre dernière application, Collectarium, dispose de développements en Swift plus conséquents, à hauteur de 15%. Nous avons dans les tubes une nouvelle app presque 100% Swift (hormis les dépendances).
On arrive au moment où il faut se poser la question à chaque fois qu’on écrit du code Objective-C : vais-je devoir le réécrire dans quelques années en Swift ? La réponse est souvent oui, à mon avis. Donc il est temps de s’y mettre, sinon, on augmente la dette.

— À Ling Wang : Annotable est une application intégralement écrite en Swift, pourquoi ce choix ?

Swift, c’est le langage d’avenir. En fait, Swift est déjà en train de reprendre le rôle de langage de programmation majeur sur les plateformes Apple à l’Objective-C.
Swift 3.0 et les nouveaux systèmes d’exploitation en arrivée à l’automne (iOS 10, macOS Sierra, tvOS 10 et watchOS 3) vont enfoncer le clou dans ce sens.

Qu’est-ce qui est mieux avec Swift ? Et ce qui ne va pas ?

Matt Braun : on peut écrire de manière plus concise avec Swift qu’avec l’Objective-C. C’est un langage plus sûr car la compilation est plus efficace pour vous alerter si les valeurs ou objets utilisés ne correspondent pas.
Swift évolue fortement et, comme il est open-source, une grande communauté aide à façonner le langage. C’est positif d’un côté car cela ouvre de nouvelles perspectives et problématique de l’autre car il faut parfois réécrire du code qui tourne pour satisfaire aux changements de syntaxe.

Paul Hudson : la liste des choses appréciables avec Swift est assez longue : sa syntaxe claire et pratique, les « closures » (NDLR : fonctions non nommées que l’on définit à l’appel d’une autre) qui révolutionnent la façon d’écrire le code, les protocoles, les « tuples » (NDLR : groupes de valeurs représentées par une seule), … Cerise sur le gâteau, Swift 3 continue à aller dans la direction de la simplification et de la rationalisation de la syntaxe. Il y a beaucoup, beaucoup de choses à aimer avec Swift !
Du côté des inconvénients, je pense que le langage est un peu plus complexe que ce qu’Apple espérait. La courbe d’apprentissage d’Objective-C a toujours été assez raide, mais avec Swift il y a quelques subtilités qui restent incomprises et parfois bloquantes : les « optionals », les « closures »et leur syntaxe courte à base de « $0 » et « $1 ». Cocoa et Cocoa Touch n’ont pas été écrits avec Swift en tête, Apple doit encore faire des ajustements pour que certaines notions ambigües deviennent plus évidentes.

swift-sur-moderne-interactif

Raphael Sebbe : Apple veut remplacer le C et tous ses dérivés, et c’est le bon moment pour ça. Java a tenté cela, de même que C#, mais ils ont fait des erreurs majeures à la fois techniques (gestion de la mémoire par garbage collector, ce qui les rend trop gourmands, non-déterministes, et inefficaces pour le bas niveau) et à la fois en termes de business en les rendant principalement propriétaires.
Swift met tout cela à plat avec des choix techniques judicieux, et un spectre très large (comparable à C++ mais avec une élégance et une complexité plus progressive). L’avenir est à Swift.
On a eu une période de doute mais Apple s’y met sérieusement maintenant, comme nous, mais progressivement.
Une des grandes forces de l’Objective-C, c’est sa capacité à l’introspection au runtime : savoir quelle méthode est implémentée par quelle classe, remplacer des méthodes, court-circuiter certains mécanismes. C’est beaucoup utilisé par exemple dans le mécanisme de notifications entre objets (KVO) et aussi pour la connexion automatique des méthodes de l’interface (First Responder) ou encore le mécanisme d’annulation (Undo Manager), où un objet peut prétendre en être un autre et enregistrer les appels pour les exécuter en ordre inverse en cas d’annulation. Swift ne propose pas encore d’alternative sans s’appuyer sur le runtime Objective-C.
Je suppose que l’objectif des équipes d’Apple est de rendre Swift totalement indépendant d’Objective-C, et ils doivent y travailler. La réimplémentation de Foundation en Swift va dans ce sens et c’est un projet à suivre attentivement. L’Objective-C va cependant rester pour longtemps encore, car réécrire du code existant, qui fonctionne bien, n’est prioritaire pour personne.

Ling Wang : Swift est assez facile à prendre en main, plus pratique à relire et prend en charge de lui-même certains aspects qu’il fallait auparavant gérer soi-même en Objective-C.
Le problème reste encore la jeunesse et les changements lourds et rapides de la syntaxe.

Passer « définitivement » à Swift, est-ce envisageable ?

Matt Braun : Swift est maintenant assez complet pour la plupart des tâches de développement mais il reste encore énormément de « code tiers » et de « code de base » écrit en Objective-C qui nécessite du travail pour les faire communiquer avec Swift. Il ne sera pas possible pour tout le monde de réécrire intégralement son code avec Swift donc il faut développer l’interopérabilité avant tout. Un challenge pas si difficile au final.

Paul Hudson : je n’utilise plus du tout Objective-C pour mes nouveaux projets, l’effort n’en vaut pas la chandelle. Swift n’est pas encore prêt pour être utilisé partout, il lui manque encore principalement la compatibilité ABI (Application Binary Interface – interface bas niveau entre applications et système d’exploitation) mais une fois ce point traité, je pense que ce sera bon !

swift3-xcode8

Raphael Sebbe : il reste un élément très gênant sans solution propre à ce stade pour lequel j’ai rencontré 4 ingénieurs Apple pendant les labs WWDC, mais la prise de conscience de ce problème est assez évasive.
Swift et les outils associés ne permettent pas de réaliser des « librairies statiques » ; ils n’autorisent que des frameworks. C’est un problème majeur, car les librairies dynamiques ont un coût inutile au lancement de l’app. Swift encourage le développement modulaire en réalisant des fonctionnalités réutilisables (extensions), mais ne propose pas de mécanisme de build pour les mettre en oeuvre dans une app. J’ai entendu des histoires d’apps iOS qui prennent tellement de temps à démarrer à cause du lien dynamique que le système les « tue » avant qu’elles ne soient lancées. Apple invoque l’ABI de Swift qui n’est pas stabilisée pour justifier l’absence de librairies statiques mais ils ne prennent pas en compte le fait qu’on utilise ces librairies statiques non pas pour les distribuer, mais simplement pour organiser notre code (elle sont reconstruites à chaque fois, l’ABI, on s’en fout !). Et c’est une excellente pratique que de factoriser des fonctionnalités entre les apps, il faut l’encourager !
Pour l’instant, on ne peut utiliser Swift que dans la cible de l’app, pas dans le code réutilisable (qui représente à la louche 50% du résultat). On explore des alternatives, mais c’est quand même dommage pour un langage qui se veut universel de ne pas proposer une solution pour le développement modulaire d’entrée de jeu…

Ling Wang : les fonctionnalités dynamiques d’Objective-C n’ont pas d’équivalent avec Swift. La réponse ne doit pas forcément être une copie de ce qui existe avec Objective-C, mais ce problème doit trouver une solution sinon Swift ne pourra jamais couper le cordon avec l’Objective-C et devenir un langage véritablement indépendant pour le développement d’applications.

Swift 3.0 arrive mais nécessite de réécrire une partie du code : est-ce un problème ?

Matt Braun : devoir réécrire du code qui tourne est un des défauts de Swift que j’ai mentionné précédemment. Mais c’est une dette à payer pour bénéficier des avantages et nouveautés du langage. Cela vaut le coup, mais cette approche m’a fait hésiter à me mettre à Swift.
Le code et la syntaxe sont maintenant assez stables et Apple propose des outils qui facilitent la conversion et la transition dans la plupart des cas. Pour quelqu’un qui souhaite apprendre Swift, l’eau du bain n’est plus froide maintenant !

swift-objective-c

Paul Hudson : j’utilise Swift 3 depuis bien avant la WWDC sans le moindre problème. Les outils de Xcode permettent une migration sans douleur du code existant vers Swift 3.
Ce qui est plus difficile (et prendra quelques années), c’est de migrer le cerveau des développeurs à Swift 3. Les nouvelles conventions de nommage sont importantes mais bien différentes de l’Objective-C. Vous vous retrouvez parfois avec un style pour appeler le code d’Apple et un autre pour écrire vos propres méthodes. Ce n’est qu’une question de temps pour retrouver de la cohérence dans la syntaxe.

Ling Wang : toutes les améliorations et changements apportés vont, selon moi, dans le bon sens. La réécriture du code s’avère aussi rentable que nécessaire pour la suite.

Qu’est-ce qu’Apple pourrait faire pour améliorer encore l’expérience Swift ? Recommanderiez-vous aux développeurs Objective-C de passer à Swift ?

Matt Braun : le « refactoring » dans Xcode (le processus de renommage des méthodes et propriétés dans le cadre d’un projet) manque toujours pour Swift.
Pour ce qui est de passer à Swift, je recommanderais une approche pragmatique : voir ce qu’il est nécessaire de réécrire, incorporer du code Swift pour les nouvelles fonctionnalités, etc. C’est la méthode que j’ai choisie mais cela doit être réfléchi individuellement en fonction du contexte.

swift3-xcode-8

Paul Hudson : Xcode continue d’être un point sensible pour les développeurs. L’absence de refactoring est inexcusable et inexplicable : ils ont eu quelques années pour travailler là-dessus !
Xcode est un outil génial, qui en fait beaucoup et de plus en plus avec Xcode 8 mais je pense qu’Apple devrait peut-être calmer le jeu de ce côté et se pencher à nouveau sur les bases.
Xcode 8 fait un pas dans la bonne direction avec la possibilité de manipuler les storyboards en vue éloignée. Je fais tout sur un portable et ce changement rend les storyboards beaucoup plus pratiques.

Si le manque de compatibilité ABI n’est pas un problème, passez à Swift ! Swift permet d’écrire des applications avec moins de bugs et qui peuvent tourner plus vite. Pourquoi s’en priver ?

Ling Wang : Xcode est loin d’être parfait et j’espère qu’Apple va proposer plus d’outils multi-plateformes comme l’IDE Emacs.
Je pense que Swift est un meilleur langage que l’Objective-C, en fait, le meilleur langage de programmation.

Comment avez-vous appris Swift ? Quels sont vos conseils pour les débutants ?

Matt Braun : même si je lis beaucoup de livres et de ressources en ligne (notamment le site de Ray Wenderlich), j’ai principalement appris Swift comme l’ActionScript, le JavaScript et l’Objective-C : en mettant les mains dans le cambouis et en démarrant quelque chose.
Si vous n’avez jamais écrit d’application, Apple a une nouvelle application pour iPad sous iOS 10 nommée « Swift Playgrounds » avec de superbes tutoriels d’introduction à la programmation. La meilleure façon d’apprendre c’est d’expérimenter et les outils pour Mac (Xcode) sont gratuits.
Le meilleur moment pour apprendre la programmation c’était il y a une dizaine d’années mais, le prochain bon moment c’est maintenant !

swift3-5

Paul Hudson : je me suis attaqué à Swift le jour de l’annonce en lisant le livre officiel d’Apple et en balançant du code à la volée jusqu’à ce que cela donne quelque chose.
Aujourd’hui c’est un peu différent : j’ai écrit des livres (Hacking with Swift, Pro Swift, et Practical iOS 10) pour aider les gens à apprendre Swift d’une manière plus intéressante. J’ai même écrit un livre intitulé « Objective-C for Swift Developers » car je pense que c’est la tendance qui se dessine : les gens commencent par apprendre Swift et veulent ensuite apprendre l’Objective-C pour mieux travailler avec le code de base.

Ling Wang : Tout est sur Swift.org ! Je ne comprends jamais pourquoi les gens cherchent des ressources alternatives avant d’avoir épluché les documentations officielles…

Swift, un langage d’avenir

Si Swift 3 approche un peu plus de la maturité, il n’est pas encore prêt à remplacer officiellement l’Objective-C. Le projet est très actif et, une fois n’est pas coutume, Apple est à l’écoute des développeurs pour faire évoluer son langage… Condition obligatoire si Cupertino souhaite, dans un futur proche, l’imposer face aux langages historiques qui font peur aux débutants et surtout réussir à le rendre utile ailleurs que dans son propre écosystème.
Comme le précisent les développeurs interrogés, il y a encore quelques efforts à fournir pour répondre à certaines problématiques que Swift n’est pas encore en mesure de traiter, mais l’évolution du langage est sur la bonne voie.
La création d’un nouveau langage de programmation n’est pas une mince affaire et voir Apple s’y atteler et commencer à reprendre des bouts du code historique pour les passer en Swift est un signal de confiance fort.
Il n’est certainement pas viable pour certaines applications de les réécrire de bout en bout avec Swift (hormis un challenge personnel à relever) mais pour les nouvelles applications, envisager d’y intégrer un maximum de Swift dès le départ (s’il n’est pas possible de tout faire avec) est un pari sur l’avenir aux risques limités.

Pour en savoir plus, nous vous invitons à consulter nos conseils de livres pour apprendre à développer avec Swift.

Merci Matt, Paul, Raphael et Ling !

Les applications de Matt Braun :
SketchPartyTV : un Pictionary-like entre iPad et Apple TV mis en avant par Apple à la WWDC 2016 !. Familial, rafraîchissant et auquel nous jouons régulièrement. Lire notre test de SketchPartyTV.
Taptronome : un métronome moderne basé sur les gestes qui fonctionne sur iPhone et Apple Watch.

Les livres de Paul Hudson :
Hacking with Swift : la bible pour bien démarrer. Gratuit sur le web et blindé de ressources à télécharger pour jouer avec dans Xcode.
Pro Swift : trucs et astuces à lire et à regarder en vidéo pour découvrir Swift en action et programmer comme un pro.
Practical iOS 10 : les dernières nouveautés d’iOS 10 côté développeurs. Magique : un nouveau chapitre toutes les 48H jusqu’à la fin de l’écriture du livre.
Objective-C for Swift Developers : ce que vous avez appris avec Swift peut vous servir à mieux appréhender l’Objective-C afin de relire et corriger du code.

Notez qu’en vous inscrivant à la newsletter de Paul, vous bénéficiez de 5$ de réduction sur ses ouvrages.

Les applications de Creaceed (Raphael Sebbe) :
Prizmo : numérisation et OCR de documents pour Mac et iOS. Lire notre test de Prizmo.
Hydra : prise de vue haute définition et HDR. Lire notre aperçu d’Hydra.
Carbo : notes manuscrites et dessins. Lire notre aperçu de Carbo.
Collectarium : gestion de collections en tous genres. Lire notre aperçu de Collectarium.

Les applications de Ling Wang :
Annotable : indispensable et imbattable outil d’annotation d’images pour iPhone et iPad. Lire notre test d’Annotable.
Tweeet : publiez vos looooongs tweets en oubliant la limite des 140 caractères.

Entre développement web, formation, consulting en ergonomie web et applicative, je tente à mes (rares) heures perdues d'abandonner le Mac au profit de l'iPad (Pro). Le reste du temps, je joue aux jeux de société, j'écris et je code en tranches ici.

AUCUN COMMENTAIRE

À vous la parole !

Fermer
*
*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.