État des lieux de mes connaissances (2019)

J’aime énormément parler de programmation avec les gens lors des conférences, sur Twitter, sur Instagram, par e-mail, et bien-sûr, tout récemment, sur le forum de MindsersIT. J’apprécie tout particulièrement lorsque les gens (des développeurs généralement) viennent partager leurs avis et réflexions suite à un article que j’ai écrit ici. J’ai fini par remarquer que, souvent, ils pensent que je maîtrise tout en programmation ; comme s’ils oubliaient que personne ne peut tout savoir.

Cet article fait suite à celui de Dan Abramov sur son blog personnel "Overreacted". Pour ceux qui ne savent pas qui est cet homme, il s’agit du développeur principal de la library React chez Facebook. Il est arrivé au même constat que moi et a écrit un article où il incite les autres développeurs à faire de même. Voici donc le mien.

Still, even experienced engineers have many knowledge gaps. This post is about mine, and I encourage those who can afford similar vulnerability to share their own.

Puisqu’on est dans l’honnêteté et la transparence, j’avais prévu de publier cet article en remplacement de mon habituel (et ennuyeux) article listant les meilleurs articles de l’année précédente. Bien sûr, la flemme est passée par là et nous voilà à la mi-année. Du coup, je ferais un état des lieux de mes connaissances à la date d’écriture de l’article (juin 2019). Ce n’est pas si grave, arrêtez.


Ce que je ne sais pas

Commençons par les choses qui fâchent : ce que je ne sais pas. "Qui fâchent" parce que j’aimerais beaucoup avoir des connaissances sur les technologies listées ci-dessous.

  • Electron : j’ai été très intéressé par le projet dès sa sortie, j’ai même tenté quelques Proof of Concept, mais je ne suis jamais allé plus loin. J’ai une idée globale de ce qu’il est possible de faire avec.
  • Méthodologies CSS : je connais CSS, je l’utilise tous les jours et je suis content de ça. Par contre, je dois avouer que dans mon parcours d’apprentissage, j’ai volontairement écarté les méthodes telles que BEM ou autre. Je vois leur utilité, mais je ne saurais pas les utiliser correctement.
  • WebGL : Je n’ai jamais travaillé avec WebGL. J’ai vu de beaux snippets sur CodePen et c’est à peu près tout pour ce que j’en sais.
  • GraphQL : Cette technologie me fait de l’œil depuis un moment, mais faute de temps j’ai préféré apprendre RESTfull car il est beaucoup plus utilisé. À mon compteur, j’ai pour l’instant un seul site développé en utilisant GraphQL. Cette année promis je m’y mets vraiment.
  • Langages fonctionnels : Celui-ci est dur à écrire parce que j’aimerais vraiment en savoir plus. Le sujet m’intéresse, j’ai fait des recherches, j’ai joué un peu avec haskell, j’ai écrit ici même sur ce que le JavaScript à de fonctionnel, mais ça s’arrête là. Je ne maitrise pas les langages purement fonctionnels.
  • Développement Android : j’ai appris le développement Android lorsque j’allais encore à l’école. Une éternité dans le monde du dev. J’ai écrit quelques bugs fixes rapides pour des apps Android lorsque j’étais en SSII/ESN. J’ai clairement perdu presque tout ce que je connaissais et les connaissances qu’il me reste sont sûrement obsolètes aujourd’hui.
  • Script shell : J’ai écrit une multitude de scripts depuis que je code  ! Malheureusement je dois admettre que je ne maitrise pas ce langage puissant. Je me rends compte que j’utilise toujours les mêmes structures du langage, je n’ai donc pas une vision claire de ce qu’est capable de faire les scripts shell (sans parler des différences entre interpréteur).
  • Severless : De toutes les technologies listées ici, c’est peut-être celle que je maitrise le moins. Je comprends que le but est de faire disparaitre la gestion du serveur de l’expérience du développeur, mais pour moi ça reste quand même bien magique pour l’instant.
  • Python : C’est un langage qui m’a l’air intéressant. J’ai codé quelques petits programmes en python (par exemple deux deamons UNIX qui discutent en serial avec un Arduino depuis un Raspberry Pi). Par contre, mes connaissances s’arrêtent là. Je n’ai pas le sentiment de maîtriser quoique ce soit dans ce langage. Un jour peut-être je m’y remettrais.
  • Administration système et réseaux : Vous pensez peut-être que c’est normal parce que je ne suis pas administrateur systèmes et réseaux. Vous avez sans doute raison, mais le fait est que cela me serait bien utile aujourd’hui. Je gère moi-même les serveurs de ce site et ceux d’autres clients, mais cela reste des tâches très basiques.
  • Streams : Là, c’est un grand sujet. Parce que les streams existent depuis toujours, et dans tous les langages (presque). Je n’ai aucune excuse, je n’ai juste jamais pris le temps. J’ai utilisé les streams, je sais pourquoi on s’en sert, dans quels cas ils sont utiles, mais je ne sais pas comment ils fonctionnent sous le capot. Je vais m’y mettre promis.

