Faut-il se former soi-même ou par un organisme ?

Lorsqu’on souhaite se mettre à une technologie qu’on ne maîtrise pas encore, il existe deux voies pour se former:

  1. Se former soi-même.
  2. Suivre une formation dispensée par un organisme.

En auto-formation

Au niveau du prix, le calcul est simple:  il s’agit du prix des supports, tels que les livres ou les abonnements à des sites web et autres achats de vidéos. Ça peut même être gratuit.

Pour ce qui est du temps passé, cela est souvent difficile à quantifier, parce qu’il ne se réduit pas  au temps de lecture ou de visionnage: il faudra aussi essayer des choses, et surtout se tromper. Cela prend un temps dingue !

Notez bien que ce mode de formation est tout à fait envisageable; je me suis moi-même formé à iOS de cette manière. D’ailleurs, une formation par une organisme ne peut pas couvrir tous les sujets, et le recours à des livres sera indispensable pour tout sujet un peu pointu.

Passer par un organisme de formation

Le coût

Il n’y a pas de mystère, le coût d’une formation dispensée par un organisme est élevé, parce que l’organisme doit payer le formateur, son personnel, la logistique et ses locaux. En dehors du prix de la formation, le client doit également payer son employé pendant qu’il se forme; il n’est donc pas productif durant la durée de la formation. Des frais annexes, tels que des frais d’hôtel ou de déplacement peuvent aussi s’ajouter.

Cela dit, si l’organisme de formation est conventionné, le fond de formation de l’entreprise pourra prendre à sa charge tout ou partie du prix de la formation. Je m’explique. D’après ce que j’ai compris, toute entreprise ayant des employés doit s’acquitter de la taxe d’apprentissage, mais peut déduire une partie si elle les place dans un fond. De fait, une entreprise a plutôt intérêt à utiliser le fond et former son personnel. Elle ne paie donc pas la formation “plein pot”.

(Soit dit en passant, l’existence de ces fonds explique pourquoi la formation est une activité plutôt lucrative en France. Puisque la formation “ne coûte rien” à l’entreprise, elle n’est pas trop regardante sur les tarifs. Je dirais que c’est aussi ce qui permet d’accueillir les stagiaires dans les meilleures conditions).

Le temps

Le gros avantage de la formation par un organisme se situe au niveau du temps. La formation classique que je donne dure cinq jours, et les stagiaires sont toujours étonnés de sa densité. Ils vont gagner beaucoup de temps parce que:

  • je les mets sur les bons rails dès le départ.
    Les stagiaires arrivent avec un bagage technique et donc des idées pré-conçues. Mon rôle est de leur inculquer la culture de cette technologie, ce qui leur évite d’utiliser des techniques familières mais inefficaces.
  • j’insiste sur ce qui est important.
    Il existe des principes incontournables (pour Cocoa Touch, c’est le MVC et la délégation) que les stagiaire doivent maîtriser. Ignorer ces principes génère des questions qui n’ont pas de raison d’exister.
  • le retour est immédiat.
    Il est normal de se tromper, cela fait partie intégrante de l’apprentissage. Seulement, il n’est pas rentable de rester bloqué sur un point de détail pendant des heures. Le formateur peut fournir rapidement un remède et proposer des alternatives techniques.
  • la formation est cohérente.
    Si les stagiaires sont là pour apprendre une technologie, il est important de faire un lien avec la méthodologie. Dans mes formations, nous cernons d’abord le problème et nous voyons comment implémenter une solution technique. Cet aspect est essentiel pour apporter de l’autonomie au stagiaire. Il s’agit du gros point faible des livres et autres supports, qui donnent des recettes, mais n’expliquent pas comment les imbriquer pour obtenir une application complète.
  • on sort du quotidien.
    Les stagiaires vont disposer d’une semaine rien qu’à eux, débarrassés du mode projet, et des requêtes des clients.

En conclusion

Vous aurez compris que pour moi, faire appel à un organisme de formation est plus avantageux dès lors que le temps est un critère important. Je vois trop de personnes sur les forums qui essaient de se former par eux-mêmes, dans des délais irréalistes, parce qu’on leur a demandé de programmer le prochain Instagram en deux mois !

Une formation fait gagner du temps sur le court terme, en rendant rapidement le salarié opérationnel, et sur le moyen terme, en assurant une certaine qualité du travail, qui n’aura pas trop besoin d’être repris par la suite.
Sur le long terme, une formation ne sera pas suffisante, et il sera de toute façon nécessaire de se documenter et de tester des points particuliers.

 

 

Calcul de distance et réflexion sur notre métier

Lors de l’une de mes dernières formations pour Mediabox, j’ai posé une question qui me paraissait bien anodine: “Comment calcule-t-on la distance entre deux points” ? Je fus bien étonné qu’aucun de mes élèves ne sache répondre.

