L'apprentissage de la programmation et plus encore

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, bonsoir à tous,

En fait ce sujet est une réaction à la discussion qui s'est tenue sur Openclassrooms (entre autres).
En effet, j'ai constaté qu'il était très (très) souvent conseillé aux personnes souhaitant se lancer dans la programmation et qui se demandent par où commencer, de débuter avec Python en avançant qu'il s'agit d'un langage facile à apprendre, qui donne de bonnes bases, qui permet de réaliser de nombreuses choses etc De manière plus exceptionnelle, comme c'est le cas ici, j'ai pu voir que le langage C (voire C++) étai(en)t conseillé(s).

Cependant, moi qui m'intéresse à tout ça (comprendre ce qui touche à l'informatique, programmation notamment) et pour qui cela ne représente rien professionnellement, j'ai au gré de mes recherches essayé (succinctement) plusieurs langages, ou tout au moins regardé des sources en traitant, et je dois dire n'avoir pas particulièrement apprécié le Python (c'est grave docteur ?).
En revanche, j'ai découvert un autre langage qui lui me parlait beaucoup plus, le Ruby, d'où les questions qui sont nées dans ma tête, pourquoi ce langage n'est jamais (ou très peu) conseillé ?
Le Python apporte t-il quelque chose en plus d'un point de vue méthodologique, pédagogique ou que sais-je encore si on souhaite approfondir en programmation ? Ou simplement constitue t-il un tremplin idéal vers le C ou C++ ? Si oui pour quelles raisons ? Ou alors Python peut-il interagir avec la machine de manière plus avancée que Ruby ?
(A noter que ma question vaut aussi pour Perl par exemple, mais j'ai explicité le cas de Ruby puisque c'est le langage qui a retenu mon attention.)

Voilà, j'espère que l'on pourra éclairer ma lanterne sur l'intérêt incroyable que semble avoir Python pour une personne qui souhaite rentrer dans le merveilleux monde de la programmation.

D'ailleurs, personnellement j'aurais souhaité suivre (progressivement bien entendu) la liste d'apprentissage suivante:
- Ruby (un peu à regret, Python si vraiment il apporte quelque chose)
- C++ (ou passage direct au C puis retour sur le C++, je ne sais pas ce qui est le "mieux")
- C
- le batch, ce qui tourne autour (mais là je ne suis pas sûr d'avoir bien cerné la notion)
- peut-être l'assembleur, ou plutôt les assembleurs puisque j'ai cru comprendre qu'il y en avait plusieurs, mais ça c'est dans très très longtemps.

Mon but principal étant d'être polyvalent, de pouvoir répondre à tous les besoins que je pourrais rencontrer (en tant qu'amateur toujours) et ultimement essayer de comprendre (au mieux) comment fonctionne mes "machines".
Qu'en pensez-vous ? Est-ce vraiment trop ambitieux ? Dois-je revoir mes objectifs (parce que je suis bien conscient que tout ça va me prendre un temps important pour avoir un niveau correct) ? Est-ce logique et adapté ou bien le contraire ?

Je remercie ceux qui auront pris le temps de tout lire, et je suis impatient de lire vos retours. ;)

+2 --1

Cette réponse a aidé l'auteur du sujet

Salut,

Alors je vais essayer d'éviter subtilement (ou pas) les raisons de pourquoi Python serait ou ne serait pas plus populaire que Ruby car :

  1. Ça va déclencher une guerre de paroisse comme souvent quand tu t'adresses à des gens qui ont leurs langages préférés
  2. Je n'en sais absolument rien ^^

Compte tenu du fait que tu te déclares amateur, je trouverais ça dommage que tu t'imposes des contraintes externes. Tu aimes Ruby mais tu trouves Python plus populaire ? Fuck it, apprends Ruby !

Ça n'est même pas comparer des langages de niveaux différents, donc franchement prends ce qui te fait plaisir.

Ensuite, ça peut dépendre des projets que tu as. Par exemple, tu veux peut-être participer à des projets Open Source (ZdS par exemple ?). Malheureusement, il te faudra maîtriser le langage utilisé par celui-ci. Si par contre, tu n'as que des projets personnels, sens-toi libre de faire ce que tu veux !

