Articles

Comment s’enseigner l’informatique : Le parcours de 100 heures d’un développeur

Je me suis demandé pendant assez longtemps : est-ce que le fait de ne connaître que les bases de l’informatique permet de devenir un meilleur développeur ? Et cela pourrait-il apporter de la valeur à un développeur ?

Si vous vous posez aussi ces questions, et que vous ne voulez pas investir du temps (encore) dans l’apprentissage de l’informatique, voici le récit de mon expérience. Dans cet article, je répondrai aux questions suivantes :

  • Pourquoi apprendre l’informatique ?
  • Quel était mon plan d’étude ?
  • Quelles ressources ai-je utilisées ?
  • Ai-je appris quelque chose d’utile qui peut être transféré dans mon travail quotidien de développeur ?

J’ai commencé par cette fantastique liste de ressources : teach yourself computer science. Il s’agit essentiellement d’un guide sur la façon d’étudier l’informatique en tant qu’ingénieur logiciel, sans dépenser beaucoup d’argent pour essayer d’entrer au MIT.

Alors, pourquoi apprendre l’informatique par soi-même ?

C’est une question simple mais importante : pourquoi ferions-nous cela en premier lieu ?

Pour chaque projet qui nécessite une bonne dose de motivation, j’essaie d’abord de définir des objectifs appropriés :

  1. Pouvoir apprendre un nouveau langage / une nouvelle technologie plus rapidement en connaissant certains concepts de base que vous pouvez appliquer à chaque langage / technologie.
  2. Améliorer ma compréhension des niveaux d’abstraction inférieurs. Comprendre un peu mieux « comment ça marche sous le capot » pourrait améliorer ma compréhension et donc mon efficacité pour résoudre les bugs ou concevoir des algorithmes.
  3. Améliorer mes capacités de raisonnement logique pour rendre mon code plus logique également.
  4. Je crois que la compréhension des concepts sous-jacents est une clé pour innover dans le domaine du développement.
  5. Comprendre l’histoire de l’industrie : pourquoi sommes-nous là où nous sommes maintenant, que pouvons-nous faire pour améliorer le monde informatique ?

Informatique 101 : le plan d’étude

Je ne suis pas intéressé à essayer de lire tous les livres sur l’informatique. Cela devrait au moins me fournir un certain sens de la compréhension.

C’est pourquoi mon plan d’étude s’est concentré sur la rétention de la mémoire, la compréhension et la construction d’une référence rapide sur ce que j’ai appris, pour pouvoir y revenir facilement.

  1. J’ai étudié environ 2 à 3 heures chaque semaine, en fonction de mes priorités. Je ne voulais pas en faire trop et me sentir épuisé et lassé par l’informatique. La chose la plus importante pour moi était d’étudier régulièrement, quelle que soit la quantité de temps. Cela devait être quelque chose que j’aimais faire.
  2. Lorsque j’étudiais de nouvelles matières, j’en écrivais des résumés sous forme de mindmaps. Cela présente deux avantages : l’écriture aide à se souvenir de ce que j’ai appris et je peux facilement me rappeler de certains concepts clés lorsque j’en ai besoin, en un rien de temps.
  3. Mon temps d’étude est divisé en deux catégories :
    • Nouvel apprentissage (nouveau chapitre d’un livre, regarder un nouveau cours vidéo, faire des exemples et des exercices)
    • Ce que j’appelle le « rappel de la base de connaissances ». C’est principalement faire (plus) d’exercices sur le nouveau matériel que j’ai lu / vu la semaine précédente, lire mes mindmaps, et essayer de se souvenir de ce que j’y ai écrit.
  4. En ce qui concerne les exercices, j’essaie de ne pas passer plus de 30min sur chacun d’eux. Le but est de lutter suffisamment pour se souvenir du concept mais pas trop pour se sentir brûlé. C’est un équilibre délicat.
  5. J’essaie de refaire certains exercices que je n’ai pas pu faire la première fois, des jours (voire des semaines) après les différentes tentatives, pour voir si je ma compréhension s’est améliorée.

J’essaie d’appliquer certains principes d’apprentissage actif en faisant autant d’exercices que possible, et en me posant des questions tout en revoyant mes mindmaps.

Réviser ce que j’ai appris d’une semaine à l’autre est vraiment, vraiment bénéfique pour améliorer la rétention de ma mémoire et ma compréhension.

Ce que j’ai fait jusqu’à présent

motivation pour apprendre les Mathématiques discrètes

Voici ce que j’ai précisément fait durant ces (presque) 100 heures d’études en informatique, dans l’ordre chronologique.

I. Programmation (32 heures 55m)

graphique pomodoro fait en temps supplémentaire partie programmation
Pomodoro (25 min) fait par semaine pour la partie programmation. partie programmation

L’article intitulé « apprenez vous-même l’informatique » précisait que je devais suivre « à peu près » l’ordre d’étude qu’ils proposent, en commençant par le domaine de la programmation.