Ce que je sais

Maintenant que vous savez tout, j’aimerais quand même finir avec quelque chose de positif : ce que je sais. Mon égo en a besoin.

  • JavaScript : Il me restera toujours plein de choses à apprendre. Je pense notamment à la création d’AST, aux streams, etc. Par contre, je crois que j’ai acquis une certaine connaissance et expérience du JavaScript, non négligeable.
  • Frameworks frontend :  J’ai appris et travaillé avec Angular et React pendant plusieurs années. J’ai lu la documentation de Vue. Ces frameworks sont assez similaires par leurs approches et se ressemblent beaucoup. Je ne maîtrise clairement pas TOUS les frameworks frontend mais je pense avoir — grâce à la maitrise que j’ai de ceux que j’utilise quotidiennement — une bonne connaissance globale du paysage.
  • Node.js & Express : J’écris beaucoup plus de code Node.js (framework perso, outils en ligne de commandes, etc) que de code Express (application web) pour tout vous dire. Mais c’est le seul framework JS backend que j’ai appris depuis que je fais du Node.js. Je pense assez bien le connaître. J’ai fait l’exercice de coder un framework Node.js moi-même il s’inspire beaucoup de ce que je sais du frontend, d’Express et du backend en général, je pense que ça m’a été utile  pour mieux comprendre comment fonctionnent les choses under the wood.
  • Accessibilité : Un sujet important. J’en ai pris conscience lorsque j’ai dû refondre le site de la SNCF dédié aux personnes à capacités réduites. Lorsque les développeurs ne font pas l’effort de développer pour elles aussi, ces personnes vivent un vrai enfer sur internet ! Je trouve que trop peu de développeurs sont sensibilisés au sujet et c’est dommage. Au-delà d’une question de connaissance, il s’agit surtout d’inclusion.
  • TypeScript : Ma première approche de TypeScript s’est faite, comme pour beaucoup, grâce à Angular 2. Je l’ai trouvé assez intéressant et puissant pour qu’aujourd’hui beaucoup de mes projets soient basés sur lui.
  • Swift : Je suis développeur iOS et je me rappelle encore le jour où Apple a annoncé la sortie de Swift. Depuis je crois que j’ai eu la chance de ne démarrer que des projets en Swift malgré la réticence des clients. Je pense par contre qu’il me reste des lacunes en développement serveur avec Swift.
  • Software craftmanship : Je suis passionné par ce sujet. Je suis persuadé que le métier de développeurs est une forme d’artisanat et que comme tout artisanat, il est possible de s’améliorer jusqu’à atteindre un certain niveau d’expertise ("maitre artisan"). J’ai énormément lu, écrit et partagé sur le sujet.
  • Clean code & architecture : Pour moi, le bon développeur n’écrit pas du code juste pour qu’il fonctionne, mais il garantit aussi à son client que ce code durera la plus longtemps possible, qu’il sera maintenable, etc. En ça, je pense que le clean code et la clean architecture font partie du mouvement Software Craftmanship. J’y adhère donc totalement.
  • OAuth 2.0 : Ce sujet m’a tenu le pied un moment. C’est un standard / protocole que je trouve compliqué d’un point de vue développeur, mais qui simplifie tellement la vie des utilisateurs ! J’ai appris à implémenter un serveur OAuth 2.0 from scratch et j’ai étudié des solutions spécialisées comme oryd/hydra. C’était horrible, mais je m’en suis sorti. Je pense que maintenant je sais. Le côté "sécurité" rajoute par contre un certain stress que je n’apprécie pas malgré mes connaissances sur le sujet.
  • I18n : L’internationalisation est un sujet qui revient pour quasiment chaque site que je développe. Pourtant, à chaque nouveau projet, je me demande s’il n’y a pas un meilleur outil à utiliser. C’est peut-être le seul sujet qui malgré une quantité d’expérience considérable et grandissante je n’ai pas d’avis/croyance forte. Pour autant j’ai utilisé/expérimenté/vu énormément d’outils différents au fil des projets et je comprends comment ils fonctionnent.

Ces listes ne sont bien sûr pas exhaustives et il me reste encore beaucoup de choses à apprendre. L’informatique et même la programmation sont des sujets si vastes !

Le but de cet article est de montrer au plus grand nombre, mais surtout aux débutants que personne ne sait tout. Nous avons tous des choses à apprendre et à améliorer.

Ne faisons pas l’erreur de penser que ceux qui osent prendre la parole et partager leurs connaissances sur les réseaux sociaux, leur site internet, leur blog, etc. savent mieux que les autres. Encore plus important, ne vous dénigrez pas. Vous êtes en train d’apprendre comme tous les autres développeurs quelque soit leur fonction ou leur niveau d’expertise !