Pour être polyvalent, ce n'est pas tant une question de langage qu'une question de niveau de langage (et aussi de ce qu'on entend par polyvalent). Pour moi, un développeur vraiment polyvalent maîtrise un langage haut niveau, un langage de script, un langage bas niveau, a minima.

Néanmoins, si tu veux vraiment comprendre comment fonctionnent les machines en profondeur, c'est effectivement vers le bas niveau que tu devras t'orienter. Néanmoins, c'est à mon avis mieux de commencer par des langages haut niveau, pour faire abstraction de certains concepts qui pourraient parasiter ton apprentissage au début.

Ça reste une question extrêmement complexe, mais vraiment je réitère : apprends ce qui te fait plaisir.

Enfin, je te conseillerai également de te plonger également dans l'algorithmique pure. Ça paraît chiant comme ça, mais depuis que j'en ai fait en école d'ingénieur ça a changé ma vision des choses : ça te permet des concepts que tu retrouveras dans tous les langages, et qui faciliteront grandement tes apprentissages.

Voilà, j'ai essayé de donner mon avis malgré que les questions sont vastes et complexes. Je n'entends pas avoir la réponse idéale, mais j'espère t'avoir fait comprendre mon point de vue du mieux possible.

Bon courage pour ton apprentissage, et, vraiment, fais-toi plaisir !

+7 -0

Cette réponse a aidé l'auteur du sujet

Lu'!

Pour moi, un développeur vraiment polyvalent maîtrise un langage haut niveau, un langage de script, un langage bas niveau, a minima.

Theo

Pour moi un développeur polyvalent, c'est un développeur qui peut apprendre au besoin, et facilement, le langage dont il a besoin pour la prochaine tâche qu'il a à réaliser ;) .

En l'occurrence, pour répondre @Mysterri1 sur ce point, il ne me semble pas qu'apprendre des langages dans le but d'en apprendre d'autres soit une bonne idée. D'une part parce que si on crée des langages différents c'est précisément pour qu'il ne permettent pas les mêmes choses. Et d'autre part parce qu'en essayant d'apprendre un langage en gardant en tête ce qu'on sait d'un autre, on ralentit son apprentissage, voir on le rend impossible. L'exemple typique étant l'apprentissage de C avant C++ qui pour la majorité des étudiants mène droit à l'échec. La bonne manière d'apprendre un langage c'est de ne garder en tête que les idées très générales comme l'algorithmique et des méthodes de modélisation (et là encore c'est à prendre avec des pincettes) et de se forcer à se remettre dans le rôle de débutant (ce n'est pas facile quand on connaît déjà plusieurs langages, je le concède).

Retirons une légende de suite : a priori, le C (comme le C++) ne t'apprendra rien sur le fonctionnement de ta machine. En tout cas, la très vaste majorité des tutoriels le confirment. Il pourra éventuellement t'en apprendre sur le fonctionnement de ton système d'exploitation, mais ça c'est si tu t'y intéresses, et pas forcément besoin du C pour ça. La très large majorité des programmeurs C n'ont pas la moindre idée de ce qui se passe derrière malloc à un ou deux niveaux inférieurs, et encore moins savent ce que se passe jusqu'en bas par exemple.

Si tu veux en apprendre sur la machine, lis des bouquins sur la programmation d'OS (les bouquins de Tanenbaum sont hyper chers mais très bons), code toi même un mini-OS ou encore intéresse toi au code de systèmes d'exploitation existant (Minix est abordable).

Pour ce qui est des langages que tu as vu conseillé en premier langage d'apprentissage.

Python est un bon candidat effectivement parce qu'il te permettra de te concentrer rapidement sur l'algorithmique et sur la structure du code sans avoir à te soucier de problématiques lourdingue (quand on apprend déjà quelque chose de nouveau) de gestion des ressources.

C, je ne saurais que le déconseiller, je ne connais pas de tutoriel où les codes d'exemple/correction résistent à la méthode de Chen et c'est un problème en C. Par ailleurs, quand on ne sait pas encore écrire un algorithme correct, ajouter des problématiques de gestion de ressources manuelle, c'est un peu charger la mule alors qu'elle a déjà du mal à marcher.

C++ pourrait être un bon candidat. Problème, je ne connais qu'un seul tutoriel en français qui soit correct (celui de @gbdivers), qui est encore en cours d'écriture et qui d'après les premiers retours est encore un peu raide pour un débutant complet. Et apprendre C++ avec un mauvais cours, ça veut dire que soit tu vas échoues, soit si tu réussis, tu auras appris plein de conneries qu'il te faudra désapprendre pour faire du C++ correct.

