Débuter avec Swift pour iOS – (2/2) Quelle méthode pour apprendre ?

Après un premier article qui tentait de vous convaincre que programmer est une activité amusante et passionnante, allons maintenant au coeur du sujet. Comment réellement apprendre Swift ? Quels sont les meilleurs cours ? Quels types de cours ? Comment vraiment progresser ?

La première difficulté quand on débute en développement – et ce n’est pas spécifique à Swift – est de se trouver confronté à une quantité pléthorique de supports pour apprendre. Faire le bon choix parmi tous ces contenus est donc le défi numéro un. Je suis passé par là, et j’ai mis quelque temps avant de trouver les supports qui me conviennent et surtout ceux qui me permettaient de progresser réellement.

Une des clés pour progresser est d’avoir un bon équilibre entre théorie et pratique. Oui, la théorie est absolument nécessaire. Vous trouverez beaucoup de tutos qui vous permettent de développer rapidement des applications. On suit les étapes pas à pas et l’on aboutit à un résultat incroyable en quelques heures. La difficulté arrive lorsque vous allez vouloir faire vos propres développements. On ne peut pas se contenter de copier-coller des bouts de code pour faire ses propres projets. Très vite, vous allez atteindre des limites qui sont liées à la compréhension de ce que vous faites réellement, non seulement des instructions en elles-mêmes, mais aussi des concepts de base indispensable. Tôt ou tard, ils vont vous manquer pour avancer. Il faut être capable d’adapter ce que l’on a appris pour ses propres besoins.

On peut se dire qu’on trouve toujours des réponses à ses problématiques sur Stackoverflow. C’est une source indispensable pour trouver des solutions et des bouts de code faits par des développeurs plus expérimentés. Il est conseillé de s’inspirer des autres, de copier du code, d’en réutiliser, mais si on ne comprend pas ce qui se passe, il sera très difficile d’adapter, de corriger ses erreurs et d’optimiser son code. Viendra alors la frustration de ne pas réellement avancer. Comme je le disais dans la première partie, programmer doit être amusant. C’est un processus créatif et c’est pour cela que c’est passionnant. Sans plaisir, pas de progression.

Les cours

Le moment est venu de parler des ressources. Les cours sont la première source pour apprendre. S’il est bien structuré, un cours permet d’avoir une progression maîtrisée de l’apprentissage tout en couvrant le maximum de concepts. Je vous en propose trois, avec des approches différentes. À vous de voir celui qui vous convient le mieux. Rien n’interdit d’ailleurs de commencer avec un cours et de l’abandonner s’il ne vous convient pas. C’est ce que j’ai fait.

iOS 13 &Swift 5 – Angela Yu – Udemy

Si vous faites sur recherche de cours sur Swift iOS, vous allez très vite tomber sur les cours d’Angela Yu sur la plateforme Udemy. La popularité de son cours iOS 13 & Swift 5 – The Complete iOS App Development Bootcamp est absolument incroyable. Près de 200 000 participants ! C’est le cours par lequel j’ai commencé. Angela est une formidable pédagogue, la progression est bien calibrée, ses explications sont claires. Les applications que l’on construit ensemble sont intéressantes, jolies et couvrent une grande partie des API Apple. Évidemment le cours est en anglais, mais il reste relativement simple à suivre. Le cours est monumental : 573 vidéos réparties en 36 sections, soit près de 60 heures de vidéo (et au moins 4 fois plus de temps pour les visionner).

La plateforme Udemy est agréable à utiliser. Il y a même une App qui m’a permis d’utiliser l’iPad pour visualiser les vidéos en utilisant le Mac pour développer en même temps. Toutes les ressources sont disponibles pour avancer et chaque leçon a son propre fil de discussion qui permet d’échanger avec les autres élèves en cas de problème de compréhension ou de mise en application.

J’en suis à la session 204 et j’ai déjà appris beaucoup de choses. En réalité, j’en suis à cette leçon depuis plusieurs semaines, car j’ai basculé sur un autre cours, laissant celui-ci de côté pour le moment.