Ressource principale : Structure and Interpretation of Computer Programs (SICP)

Ce livre est considéré par beaucoup comme la bible que tout développeur devrait lire. Il est gratuit et vous pouvez trouver les meilleures versions epub et PDF ici.

Vous pouvez trouver les solutions des exercices ici.

J’ai réussi à faire presque tous les exercices jusqu’à 1.2.5 Greatest Common Divisors.

Ressource complémentaire : Vidéos Berkeley

Les vidéos sont disponibles ici. Les notes du cours sont ici. Si vous recherchez des exemples d’examens de Berkeley, c’est ici.

Ces vidéos sont un très bon complément au livre : les concepts sont expliqués sans vous demander trop de mathématiques, contrairement au livre. Si vous voulez étudier le SICP mais que votre bagage mathématique n’est pas assez solide, suivez simplement ce cours. Mes notes et exercices sont ici.

Ce que j’ai appris de SICP jusqu’à présent

  • Le début de ce livre est très intéressant pour vraiment comprendre les racines de la programmation fonctionnelle et des récursions.
  • Il définit beaucoup de termes que les programmeurs utilisent tous les jours, de manière très précise. Parfait pour être encore plus précis lors des discussions techniques.
  • Le livre a poussé mes capacités d’analyse et de résolution de problèmes avec ses exercices.

Qu’est-ce que je peux utiliser dans la vraie vie ?

Toute la discussion sur la récursion dans le livre m’a aidé de manière assez significative à les écrire facilement. C’est un sujet avec lequel j’ai toujours eu un peu de mal. Maintenant, c’est un jeu d’enfant de parcourir n’importe quel problème que je veux résoudre avec la récursion.

Quelles difficultés ai-je rencontrées ?

Ce livre n’est pas destiné aux personnes qui détestent les mathématiques. Il a été écrit pour les étudiants du MIT qui ont déjà pas mal de connaissances mathématiques. Sans ces connaissances préalables, les exercices peuvent être assez difficiles et frustrants à certains moments.

C’était la cause d’un autre problème : je passais trop de temps sur les exercices. Je pouvais résoudre la plupart d’entre eux, mais cela me prenait des heures dans certains cas.

J’ai décidé à partir de là que je ne passerais pas plus de 30 minutes sur les exercices pour maintenir la frustration à un niveau bas sans écarter l’énorme avantage de les faire.

II. Mathématiques discrètes (50 heures)

graphique pomodoro fait en temps supplémentaire partie programmation
Pomodoro (25min) fait par semaine pour les Mathématiques discrètes

Plus je lisais SICP, plus je trouvais les exercices difficiles, d’autant plus qu’il traitait de certains concepts mathématiques que je ne connaissais pas. J’ai donc décidé de passer à autre chose et de commencer à étudier le Mathematics sujet.

Ressource principale : Les mathématiques discrètes et leurs applications

Teach yourself computer science vous conseille de lire les notes de cours de László Lovász, disponibles gratuitement ici comme document ps. Je l’ai converti en PDF ici pour ceux qui ne savent pas ce qu’est un document ps. Je ne le savais pas non plus.

Cependant, j’ai choisi une autre ressource principale d’étude, apparemment plus adaptée aux débutants : Discrete Mathematics and its Application de Kenneth H. Rosen. C’est un livre assez gros, assez peu coûteux dans ses premières éditions.

En 50 heures, j’ai pu terminer le premier chapitre (logique propositionnelle) et réaliser 54 exercices.

Ressource complémentaire : MIT 6.042J mathematics for computer science, automne 2010

Ces vidéos du MIT sont des cours plus avancés sur les mathématiques discrètes. Là encore, elles supposent que vous ayez des connaissances assez poussées en mathématiques. Néanmoins, elles sont très intéressantes même si j’ai eu des difficultés à les suivre.

Dans le pire des cas, cela vous donnera au moins un bon aperçu de ce que sont les Mathématiques Discrètes.

Un professeur (Tom Leighton) a de meilleures compétences pédagogiques que les autres. Cependant, ils ont tous une connaissance très approfondie de leurs sujets respectifs.

Ce que j’ai appris jusqu’à présent

  • Le livre m’a appris les bases de la logique, une très bonne compétence à avoir en tant que développeur. Après tout, notre travail est basé sur une logique appropriée.
  • La logique propositionnelle avec les quantificateurs et la règle d’inférence. En gros, c’est la façon d’écrire des énoncés logiques, de vérifier que les énoncés logiques ont un sens et de prouver leurs valeurs de vérité.
  • Bases de la théorie des ensembles et des graphes, grâce aux vidéos. C’est très intéressant et c’est assez utile pour beaucoup de choses : les machines à états, les réseaux…

