Bonjour, je me lance dans l’apprentissage de la programmation en C++. Je n’en suis qu’aux bases et je trouves ca très passionnant. Sur les conseils d’un ami, je dois me familiariser avec les paternes pour avoir les bonnes techniques.
C’est un peu déstabilisant tant c’est vaste et comme je n’ai pas de projet concret donc je ne fais que des petits programme sur console.
Je poste sur le forum juste pour avoir vos avis et si je pourrai facilement apprendre les autres langages en approfondissant le c++.
Merci.
Bonjour @Fred450 ,
super que tu te lances dans la programmation.
je te félicite.
pourquoi avoir choisi C++ ?
Je pose la question, car je pense que ça n’est pas le langage n°1 que je recommanderai.
Surtout pour un débutant. Mais il se peut, que tu aies une bonne raison, vouloir réaliser un projet en particulier, ou sur le conseil d’un ami.
Je ne veux pas trop dire du mal du C++, car je n’ai pas suffisamment programmé.
Pour info, dans le noyau Linux, c’est quasiment tout en C (et non pas C++), et le langage Rust apparaît, progressivement, avec quelques déboires, cependant.
moi, j’aime bien Ruby
Pour ma part, je te conseillerai plutôt Ruby.
C’est un petit langage de programmation interprété, d’origine japonaise. Il est réputé pour être élégant et agréable. Idéal pour l’apprentissage, on ressent vite les joies de la programmation, du débutant à l’expert.
à propos des paternes
il me semble, dis-moi si j’ai tort, que tu mentionnes les Design Patterns par la bande des 4 grands
J’ai choisi le c++ par hasard on va dire, j’ai regardé des vidéos sur la programmation et je me suis dit pourquoi pas?
A ce que j’ai compris les OS sont pour la plupart coder en c++ ce qui m’a tourné vers ce choix.
C’est surtout par curiosité et que malgré mes recherches je me retrouve sans emploi donc j’apprends la programmation en autodidacte.
Le langage C n’est pas très loin du c++ et un ami m’a dit que c’est une base solide qui me permettra de me familiariser avec la plupart des langages.
J’ai déjà entendu parler de Ruby sans l’avoir essayé, je vais y jeter un œil.
C’est bien des design-patterns dont je parle.
https://refactoring.guru/design-patterns/cpp
Je commence juste, j’ai reçu cette doc d’un ami.
Sur ses conseils, il faut que j’apprenne a mettre en place les bonnes techniques et comprendre l’idée dernière chacun des patrons de conception ( à quoi cela sert et cela résous quel problème) , après le reste c’est l’implémentation.
Merci de ton retour.
la plupart, non. il s’agit surtout de Windows, tandis que Macosx est écrit en Objective-C
[je peux me tromper car] comme ce sont deux systèmes privateurs, personne ne peut aller vérifier et constater à quel point c’est le bordel à l’intérieur ! D’ailleurs, du peu que je connaisse, Apple se détourne de l’Objective-C en faveur de Swift et Windows flirte avec Rust.
Bref, le C++ c’est plutôt une “antiquité”. Commencer à coder en 2024 avec ce langage ne me semble pas pertinent. À mon humble avis, tu choisis la voie la plus difficile et cela pourrait te dégouter de la programmation.
pour les Design Patterns, comment dire ? oui et non.
le bouquin dont je faisais réfèrence, c’est un peu comme la Bible (ou le Coran, ou …). Tu y trouveras des éléments de sagesse incontournables, mais dans un style “emprunté” avec des références d’époque relativement austères par rapport à l’esprit d’aujourd’hui.
Bref, le risque c’est d’être dégouté.
à mon humble avis, l’apprentissage de la programmation doit d’abord susciter de la joie.
Je pense que si @nathalierun lit ce forum, elle te parlerait du langage Snap! en particulier. Et les autres @all, vous en pensez quoi ? Comment aider @Fred450 à bien commencer la programmation
Bonjour Fred,
Y a quelques années en arrière j’avais suivi un cours en ligne (MOOC) pour apprendre la programmation fonctionnelle avec OCaml et je trouvais ce cours, orienté pratique, passionnant. L’équipe pédagogique était super, les exos guidés et il y avait un projet à rendre à la fin de la session. J’ai tellement aimé que je suis allé au bout et rendu le projet.
Actuellement il y a un cours ouvert pour Python
Le cours sur OCaml n’est plus en ligne malheureusement, on n’a plus accès aux supports (vidéos, exercices, corrections), c’est dommage, car je l’aurais même refait volontier :
Une suggestion donc, t’inscrire à un cours en ligne, et en quelque sorte te retrouver dans une classe (virtuelle) comme si tu étais à la fac. Je me rappelle, à l’époque c’était @gwena qui m’avait poussé à m’inscrire à un MOOC
@pvincent
Tu as raison que l’apprentissage doit être un moment de plaisir et pas de galère. Pour le peu que j’ai vu du c++ , je trouves ca passionnant.
Je viens de comprendre comment générer des nombres aléatoirement avec rand() et srand() et time.
J’apprends les bases sur différents codes libres sur internet comme:
https://hackr.io/blog/cpp-projects
Le tout compilé avec CodesBlocks, je dois essayer visual studio aussi pour me familiariser.
@jao a partagé un lien intéressant sur python que je vais essayer aussi, je me suis inscrit sur mooc.
Je suis sous Windows mais j’ai des machines virtuelles Linux que je dois apprendre a compilé en ligne de commande.
Merci de vos précieux conseils.
si jamais tu pars sur Studio Code, je te suggère de zapper, et de le remplacer par Codium, plus libre, plus éthique. C’est un peu pareil que Chromium en lieu et place de Google Chrome™. Mais le meilleur navigateur reste néanmoins Firefox
Bon courage, bonne découverte de la programmation.
N’oublie pas de choisir une licence libre et de partager tes œuvres avec une forge git
de ton choix.
Merci beaucoup pour ces conseils avisés. Je n’y manquerai pas de vous tenir au courant.
Bonjour,
À mon tour de mettre mon petit grain de sel de conseil
Personnellement, j’ai commencé la programmation avec le FORTRAN 77 en 1980 car je faisais une thèse scientifique. Donc langage parfaitement adapté au traitement de données scientifiques à l’époque.
Après, travaillant dans un bureau d’études sur des modélisations diverses notamment pour EDF, je me suis mise au langage C car j’avais un choix libre du langage. Tout comme vous, @Fred450 , je me suis orientée vers le langage C car il était à la base de nombreux systèmes d’exploitation dont bien sûr le système UNIX pour lequel le langage avait été conçu.
Aujourd’hui, en suivant le même raisonnement, apprendre un langage orienté objet comme le C++ ne sera pas une perte de temps.
Mais @pvincent a raison, cela risque de vous dégoûter. @pvincent avait réussi à un moment donné à me transmettre sa passion pour Ruby que j’ai essayé et trouvé vraiment très élégant.
J’ai touché à de nombreux langages et étant de la vieille école, je ne me suis jamais réellement penchée sur un langage objet. C’est un tord…et cela me manque cruellement aujourd’hui pour un projet créatif que je maintiens depuis 2018.
Dans ce lien (si vous avez le temps…), en dépliant certains niveaux, je me suis attachée à indiquer les outils que j’utilisais (machine, langage, support) jusqu’en 2019. Il faut que je le complète car j’ai rencontré Snap*!* en 2016 et depuis, je n’ai programmé - pour moi - uniquement dans ce langage car il me correspond parfaitement, et me permet de développer ma créativité. Bien sûr j’ai fait beaucoup de Python puisque je l’enseignais en ISN.
Snap*!* est un langage à briques, qui permet d’apprendre de manière ludique la programmation et des notions essentielles telles que fonctions, récursivité. Il permet de programmer facilement des jeux par exemple.
Snap*!* est bien sûr un logiciel libre.
About Snap*!*
Résultats de tout ceci : Perso, je vous conseillerais d'apprendre un langage texte de votre choix (C++, Python ...) et de faire du Snap*!* en parallèle sans réserve ;-)
(fait avec Snap*!* bien sûr)
Bonne programmation !!!
C’est un vrai bonheur de programmer. On pourra peut-être relancer des ateliers avec @pvincent d’ici quelques temps.
Merci de vos conseils, ca m’est vraiment utile. Je me suis inscrit sur le MOOC que @jao a partagé, je l’ai commencé mais j’ai peur de mélanger les pinceaux avec le c++.
De toute façon j’ai du temps a y consacrer. J’avais déjà entendu parler de snap mais sans vraiment approfondir, ce sera l’occasion.
Le lien que vous avez partagé est très intéressant et quel parcours!
Merci a vous tous.
Je vous partage le dernier code que j’ai fait.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
//Initialisation d'une seed aleatoire
srand(time(0));
//Generer le nombre secret entre 1 et 100 et la proposition
int nombreSecret = rand() % 100+1;
int proposition(0);
//Message d'accueil
cout << "Bienvenue, je vais choisir un nombre entre 1 et 100." << endl;
cout << "Pourriez vous devinez lequel?" << endl;
cout << "BONNE CHANCE" << endl;
//Boucle des reponses
while(proposition != nombreSecret)
{
cout << "Entrez votre proposition? " << endl;
cin >> proposition;
if (proposition>nombreSecret)
{
cout << "Trop haut! Essayez encore :" << endl;
}
else if (proposition<nombreSecret)
{
cout << "Trop bas! Essayez encore :" << endl;
}
else
{
cout << "Felicitations vous avez trouvez le nombre secret!!!" << endl;
}
}
return 0;
}
merci pour cette belle réponse @nathalierun
c’est vrai qu’un atelier programmation ça pourrait vraiment être cool.
j’ai l’impression qu’on pourrait vraiment s’amuser
ah le fameux Guess my number
l’exercice parfait pour apprendre à programmer.
je partage ma version en ruby
#!/usr/bin/env ruby
mystery = (1..100).to_a.sample
attempt = 1
puts 'Guess the number (from 1 to 100)'
loop do
print "attempt##{attempt}: "
input = gets.to_i
if mystery > input
print '⬆ try upper, '
elsif mystery < input
print '⬇ try lower, '
else
puts "found in #{attempt} attempts"
break
end
attempt += 1
end
La ligne 3 illustre la simplicité de ruby.
Je construis un intervalle de 1 à 100, le transforme en tableau puis pioche de manière aléatoire l’un des éléments grâce à la fonction Array#sample
Après avec la boucle et les tests conditionnels, j’avoue, c’est moins élégant. Mais il me semble que l’on arrive difficilement à exprimer cet algo de manière “fonctionnelle” (je peux me tromper). Autrement, cela prendrait encore beaucoup moins de ligne
quelques briques en snap! pour réaliser le même jeu
Salut, je vois bien la simplicité de ruby par rapport au c++.
Je me suis inscrit au mooc sur python et ca va je m’en sors bien. Je vois que ce que j’ai appris du c++ m’est bien utile pour apprendre un autre langage.
En ce qui concerne snap, je suis un peu perdu vu le nombre de blocs qu’il y a mais je vais m’y mettre d’ici peu.
Merci de votre aide.
Ok, je m’incline, je suis bluffé par son élégance, d’où le nom RUBY.
salut djtuxxx,
toi, tu l’aurais fait en quoi Python ? Lua ? autre ?
Bonjour,
Voila ma version en python:
from random import randint
print("Devinez le nombre secret entre 0 et 100 !")
nbSecret=randint(0, 100)
reponse = int(input("Entrez votre reponse : "))
while reponse != nbSecret:
if reponse < 0 or reponse > 100:
reponse= int(input("Entrez un nombre entre 0 et 100 : "))
elif reponse < nbSecret:
reponse = int(input("Trop bas, veuillez réessayer : "))
else:
reponse = int(input("Trop haut, veuillez réessayer : "))
print("Bravo vous avez trouver le nombre secret !")
cool @Fred450,
c’est intéressant le fait de voir en 3 langages différents quasiment le même code.
en revenant, sur ta première version (C++), la méthode cin
semble être capable de transformer une entrée (sous forme de String) et la convertit immédiatement en int . Est-ce que je me trompe ?
Par ailleurs, je crois que si par malheur, on entre autre chose qu’un nombre ‘abc’ par exemple, le programme plante, non ? (ou plutôt rentre dans une boucle infinie, un truc comme ça…)
pour la version Python, j’avoue que ça illustre bien une différence avec Ruby.
tu noteras l’utilisation de la fonction intégrée int()
. autrement dit, elle fait partie des instructions de base de Python.
int("50")
tandis qu’en Ruby, tout est 100% objet
"50".to_i
la méthode appelée est String#to_i
qui demande à l’objet de se convertir lui-même dans un autre objet. c’est une inversion de responsabilité. généralement, plutôt bon pour apprendre la programmation orientée objet => tout penser sous forme d’objet et de classe
ps: je pressens que les adeptes de la programmation fonctionnelle vont me faire une remarque…
Ruby est vraiment pratique.
Pour le c++ comme j’ai définit la variable proposition en int, l’entrée cin sera forcement int.
Il interprète les données en fonction du type de la variable.
Mais dans le programme plus haut en effet si tu mets autre chose qu’un entier il va boucler indéfiniment, faudrait que j’intègre d’autres conditions pour ne pas avoir cette erreur.
A ce que j’ai compris si tu mets des espaces comme dans une phrases par exemple, le programme ne va pas comprendre sauf si tu ajoute getline() avec la commande cin: getline(cin, phrase) si je me souviens bien.
De cette façon le programme accepte tous les caractères jusqu’à ce que tu tapes la touche entrée (Pour écrire le nom et le prénom par exemple).
Après je commence juste.
Je trouves python plus pratique pour les entrées.
par exemple:
entrée=float(input())
La variable est directement affecté a input(), mais le problème c’est comme tu dis, faut préciser int ou float pour convertir string en nombre vu que par défaut il renvoie string.
Je pense que c++ aussi doit avoir des trucs bien sympa mais je trouves python plus facile a apprendre surtout pour sa console intégré (je suis avec pycharm).
En tout cas je trouves ca passionnant.
ok, bien vu, tu as creusé, belle explication.
je pense que tu effleures à peine les “péripéties” d’apprentissage d’un langage comme C++.
il y a plein de subtilités, et c’est dur de faire du code “propre” rapidement et simplement.
mais, il me semble que tu montres de la détermination, donc rien n’est impossible…
gravir la montagne, tu pourras.
–Yoda