Effectivement, la critique que l’on pourrait faire au cours d’Angela est d’être construit sur la forme de tuto : on fait en même temps qu’Angela. Il y a bien quelques vidéos « Deep Dive » de temps en temps, qui s’attardent sur des concepts théoriques au fil de l’apprentissage, mais pas de cours théorique structuré. Il manque surtout, à mon goût, de véritables exercices pratiques à effectuer seuls. Il y a des challenges au fil des vidéos pour compléter le code que l’on est en train de construire, mais arrivé à la session 200, Angela ne nous a toujours pas laissés construire une App de A à Z avec les concepts appris. La conséquence est qu’il est difficile de mesurer ses progrès, de savoir réellement ce que l’on a acquis et surtout sa capacité à faire soi-même.

Pour cette raison, ce n’est peut-être pas le cours que je conseillerais pour commencer. Par contre, je vais y revenir pour compléter mon apprentissage et certainement découvrir de nouvelles choses tout en ayant acquis l’assurance et l’autonomie.

Pour finir, à noter que le cours est payant comme la plupart sur le site Udemy. Ne l’achetez pas au prix fort (129,99€). Je n’ai pas très bien compris comment fonctionne la tarification Udemy, mais ils font régulièrement de fortes « promotions » sur leurs tarifs. Si vous créez un compte, je pense que vous allez bénéficier d’emblée de ces tarifs « préférentiels ». Il est affiché à 14,99€ en ce moment, ce qui me semble un prix raisonnable au regard de la qualité et de la quantité de contenu offert.

100 Days of Swift – Hacking with Swift

Cette assurance et cette autonomie, je pense qu’il est plus facile de l’acquérir avec les cours de Paul Hudson et plus particulièrement celui qui est destiné aux débutants : 100 Days of Swift. J’étais déjà bien avancé dans le cours d’Angela Yu lorsque j’ai découvert le site Hacking with Swift. Le principe est simple : 100 courtes leçons qui ont pour objectif de passer 1 heure par jour pendant 100 jours avec Swift. Ces leçons sont un mélange de cours, de vidéos, de lectures, de quizz et surtout d’écriture de code.

Les 12 premiers jours sont consacrés à l’acquisition des concepts de base sous la forme de courtes vidéos suivies de tests. C’est progressif, bien fait et les tests permettent de vérifier qu’on a bien compris. Je vous conseille de télécharger l’App iOS gratuite Unwrap qui couvre ces 12 premiers jours. En plus des cours, elle propose des challenges, des quizz et des tests qui permettent d’apprendre de façon ludique tout au long de la journée dès que vous avez un moment. Les 12 premiers jours m’ont permis d’apprendre beaucoup plus et de façon bien plus structurée que le cours d’Angela.

La totalité du cours est basée sur ce concept d’apprentissage suivi de révision et de mise en pratique. Ainsi, après les 12 premiers jours, comme c’est le cas après chaque bloc d’apprentissage, il y a trois jours de révision et consolidation. On commence réellement à programmer à partir du jour 16 avec trois projets très simples. Les leçons sont sous forme de vidéos accompagnées de la transcription complète, code compris. À la fin de chaque projet, un challenge est donné. Ces challenges ne sont jamais corrigés (juste quelques indices pour aider), car Paul insiste sur le fait que l’apprentissage doit être fait par soi-même. À chacun de chercher parmi ce que l’on a appris ou sur d’autres ressources. En dernier recours, si vous êtes vraiment bloqué sur un challenge vous pouvez trouver sur GitHub des développeurs qui ont mis à dispositions leurs solutions à l’ensemble des challenges. J’y ai recours en général pour voir d’autres façons de faire, mais aussi lorsque j’ai séché sur certains points. Ces nombreux challenges progressifs à faire en toute autonomie tout en étant progressifs sont vraiment la clé de la progression.

Je suis au jour 35 actuellement et j’ai réellement pris beaucoup d’assurance. Je comprends comment sont construites les instructions, car Paul fait toujours le rapprochement entre ce que nous faisons dans les tutos et la théorie. Je suis capable de faire une App simple de A à Z ce que je n’avais même pas osé tenter avec le cours d’Angela Yu, ne sachant pas trop si j’en étais capable et par quel bout commencer. J’y prends surtout beaucoup de plaisir.

C’est évidemment le cours que je vous conseille pour commencer, apprendre vite et bien. Et en plus, tout cela est gratuit. C’est d’ailleurs le cas pour la plupart des contenus de Hacking with Swift, les contenus payants étant les livres et les cours avancés. Cela ne me concerne pas pour le moment.

Stanford University – Developing Applications for iOS using SwiftUI

