En dépit de Swift, "les développeurs iOS ont toujours besoin de connaître Objective-C"

Stéphane Moussie |

Swift a été très bien accueilli par les développeurs, mais ce nouveau langage signe-t-il pour autant la mort de l'Objective-C ? Les débutants qui veulent créer leur première app pour iOS peuvent-ils apprendre exclusivement Swift ? Pour Aaron Hillegass, la réponse est claire, c'est non. « Les développeurs iOS ont besoin de connaître Objective-C », estime cette pointure qui a écrit plusieurs livres de référence sur la programmation iOS et OS X.

Son argumentation, partagée par notre développeur Nyx0uf, tient en trois points :

  • si vous voulez devenir un développeur iOS, vous aurez toujours besoin de connaître Objective-C
  • Objective-C est plus facile à apprendre que Swift
  • une fois que vous connaissez Objective-C, il sera plus facile d'apprendre Swift

Aaron Hillegass considère Swift comme « un grand pas en avant » pour l'écosystème d'Apple (il dit notamment beaucoup apprécier sa syntaxe), mais à l'heure actuelle ce langage ne permet pas de tout faire. Il prend l'exemple de l'intégration d'une bibliothèque de Code C++ dans une application. Swift peut appeler des fonctions codées en C, mais il est plus naturel dans ce cas précis de le faire en Objective-C.

Autre exemple, celui des frameworks. Ces ensembles de bibliothèques sont toujours écrits en Objective-C. Mieux vaut donc comprendre ce langage pour ne pas se retrouver face à du chinois quand le débogueur souligne un problème.

De manière plus générale, c'est tout le patrimoine de l'Objective-C (blogs, documentation, extraits de code partagés...) accumulé au fil des ans qui fait que la compréhension de ce langage est encore importante aujourd'hui.

Le deuxième argument, peut-être plus discutable, c'est que l'Objective-C est plus facile à apprendre que Swift. Aaron Hillegass, qui enseigne le développement, estime que le temps d'apprentissage du nouveau langage sera plus long que celui de l'Objective-C, en raison notamment de règles supplémentaires.

Par ailleurs, pour une fonction équivalente, le code écrit en Swift est bien moins long que celui en Objective-C. D'un côté c'est bien car le développeur a moins de code à taper, de l'autre côté la compréhension d'une ligne de code demande plus de contexte.

Code Objective-C :

#import <stdio.h>
#import <Foundation/Foundation.h>
 
int main(void)
{
    NSLog(@"Hello, world!\n");
    return 0;
}
Code Swift équivalent :
println("Hello, world!")

Enfin, Aaron Hillegass explique que les deux langages partagent beaucoup de points communs. Autrement dit, si vous connaissez déjà Objective-C, l'apprentissage de Swift ne devrait pas trop poser de problème. La réciproque est également valable, mais au vu des deux autres arguments exposés par Aaron Hillegass, on a bien compris par lequel il fallait commencer encore aujourd'hui.

avatar doogy | 

C'est vrai ce qu'il dit, mais c'est aussi par crainte que tout son travail et son apprentissage de l'Objective C soit rendu caduque à cause de Swift

avatar martinx | 

Hello. Des conseils pour débuter dans la programmation? Je suppose qu'il faut connaître le C. Merci pour vos conseils, ouvrages etc....

avatar Darth Philou (non vérifié) | 

@martinx :
Commence par http://code.org

avatar béber1 | 

voir les réponses détaillées sur ce précédent fil
https://www.macg.co/logiciels/2014/06/quatre-ans-de-developpement-pour-swift-82437

avatar C1rc3@0rc | 

@martinx

Python pour débuter
Swift pour OS X et iOS
ADA pour l'industrie aérospatiale et les agences de sécurité.
C++ pour l'industrie en général
Java pour le monde des serveurs et Android
C#/.Net pour Windows

Et dans tous les cas un clavier Qwerty.

avatar redchou | 

- Pour apprendre le Swift, il faut connaître l'Objectif-C, qui nécessite de connaître le fonctionnement de la pile et des pointeurs et pour comprendre ce fonctionnement, il faut connaître le C.
- Bref, l'accessibilité de Swift n'est pas. Le fonctionnement du playground est accessible, pas le langage...
(Swift is friendly to new developper)

avatar Darth Philou (non vérifié) | 

Je ne suis pas d'accord. Ce qu'il faut continuer d'apprendre, ce sont les APIs des frameworks.

Un nouvel arrivant sur iOS peut tout à faut démarrer par Swift sans passer par la case Objective-C. L'outillage XCode traduit notamment à la volée le code Objective-C en Swift lorsque l'on consulte la documentation ou que l'on navigue dans les headers, donc pas besoin de connaître la syntaxe d'Objective-C pour intégrer les frameworks ou le patrimoine existant.

L'argument de l'encapsulage de code C est vrai mais qui fait ça ? Une minorité.

avatar Mithrandir | 

Son argumentaire est complètement faux.

avatar samshit | 

J'adore :)

avatar loloeroket | 

Il n'a pas tord. Le plus grand obstacle c'est justement tout Cocoa est pour l'instant de l'Objective-C ce qui rend l'apprentissage du néophyte plus compliqué. Les premiers éléments de référence que fournit Apple ce sont des informations utiles pour les développeurs qui utilisent déjà XCode et Objective-C. Le livre sur Swift est très bien fait mais il ne fait pas référence à Cocoa du coup c'est impossible de commencer à développer sur Mac sans se mettre à Objective-C. Il y a bien un pdf qui explique de manière générique comment intégrer de l'Objective-C mais c'est assez limité.

Apple ne fournit aucun élément pour démarrer une app de rien en Swift. Aucune documentation Interface builder -> Swift. Donc toute la logique y est mais rien lié à l'interface graphique. Il est donc clair que la cible numéro un c'est bien sur le développeur actuel.

Je parie que dans un an, la situation se sera inversée. Et Swift v2 corrigera également les plus gros défauts de jeunesse de Swift.

avatar Darth Philou (non vérifié) | 

@loloeroket :
Je ne suis pas d'accord avec vous, cf mon commentaire.
En plus, vous vous trompez : quand on crée un nouveau projet, l'application par défaut est totalement en Swift et bien sur le lien avec Interface Builder tout à fait pris en charge, il n'y a aucun lien avec Objective-C.

avatar loloeroket | 

@Darth Philou

Vous avez totalement raison dans ce que vous dites mais ce n'était pas ce que je disais. Celui qui débute en Swift manque d'exemples pour implémenter des éléments simples. Un menu dans OSX, détourner le NSLog dans une variable, et lier tout ca. Alors que quand vous êtes bloqué sur Objective-C un coup de Google et on trouve tout ce qu'on veut.

avatar FrantzR | 

Merci pour cet échange de commentaires constructifs, ce n'est pas si fréquent, cela mérite d'être souligné ! ;)

avatar MacClub06 | 

Il aurait été bon de mettre face á l'article de Aaron Hillegass celui de Ash F. (http://ashfurrow.com/blog/objective-c-is-not-easy-to-learn).

Les deux sont des vétérans reconnus et respectés d'Objective-C et ont des avis divergents et intéressants sur l’intérêt d’Objective-C avec l'arrivée de Swift. Cependant en y regardant de plus près il ont probablement tout les deux raisons, mais chacun dans leur domaine.

Par contre, l'article de Aaron Hillegass me semble mieux construit, argumenté et le raisonnement mieux expliqué. Mais peut-être que cela vient aussi du fait que le monsieur est également un excellent pédagogue.

avatar PiRMeZuR | 

Je suis d'accord avec son idée, mais tous ses arguments sont bancaux ou faux (ou peut-être tronqués et mal traduits).

avatar fanchig | 

Salut à tous,

je suis un peu hors sujet, mais comme j'ai hâte de tester Swift ...
J'ai un compte developer (notamment via un compte ios dev universitaire), mais je ne peux pas télécharger xcode 6, ni le sdk ios8. Celui reste grisé par exemple dans le ios dev center.

C'est normal ?

Merci d'avance.

EDIT : -> oui, apparemment, c'est normal... on n'a pas accès aux versions beta quand on est universitaire ... c'est dommage ...

avatar Darth Philou (non vérifié) | 

@loloeroket :
Ah oui bien sur.
Mais je n'ai pas d'inquiétudes sur ce sujet, ça arrivera. Et ce serait dommage de ne pas se mettre à Swift tout de suite sur la seule base de cette faiblesse.
;-)

