zaratan@next

Ce que je ne sais pas (2018)

En cette fin d'année 2018, je suis tombé sur un article intéressant de Dan Abramov (Je cite: "Working on @reactjs. Co-author of Redux and Create React App."). À l'intérieur, il y précise ce qu'il ne savait pas faire en informatique. L'objectif est de montrer qu'on peut ne pas savoir des choses sans pour autant remettre en cause son expertise. Vers la fin, il propose de se prêter au jeu si l'on ne se sent pas "vulnérable".

J'ai trouvé l'article vraiment intéressant et j'aimerais me livrer au même genre d'exercice. Vous trouverez donc une liste non exhaustive de ce que je ne sais pas ou très peu.

  • C/ASM: Je serais bien incapable d'écrire du C propre et efficace et je ne parle même pas d'assembleur. Je connais et comprends les notions, mais de là à les mettre en pratique…
  • Hardware: Je n'y connais rien du tout. Je sais que plus de RAM et de CPU c'est mieux, mais c'est à peu près l'extension de mon savoir.
  • Électronique: Je sais a quoi sert une résistance et que le courant passe dans les fils. J'ai utilisé des transistors, condensateurs et bobines dans mes cours il y a plus de dix ans, mais je n'en ai presque aucun souvenir.
  • Bash: Je suis incapable d'écrire le moindre script bash de plus de 10 lignes sans passer des heures dans la doc. Je dois regarder la doc de ln ou de if a chaque fois que je les utilise. xargs c'est de la magie noire pour moi.
  • Rails views: Je dois Google la doc de form_for à chaque fois que je veux l'utiliser. Je serais capable d'écrire un site en erb/haml mais je serais lent et inefficace.
  • Asset pipeline: Je comprends l'idée de comment ça marche. Je ne l'ai jamais tune pour de la production. Pareil pour des choses comme turbolinks, je sais que ça permet d'accélérer le changement de page, mais c'est tout.
  • jQuery: Je pleure a chaque fois que je dois l'utiliser.
  • Complexité: Je pense que je serais capable de calculer des complexités simples mais il faudrait que je réouvre des cours pour n'importe quoi de plus complexe qu'un for dans un for. J'ai de bonnes notions intuitives mais je ne l'utilise jamais professionnellement.
  • Algorithmes: Si j'ai l'explication sous les yeux je serais capable de l'implémenter mais ne me demandez pas comment marche un tri à bulle (ou n'importe quelle autre forme de tri).
  • Design: J'ai quelques notion de design et de ce qui est beau ou pas dans un site. Mais, le design de mes sites est souvent très "épuré" (comprendre moins de 500 lignes de CSS).
  • CSS: Je n'ai aucune idée de comment faire une animation, je suis misérable à chaque fois que je dois centrer quelque chose dans une page. Je connais flexbox, mais je dois regarder la doc à chaque fois et c'est énormément d'essais et d'erreurs. Je n'ai aucune idée de comment fonctionne CSS Grid.
  • Bootstrap: Mon niveau de boostrap est "je sais qu'on utilise des classes pour faire des choses et que ça donne des designs pré-construits".
  • GraphQL: Je sais comment ça marche, mais j'ai jamais vraiment eu à le mettre en place ni à l'utiliser. Je ne suis pas du tout à l'aise avec les notions d'optimisation qu'il y a derrière.
  • AWS: J'ai très rarement eu besoin de le configurer moi même et à chaque fois c'est des heures de souffrance. Leur UI/UX me fait pleurer du sang à chaque fois.
  • Applications non-web: Je n'ai aucune idée de comment on code et architecture du graphisme dans une application desktop (qui ne serait pas Electron) ou un jeu. Je pense qu'apprendre Unity serait une bonne idée mais c'est le maximum de mon savoir ici.
  • Python/Java/C#/C++: Non. Je serais un pur débutant dans tous ces langages (et ce même si j'ai déjà pris un contrat ou travaillé un an avec). Je sais que c'est de l'objet donc je ne serais pas trop perdu je pense.
  • La programmation fonctionnelle: Je comprends l'idée, je crois. Je ne sais pas vraiment en quoi c'est mieux ou moins bien qu'un langage Objet ou Impératif.
  • CORS: Je découvre à chaque fois de nouvelles règles et je passe des heures sur Google pour comprendre mes erreurs.
  • Hacking: J'utilise nmap pour savoir quels sont les ports ouverts de mes propres machines.
  • Elixir: Je pense que ça permet de faire le même genre de choses que Ruby mais plus rapide. Je crois que l'équivalent de Rails s'appelle Phoenix.
  • Go: C'est comme Rust je pense; mais différent.
  • Rust: C'est comme C je pense; mais différent. J'ai un peu plus d'expertise ici, mais écrire un simple script me prend des heures.
  • Node: J'en ai fait un peu, mais je serais très inefficace et probablement que mon architecture de fichiers ferait hurler n'importe quel développeur habitué.
  • SEO: Je sais lire les recommandations de lighthouse et je crois qu'un site plus rapide a un meilleur SEO.

Voilà, j'espère que ça vous permettra de moins vous dire que vous ne savez rien faire. Ou encore que vous devriez savoir tous ces trucs pour devenir un "vrai" dev. De plus, dites vous la plupart des technos que je connais ou que j'utilise aujourd'hui, je les ai apprises pendant mes heures de travail. Et mon employeur m'a embauché sachant que je n'étais pas formé.