Les universités américaines proposent de nombreux cours en ligne. Ce sont des enregistrements de ceux donnés à leurs étudiants. Ils ne se contentent pas de mettre les vidéos en ligne, toutes les ressources pour suivre les cours sont également disponibles, permettant à chacun de suivre le même cursus que les étudiants. L’université de Stanford propose donc ce cours dédié au développement d’applications iOS. Je n’ai pas encore regardé celui-ci, mais j’avais par le passé commencé quelques leçons de Java de la Stanford University. J’avais apprécié la très grande qualité des enseignements.

Si vous préférez un enseignement guidé qui vous rappelle vos études, c’est une excellente option. Par contre, ces cours demandent un investissement personnel important. Le travail à faire en dehors des cours (apprentissages, travaux pratiques) représente une masse de travail non négligeable. C’est un excellent moyen pour apprendre. À l’inverse, en tant qu’élève à distance et isolé, vous n’aurez pas de camarades de classe pour vous aider. C’est l’école de la débrouille.

Pour ma part, je pense regarder ce cours lorsque j’aurai terminé les deux autres, pour consolider mes acquis et vérifier que je progresse. À noter également que ce cours est construit autour du framework SwiftUI. J’en parle un peu plus loin. Et c’est gratuit.

Autres ressources

Ces cours ne seront pas les seules ressources dont vous aurez besoin. Je vous livre en vrac quelques liens que j’utilise en complément :

  • Les documentations officielles du langage Swift (swift.org) et des frameworks Apple. Le site Developper d’Apple propose aussi de nombreuses autres ressources pas toujours évidentes à trouver au premier abord.
  • Stackoverflow évidemment
  • Le sub Reddit r/swift
  • Je ne recommande pas d’utiliser YouTube pour apprendre. Vous n’y trouverez que des petits bouts d’apprentissage, très peu de choses structurées. Par contre, pour des sujets précis, on trouve évidemment d’excellentes ressources, par exemple sur la chaîne de Sean Allen.
  • De nombreux blogs de développeurs proposent des articles pour les débutants. Swift by Sundell en est un bon exemple.

Mon expérience

UIKit ou SwiftUI

C’est certainement la première question que vous allez vous poser avant de commencer. Jusqu’ici, la maturité de SwiftUI rendait les développeurs frileux pour le conseiller comme première approche pour les débutants. Les dernières versions ont tellement évolué qu’il est maintenant en première ligne. Un exemple. Alors que Hacking with Swift proposait de commencer par 100 Days of Swift (UIKit) il y a encore deux mois lorsque j’ai commencé, il propose aujourd’hui dans sa page Start Here de commencer par le cours 100 Days of SwiftUI. Je continue de penser qu’il est préférable de commencer par UIKit lorsqu’on est un débutant, pour se plonger dans le code encore majoritairement utilisé pour développer. Dans un deuxième temps, il est certain que je déroulerai les 100 Days of SwiftUI.

Quelques conseils

Ayant dépassé maintenant les premiers mois d’apprentissage, je mesure mieux les écueils. Voici quelques conseils.

Le développement d’App est quelque chose de complexe, en tout cas plus complexe que je ne l’imaginais. N’imaginez pas faire votre première App avant le premier mois d’apprentissage. Cela peut être frustrant, mais voyez cela comme un indicateur de votre motivation.

Cela signifie également qu’il faut consacrer du temps à l’apprentissage. Ce temps il se mesure plus en régularité qu’en nombre d’heures par séances. Passer ne serait-ce que 30 minutes chaque jour est selon moi plus bénéfique qu’une session de 5h tous les dimanches. Cela vous permet de rester en contact avec le code et d’entretenir les acquis. C’est aussi pour cette raison que j’apprécie les 100 Days of Swift. Un peu chaque jour.

Enfin, si je ne devais donner qu’un conseil, c’est celui-ci : privilégiez un apprentissage qui vous met en situation d’écrire votre propre code assez vite, régulièrement et sans aide. Ce n’est que par les essais et les erreurs que vous apprendrez. Vous essaierez de comprendre, vous trouverez les solutions, vous progresserez.

Bien sûr, apprendre peut être intéressant par le simple plaisir de la découverte. Cela risque de s’émousser devant les difficultés. Le meilleur moyen de l’éviter est d’avoir un objectif en tête. Identifiez une idée d’App que vous aimeriez développer, même si c’est une idée qui existe déjà. Dès que vous vous sentez à l’aise, commencez à la développer, par petits morceaux. C’est la clé de la motivation.