avatar loloeroket | 

@Darth Philou

Je n'ai pas dit le contraire. Ce Swift est promis à un très grand avenir. Sur le blog d'Aaron il y a un gars qui prédit l'arrêt d'Objective-C et migration obligatoire sous 2 ans. Sans doute un peu extrême. Mais d'ici 2 ans toute nouveauté sera faite en Swift.

avatar Darth Philou (non vérifié) | 

@loloeroket :
On est en phase.

avatar elamapi | 

Vas-y que je te mélange langage, syntaxe, bibliothèque (dans bibliothèques vous pouvez caser API/Framework etc ...).

Dans 99% des cas, ce qui est "complexe" ce n'est pas le langage, mais l’enchevêtrement inextricable d’éléments externes.

Connaitre et "utiliser" un langage de programmation est assez simple.

En gros, si vous connaissez le C et le Perl (par exemple) apprendre Swift, PHP, ADA, Pascal sera assez simple.

Mais ça ne vous servira a RIEN (ou presque), si vous ne connaissez pas les librairies qui sont utilisées dans votre environnement.

Exemple concret.

Je suis en termX sous linux , je veux afficher "toto" en C.

#include

main()
{
printf("toto");

}

Je suis sous linux et je veux afficher "toto" dans une fenetre X, et la, c'est le drame ...

Je vous la fait courte alors, je vais me contenter d'ouvrir une fenetre sous gnome (différent pour KDE , etc .....)

#include

int main( int argc,
char *argv[] )
{
GtkWidget *window;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);

gtk_main ();

return 0;
}

Est-ce que le principe de programation change ? non, la syntaxe du langage reste la même, le "fonctionnement" du langage reste le même, la seule chose qui change, ce sont les "nouvelles fonctions" venant des lib de gnome qu'il va falloir apprendre. Et ça sera pareil si je veux le faire sous windows, sous Motif, avec Cocoa.

Bref, ce n'est PAS le langage qui pose soucis, ce sont les libs a connaitres et ca, qu'on soit soit en C, ADA, PHP ou trucmachin, ça ne change rien.

Soit on a un haut niveau d'abstraction , soit on l'a pas.

Objective C sur l’environnent OSX ne l'a pas!!

combien de lignes de code avec Xcode et objective C pour faire une application qui ouvre une fenetre, permet de selectionner un fichier, et afficher un bouton rouge si il est en lecture seule, ou vert s'il est en read/write ?

VB (l'encien), sous windows, l'avait (pour faire la même chose qu'au dessus, 5 lignes de code suffisaient).

Il faut espérer que swift soit au milieu (limite la necessité de connaitre les 90 millions de lib pour ios) mais laissez assez de place au code pour des choses assez poussé si necessaire.

avatar Darth Philou (non vérifié) | 

@elamapi :
Je ne peux pas te challenger sur les 5lignes de code VB, mais je t'assure qu'en Objective-C c'est moins de 10 (si je compte headers, en têtes de méthodes etc... ; sinon 3 lignes suffisent ).

avatar BeePotato | 

@ Darth Philou : « mais je t'assure qu'en Objective-C c'est moins de 10 »

Pareil.
Je me demande même si on ne peut pas trouver une solution (à base de NSPathControl et de binding) pour mettre ça en place sans écrire la moindre ligne de code — mais là, ça n'a pas grand chose à voir avec Objective C, et beaucoup plus avec la classe de Cocoa. ;-)

avatar Ellipse | 

Entièrement d'accord en ce qui concerne le premier argument sur les API, il faudra du temps pour les adapter en Swift.

Par contre, comme nombre d'entre vous, le second est plus discutable.

Objective-C est élégant, mais on doit vite composer avec des aspects particuliers dans la gestion des objets (héritage, polymorphisme, extensions de classes, …) Swift est en apparence plus simple, mais je n'ai pas exploré sa gestion des objets.

Personnellement, j'ai commencé il y a très longtemps par Basic, puis Modula, puis Pascal, puis rien en essayant désespérément de faire du C++ (à l'époque les bouquins étaient abscons) et fait un peu de HTML.

Il y a 5 ans, j'ai eu la chance de pouvoir suivre une formation en commençant par HTML (canvas, SVG), CSS et JS (prototype), embrayer avec Java et SQL, puis développer une application en Objective-C (et là je reconnais que les bouquins d'Aaron m'ont aidé, mais également le fait d'avoir tout le bagage des autres langages), fais un soupçon de PHP, pour finalement commencer à apprécier Python.

