Comment puis-je devenir un meilleur programmeur?

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous. J'espère que je poste au bon endroit! Je suis actuellement étudiant en 1ère année de cycle d'ingénieur de conception en informatique(4e année) et j'ai 23 ans(pas très jeune je sais).

Je suis originaire et je poursuis actuellement mes études au Burkina Faso (pays d'Afrique Occidentale pour ceux qui ne connaissent pas). Je suis très intéressé par la programmation et le développement en général , j'ai de très bonnes notes en classe et j'ai récemment gagné le concours national de programmation. Mais pour moi je ne suis qu'un malvoyant parmi des borgnes(sans vouloir offenser mes camarades) J'ai l'impression d'avoir perdu trois années de ma vie(L1 à L3) car j'estime être mauvais. Je parcours beaucoup les forums d'OC et de DVP(et un peu ZDS) et je vois bien que j'ai raison. Les cours actuellement m'ennuient à mort et j'ai l'impression de perdre mon temps(cours de gestion…). Je rêve de faire un master en génie logiciel, pour ça par l'intermédiaire de campus france j'ai postulé dans des universités françaises et j'attends encore les réponses , bien sûr je devrai reprendre le M1. Actuellement j'ai bien envie de plaquer les cours et de me donner 3 à 4 mois pour me remetrre à niveau(essayer d'approcher celui que j'aurais aimé avoir). Je viens donc vous demander des conseils. Quelqu'un s'est il déjà senti comme moi?

Edit: en fait j'ai un niveau bas en informatique en général. Comment devenir un meilleur informaticien alors? :p

+0 -0

Une méthode simple : pratiquer, encore et encore, savoir se remettre en question, et surtout, surtout, recevoir des critiques (bonne ou mauvaise) en montrant son travail.

Plusieurs pistes existent. Par exemple les sites de challenge algorithmique, les ateliers de programmation (il en existent plusieurs sur ZdS) et même prendre part a un développement open-source pour participer et recevoir des critiques/conseils/astuces sur son code et sa façon de faire (comme ZdS par exemple :D ). Lire les codes des autres meilleurs que soi est souvent un bon moyen de progresser aussi.

+17 -0

La meilleur façon de progresser en développement c'est pratiquer. Les cours et les tutos c'est bien mais au bout d'un moment il n'y a que la pratique qui te fais avancer. Tu as majoritairement deux façon : Te lancer dans des projets et participer à des projets existants. Les deux ont leur intérets. Quand tu te lance dans un projet, c'est souvent pour ré-inventer un truc qui existe déjà, mais c'est pas grave. Essai, trompe toi, recommence. Comme je l'ai dis c'est en pratiquant qu'on avance. Tu va beaucoup apprendre même si tu termine pas les projets. Ensuite tu peux participer à des projets existants (comme zds ou d'autres). Tu apprendra à travailler avec d'autres gens, à devoir rentrer dans une base de code existante (ce qui est loin d'etre évident la première fois, jamais apprit à l'école et pourtant ultra important car c'est la première chose que tu fera quand tu commencera un nouveau taf) et tu recevra des critiques (constructives) des mainteneurs du projet qui te poseront des questions sur ton code. C'est très enrichissant.

Pour ma part, la méthode qui a toujours fonctionné est de butiner.

Par exemple : bosser sur un (petit) projet perso, tomber sur une bibliothèque qui fait un truc dont j'ai besoin, l'utiliser, puis à l'occasion, aller lire le code source de la bibliothèque en question pour comprendre comment les mecs ont pensé leur truc, essayer d'avoir un oeil critique sur son code, pourquoi pas corriger un bug évident, ou bien se dire "hmm, je peux faire mieux que ce code", et choisir de faire un reboot de la bibliothèque comme prochain projet perso, me renseigner sur tous les aspects techniques sous-jacents (au niveau système, réseau, architecture) puis me lancer dans ce nouveau code.

Le but n'est pas de finir tous les projets (ils n'ont en général aucune autre importance que de satisfaire ma curiosité du moment), mais de sauter de fleur en fleur pour en tirer des infos, des leçons, des exemples.

C'est le meilleur moyen que j'aie trouvé pour agrandir ma culture informatique de façon efficace, c'est-à-dire non seulement progresser rapidement sur plein de sujets différents en parallèle, mais aussi que tout ce que je vois soit acquis durablement (puisque je le mets en pratique).