Débuter avec Swift pour iOS – (1/2) Pourquoi apprendre à développer ?

Comme si je n’étais pas suffisamment dispersé dans mes activités1, j’ai décidé d’en ajouter une à ma panoplie de zappeur. Depuis plusieurs semaines, j’essaie d’apprendre à développer des applications mobiles avec Swift pour iOS. J’en suis au stade où j’ai le sentiment de progresser dans mon apprentissage, fort de mes erreurs, mais aussi des premiers résultats positifs. Il me paraissait intéressant de partager mon expérience de débutant, si vous aussi vous pensez vous lancer.

Avant de passer aux outils, méthodes et astuces pour apprendre, je vous propose dans cette première partie de voir ce qui peut motiver pour apprendre à programmer.

Comment j’en suis arrivé là

Pour être tout à fait honnête, je ne suis pas un total débutant. Ma formation initiale en informatique m’a amené, au début de ma carrière, à faire un peu de développement. C’étaient les prémices de la programmation évènementielle, une nouvelle façon de concevoir les logiciels très éloignée de la programmation linéaire qui était la norme à l’époque. Les plus nostalgiques (ou les plus anciens !) se souviennent certainement de Borland Paradox. J’ai très peu développé, mais je garde en mémoire des moments d’intense exhaltation. Inévitablement, un jour, cela s’est rappelé à moi.

L’inventivité des développeurs d’applications mobiles est tout simplement stupéfiante. En quelques années, des fonctionnalités que l’on rangeait dans la catégorie « science fiction » sont devenues réalité. Les mettre en œuvre est aujourd’hui à la portée de chacun, si l’on fait l’effort d’apprentissage. La richesse de l’écosystème mobile en fait une plateforme aux possibilités infinies. Vouloir explorer ces possibilités, c’est un peu comme entrer dans un nouvel univers. C’est à la fois intrigant et passionnant.

Pourquoi apprendre à développer

Le développement logiciel est généralement perçu comme une compétence professionnelle. Aux deux extrémités des clichés, on imagine le millénial qui développe la future grande idée d’une startup ou bien le développeur chevronné qui code, bit à bit, le micrologiciel de la climatisation de votre voiture. Le fantasme du développeur est plus proche de la première catégorie, l’ultime cliché étant le développeur indépendant qui a eu une idée de génie et qui voit son application truster les premières places du classement de l’AppStore.

Il y a une autre voie. Une autre motivation. Développer peut être un loisir, quelque chose de ludique, une passion.

Développer c’est créer

Le côté créatif du développement est clairement ce qui m’attire le plus. J’ai toujours aimé fabriquer des choses, utiles ou artistiques, aboutir à une chose tangible qui sort de mes mains ou de mon esprit. Le développement d’applications possède ses deux facettes : on fabrique quelque chose avec des outils et des matériaux (le langage de programmation) tout en concrétisant des idées (les fonctionnalités, le design). Au final, le produit peut être beau, à regarder ou à utiliser.

Développer c’est écrire

Si vous aimez écrire, développer devrait vous passionner. Le processus d’écriture est très proche du développement logiciel : vous devez assembler des idées, utiliser une grammaire, une syntaxe pour former quelque chose de compréhensible. Apprendre un langage de programmation c’est comme apprendre une nouvelle langue. La progression est similaire : on commence avec des phrases simples utilisant les mots de base du langage. Petit à petit, on enrichit son vocabulaire et l’on prend plaisir à former des phrases complexes dans un style agréable et efficace. On parle même de développeurs qui écrivent bien, même si leur application fait la même chose qu’une autre écrite dans un style plus rudimentaire.

Être tout simplement devant son clavier, voire les mots se former à l’écran est motivant quand on écrit. On retrouve cette même motivation quand on écrit du code.

Développer c’est inspirant

