Comment s'auto-former à haut niveau ?

a marqué ce sujet comme résolu.

Bonjour à tous !

Je crée ce topic aujourd’hui car j’ai un léger problème : n’ayant pas fait d’études en informatique, je n’arrive plus à progresser ni à situer mon réel niveau dans ce domaine…

J’ai commencé à apprendre la programmation assez jeune en autodidacte, vers 14 ans (j’en ai 23 aujourd’hui). Bien sûr, je n’ai pas toujours été très régulier dans mon apprentissage, mais globalement, je pense avoir un niveau plutôt correct.

Le problème étant que j’ai l’impression de stagner, de ne plus pouvoir avancer lorsqu’il s’agit de comprendre les « fondamentaux de l’informatique ». J’ai beau apprendre de nouveaux langages, découvrir de nouvelles technos ou pratiquer continuellement, il y a un gouffre qui m’obstrue le chemin.

Par exemple, utiliser Electron avec Node.js pour développer des applications multi-plateformes ne me pose aucun problème, mais dès qu’il s’agit de comprendre comment ce framework fonctionne réellement (à bas niveau j’entends) pour pouvoir le modifier ou mieux, en créer un similaire (et plus léger !), je suis bloqué et je ne sais pas comment m’y prendre ni par où commencer… Pourtant, le dépôt GitHub est disponible, et je sais grosso modo que ça utilise le moteur V8 en interne, mais je reste devant les sources comme un demeuré ne sachant pas où regarder…

D’où ma question initiale : comment s’améliorer suffisamment en informatique pour être en mesure de comprendre comment tout cela fonctionne ? Qu’est ce qu’il me manque pour progresser (c’est peut-être seulement de la persévérance je ne sais pas trop…) ? Où chercher les bonnes informations ?

Voilà j’espère que vous pourrez m’aider à y voir plus clair :)

Je vous remercie par avance pour vos réponses !

+0 -0

Deux idées qui viennent tout de suite à l’esprit :

  • Avoir des gens à qui poser des questions, et surtout de qui recevoir des retours sur du code qu’on écrit soi-même. Si tu es dans une entreprise ou une université, cherche un "mentor" qui s’y connaît mieux que toi et qui a le temps de t’aider à progresser. Si tu es enfermé tout seul dans une cave toute la journée, tu peux utiliser ce forum (par exemple) pour cet usage au lieu de parler à un vrai humain.

  • Pourquoi se restreindre à l’auto-formation ? Tu peux aussi reprendre des études si tu te sens limité. Tu peux t’inscrire à la fac (pourquoi pas en le prenant sur le compte de congé formation de ton entreprise, si tu es en France), ou en cours du soir (en France, le CNAM propose des enseignements à distance ou en cours du soir), ou bien suivre des MOOCs (mais c’est souvent un peu moins efficace que de voir des vrais gens). Rien de tout ça ne coûte très cher dans les pays civilisés, il faut en profiter.

+1 -0

Allo,

L’informatique a énormément évolué au cours des cinquante dernières années, et ce qui a permis une évolution si rapide est la place qu’a pris la notion d’objet dans cette discipline. Cette notion de génie a permis de créer des "mottons" , blocs structurels réutilisables dans les constructions informatiques subséquentes. Ceci joue un peu le même rôle pour cette discipline que le boulon, la boite d’engrenage, le collier, la vis sans fin, joue en mécanique soit de fournir une composante de base , paramétrable afin de l’intégrer à un assemblage plus complexe et dédié a un usage plus spécifique et ceci sans avoir à réinventer la roue. Évidemment la satisfaction intellectuelle de comprendre l’ensemble des détails d’une application dont on est pourtant l’auteur disparaît, mais en échange il est maintenant possible de faire des produits irréalisable auparavant par un seul homme étant donnée la complexité nécessaire.
Le travail de conception moderne consiste donc beaucoup à connaître et sélectionner les meilleurs modules de conception disponibles pour une application donnée et apprendre à les configurer et interfacer, sans nécessairement toujours devoir investir dans la compréhension de leur fonctionnement interne.
Puisque la connaissance totale et globale de tous les développements informatiques est devenu hors de la portée d’un individu étant donné la largeur et la profondeur actuelle, sans considérer qu’elle est en perpétuelle évolution, il est donc essentiel de se définir des objectifs à l’acquisition des connaissances et d’y associer les priorités adéquates. Bref dresser un plan d’études réaliste pour toi et le réviser au besoin et au fil de ton évolution et de celle des technologies.
Sans apporter de réponses pratiques et comme le disaient les réponses précédentes il y en a profusion aujourd’hui, j’espère que mes considérations t’aideront à ordonner ton profond et merveilleux désir de connaissances.

