Choses que je ne sais pas en 2018

Bonjour, Habr! Je vous présente la traduction de l'article "Choses que je ne sais pas à partir de 2018" de Dan Abramov .


Les gens pensent généralement que j'en sais beaucoup, mais ce n'est pas le cas en réalité. Ce n'est pas si mal et je ne me plains pas du tout. (Une petite partie des gens souffre souvent de croyances préconçues, malgré le fait qu'ils méritent plus, ce qui est terrible).


Dans cet article, je montrerai une liste incomplète de sujets de programmation que les gens supposent à tort que je connais. Je ne dis pas que vous n'avez pas besoin de les étudier ou je ne sais pas d'autres choses utiles. Mais comme je ne me suis pas mis dans une position vulnérable, je peux être honnête à ce sujet.


Pourquoi est-ce que je pense que c'est important


Premièrement, il existe souvent une attente irréaliste qu'un ingénieur expérimenté connaisse toutes les technologies de son domaine. Avez-vous vu la "carte d'apprentissage", qui se compose de centaines de bibliothèques et d'outils? C'est utile, mais effrayant.


De plus, peu importe votre expérience, vous pouvez toujours vous retrouver entre un sens des capacités, une insuffisance («syndrome d'imposteur») et une confiance en soi («effet Dunning - effet Krueger»). Cela dépend de votre environnement, de votre travail, de votre personnalité, de votre collègue, de votre état mental, de l'heure de la journée, etc.


Les développeurs expérimentés parlent parfois de leur insécurité pour égayer les débutants. Mais il y a une énorme différence entre un chirurgien expérimenté qui est toujours nerveux et un étudiant qui tient un scalpel pour la première fois!


Entendre que «nous sommes tous des développeurs débutants» peut être décourageant et ressembler à une conversation vide avec des étudiants confrontés à un réel manque de connaissances. Confessions de pratiquants bienveillants comme moi qui ne peuvent pas surmonter cela.


Cependant, même les ingénieurs expérimentés ont de nombreuses lacunes dans les connaissances. Ce message concerne le mien, et j'exhorte ceux qui peuvent se permettre une telle faiblesse à partager les leurs. Mais ne négligeons pas notre expérience à ce stade.


Nous sommes en mesure de reconnaître nos lacunes dans les connaissances, nous pouvons nous sentir ou non comme des imposteurs, et pourtant nous avons une expérience très précieuse pour dire que des années de dur labeur nécessitent du développement.


Avec ça je ne suis pas responsable, voici juste quelques petites choses que je ne connais pas:


  • Commandes Unix et Bash Je peux faire des ls et des cd , mais aussi espionner tout le reste. J'ai compris le concept de tuyauterie, mais je ne l'ai utilisé que dans des cas simples. Je ne sais pas comment utiliser xargs pour créer des chaînes complexes ou comment composer et rediriger divers flux de sortie. Je n'ai jamais étudié Bash correctement, donc je ne peux écrire que des scripts shell très simples (et souvent buggés).
  • Langues de bas niveau. Je comprends que Assembly vous permet de stocker des choses en mémoire et de parcourir le code, mais c'est tout. J'ai écrit plusieurs lignes en C et je comprends ce qu'est un pointeur, mais je ne sais pas comment utiliser malloc ou d'autres méthodes de gestion manuelle de la mémoire. Jamais joué avec Rust.
  • Pile réseau. Je sais que les ordinateurs ont des adresses IP, et DNS est la façon dont nous travaillons avec les noms d'hôtes. Je sais qu'il existe des protocoles de bas niveau tels que TCP / IP pour l'échange de paquets qui (éventuellement?) Garantissent l'intégrité. C'est tout - je ne comprends pas les détails.
  • Conteneurs Je ne sais pas comment utiliser Docker ou Kubernetes. (Sont-ils liés?) J'ai une vague idée qu'ils me permettent de déployer une machine virtuelle distincte. Cela semble cool, mais je ne l'ai pas essayé.
  • Sans serveur. Semble également cool. Je ne l'ai jamais essayé. Je n'ai pas une idée claire de la façon dont ce modèle modifie la programmation backend (s'il le fait du tout).
  • Microservices Si je comprends bien, cela signifie simplement que "de nombreux points de terminaison API communiquent entre eux". Je ne sais pas quels sont les avantages ou les inconvénients pratiques de cette approche, car je n'y ai pas travaillé.
  • Python C'est toujours mauvais pour moi de m'en souvenir - je travaille avec Python depuis plusieurs années, et je n'ai jamais pris la peine de l'apprendre. Il y a beaucoup de choses, comme le comportement d'importation, qui pour moi sont une forêt sombre.
  • Node JS. Je comprends comment démarrer Node, utilisé certaines API, par exemple fs, pour créer des outils, et je peux configurer Express. Mais je n'ai jamais communiqué via Node avec une base de données et je ne sais pas comment y écrire un backend. Je ne connais pas non plus les frameworks React tels que Next, un autre "bonjour le monde".
  • Plateforme native. J'ai essayé d'apprendre Objective-C à un moment donné, mais cela ne m'a pas aidé. Je n'ai pas non plus enseigné rapidement. Même chose avec Java. (J'aurais probablement pu les maîtriser depuis que j'ai travaillé avec C #.)
  • Des algorithmes Le maximum que vous obtiendrez de moi est le tri à bulles et, au mieux, le tri rapide au mieux. Je peux probablement effectuer des tâches de traversée de graphe simples si elles sont liées à un problème pratique spécifique. Je comprends la notation O (n), mais ma compréhension n'est pas beaucoup plus profonde que «ne mettez pas de boucles en boucles».
  • Langages fonctionnels. Si vous ne comptez pas JavaScript, je ne parle aucun langage traditionnellement fonctionnel. (Je ne suis libre qu'en C # et JavaScript - et déjà oublié C #.) Je peux à peine lire du code inspiré de Lisp (comme Clojure), inspiré de Haskell (comme Elm) ou inspiré de ML (comme OCaml).
  • Terminologie fonctionnelle. Cartographier et réduire Je sais combien il faut. Je ne connais pas les monoides, les foncteurs, etc ... Je sais ce qu’est une monade, mais peut-être que c’est juste une illusion.
  • CSS moderne. Je ne connais ni Flexbox ni Grid. Les flotteurs sont mon tout.
  • Méthodologies CSS. J'ai utilisé BEM (ce qui signifie en tant que partie de CSS, pas le BEM d'origine), mais c'est tout ce que je sais. Je n'ai pas essayé OOCSS ou d'autres méthodologies.
  • SCSS / Sass. Je n'ai jamais commencé à les étudier.
  • CORS. J'ai peur de ces erreurs! Je sais que je dois ajuster les en-têtes afin de les corriger, mais dans le passé, j'ai passé beaucoup de temps à ce sujet.
  • HTTPS / SSL. Ne l'installez jamais. Je ne sais pas comment cela fonctionne, sauf pour l’idée de clés privées et publiques.
  • GraphQL. Je peux lire la requête, mais je ne sais vraiment pas comment exprimer les choses avec des nœuds et des bords, quand utiliser des fragments et comment la pagination fonctionne là-bas.
  • Douilles À ma connaissance, ils permettent aux ordinateurs de communiquer entre eux en dehors du modèle de demande / réponse, mais c'est tout ce que je sais.
  • Streams. À part Rx Observables, je n'ai pas travaillé avec des threads aussi proches. J'ai utilisé les anciens threads Node une ou deux fois, mais j'ai toujours eu une erreur de traitement.
  • Electron Je ne l'ai jamais essayé.
  • TypeScript Je comprends le concept des types et je peux lire les annotations, mais je ne l'ai jamais écrit. J'ai essayé plusieurs fois, mais j'ai rencontré des difficultés.
  • Déploiement et devops. Je peux envoyer plusieurs fichiers via FTP ou tuer certains processus, mais c'est la limite de mes compétences en devops.
  • Graphisme Que ce soit du canevas, du SVG, du WebGL ou des graphiques de bas niveau, je ne suis pas intelligent. J'ai compris l'idée générale, mais je n'ai pas besoin d'apprendre des choses simples.

Bien sûr, ce n'est pas une liste complète. Il y a beaucoup de choses que je ne sais pas


Cela peut sembler étrange à discuter. Cela ne vaut même pas la peine d'être écrit. Suis-je en train de montrer mon ignorance? Ma conclusion à ce poste est la suivante:


  • Même vos développeurs préférés peuvent ne pas savoir beaucoup de choses que vous connaissez.
  • Quel que soit votre niveau de connaissance, votre confiance peut être très différente.
  • Les développeurs expérimentés sont très compétents, malgré les lacunes dans les connaissances.

Je connais mes lacunes en matière de connaissances (au moins certaines d'entre elles). Je peux les remplir plus tard si je m'intéresse ou si j'en ai besoin pour le projet.


Cela ne diminue pas mes connaissances et mon expérience. Il y a beaucoup de choses que je peux bien faire. Par exemple, pour étudier les technologies quand j'en ai besoin.

Source: https://habr.com/ru/post/fr446088/


All Articles