Si vous avez déjà vu des développeurs, vous avez sans doute remarqué à quel point ils étaient immergés dans leur activité. Une attitude qui a injustement donné leur réputation d’asocial aux développeurs. En réalité, c’est un autre phénomène qui entre en jeu ici : la notion de flow telle que l’a décrite pour la première fois Mihaly Csikszentmihalyi dans son formidable livre Vivre, la psychologie du bonheur. Le flow est un état de fluidité mental que l’on atteint en faisant des activités qui occupent tout notre esprit. On perd généralement la notion du temps et l’on est dans une intense concentration. Mihaly Csikszentmihalyi avance que la succession de ces expériences est une des sources de l’équilibre et du bonheur. J’adhère à cette idée.

Chacun a pu vivre ces moments et en ressortir revigoré, plein d’énergie positive et de satisfaction d’avoir fait quelque chose d’enrichissant pour soi-même. Pour ma part, c’est le souvenir que j’ai de mes longues séances de développement.

Développer c’est ludique

Quand on développe on est souvent à la recherche d’une énigme. Parfois, cette énigme est de trouver la solution pour implémenter une idée. C’est un jeu de piste et d’exploration souvent amusant. Il faut bien l’avouer, la plupart du temps l’énigme consiste à rechercher pourquoi ça ne fonctionne pas. Assez paradoxalement, cette recherche de solutions à ses propres bugs est aussi ludique que la partie créative.

Je n’ai pas suffisamment de référence de gamer pour en parler longuement moi-même, mais les développeurs rapprochent souvent les deux activités : développer c’est comme jouer aux jeux vidéos. Être immergé dans son activité, trouver des solutions, interagir avec l’écran, arriver au bout d’une quête. Ce n’est d’ailleurs peut-être pas un hasard si développeurs et gamers sont souvent les mêmes personnes.

Développer c’est apprendre

Évidemment. On commence par apprendre un nouveau langage. Au-delà du langage, on apprend surtout de nouveaux concepts. Les débutants en Swift savent de quoi je parle si j’avance le mot « closure ». Si l’on aime apprendre et découvrir, on est servis. Chaque jour est une nouvelle découverte.

Développer permet aussi de mieux comprendre comment fonctionne les applications que l’on utilise. Si vous êtes curieux, apprendre un langage, c’est comme soulever le capot d’une voiture.

Développer c’est s’ouvrir de nouveaux horizons

En arrivant au terme de cette liste de motifs, on pourrait croire que l’on peut développer juste pour la beauté du geste. Si cela peut être motivant pour débuter, il faut rapidement y trouver un objectif plus concret. C’est un conseil largement partagé : la pratique est le seul moyen de progresser. Il est indispensable de se fixer des objectifs pour mettre en œuvre ce que l’on apprend.

Fixer ces objectifs, c’est aussi s’ouvrir de nouveaux horizons. Vous avez peut-être une idée d’application à développer. C’est peut-être juste un utilitaire pour votre propre besoin. C’est peut-être quelque chose de plus ambitieux, mais il faut bien commencer par les bases.

Vous avez peut-être envie de commencer une nouvelle carrière. Certes, apprendre seul en quelques mois ne fera pas de vous un développeur professionnel, mais cela vous permettra de mieux comprendre le métier. Savoir si cela vous plait vraiment et si vous devez aller plus loin.

Pourquoi développer en Swift pour iOS

Si je me suis tourné vers Swift, c’est simplement par logique personnelle, l’écosystème que j’utilise étant celui d’Apple. C’est simplement ma préférence personnelle. Les motivations pour apprendre à développer s’appliquent naturellement à tout type de langage et toute plateforme.

Dans mon cas, Swift présente l’intérêt d’être un langage relativement répandu (du moins dans le monde Apple). C’est le gage de pouvoir trouver facilement de l’aide pour apprendre. La richesse des possibilités offertes par la bibliothèque de composants d’Apple permet d’imaginer toutes sortes d’applications : des utilitaires, des jeux, manipuler de l’audio ou de la vidéo, de la réalité augmentée, la géolocalisation, etc. Les possibilités sont immenses. Je sais que je ne serai jamais limité par le framework.

Les limites sont simplement celles de mes compétences en développement. Et ça, c’est le moteur n° 1 pour apprendre encore et encore pour enfin matérialiser mes idées.

Dans la deuxième partie, je partagerai les ressources que j’utilise pour apprendre et les quelques leçons que j’ai apprises de mes premiers essais.

  1. Fred, tu ferais mieux de te tenir à un rythme régulier sur tes articles de blog, ta newsletter et ton podcast. Et aussi traiter tes street-photo qui dorment par centaines sur ton disque dur.