Les deux points sont placés dans un repère cartésien et leurs coordonnées sont connues. J’ai commencé par dessiner deux points aux tableau. En complétant le dessin, et en faisant de ces deux points des sommets d’un triangle rectangle, cela donne:

Distance2Points

Une fois la figure tracée, une réponse me fut enfin donnée: “Il faut utiliser le théorème de Pythagore”. Exact.

Le calcul

La figure montre clairement que la distance est l’hypoténuse du triangle. D’après la réciproque du théorème de Pythagore:

distance = √(largeur^2 + hauteur^2)

Nous obtenons les largeurs et hauteurs par les coordonnées des points:

largeur = abs(p1.x – p2.x) hauteur = abs(p1.y – p2.y)

Il faut utiliser la fonction valeur absolue abs() parce que p2.x peut très bien être supérieur à p1.x. De même pour les y. Cependant, comme le carré d’un nombre réel est forcément positif, le code fera l’économie de l’appel à cette fonction abs().

Implémentation du calcul de distance

Passons donc au code en langage C:

Quelques remarques sur l’implémentation:

  • on utilise la fonction sqrtf() et non sqrt() pour le calcul de racine carrée. Les fonctions mathématiques de math.h travaillent normalement sur des doubles et non des floats. Les fonctions adaptées aux floats, comme sqrtf() sont plus rapides.
  • on n’utilise surtout pas powf(largeur, 2), pour élever la largeur au carré. Une simple multiplication est très rapide comparée à un appel de fonction, encore plus comparée à cette fonction powf().

Réflexion sur notre métier

En fait, si j’en suis à vous donner ces explications, c’est parce qu’une fois la réponse donnée à mes élèves, l’un d’eux m’a dit: “À quoi bon savoir comment calculer une distance, je vais trouver la fonction toute faite sur le net en deux minutes”. Il me semble que l’argument que je lui ai donné à ce moment était mauvais, à savoir qu’il était important d’avoir une culture générale de l’informatique.

En y réfléchissant, j’ai commencé à programmer à une époque où Internet n’existait pas. Même les rares livres d’informatique ne donnaient pas forcément ce genre d’informations. À l’époque, je n’avais d’autres choix que me creuser la tête ou poser des questions à un prof de math ou de physique, voire parler avec d’autres programmeurs amateurs. L’avantage est que j’ai des connaissances variées, et que je peux revenir aux bases si besoin. Avec suffisamment de temps, peu de choses me paraissent infaisable. L’inconvénient est que j’ai tendance à réinventer la roue: plutôt qu’adopter une bibliothèque toute faite trouvée sur le net, je vais souvent préférer la programmer moi-même; elle sera ainsi plus flexible et plus adaptée à mes besoins, mais l’écrire va me prendre du temps.

Finalement, j’ai tout de même trouvé un bon argument. Voici un cas typique: on clique à la souris, et il faut sélectionner le point le plus proche. Pour ce faire, un algorithme simple consiste à calculer la distance entre tous les points du diagramme et les coordonnées du clic. Or, utiliser la fonction ci-dessus est lent. Une bien meilleure méthode est de comparer non pas les distances, mais les carrés des distances. On élimine ainsi l’appel à la fonction sqrt(), et on gagne énormément de temps! Mon argument est que si on utilise du code sans vraiment le comprendre, alors on n’en connait pas non plus les limites, et on ne peut pas l’adapter à ses besoins.

Quelques nouvelles

Voilà fort longtemps que je n’ai rien écrit sur ce blog. Ces derniers mois en fait furent très occupés.

Tout d’abord, je donne dorénavant des formations au développement sous iOS pour le compte de la société Mediabox. Tout se passe bien: les gens de Mediabox sont sympas, les locaux sont nickels et en plus, on mange bien à midi au bistrot du coin. Les premiers stagiaires que j’ai eu étaient motivés et nous sommes allés quasiment au bout du programme de la formation, finalement très chargée (surtout après le repas au bistrot, si on a pris une entrée). Si ça vous intéresse, la prochaine session est déjà programmée du 24 au 28 octobre.

J’ai travaillé sur la version iPad de PortraiMatic; non le projet n’est pas abandonné, en fait, le logiciel tourne déjà plutôt correctement, il me reste un travail d’optimisation (mémoire et vitesse) et de finition avant de le proposer à mes bêtas testeurs en vacances.

En parlant de vacances, les miennes sont terminées. Peupeul a eu l’idée de lâcher son nouveau félin “Lion” (Mac OS 10.7) pile au milieu de mon séjour, si bien que je le découvre seulement aujourd’hui. Et évidemment, PortraiMatic est incompatible, alors que la transition de 10.5 à 10.6 s’était faite sans douleur. (D’accord, j’admets que c’est de ma faute, parce que je n’ai pas pris le temps de tester les bêtas de Lion, mais quand même, je me demande ce qu’ils ont changé pour que ça foire autant).

Pour finir, je re-découvre Twitter. Vous pouvez dorénavant suivre mes aventures sous @renaudpradenc.