Pour finir, en fait on s'en fout du langage par lequel tu vas commencer (oui ça contredit les 3 points au dessus, ils sont un avis personnel). L'important c'est d'être motivé à apprendre. Commence par ce qui t'attire le plus (je te déconseille quand même d'enchaîner C puis C++, met au moins un autre langage entre les deux ou fait le sens inverse) c'est comme ça que tu seras le plus motivé et c'est donc comme ça que tu as le plus de chances de réussir.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+4 -0
Staff

Pour moi, en plus de ce qu'on a déjà dit sur Python et C++, ce que j'aime dans ces deux langages, c'est qu'ils ne te forcent pas à coder d'une façon précise. Tu veux faire de l'impératif ? Ok. De l'objet ? Pas de soucis ! Du générique ? Du fonctionnel ?

Je n'aime pas trop les langages type Java qui te forcent à faire d'une certaine manière et pas d'autre choix. J'ai déjà vu des cas en C++ où faire une simple fonction était très bien adaptée à la situation. Si je dois faire la même chose en Java, arrêtez-moi si je dis une bêtise, mais il faut créer une classe et y écrire une méthode statique dedans.

Après, je n'ai rien de plus à ajouter à ce qui a été dit au-dessus.

Le C++, et à plus forte raison le C, […]. Le C++ est bien plus moderne et les deux ont des versions très récentes, mais les fondamentaux des langages restent les mêmes et il est toujours aussi difficile d'écrire des programmes fiables avec.

Stranger

Là déjà j'ai fait un bond. C'est quoi aujourd'hui le rapport entre C++ et C (et même entre C++11 et C++98) à part un peu d'histoire ?

En C ou en C++, 90% du code d'un programme est là pour (1) vérifier les erreurs, (2) gérer les ressources, (3) réimplémenter quelque chose qui a déjà été fait ailleurs ou tout simplement compiler le programme : dans un programme conséquent, une bonne partie du travail consiste à configurer un outil comme cmake. Je vois régulièrement des projets avec plusieurs milliers de lignes de code simplement pour compiler le vrai code du projet.

Stranger

(1) Quand des erreurs se produisent en C++, la gestion c'est par exception, comme dans la majorité des langages récents.

(2) Si tu fais des choses compliquées pour la gestion des ressources en C++, tu ne fais probablement pas du C++.

(3) Il n'y pas de bibliothèques en C++ ?

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+1 -0

Donc l'idée du raisonnement, c'est "la majorité du temps, les entreprises décident de travailler en C++ historique donc il n'est pas possible de faire autrement". Cela revient précisément à ce point :

C++ pourrait être un bon candidat. Problème, je ne connais qu'un seul tutoriel en français qui soit correct (celui de @gbdivers), […]