Salut,

V8… en même temps tu ne choisis vraiment pas la facilité.

Je cherchais un langage de script pour embarquer dans un jeu que je développe en amateur depuis 8 ans. La solution facile c’est lua. J’avais envie d’aller plus moin et j’ai naturellement pensé à JavaScript, et donc le moteur V8. Eh bien même à mon niveau, j’ai pas réussi à builder la version C++ du moteur V8. Comme toi, je suis resté perplexe devant 4 Go de bordel. Tellement que j’ai décidé finalement de créer mon propre langage de programmation…

Désolé, je me suis un peu égaré.

Aujourd’hui, de plus en plus, on se contente de jouer aux lego, sans vraiment chercher à comprendre comment sont faits les lego. Tant que ça s’emboîte plus ou moins, on ne se pose pas trop de question. Ca crée des dérives et il y a des critiques (auxquelles j’ai tendence à adhérer), voir le billet sur le désenchantement du logiciel.

Le truc c’est qu’une brique de lego, c’est pas construit de façon à ce qu’on puisse facilement analyser comment ça a été fabriqué. Tu utilises la brique ou tu ne l’utilises pas, c’est tout. Alors quand on cherche la composition et le pourquoi du comment de la forme d’une brique, bizarrement, d’un coup, la doc devient rare !

A partir de là, me meilleur conseil que je puisse te donner si tu veux vraiment apprendre le pourquoi du comment, c’est:

  1. Tu regardes une brique de lego system, une brique de lego technics, une brique de duplo, un lazy. Tu compares, tu observes… le mot-clé ici, c’est analyser plusieurs solutions connues.
  2. Qu’est-ce qui compose une brique et que tu vois de l’extérieur ? Il y a la face de dessous, la face de dessus avec les picots ou points d’emboîtement, différentes sortes de briques avec des tailles qui sont multiples les unes des autres…. mot-clé pour cette étape: décomposer, décortiquer
  3. Lorsque tu es prêt, tu commandes du plastique liquide et tu essaies de couler tes propres briques. Ici on expérimente par soi-même.

Et en fait on en apprend infiniment plus en essayant de couler ses propres briques, plutôt que de simplement continuer à jouer aux lego.

Au début, tu feras sûrement des tas de plastique informes, mais petit à petit, tu arriveras gentiment à faire des briques qui peuvent s’assembler, de mieux en mieux et de plus en plus solidement. Tu constateras les défauts et les limites de ta propre création et des briques de lego originales; tu comprendras pourquoi elles ont la forme qu’elles ont et ce qui fait qu’elles s’assemblent si bien, et peut-être un jour, qui sait, que les tiennes seront meilleures…

Et ensuite ? le questionnement peut être récursif. Le plastique liquide que tu commandes, en fait, il en existe des centaines de sortes différentes, avec des caractéristiques qui vont influencer la simplicité ou la solidité d’assemblage des briques. Du coup on recommance: on analyse 5 sortes différentes… on mélange les sortes ou en essaie d’en synthétiser une nouvelle… et puis on finit par aller chercher le pétrole soi-même dans les gisements et faire de la physique nucléaire.

Il n’y a pas de limite, à part le temps que tu veux/peux consacrer et la volonté d’apprendre.

Ce qu’il faut garder à l’esprit, c’est qu’il faut se fixer des objectifs progressifs, et ne pas vouloir immédiatement se dire "je veux faire X en mieux". Ton blocage, il vient sûrement de là.