Qu’est-ce que je peux utiliser dans la vraie vie ?

  • Les tables de vérité peuvent être très utiles pour trier des énoncés conditionnels complexes ou pour les refactoriser.
  • Récemment, j’ai pu appliquer les lois de DeMorgan pour améliorer la lisibilité de certaines déclarations conditionnelles.
  • Exprimer des spécifications confuses et courtes avec des prédicats, des conjonctions et des disjonctions (le langage de la logique propositionnelle) peut montrer les contradictions et les détails manquants. Il peut résumer très succinctement des spécifications complexes avec précision. Il peut être un bon pont entre les spécifications et le code lui-même.

Quelles difficultés ai-je rencontrées ?

  • Comprendre comment écrire une preuve mathématique est difficile, surtout quand personne ne peut vous aider ou corriger votre preuve.
  • Il me manquait encore quelques bases en mathématiques, surtout nécessaires pour les vidéos du MIT.

III. Retour aux bases des mathématiques (11 heures 15)

Pomodoro graphique fait en temps supplémentaire partie programmation
Pomodoro (25 min). fait par semaine pour les bases des Mathématiques

Après avoir eu d’autres problèmes (mineurs) avec mes connaissances en Mathématiques Discrètes, j’ai décidé de revenir aux bases.

Une autre raison importante qui a guidé mon choix : j’ai vraiment aimé faire un peu de Mathématiques. Sans cela, je n’aurais pas continué à étudier l’informatique.

Ne soyez pas confus : les Mathématiques liées à l’informatique sont différentes de celles que vous avez étudiées (et peut-être détestées) à l’école. Je vous conseille d’essayer.

À ce moment-là, j’ai décidé d’alterner entre l’étude des Mathématiques discrètes et les bases des Mathématiques.

Ressource principale : Comment apprendre rapidement l’arithmétique de base

Cette vidéo de 4 heures est vraiment bien pour rafraîchir beaucoup de choses, des sommes et du produit en passant par les pourcentages, les exposants, les logarithmes… Elle couvre beaucoup de choses très rapidement avec beaucoup d’exercices.

Les conseils donnés sont très bons aussi pour comprendre et résoudre rapidement les problèmes de base.

Vous pouvez voir sur youtube un aperçu d’une heure de la vidéo. Si vous l’aimez, vous pouvez l’acheter sur Vimeo.

Ce que j’ai appris jusqu’à présent

  • Mes compétences en calcul mental se sont très bien améliorées. Si vous avez des difficultés à calculer rapidement des pourcentages ou même à faire des multiplications simples sans calculatrice, ce cours vous aidera beaucoup.
  • Bases pour manipuler les fractions, les exposants, les racines carrées, les logarithmes et ainsi de suite.

Que puis-je utiliser dans la vie réelle ?

  • Etre capable de calculer mentalement est très utile pour beaucoup de choses dans la vie réelle. Calculer rapidement des promotions, calculer approximativement le prix d’un panier d’achat complet…
  • Je peux appliquer toutes ces connaissances en étudiant l’informatique.

Quelles difficultés ai-je rencontrées ?

Après avoir étudié le SICP et les mathématiques discrètes, c’était très relaxant de finalement tout comprendre avec un peu de travail. Je n’ai pas eu beaucoup de difficultés.

Mes conseils pour les débutants en informatique

base-mathématique-illustration

Si je pouvais revenir au début de cette aventure, j’aurais étudié les différentes matières dans cet ordre :

  • I. Mathématiques de base
  • II. Mathématiques discrètes
  • III. SICP

J’aurais étudié les bases et les mathématiques discrètes en parallèle, puis je serais passé au SICP, en essayant d’obtenir les connaissances en mathématiques qui me manquaient encore en cours de route.

Je vais continuer à apprendre les bases des Mathématiques et des Mathématiques Discrètes pendant au moins 150 heures :

  • Le peu que j’en sais m’a déjà pas mal aidé dans ma vie quotidienne de développeur.
  • J’ai l’impression (et j’ai lu) que c’est une base pour tous les autres domaines de l’informatique.
  • J’aime l’étudier ! Encore une fois, c’est une composante essentielle pour rester motivé.

En bref : une très bonne expérience, sous-jacente à un grand nombre de mes faiblesses mais aussi m’enseignant des fondamentaux solides qui me manquaient.

N’oubliez pas cependant : si vous vous attendez à devenir un programmeur super magicien en étudiant l’informatique, vous risquez d’être déçu. L’informatique est difficile à étudier. Elle a de forts côtés théoriques et même si j’en ai déjà trouvé quelques utilisations dans mon travail quotidien, ce n’est pas du tout époustouflant.

Passer par ce parcours demande du travail, de la patience et du dévouement. Avoir des objectifs clairs, un plan d’étude concret et apprécier le processus sont obligatoires.

Cet article a été écrit par Matthieu Cneude et a été initialement publié sur The Valuable Dev, un blog axé sur les concepts importants et intemporels du développement logiciel. Vous pouvez lire l’article ici.

Publié le 1 octobre 2020 – 12:46 UTC

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *