Syndrome de la feuille blanche

a marqué ce sujet comme résolu.

Hello la communauté.

Je suis nouveau dans le monde du développement (reconversion en cours depuis 3 mois +-)

Je viens à vous car je galère pas mal au boulot. Je galère super longtemps pour créer mes fonctions en angular ou symfony. Je reste bloqué sur une feuille blanche pendant de longues minutes sans savoir comment implémenter telle ou telle fonctionnalité.

Je connais les variables, boucles, conditions mais pas moyen de comprendre comment je dois faire pour effectuer le traitement dont j’ai besoin.

Alors autant que HTML et CSS qui n’est pas de la programmation on est d’accord c’est plutôt easy mais là je bloque sur ça.

En parallèle j’ai compris les notions d’architecture monolithique et 3 tiers Je sais utiliser Git et Docker (avec ses dockerfile et Docker compose).

Je touche un peu au SQL.

Mais créer mes fonctions je galère donc je suis super lent et souvent c’est un collègue qui me dit bien c’est simple tu fais ça et ça puis ça et c’est bon mais pour moi ça me paraît compliqué.

Tout cela pour dire que j’arrive à assimiler pas mal de concept mais là je bloque la dessus je ne sais jamais comment traduire la demande en français en code et on me dit que cela va venir avec le temps mais actuellement je galère car je m’obstine à essayer de comprendre pourquoi j’avance pas si quelqu’un a déjà vécu cela je suis preneur sur des idées pour m’améliorer.

Hello !

Alors, tout d’abord, je préfère signaler que je ne développe pas dans un cadre professionnel. Mais malgré tout, en ayant toujours réussi à coder ce que je voulais en une quinzaine d’années, j’estime que j’arrive à m’en sortir.

Tu dis que tu sais utiliser plein de choses et c’est bien, mais pour moi la logique de décomposition est quelque chose qui vient avec le temps, ou que certains peuvent avoir spontanément peut-être, mais j’imagine que ce n’est pas le cas de tout le monde.

3 points selon moi :

  • Avant de commencer à coder quoi que ce soit, il faut s’imaginer ou écrire sur une feuille les différentes étapes qu’une fonction va exécuter, et découper le processus le plus possible. Je n’ai pas d’exemple là tout de suite, mais il faut vraiment réussir à se dire "Avec un preg_match je capture toutes mes itérations par exemple, puis je les modifie… Ca a l’air de rien mais faut vraiment schématiser un cheminement complet avant de faire quoi que ce soit, dans ta tête ou sur le papier.
  • Si tu ne trouves pas, inspire toi du web. Soit ça existe, soit ça existe à peu près. Prends, améliore ou modifie selon ton besoin.
  • Souffle. C’est pas toujours possible, mais des fois, je n’y arrive plus, je n’ai pas d’idée, alors je ferme le PC, je fais autre chose, souvent du bricolage ou une activité manuelle, et j’y retourne plus tard. Mais je peux faire ça parce que je code depuis mon canapé, ce n’est pas toujours possible j’entends bien.

Sinon, tu es sûr que c’est le cheminement de la fonction à créer qui te bloque, ou alors peut-être y’a t-il des fonctions du langage que tu ignore ? Dans tous les cas, ça viendra, au fur et à mesure de la pratique et que tu auras encore acquéri des connaissances sur ces langages.

Symfony et Angular ne sont pas des langages mais des frameworks, ils ne résument pas toutes les utilisations de PHP et JS. Amha, tu devrais creuser la documentation de ces 2 langages, qui comportent énormément de fonctions natives, plus que l’utilisation des frameworks dans un premier temps.

C’est comme pour beaucoup de choses (quand on apprend la biologie, la physique, les maths, les arts martiaux, etc.) Certaines personnes vont avoir besoin de plus d’entrainement que d’autres, mais dans tous les cas il faut d’une part faire ses gammes (en programmation c’est répéter les exemples pour complétement intégrer les notions) et d’autre part s’entraîner avec de petits exercices ciblés qui mobilisent des notions précises (et qui ont leur correction fournie : le but est de s’habituer à la façon de mobiliser les connaissance et apprendre à reconnaître les cas courants et leurs solutions types.) Du coup, oui, ça vient avec le temps et on ne peut te conseiller que de persévérer.

Dans un second temps, tu peux te frotter aux services/plateformes d’entraînement comme (avec différents langages) :

  • CodinGame — algorithmie, disponible en français.
  • Codewars — algorithmie, seulement en anglais.
  • HackerRank — challenges dans divers domaines, en anglais.

Il y en a d’autres mais plus restreint en terme de langages… Quelques exemples :

Il y en a aussi qui ne ciblent pas un langage courant/existant et qui pourraient t’intéresser :

+1 -0

Salut,

Effectivement, comme dit plus haut, c’est quelque chose qui demande du temps, de l’expérience et des habitudes pour être maîtrisé.

Quand (il y a longtemps), j’ai fait le saut entre la mécanique et le développement informatique, je créais mes algorithmes en me demandant : "pour faire la même chose à la main, comment je ferais, et quelles sont les étapes nécessaires". Ca permet de découper un process en macro taches. Puis, pour chacune de ces taches, on recommence l’exercice jusqu’à avoir une granularité assez fine pour commencer à coder.

Par contre, on avait des cours d’algo dans l’école ou j’ai étudié l’informatique, et j’ai l’impression que c’est quelque chose qui s’est un peu perdu ces dernières années dans certaines formations.

Et réflexe acquis pendant mon BTS mécanique, j’essaie de ne pas m’arrêter à la première idée venue, mais d’en imaginer 1 ou 2 autres, puis de faire l’exercice des avantages/inconvénients de chacune des solutions envisagées pour choisir la meilleure, ou améliorer la moins mauvaise avec les points positifs des autres solutions. Évidemment, c’est plus facile à dire qu’à faire, surtout quand la question d’origine, c’est justement comment on fait pour trouver la 1ere solution.

Bref, bon courage, prend le temps de bien découper ce que ton programme doit faire en partie plus petite que tu pourras appréhender plus facilement, et ne te décourage pas

Merci pour ce retour.

Justement c’est cette décomposition qui me pose problème.

En français j’arrive à me dire que cette fonction doit faire faire telle action mais arrivé au code je bloque.

Je me dis mais comment je fais cette étape ? Est ce qu’il faut un tableau ou une string. Et comment aller chercher juste cette info puis la placer ici.

C’est plus ce raisonnement qui me pose problème.

Cela ne sais pas posé car avec HTML et CSS c’est plutôt cadré. Par exemple tu veut un titre c’est H1 ya pas 36 manière de faire. En docker tu as seulement quelques commandes et c’est clair tu sais ce que tu fais.

Là je sais que je dois décomposer les étapes. Mais typiquement dans un cas au boulot aujourd’hui je devais faire une requête pour récupérer des infos en base et les afficher des un formulaire modifiable et si l’utilisateur ferme sans cliquer sur sauvegarder le formulaire est purgé.

Donc d’office je me suis dis je vais avoir une condition, une requête, un affichage et une purge. Et de la c’est comment je le gère j’ai pas de trame pour comprendre comment cela se fait en règle générale un peu comme du HTML ou CSS ou tu veut quelque chose bien c’est précis.

La chacun fait un peu comme il veut et c’est ça qui me perd un peu car j’arrive pas a trouver mon algorithme pour traduire ma fonctionnalité

Il faut réussir à raisonner de manière itérative : tu pars d’une brique, et petit à petit, tu ajoutes une fonctionnalité.

  1. Tu récupères les infos en base (vraiment, juste les récupérer)
  2. Tu fais un formulaire spécifique à ces données
  3. Tu génères le formulaire pré-rempli
  4. Tu gères l’envoi du formulaire sauvegardé
  5. Tu purges (y a vraiment besoin d’une fonction pour ça ? s’il ferme sans sauvegarder, de toute façon ça va récupérer les infos en base la prochaine fois, non ?)

Le truc, c’est vraiment de réussir à trouver sa première brique d’entrée, puis de construire petit à petit dessus. D’ailleurs, c’est peut-être pas celle-là la brique d’entrée qui te convient, peut-être que tu préfères coder le formulaire en premier.

Si cette gymnastique te paraît toujours difficile… C’est effectivement que tu as un peu de mal à te conformer à cette logique, et il te faudra juste du temps pour réussir à l’acquérir. Je ne peux que te conseiller d’essayer à chaque fois, et de confronter tes idées à ce qu’en pensent tes collègues, en leur demandant ce qu’ils en pensent, pourquoi ce n’est pas adapté, etc.

+1 -0

Donc d’office je me suis dis je vais avoir une condition, une requête, un affichage et une purge.

Relis cette phrase que tu as écrite, mot à mot : elle résume tout ton problème, elle décrit très mal la demande.

Tu commences en parlant d’une condition. Admettons, mais alors, soyons précis, s’il y a une 'condition’, il y a un : si condition alors XXX et il y a un : sinon YYY.

D’autre part, et ça me paraît vraiment essentiel, pourquoi inverser la chronologie : tu as une requête, puis un affichage, puis une attente, puis selon l’action de l’utilisateur, telle ou telle action. Il y a 4 mots clés dans ce résumé : puis, puis, puis, selon. Autrefois, on dessinait des algorithmes avec des flêches, des losanges etc etc : avec ces 3 mots clés, tu as 3 flêches et un losange.

Ici, tu décris le besoin pour le forum, tu n’es pas en phase de 'recherche’, ok. Mais le fait que tu inverses la chronologie me paraît symptomatique. Forcément, en phase de 'recherche’, tu as le même problème.

Je ne garantis pas que c’est la recette miracle, mais ça me paraît un bon axe pour organiser ton travail : dans l’ordre chronologique, ma fonction doit faire quoi ?

Là je sais que je dois décomposer les étapes. Mais typiquement dans un cas au boulot aujourd’hui je devais faire une requête pour récupérer des infos en base et les afficher des un formulaire modifiable et si l’utilisateur ferme sans cliquer sur sauvegarder le formulaire est purgé.

Donc d’office je me suis dis je vais avoir une condition, une requête, un affichage et une purge. Et de la c’est comment je le gère j’ai pas de trame pour comprendre comment cela se fait en règle générale un peu comme du HTML ou CSS ou tu veut quelque chose bien c’est précis.

D’après ce que tu dis, je pense que tu n’as pas assez décomposé ton besoin. Je suis plus dans l’embarqué, principalement du C, et ça fait très longtemps que je n’ai pas mis les mains dans une base de données, mais le principe est le même, [quasiment] tout le temps, [quasiment] partout.

Il faut que tu te poses toutes les questions :

  • de quelles données j’ai besoin
  • comment j’accède à ma base de données
  • comment je lis les données de la base
  • comment j’en extrait celle dont j’ai besoin
  • etc.

Si je prends l’exemple de la récupération de données dans un fichier, j’aurai besoin de :

  • le nom du fichier et le chemin pour y accéder
  • est ce que je vais faire que de la lecture, ou vais-je aussi avoir besoin d’écrire dedans
  • que contient le fichier
    • est ce qu’il ne contient que du texte, ou aussi du binaire
    • est ce que son contenu est formaté
    • puis-je le lire ligne par ligne, ou dois-je le lire entier
  • une fois que j’ai identifié le contenu de mon fichier
    • ou sont mes données
    • comment je peux les identifier dans mon contenu
    • comment je peux les extraire
    • évidemment, il ne faut pas oublier de fermer le fichier quand on en n’as plus besoin

Ca, c’est juste une liste de questions, pas nécessairement exhaustive, qui vont te rapprocher d’un algo de lecture de fichier, avec l’ordre des actions nécessaires.

Et ça correspond à ce que tu ferais, à la main, pour chercher une donnée dans un livre :

  • chercher le livre dans la bibliothèque (chemin et nom)
  • regarder le contenu pour connaître le format du livre (généralement, c’est du texte, heureusement ! :ninja: ) et comment les informations sont accessibles (dictionnaire, roman, doc technique)
  • en fonction du type de livre, on cherche dans l’ordre alphabétique pour un dictionnaire, ou un glossaire pour une doc technique, etc.
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