Je ne compte personnellement plus le nombre de projets ou pseudo-projets avortés par découragement parce que j’avais mis la barre trop haut trop vite. Sur 1000 trucs que j’ai un jour commencé, seuls 5 ou 6 ont abouti à des choses suffisament intéressantes pour être diffusées.

Pour revenir à du plus concret, effectivement, entre faire des applications Elektron avec Node.js/JavaScript/HTML/CSS et maîtriser tout ce qu’il y a derrière, il y a un gouffre, et un gros. Electron c’est quoi ? C’est basiquement un navigateur web. IL y a quoi dans un navigateur web ? Le moteur JavaScript, le moteur de rendu, des protocoles et du réseau… mais n’oublions pas qu’un navigateur web, c’est aussi une application qui s’affiche dans une fenêtre avec des menus, des onglets et des boîtes de dialogue…

Du coup un des domaines que tu pourrais partir explorer, puisque tu connais visiblement bien le web, c’est essayer de faire ton propre navigateur. Certaines clémentines l’ont déjà fait puisqu’il y a des sujets dans le forum vos projets. Pour ça tu peux utiliser des bibliothèques graphiques pour faire des applications de bureau natives: QT ou WXWidgets par exemple. Ils proposent des composants qui intègrent un moteur de rendu et un moteur JavaScript tout faits, souvent une variante de Chromium. Au passage tu apprendras un nouveau langage, au choix python, C# ou C++. Mine de rien tu vas changé d’air, ça ne fait pas de mal, et tu auras considérablement élargi tes connaissances informatiques.

Ce n’est qu’une idée parmi d’autres. Si tu fais plutôt des jeux, tu seras peut-être intéressé en premier par les coulisses des différentes API JavaScript mises à disposition (WebGL, WebAudio, etc.). ET ensuite peut-être, si tu veux toujours sortir d’Elektron, par les frameworks pour créer des jeux vidéo, parmi lesquels unity en C# ou pygame en python.

Je ne fais que balancer des idées en vrac, j’espère que ce post t’a aidé.

+5 -0

Hummm, j’ai du mal à comprendre la réponse de @dubser. Pourquoi mettre le paradigme objet sur un piédestal, autant. Ce qui caractérise notre époque, c’est comme le dis @QuentinC, la programmation modulaire, qui existait bien avant la PO. Mais c’est un peu hors-sujet.

Si tu veux sinon, tu peux contribuer à des projets open-source, c’est une très bonne méthode de se confronter à d’autres développeurs (et donc méthodes de travail, style, pensées, …). Ça permet de comprendre les « briques ».

Ensuite, il a de nombreux domaines où on a toujours à apprendre. L’algorithmique, le génie logiciel, la cryptologie, la rétro-ingénieurie, la sécurité logicielle (légale), le réseau, l’IA, la BDD, les SEs, …

L’informatique a encore de très nombreuses sources capables de sacier ta soif de connaissance.

+2 -0

Merci pour tous vos retours !

Je ne m’attendais pas du tout à avoir des réponses d’aussi bonne qualité :waw:

Avoir des gens à qui poser des questions, et surtout de qui recevoir des retours sur du code qu’on écrit soi-même. Si tu es dans une entreprise ou une université, cherche un "mentor" qui s’y connaît mieux que toi et qui a le temps de t’aider à progresser. Si tu es enfermé tout seul dans une cave toute la journée, tu peux utiliser ce forum (par exemple) pour cet usage au lieu de parler à un vrai humain.

gasche

@gasche J’utiliserai dorénavant ce forum avec plaisir !

Pourquoi se restreindre à l’auto-formation ? Tu peux aussi reprendre des études si tu te sens limité. Tu peux t’inscrire à la fac (pourquoi pas en le prenant sur le compte de congé formation de ton entreprise, si tu es en France), ou en cours du soir (en France, le CNAM propose des enseignements à distance ou en cours du soir), ou bien suivre des MOOCs (mais c’est souvent un peu moins efficace que de voir des vrais gens). Rien de tout ça ne coûte très cher dans les pays civilisés, il faut en profiter.

gasche