Ksass`Peuk

La majorité du temps C++ est enseigné n'importe comment, avec dans la tête qu'il est nécessaire d'apprendre au débutant à mélanger du C et du C++ (sans lui expliquer les risques et pourquoi bien entendu), de gérer la mémoire à la main (encore une fois sans lui expliquer les problèmes bien sûr) et d'écrire des horreurs avec parce que sinon, ça doit pas être du C++.

C'est précisément ce genre de fait qui met à C++ une réputation de merde, alors qu'il est tout à fait possible d'écrire du code correct facilement, à condition d'avoir appris à le faire.

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+2 -0

Des exemples de codes conséquents (en terme de performances demandées) utilisant des exceptions : CVC4, Z3 (j'ai pris deux exemples que j'avais sous la main j'ai pas cherché plus).

Ce que tu appelle des horreurs, c'est juste la réalité des gros projets en C++.

Stranger

Et donc les débutants commencent par des gros projets ? C'est précisément l'objet du message, le langage X est-il adapté au débutant ?

Comme ça a déjà été dit C++ est un langage fourre-tout, on peut approximativement tout faire avec, y compris des horreurs. Oui parfois on a besoin d'écrire des horreurs en C++ (et oui, c'est des horreurs, il faut le dire). Les question c'est : Est ce que dans le cas général, on a toujours besoin d'écrire des horreurs ? Est-ce que c'est malin d'apprendre ça au débutant ?

Pour la première question, non très clairement pas. Un fait qui est assez clair est que le plus important dans un projet de manière général c'est sa maintenabilité et son évolutivité, et qu'on optimise quand on en a besoin et pas avant. Il y a pas mal de projets qui ne nécessiteront jamais d'aller chercher toutes les performances que peuvent offrir C++ si on va le plus loin possible. Dans ce cas C++ permet-il d'écrire des programmes aux performances raisonnables facilement ? La réponse est clairement oui.

Pour la deuxième question, on en revient à la question de est-ce que c'est facile de commencer par C pour un débutant ? Et même si c'est faisable, la gestion des ressources est un procédé complexe en C, encore plus complexe en C++. Est ce qu'on peut s'en passer dans un cours pour débutant en C++ ? Oui très clairement.

A moins que l'on considère que le débutant à qui on enseigne un langage va s'attaquer à des gros projets complexe après demain, toutes les considérations citées pour écrire des monstruosités en C++ sont des notions avancés qu'il n'aura besoin d'adopter que s'il décide d'aller très loin dans l'apprentissage du langage.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+1 -0

Oui. Mais : des monstruosités qui sont, à ton corps défendant je veux bien le croire (1), la norme. […] Les cours comme celui de gbdivers sont malheureusement une exception, et (2) ne reflètent pas ce qui se fait IRL.

Stranger

(1) Ce qui est marrant c'est que dans l'embarqué (donc peu de dynamisme), c'est le cas jusqu'à ce qu'ils commencent à vouloir prouver leur code :lol: .

(2) En ce qui concerne @gbdivers, il me semble qu'il fait du C++ dans le pro, donc je pense que c'est pas si loin des trucs qui commencent à percer :) .

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+0 -0

Oui, j'utilise le C++ au niveau pro depuis des années (d'ailleurs, je ne fais que cela, je ne travaille pas sur plusieurs langages). J'ai bossé dans le recherche public hospitalo-universitaire et maintenant dans l'industrie. Mes domaines de compétences sont plus spécifiquement Qt, la conception et les performances (calcul scientifique, traitement vidéo). (Remarque : je suis biochimiste de formation, mais je ne bosse plus dans la bio depuis quelques mois)

Il est clair que le C++ "moderne" n'est pas majoritaire dans les projets sur lesquels j'ai travaillé (ce qui n'est pas très représentatif, puisque justement c'est mon boulot de bosser sur ce genre de problématiques). Ce qui est amusant en fait : dans la majorité des cas, les performances ne sont pas un problème (les ordis sont devenus assez puissants, même sur un téléphone portable, on peut faire du décodage vidéo software sans problème). Par contre, ce qui pose problème, c'est la qualité logiciel (évolutivité, maintenance, fiabilité), mais on continue d'utiliser le C++ comme on le faisait il y a 20 ou 10 ans. On va utiliser des raw pointer, parce que "les smart pointer sont plus lents", alors qu'en fait dans la majorité des cas, l'utilisation de l'un ou l'autre ne change pas les performances (perceptibles par les utilisateurs). Par contre, cela a un impact sur la qualité du code.

Pour les exceptions, je crois que c'est en grande partie pour des raisons historiques. Mais au final, peu importe. L’intérêt du C++ "moderne" reste valide, même sans exception. Si on regarde le code donne dans l'article "retour de fonction vs exception" :

  • sans exception, on ne va pas utiliser les try-catch en C++ (donc la, ok, le C++ n'apporte pas de différence)
  • on doit tester si l'allocation échoue ou non, pour libérer la première ressource allouée. Le C++ "moderne" continue d’être intéressant avec les smart ptr pour libérer automatiquement la ressource
  • on doit gérer les problèmes lies au ptr (dangling, libération, partage inter-threads, etc). Idem, le C++ "moderne" apporte une grande aide ici aussi. (et honnêtement, je pense que le dangling est vraiment le problème critique de beaucoup de codes C++ et une source de surcoût important - soit de bugs/crash, ou même simplement des que l'on modifie une ligne de code et que cela provoque des dizaines d'erreurs en cascades)

Bref, même sans exception, le C++ "moderne" est une évolution dans la qualité du code (et donc les coûts de développement - ce qui compte le plus au final pour les entreprises). Ce n'est pas simplement utiliser les exceptions et/ou les smart ptr, je pense que c'est une évolution dans la façon d'aborder les problématiques (et donc dans le façon d’écrire du code).

Pour le cours, il n'est pas représentatif de ce qui existe irl et c'est un choix pédagogique :

  • pourquoi commencer par enseigner les techniques qu'il ne faudrait plus utiliser, plutôt que les techniques que l'on aimerait voir plus souvent utilisées ? (une mauvaise habitude prise reste)
  • surtout que "l'ancien enseignement" est très mauvais, puisqu'il n'apprend pas quels sont les risques du code que l'on apprend.
  • en plus, c'est un "mensonge". Faire du C++ old-school/bas-niveau ne rend pas le code plus performant (les pertes de performances viennent le plus souvent des algos, structure de données, cache miss, etc). Et on ne peut pas apprendre en même temps une nouvelle syntaxe, comment écrire du code safe, comment concevoir et comment optimiser.
  • il me semble meilleur d'apprendre le code safe, puis le code non safe, cela permet de mieux comprendre comment sécuriser un code. Et une fois que l'on a un code safe, on peut passer du temps pour améliorer les performances, plutôt que de perdre son temps en débogage a chaque fois que l'on modifie une ligne de code.

Bref, globalement, je ne suis pas d'accord avec Stranger. Ksass`Peuk parle plus en effet du C++ vers lequel on devrait aller (et qui est largement utilisable en pro), tout simplement parce que le C++ qui est lourd, bugé et passe 90% de son temps à "vérifier les erreurs, gérer les ressources, réimplémenter quelque chose qui a déjà été fait" est un choix et non une obligation. La difficulté est de faire évoluer le code existant (et les devs old-school…), mais le gain (en termes de coûts sur le long terme) est plus qu'avantageux.