Comme le dit une de mes connaissances, je suis un canard (je ne vole pas ni ne marche vraiment bien), mais je ne prétends pas être un développeur et ai un certain plaisir avec chaque langage.

Un dernier conseil pour ceux qui veulent apprendre, essayez d'utiliser des frameworks comme ceux-ci :

http://www.greenfoot.org/door (en anglais et le bouquin est bien fait)
http://www.tigerjython.ch (en allemand pour l'instant)
et bêtement du code en JavaScript, rapidement exploitable avec un navigateur web.

Et lisez de bons bouquins sur le sujet…

avatar Darth Philou (non vérifié) | 

@Ellipse :
Les api sont déjà accessibles nativement depuis Swift. Nul besoin de les "adapter".

avatar adamsvibe | 

Redchou : on est encore au tout début ;)

Swift est accessible malgré tout. Mais vu que la transition vers swift prendra du temps.

Objective c reste a apprendre :)

avatar Mr_Monkey | 

Objective-C est plus facile à apprendre que Swift.

Ca n'est pas la quantité de code nécessaire pour remplir un objectif qui donne la facilité de compréhension du langage, c'est même le contraire ! Objective-C est un langage très verbeux qui a été pensé pour se rapprocher d'une syntaxe "humaine". De fait le code à l'air plus lourd de loin mais il est en fait presque qu'auto documenté.

Swift est un langage de haut niveau nécessitant une bonne maitrise de concepts avancés de programmation (programmation fonctionnelle par exemple). De plus sa concision et les raccourcis qu'il permet de prendre permettent certes de gagner du temps mais peuvent être déroutants pour un débutant.

avatar Darth Philou (non vérifié) | 

@Mr_Monkey :
Je ne suis pas d'accord. Question syntaxe c'est similaire voire plus simple.
Ensuite, Swift propose des concepts qui n'existent pas en Objectivé-c, donc certes ça demande plus de temps mais en même temps ils ne sont pas non plus indispensables pour commencer à développer une appli.

avatar BeePotato | 

@ Darth Philou : « Je ne suis pas d'accord. Question syntaxe c'est similaire voire plus simple. »

Similaire, oui. Plus simple… pour l'instant, ça ne m'en donne pas l'impression, mais c'est peut-être juste à cause d'une histoire de familiarité avec une syntaxe et pas avec l'autre.

Mais le truc que je regrette dans la syntaxe de Swift, c'est le choix de ne pas avoir gardé la même syntaxe qu'en Objective C pour l'envoi de message. La syntaxe à crochets, je trouve ça plus clair ; et je trouve qu'elle incite plus à un nommage correct des méthodes, dont les noms se lisent d'un bloc, alors qu'avec Swift les noms deviennent asymétriques en ayant une partie avant la parenthèse ouvrante et des parties à l'intérieur des parenthèses. On perd le côté « phrase » du nommage de paramètres (d'ailleurs, la documentation de Swift incite moins fortement à utiliser le nommage des paramètres).

avatar Ali Baba | 

@BeePotato :
1 aussi. La syntaxe avec crochets était vraiment classe.

avatar Ali Baba | 

@Mr_Monkey :
1

Tu as tout dit. Swift est ambigu. Il est plus rapide à écrire, plus puissant, plus souple, plus sûr aussi par certains aspects, mais plus ambigu. Il faut avoir une plus grande rigueur quand on l'écrit, sinon on risque de faire des spaghetti.

Bref, avec Swift on aura sûrement moins de risque de bugs bêtes, mais plus de risque de code abscons (donc difficile à relire, difficile à debuguer).

C'est cette raison qui me fait dire que Swift n'est surtout pas pour les débutants. Déjà qu'en Objective-C c'est pénible les apps mal écrites, mais alors en Swift ça va être l'horreur.

Oui c'est peut-être plus facile à apprendre par certains aspects (pointeurs, etc.) mais en contrepartie il faut avoir davantage de background pour écrire du code propre, et ça ça ne s'apprend pas tout seul.