@gasche Toutes les personnes avec qui j’ai parlé de la fac (en informatique du moins) ne m’en ont pas dit beaucoup de bien, alors je suis assez perplexe là-dessus… Le CNAM, pourquoi pas ! Je vais me renseigner là-dessus, merci :)

Hummm, j’ai du mal à comprendre la réponse de @dubser. Pourquoi mettre le paradigme objet sur un piédestal, autant. Ce qui caractérise notre époque, c’est comme le dis @QuentinC, la programmation modulaire, qui existait bien avant la PO. Mais c’est un peu hors-sujet.

ache

@ache Je pense qu’il voulait parler dans le sens large du paradigme objet, notamment dans les langages où « tout est objet », là où les deux concepts sont intimement liés. En Python ou en JavaScript par exemple, lorsqu’on intègre une bibliothèque, on importe seulement les objets qu’on souhaite utiliser.

L’informatique a énormément évolué au cours des cinquante dernières années, et ce qui a permis une évolution si rapide est la place qu’a pris la notion d’objet dans cette discipline. Cette notion de génie a permis de créer des "mottons" , blocs structurels réutilisables dans les constructions informatiques subséquentes. Ceci joue un peu le même rôle pour cette discipline que le boulon, la boite d’engrenage, le collier, la vis sans fin, joue en mécanique soit de fournir une composante de base , paramétrable afin de l’intégrer à un assemblage plus complexe et dédié a un usage plus spécifique et ceci sans avoir à réinventer la roue.

dubser

@ache En tout cas c’est comme ça que je l’ai compris : assembler des composants entre eux afin de former des applications complexes, sans forcément comprendre le dessous des cartes.

Le travail de conception moderne consiste donc beaucoup à connaître et sélectionner les meilleurs modules de conception disponibles pour une application donnée et apprendre à les configurer et interfacer, sans nécessairement toujours devoir investir dans la compréhension de leur fonctionnement interne.

dubser

@ache C’est exactement ça la modularité dont parle @QuentinC

Si tu veux sinon, tu peux contribuer à des projets open-source, c’est une très bonne méthode de se confronter à d’autres développeurs (et donc méthodes de travail, style, pensées, …). Ça permet de comprendre les « briques ». Ensuite, il a de nombreux domaines où on a toujours à apprendre. L’algorithmique, le génie logiciel, la cryptologie, la rétro-ingénieurie, la sécurité logicielle (légale), le réseau, l’IA, la BDD, les SEs, …

ache

@ache C’est une excellente idée ! Je voir si je trouve des projets open-source qui pourraient m’intéresser.

En tout cas merci pour ton aide également :)

[…] il est donc essentiel de se définir des objectifs à l’acquisition des connaissances et d’y associer les priorités adéquates. Bref dresser un plan d’études réaliste pour toi et le réviser au besoin et au fil de ton évolution et de celle des technologies.
Sans apporter de réponses pratiques et comme le disaient les réponses précédentes il y en a profusion aujourd’hui, j’espère que mes considérations t’aideront à ordonner ton profond et merveilleux désir de connaissances.

dubser

@dubser Merci beaucoup pour ta réponse (très agréable à lire en passant), je prends note ! C’est vrai que ça reste assez théorique, et j’ai encore un peu de mal à comprendre comment m’y prendre réellement, mais l’idée initiale y est. Je vais avancer progressivement en me fixant des objectifs atteignables, et je verrai bien où ça m’emmènera ^^

Je cherchais un langage de script pour embarquer dans un jeu que je développe en amateur depuis 8 ans. La solution facile c’est lua. J’avais envie d’aller plus loin et j’ai naturellement pensé à JavaScript, et donc le moteur V8. Eh bien même à mon niveau, j’ai pas réussi à builder la version C++ du moteur V8. Comme toi, je suis resté perplexe devant 4 Go de bordel. Tellement que j’ai décidé finalement de créer mon propre langage de programmation…

Désolé, je me suis un peu égaré.

QuentinC