HS : pour l'importance de la partie "compilation du projet". Premièrement, je dirais que ce n'est pas si important que cela - cela prend du temps a mettre en place, mais une fois que c'est fait, on ne touche plus trop a la chaîne de build. Deuxièmement, cela n'est pas du au langage utilisé. Dans la majorité des projets que j'ai vu, les scripts de build servent surtout a gérer le multi-plateformes (nom de répertoire différents, localisation des libs, installation des dépendances, création de paquets/dépôts, etc), les tests, etc

Édité par gbdivers

+6 -0

Cette réponse a aidé l'auteur du sujet

Pour revenir aux questions de Mysterri1, j'aimerais appuyer un conseil déjà mentionné par Theo: apprends ce qui te fait plaisir. Même s'il existait un langage conçu pour et parfaitement adapté à l'apprentissage de la programmation, si écrire dans ce langage ne t'amuse pas, ce n'est pas un bon langage pour commencer.

Si jamais tu fais de la programmation professionnellement, tu auras amplement d'occasions de ne pas t'amuser en programmant. Ne t'impose pas ça sur tes temps libres. :)

+3 -0

Si on apprécie Ruby, qu'on veut des performances proches du C/C++/Java, le top à mon humble avis, c'est le langage Julia.

Actuellement je suis pas mal dessus, et j'avoue que je m'amuse bien…

Luthaf en parle ici ! Ça m'a laissé sur ma faim, mais ça m'a suffit pour me motiver à aller voir plus loin, l'objectif est donc atteint en ce qui me concerne.

Ça n'enlève rien au fait que je suis toujours un fan de python, C et l'utilisation de cython, cependant ce langage m'impressionne !

+4 -0

Actuellement je suis pas mal dessus, et j'avoue que je m'amuse bien…

Luthaf en parle ici ! Ça m'a laissé sur ma faim, mais ça m'a suffit pour me motiver à aller voir plus loin, l'objectif est donc atteint en ce qui me concerne.

fred1599

Cool, mon but est atteint =). Je me répète, mais n'hésitez pas à poser des questions sur le forum pour en discuter !

Et en effet, Julia a une syntaxe proche de celle de Ruby, et peut descendre assez bas niveau dans l'écriture du code tout en optimisant violemment, ce qui lui donne de bonne performances.

Toutefois, je ne le conseillerai pas forcément comme premier langage, sauf à aller chercher les réponses à ses questions en anglais, il n'y a pas grand chose en français dessus pour le moment.

Mon Github — Tuto Homebrew — Article Julia

+0 -0

Toutefois, je ne le conseillerai pas forcément comme premier langage, sauf à aller chercher les réponses à ses questions en anglais, il n'y a pas grand chose en français dessus pour le moment.

L'anglais n'est pas difficile pour tout le monde :)

Le déconseiller parce-que la documentation est anglaise, c'est pas dommage ?

+0 -0