avatar Ali Baba | 

@Ali Baba :
En fait Swift est fait pour les devs qui viennent de Java ou C# et ont les cheveux qui se dressent sur la tête quand ils voient des pointeurs ou des crochets. Pour eux, ce langage est parfait. Mais pas pour les débutants, non.

avatar ichp | 

"Objective-C est plus facile à apprendre que Swift"

Quoi ?

Apple a réussi à faire un langage plus imbuvable que de l'Objective-C ? Y'a pas à dire, ils sont vraiment fort :)

avatar SteveC72 | 

println, readln ..... la dernière fois que j'ai vue ce genre d'appel c'était en Pascal(Delphi)

Drôle de revoir ce genre de commande ( et autres ) reprendre vie dans Swift .....

avatar Darth Philou (non vérifié) | 

@SteveC72 :
Println fait aussi partie du stdio de C.

avatar BeePotato | 

@ Darth Philou : « Println fait aussi partie du stdio de C. »

Euh…

avatar Darth Philou (non vérifié) | 

@BeePotato :
Oups printf, désolé.
Trop longtemps que je n'ai pas touché au C ;-)

avatar JackOne | 

La syntaxe objective-c, la gestion de la mémoire pour les développeurs qui ne connaissent que Java et C# est un repoussoir.
Pour pérenniser sa plateforme, Apple était obligé d'évaluer et simplifier

avatar ovea | 

Connaître le langage Obective-C pour connaître Swift ?
Et si Swift était plus que ça :
Un moyen de décrire le CADRE de nouveaux programmes inconnus dont la formulation, l'ADN pourrait être adapté au problème à résoudre aujourd'hui ?
Objectif-C c'est développé à l'époque dans l'imaginaire du contrôle de l'Interface Graphique avec l'iceberg Cocoa.
Peut-être que Swift est là rafraîchi justement mature dans sa filiation avec Objectif-C pour écrire DIRECT des scénarios d'interface graphique …
- en aveugle gribouillant le code
ou mieux, de manière équivalente
- EN TATOUILLANT l'interface y plaçant des Contrôles graphiques développés maisons.
Pas de ségrégation programmeur/graphiste, juste une sensibilité différente pour une intégration maison maximum dans l'ÉCO-système d'Apple.
Une réminiscence du Flash qui
Pourrait profiter à Apple qui voulait tant l'abattre.

avatar loloeroket | 

Je pense que voila le chainon manquant. Tout est bien plus clair comme ca.

Dans le Help de Xcode 6, faire la recherche suivante : About Connecting Objects to Code

Et voila. Le besoin de Objective-C n'est plus si indispensable a mon avis. Tout est décrit très simplement.

avatar jerome74 | 

Pas d'accord avec ce monsieur! Certes, si on veut utiliser du code existant en C++, point de salut, il faut coder en Objective-C++, et donc maitriser à la fois l'Objective-C et le C++, mais ça ne concerne pas tout le monde, loin de là. Certes, aujourd'hui les livres, tutoriels, exemples, forums sont tous en Objective-C, mais ça devrait vite évoluer. Pour le reste... je n'ai pas étudié swift de près, mais dire qu'Objective-C est un langage simple est une vrai connerie. C'était vrai il y a 20 ans, du temps de NeXT, depuis Apple a rajouté des tonnes des trucs complexes à ce langage et l'a transformé en usine à gaz. Un nouveau langage cohérent est probablement une bonne idée plutôt que de continuer à transformer Objective-C dans tous les sens. Quand au fait que les frameworks sont écrits en Objective-C, et alors?? Apple n'en fournit pas les sources, donc aucun risque que le débogeur ne vous mette le nez dedans...

avatar denmakesmusic | 

Donc pour programmer sur iphone il faut connaitre le C (par ex API Quartz), l'Objective-C, le C++ (dans une moindre mesure quoique certaines API open source l'utilisent) et Swift.
On reconnait bien là la simplicité souvent évoquée par Apple.

@jerome74
je suis d'accord, j'ai fait de l'Objective-C il y a 20 ans, c'était relativement simple et depuis qu'Apple le transforme c'est de plus en plus compliqué. Je n'ose pas imaginer ce qu'ils auraient fait de Smalltalk...

CONNEXION UTILISATEUR