@QuentinC Non pas du tout c’est exactement mon ressenti ! Parfois je trouve qu’il est presque plus efficace de refaire un système plutôt que d’essayer de le façonner à ma façon, pour qu’il corresponde à mes attentes… Le problème c’est qu’on dérive vite de notre objectif initial.

Aujourd’hui, de plus en plus, on se contente de jouer aux lego, sans vraiment chercher à comprendre comment sont faits les lego. […] Le truc c’est qu’une brique de lego, c’est pas construit de façon à ce qu’on puisse facilement analyser comment ça a été fabriqué. Tu utilises la brique ou tu ne l’utilises pas, c’est tout. Alors quand on cherche la composition et le pourquoi du comment de la forme d’une brique, bizarrement, d’un coup, la doc devient rare !

QuentinC

@QuentinC Tu as mis exactement le doigt sur ma problématique actuelle…

A partir de là, le meilleur conseil que je puisse te donner si tu veux vraiment apprendre le pourquoi du comment, c’est:

  1. […] analyser plusieurs solutions connues
  2. […] décomposer, décortiquer
  3. […] expérimenter par soi-même

Et en fait on en apprend infiniment plus en essayant de couler ses propres briques, plutôt que de simplement continuer à jouer aux lego.

QuentinC

@QuentinC Donc en gros si je comprends bien, si je prends de nouveau Electron comme exemple, je dois l’analyser et le décomposer en différents modules afin de comprendre comment il fonctionne, puis tenter de reproduire quelque chose de similaire.

Mais concrètement, comment je fais pour l’analyser ? Je dois me balader dans les sources ? Faire des recherches sur Google, dans les forums ? Je suis un peu perdu à ce niveau-là… J’ai toujours suivi des tutoriels qui m’expliquaient de A à Z comment utiliser un framework spécifique par exemple, mais je n’ai jamais trouvé d’ouvrages qui détaillaient le fonctionnement interne de celui-ci :(

Tu constateras les défauts et les limites de ta propre création et des briques de lego originales; tu comprendras pourquoi elles ont la forme qu’elles ont et ce qui fait qu’elles s’assemblent si bien, et peut-être un jour, qui sait, que les tiennes seront meilleures…

QuentinC

@QuentinC J’en suis encore très loin haha ! Mais peut-être un jour j’espère :p

Ce qu’il faut garder à l’esprit, c’est qu’il faut se fixer des objectifs progressifs, et ne pas vouloir immédiatement se dire "je veux faire X en mieux". Ton blocage, il vient sûrement de là.

QuentinC

@QuentinC C’est probable, je vais suivre ton conseil qui se rapporte un peu à ce qu’a dit @dubser

Du coup un des domaines que tu pourrais partir explorer, puisque tu connais visiblement bien le web, c’est essayer de faire ton propre navigateur. Certaines clémentines l’ont déjà fait puisqu’il y a des sujets dans le forum vos projets. Pour ça tu peux utiliser des bibliothèques graphiques pour faire des applications de bureau natives: QT ou WXWidgets par exemple. Ils proposent des composants qui intègrent un moteur de rendu et un moteur JavaScript tout faits, souvent une variante de Chromium. Au passage tu apprendras un nouveau langage, au choix python, C# ou C++. Mine de rien tu vas changé d’air, ça ne fait pas de mal, et tu auras considérablement élargi tes connaissances informatiques.

Ce n’est qu’une idée parmi d’autres. Si tu fais plutôt des jeux, tu seras peut-être intéressé en premier par les coulisses des différentes API JavaScript mises à disposition (WebGL, WebAudio, etc.). ET ensuite peut-être, si tu veux toujours sortir d’Elektron, par les frameworks pour créer des jeux vidéo, parmi lesquels unity en C# ou pygame en python.

Je ne fais que balancer des idées en vrac, j’espère que ce post t’a aidé.

QuentinC

@QuentinC Merci beaucoup pour ton post qui m’a énormément aidé !

Je fais plutôt des jeux et Electron me permet, entre autres, de développer mes jeux sur Desktop avec JavaScript. Néanmoins, je trouvais qu’Electron était trop lourd, sans parler du nombre de node_modules… Voilà pourquoi je souhaitais en développer un plus léger en gardant uniquement un moteur JavaScript et un moteur de rendu pour le canvas (avec éventuellement une API pour l’audio).

Autrement j’ai déjà pas mal potassé les API JavaScript (dont WebGL et toutes les libs qui en découlent). J’ai aussi déjà touché à Unity et même Pygame il y a quelques années (c’est pour dire) mais j’ai vraiment un coup de cœur pour le JS. Je développe d’ailleurs un moteur de jeu web.

Bon je commence à bifurquer du sujet, je vous remercie encore pour toutes vos réponses qui ont bien éclairci la situation ! :)