L'important dans cette phase est comme premier langage. Pour moi la majorité des débutants sont encore jeunes, et pas forcément à l'aise avec l'anglais. Et même pour ceux qui sont plus à l'aise, lire en français reste plus simple que de lire en anglais.

Mais une fois les fondamentaux de la prog posés (variable, logique de base, contrôle et compréhension du flux d'instruction), en effet l'anglais n'est plus vraiment un problème.

Mon Github — Tuto Homebrew — Article Julia

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Salut,

En revanche, j'ai découvert un autre langage qui lui me parlait beaucoup plus, le Ruby, d'où les questions qui sont nées dans ma tête, pourquoi ce langage n'est jamais (ou très peu) conseillé ?

Mysterri1

Il n'y a pas spécifiquement de raison, cela dépend des personnes qui répondent au sujet et de leur affinité avec tel ou tel langage. Étant donné que ce site est développé en Python et que sa communauté comprend un certains nombres de développeur Python, il est normal que tu en entendes plus parler sur ses forums.

Pour autant, cela ne veut pas dire que le Ruby est un mauvais choix comme premier langage ou un mauvais langage tout court.

Pour finir, en fait on s'en fout du langage par lequel tu vas commencer (oui ça contredit les 3 points au dessus, ils sont un avis personnel). L'important c'est d'être motivé à apprendre. Commence par ce qui t'attire le plus (je te déconseille quand même d'enchaîner C puis C++, met au moins un autre langage entre les deux ou fait le sens inverse) c'est comme ça que tu seras le plus motivé et c'est donc comme ça que tu as le plus de chances de réussir.

Ksass`Peuk

J'approuve avec la plus grande ferveur.

Le C a 43 ans, quand on imagine à quoi ressemblait l'informatique il y a 20 ans c'est quand même hallucinant qu'on continue à apprendre le C.

Stranger

Pourquoi ? Quelque chose d'ancien est forcément inadapté ?

En C ou en C++, 90% du code d'un programme est là pour vérifier les erreurs, gérer les ressources, réimplémenter quelque chose qui a déjà été fait ailleurs […].

Stranger

J'aurais plutôt dit 99% histoire de bien pousser le troll jusqu'au bout.

+4 -0
Auteur du sujet

Bon, alors tout d'abord un grand merci à tous pour ces réactions.

Enfin, je te conseillerai également de te plonger également dans l'algorithmique pure. Ça paraît chiant comme ça, mais depuis que j'en ai fait en école d'ingénieur ça a changé ma vision des choses : ça te permet des concepts que tu retrouveras dans tous les langages, et qui faciliteront grandement tes apprentissages.

Theo

Oui, j'ai vu ça aussi plusieurs fois, et je pense que mon cerveau a volontairement fait en sorte de l'oublier, j'ai conscience que c'est important en tant que développeur, mais je suis issu d'une filière L (oui on existe encore :p ), comme beaucoup de ceux là, le moins que l'on puisse dire c'est que je n'excellais pas en "math" (parce que je suis convaincu qu'une personne à l'aise dans cette matière a/acquiert plus facilement cette manière de penser mais ça n'engage que moi), donc j'avoue que le terme en lui-même provoque des réactions allergiques chez moi, il faudrait que je trouve des cours "d'algorithmique pure" adaptés à mon niveau, c'est-à-dire zéro.

En l'occurrence, pour répondre @Mysterri1 sur ce point, il ne me semble pas qu'apprendre des langages dans le but d'en apprendre d'autres soit une bonne idée. D'une part parce que si on crée des langages différents c'est précisément pour qu'il ne permettent pas les mêmes choses. Et d'autre part parce qu'en essayant d'apprendre un langage en gardant en tête ce qu'on sait d'un autre, on ralentit son apprentissage, voir on le rend impossible. L'exemple typique étant l'apprentissage de C avant C++ qui pour la majorité des étudiants mène droit à l'échec. La bonne manière d'apprendre un langage c'est de ne garder en tête que les idées très générales comme l'algorithmique et des méthodes de modélisation (et là encore c'est à prendre avec des pincettes) et de se forcer à se remettre dans le rôle de débutant (ce n'est pas facile quand on connaît déjà plusieurs langages, je le concède).

Ksass`Peuk

Outre le fait que j'ai bien noté le retour de l'incontournable algorithmique, je réagis sur l'apprentissage de plusieurs langages, en fait le but n'était pas réellement d'apprendre un langage pour en apprendre un autre, mais plutôt d'apprendre un langage script (Ruby), un langage compilé haut niveau (C++) et un langage "bas niveau" (C), car je pensais, vraisemblablement à tort, que cela me permettrait une plus grande polyvalence et la possibilité de répondre à tous les besoins que je pourrais rencontrer.
En tous les cas, je prends bien en note ton conseil de se mettre à la place d'un débutant à chaque nouvel apprentissage

Python est un bon candidat effectivement parce qu'il te permettra de te concentrer rapidement sur l'algorithmique et sur la structure du code sans avoir à te soucier de problématiques lourdingue (quand on apprend déjà quelque chose de nouveau) de gestion des ressources.

Ksass`Peuk

Bien, justement, c'est là une de mes questions (à laquelle personne n'a souhaité/osé répondre :p ), Ruby possède des caractéristiques similaires non ?
@Taurre a répondu à ce point durant la rédaction de ce message.

Le Python n'est peut-être pas un langage parfait, mais c'est un langage propre qui permet au développeur de se concentrer sur l'essentiel. Tu as beaucoup plus de code pertinent, beaucoup moins de travail inutile à faire ; c'est un langage moderne, facile à utiliser (ce n'est pas une insulte, c'est bien d'être facile) et relativement performant.

Stranger

Ca se rejoint ce que je dis juste au-dessus, est-ce que cela signifie que Ruby n'est pas un langage "propre", ou qui a moins de code pertinent, ou qu'il n'est pas performant, voire un langage qui accumule plusieurs de ces défauts ?
Idem @Taurre a plus ou moins répondu, mais je suis toujours ouvert si quelqu'un a des apports (objectifs bien entendu) à faire.

Bref, pour l'instant, par rapport à ce qui a été dit, j’exclurai dans un premier temps le C pour "ne pas charger plus la mule".
J'aurais bien tenté le C++, mais comme il n'y a pas de cours C++ complet accessible gratuitement (et en français), je pense également le mettre de côté pour l'instant.

D'ailleurs petit aparté à ce sujet, j'ai lu le cours de @gbdivers jusqu'à l'exercice qui fait appel à l'algorithmique (sur lequel j'ai bloqué évidemment, honte à moi je sais), mais le cours en lui-même est plutôt abordable (jusque là tout au moins), relativement complet, et agréable à lire malgré quelques fautes de français ici et là.
Ce que j'apprécie par-dessus tout c'est la volonté de faire pratiquer, et la volonté de faire pratiquer de différentes manières, sur des petits exercices de quelques minutes avec des consignes, ou sur des projets plus ambitieux amenés à évoluer au fur et à mesure de l'apprentissage, je trouve ça vraiment génial.
Par contre, ça peut paraître "bête" mais serait-il possible de guider un peu plus le lecteur quant à l'utilisation de la documentation (du c++ bien sûr, et du compilateur si possible, clang dans ce cas), c'est peut-être évident et facile pour un professionnel, mais pour une personne qui apprend ça peut être compliqué, et ça me paraît être une clé essentielle de l'indépendance et du progrès de l'apprenant, c'est réellement le point qui m'a le plus ennuyé.
Au demeurant, j'attends avec impatience qu'il soit complet.

En définitive je pense suivre vos conseils et commencer par Ruby qui me parle plus a priori (je vais quand même regarder une dernière fois la syntaxe de Python afin de m'en assurer)…et des cours d'algorithmique puisqu'il semble que ça s'impose…

P.S.: Petite curiosité, y a t-il quand même quelques "Rubyistes" parmi vous (même si je n'en ai pas l'impression.) ?

+0 -0
Staff

En définitive je pense suivre vos conseils et commencer par Ruby qui me parle plus a priori (je vais quand même regarder une dernière fois la syntaxe de Python afin de m'en assurer)…et des cours d'algorithmique puisqu'il semble que ça s'impose…

Mysterri1

Garde bien à l'esprit qu'il s'agit de conseils et non d'obligations. L'algorithmique peut t'être utile, mais ce n'est en rien une obligation ou un prérequis. ;)

P.S.: Petite curiosité, y a t-il quand même quelques "Rubyistes" parmi vous (même si je n'en ai pas l'impression.) ?

Mysterri1

Je suis un fervent défenseur du C. Maintenant, entre le Python et le Ruby, j'ai tendance à préférer le second.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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