Typiquement, un petit code off qui me titille en ce moment est d'écrire un profileur statistique style flamegraph pour Python, puisque les solutions existantes et disponibles ne me satisfont pas et que j'estime pouvoir faire mieux (plus pratique à utiliser, avec des rapports plus utiles). Ou encore d'écrire une machine virtuelle inspirée de celle de CPython, mais en Rust, pour non seulement parfaire ma connaissance du fonctionnement interne de CPython mais aussi pour me donner une bonne occasion de faire du Rust. Et je m'aperçois qu'en me disant que j'allais faire ces projets, avant même d'avoir tapé la moindre ligne de code (parce que je n'en ai absolument pas le temps en ce moment), le simple fait d'avoir débroussaillé ces projets dans ma tête pour en faire la conception me suffit à apprendre ce que je veux, parce que ça me pousse à me renseigner sur tous ces sujets quand j'ai quelques minutes de dispo (dans mes trajets en train par exemple).

Bref, ma méthode, c'est de butiner et je la trouve particulièrement efficace y compris quand je n'ai concrètement même pas une heure d'affilée pour coder ou bosser sur des trucs persos.

+12 -0

Merci pour vos reponses. Mais que pensesz vous de l'idée de me prendre trois mois et de travailler intensivement pour essayer de me rattraper. Justement j'ai pas le niveau pour contribuer a un projet open source pour le moment.:'( Oui des cours m'intéressent sur le site. J'ai deja une liste des livres que je lirai durant ces mois. Bien sur je sais que lire des livres sans pratiquer ne me servira à rien.

Si! Avec ça je plaque l'année en cours. Dans tous les cas les cours me saoulent. Même si j'ai pas d'inscription en France je ne pense pas terminer ce cycle. Une filiere GL vient d'ouvrir dans la capitale et j'irai reprendre le M1 l'année prochaine. Du coup je me dis que ça ne sert à rien de poursuivre actu.

Je distingue la programmation elle-même de l'algorithmique, qui est à part. Pour être un bon programmeur il faut les 2. Où penses-tu que sont tes lacunes ? Si c'est la programmation, il faut pratiquer, que ce soit sur des projets personnels ou des projets open-source comme dit plus haut. Zeste De Savoir est open-source, tu pourrais essayer d'y contribuer ou participer à un des ateliers du forum. Par contre, si c'est l'algorithmique, il faut récupérer des PDFs de cours et se mettre à niveau sur ce que tu connais mal. Ça peut être la récursivité, les arbres, les algorithmes de graphes, les structures de données, des notions de complexité algorithmique, etc. Je sais pas ce que tu as fait en maths dans ton cursus, mais c'est important aussi de bien comprendre les notations asymptotiques et un peu de dénombrement pour les études de complexité. Peux-tu nous en dire plus sur le genre de projets que tu fais habituellement, les langages utilisés ainsi que ce que tu as vu en algorithmique ?

Bon, jai quelques soucis en algo mais la plupart du temps ça va. Je m'en sort bien avec la recursivité, les SDD(files,piles,arbres…). Mais j'ai par exemple du mal avec le backtracking et la programmation dynamique. En maths ça ne va plus trop depuis l'université. Je ne connais que C et JAVA. J'ai eu à faire quelques petits projets(personnels) avec ces deux langages. En fin de cycle(L3) j'ai developpé une appli te de gestion commerciale en swing. Apparemment j'ai manqué cruellement de pratique. J'ai aussi d'autres lacunes en informatique en general(réseaux, Architecture des ordis, ACOO). Mais quand je vois le fossé entre vous et moi je me demande si de la pratique suffira. Je vais peut être bien laisser tomber l'année.

+0 -0

Je pense vraiment que tu te sous-estime et que tu sur-estime beaucoup tout le monde ici. Mais passons. Soyons pragmatique. On ne peut pas s'améliorer sur tout en même temps. Il faut faire des choix. Tu semble avoir des connaissances sur les structures de données de bases, tu as fais du C, Java et Swift. Maintenant, si tu devais choisir, quel domaine t’intéresse le plus ? Quel langage t'attire ? Quel type d'application ou projet tu souhaiterai être capable de réaliser ?

En connaissant ce qui te fais envie a court terme, on pourra te guider dans cette voie.

Non pas Swift . :D J'aimerais juste développer des applis de gestion(web,mobile et desktop).ça me va pour le moment. J'aimerais aussi etre capable de produire du code propre, maintenable… Parce que le code de l'appli de fin de cycle est vraiment mal foutu, on voulait juste que ça marche. Pour les langages j'ai pas vraiment de préférence, mais j'aimerais bien apprendre python. Ah, je connais un peu PHP aussi.

+0 -0

Personne ne sait tout. On est tous spécialisés dans un domaine, je serais bien incapable d'écrire un programme en Java ou de faire un site Web correct, sans parler de faire une appli mobile. Par contre je sais faire des jeux vidéo. Kje et nohar sont des pros de Python, Eskimon un pro de l'informatique embarquée, mais ils ne savent peut-être pas programmer en Cobol ou en Ada.

Les cours, l'algo, la théorie c'est important mais ça ne rentre qu'avec de la mise en pratique, et la pratique ça demande de la motivation, alors la première chose à faire, c'est de déterminer ce qui t'intéresse en informatique. Tu veux faire du Web et des applis de gestion : PHP, Javascript, Python ce sont de bons langages à apprendre pour ça, et le C est probablement le dernier de tes soucis.

Savoir coder proprement et de façon maintenable ça viendra avec l'expérience.

Bon très bien alors part sur Python si ça te botte (il y a plein de contenu pour tous les niveaux partout). Tu peux en profiter pour approfondir un peu tes notions de dev web si c'est un domaine qui t’intéresse. Fixe toi une application de gestion que tu voudrais reproduire et choisi un framework web de Python (les plus connus sont Django et Flask) et lance toi. Vas-y, c'est en forgeant qu'on devient forgeron.

Pour le code propre et maintenable, ça ça vient avec le temps et l'expérience.

+1 -0

En fait c'est dur de savoir. Tout dépend de ce que tu entend par maitriser. Tous tes sujets peuvent se comprendre en quelques semaines mais prendrons des années à vraiment maîtriser. Et la majorité du temps ça se fait au cours du temps. Linux perso je maitrise a peu pret parce que c'est mon OS depuis des années, mais j'ai jamais cherché à faire des sessions "apprendre Linux". C'est pareil pour git. Tu va lire un cours pour comprendre le fonctionnement de base, ensuite c'est en l'utilisant que tu va le maîtriser. Le jour où tu va vouloir faire une opération que tu n'a jamais fais, tu va chercher et trouver comment la faire.

Dans tous les cas vouloir tout apprendre trop vite est rarement une bonne idée. Perso si je vois un CV ou le mec a mit 50 compétences maitrisés, je me dis qu'il n'a fais que lire quelques tutos dessus et qu'au final il ne maitrise vraiment rien.

Si par contre tu me montre un blog que tu as fais avec Flask, même si c'est pas innovant, je me dirait qu'au moins tu l'as utiliser.

Sincèrement tu ne pourra pas tout faire. Lire ne suffit pas, il faut pratiquer.

Faut pas non plus se fixer des objectifs invérifiables comme "je dois maîtriser Git dans trois mois". J'utilise Git depuis 4/5 ans, je commence à peine à comprendre vraiment comment ça fonctionne, ça ne m'a pas empêché de m'en servir d'une façon vaguement appropriée depuis le temps.

Concentre-toi sur un domaine particulier, par exemple les sites Web avec Python. Passes-y du temps, entraîne-toi, demande des conseils à des gens plus expérimentés… Et quand tu sens que tu n'apprends plus vraiment, passe doucement à autre chose dans la même veine (un site Web en Python embarqué dans une appli PC? Un site Web en Rust ? etc).

Perso, j'ai appris le C à l'école. Je suis sorti en ayant vraiment pratiqué un seul langage, celui-là, et je me suis auto-formé en entreprise au C++. J'avais appris SVN à l'école, je me suis auto-formé en entreprise à Git. Et tout ça, c'est progressif, je n'ai jamais décidé d'apprendre le C++ et de le maîtriser en trois mois.

Salut, je me permet de poser une question en lien avec sa question (ou plutot vos réponses).

Vous dites qu'une bonne méthode est de participer à des projets open-source et j'ai envie de m'y mettre depuis un petit temps mais le problème c'est de trouver des petit projets aux quels participer.
Si on fait un tour sur github les 3/4 des projets qu'on trouve font peur parce que trop gros ou strictes et donnent le sentiment de ne pas avoir la capacité pour participer, ou alors c'est du web/javascript.

Du coup est ce que vous avez des conseils pour chercher un bon projet ? (bon = qui correspond à nos critères)

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