+0 -0

@ache Je pense qu’il voulait parler dans le sens large du paradigme objet, notamment dans les langages où « tout est objet », là où les deux concepts sont intimement liés. En Python ou en JavaScript par exemple, lorsqu’on intègre une bibliothèque, on importe seulement les objets qu’on souhaite utiliser.

Ni Python, ni Javascript ne sont « tout objet », mais je comprend l’idée. La modularité par l’export d’objet. Après, pas d’accord car les bibliothèques de C ne sont généralement pas orienté objet.

Mais dans l’idée je comprend bien de quoi vous parlez.

+0 -0

Attention à ne pas faire d’amalgame entre la POO et l’utilisation d’outils.

L’analogie de dubster sur les boulons, les outils, etc. est bonne, mais absolument pas liée à l’objet. J’utilise quotidiennement des fonctions qui recherchent si un élément existe dans une collection itérable, pas besoin d’un objet pour ça. Juste d’un type (et encore) et d’une fonction.

D’abord dédramatisons : je pense que c’est normal, et même plutôt sain, de se dire "je ne sais pas, je pourrais connaître plus de trucs".

QuentinC a donné d’excellents conseils que je résumerais ainsi (j’avais fait l’exercice en anglais sur Twitter je crois, ça rime mieux) :

  1. Read about it
  2. Try it
  3. Work with it
  4. Write (present) about it
  5. Contribute to it
  6. Change it
  7. Re-Create it
  8. Teach it

Si une techno t’intéresse vraiment à fond, essaie de passer par toutes ces étapes, dans l’ordre. Tu en entends parler, tu l’essaies, tu construis un truc un peu sérieux avec, tu essaies de le présenter, l’expliquer, décrire ce que tu as fait et comment tu as fait => et ça c’est une étape hyper importante souvent négligée, ça va te demander de beaucoup de documenter, de vraiment comprendre comment ça fonctionne et pourquoi tu as fait comme ça. L’étape suivante c’est d’essayer d’y contribuer pour vraiment voir comment c’est fait dedans, puis d’essayer de modifier la façon dont ça fonctionne, puis d’essayer de le faire par toi-même, ce qui va nécessairement t’amener à regarder encore plus en détail comment ils ont résolu les problèmes sur lesquels TOI tu tombes, et enfin, de l’enseigner, pour apprendre à répondre à des questions que tu ne t’étais pas posées.

Ça c’est pour un sujet qui t’intéresse.

Mais en dehors de ça, tu peux essayer de diversifier énormément les sujets. Apprendre un langage ou te plonger dans un écosystème qui n’a absolument rien à voir avec ta zone de confort : un langage fonctionnel, un langage orienté système, des bibliothèques de machine learning, etc.

Aussi, tu peux essayer de combler les trous de ta formation non-académique :

  • des algorithmes simples ou plus avancés (à travers des jeux comme CodinGame, ou le projet Euler)
  • comment fonctionnent certains protocoles, les bonnes idées qu’il y a derrière
  • pourquoi parle-t-on autant des conteneurs ? Ca fonctionne comment ? Ca apporte quoi de nouveau ?

On est en plein coeur d’une époque où il y a une tonne de littérature, de conférences, et surtout de code disponibles partout, sur tout. C’est formidable pour apprendre de nouvelles choses ou se perfectionner dans les sujets qu’on connaît un tout petit peu. Le plus dur, c’est de "choisir ses combats".

Lis, expérimente, contribue, et partage. C’est le meilleur moyen de te perfectionner.

+4 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte