IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Apprendre la théorie avant la pratique : une bonne chose ? [Débat]


Sujet :

C++

  1. #101
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Citation Envoyé par koala01 Voir le message
    on retient beaucoup mieux ce que l'on a cherché par soi-même et ce à quoi on peut relier une anecdote
    Je dirais même plus : on retient beaucoup mieux ce que l'on a cherché par soi-même et ce à quoi on peut relier une anecdote!

    Plus sérieusement, je suis d'accord avec toi : c'est formateur et sûrement très pédagogique de jouer au debogueur.
    Je peux le concevoir avec un enseignant, dans la mesure où on peut faire confiance à ce dernier...
    En auto-didacte, ça me paraît quand même risqué.
    C'est sûr, il reste toujours le bon vieux livre avec exercices corrigés! ^^
    Disons que dans tous les cas, il faut quand même un garde-fou.

  2. #102
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    [quote=Aleph69;5420872]Je dirais même plus : on retient beaucoup mieux ce que l'on a cherché par soi-même et ce à quoi on peut relier une anecdote!

    Plus sérieusement, je suis d'accord avec toi : c'est formateur et sûrement très pédagogique de jouer au debogueur.
    Je peux le concevoir avec un enseignant, dans la mesure où on peut faire confiance à ce dernier...[QUOTE]Tu me fais me rendre compte que j'ai oublié deux règles importantes dans ma liste exhaustive:
    • Tout ce qui n'apparait pas dans l'algorithme est réputé inconnu (règle)
    • Toujours initialiser les variables aussi vite que possible (règle)

    En auto-didacte, ça me paraît quand même risqué.
    C'est sûr, il reste toujours le bon vieux livre avec exercices corrigés! ^^
    Disons que dans tous les cas, il faut quand même un garde-fou.
    Il faut quand même faire un peu confiance à son lectorat

    Si tu insiste sur la bêtise crasse du processeur;

    Si tu insiste sur la nécessité de prendre son temps avant de se lancer sur le clavier;

    Si tu insiste sur le fait que tu ne pourra donner au processeur que "l'intelligence" que tu sera en mesure ou que tu voudra bien lui donner;

    Si tu insiste sur la nécessité absolue d'avoir une logique à toute épreuve;

    Si tu insiste sur la nécessité de considérer tout ce qui n'apparait pas dans l'algorithme comme inconnu;

    Tu ne peux être tenu pour responsable si ton lecteur ne suit pas les conseils que tu lui donne
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #103
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Bonsoir,
    D'ailleurs, pour vos étudiants qui inversent les matrices des systèmes linéaires, vous devriez leur conseiller la lecture du paragraphe 9.2.5. de ce livre.
    La première fois, je leur coupe un petit doigt, en cas de récidive , j'ai des chargés de TP russes avec des barres à mines

  4. #104
    Invité
    Invité(e)
    Par défaut
    Très constructif.

  5. #105
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    ironie, quand tu nous tiens ...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  6. #106
    Invité
    Invité(e)
    Par défaut
    Je vais apporter une réponse plus précise que mon précédent message.
    Il y a 3 notions qu'il faut différencier : les tableaux, les matrices et les déterminants.
    Un tableau est un ensemble de valeurs rangés en lignes et colonnes.
    Une matrice est une représentation mathématique d'une application dans un espace vectoriel. Une matrice est un tableau. Le calcul matriciel consiste à faire des opérations entre les matrices de différents applications.
    Un déterminant est un tableau carré, représentation simplifiée d'un certain nombre de valeurs. Un déterminant a une valeur numérique.

    Il est bien évident que si les étudiants de Joel F ne savent pas cela (ce n'est pas de l'informatique, mais des mathématiques) comment leur reprocher quoi que ce soit.

  7. #107
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Si on avait commencé par t'expliquer ce que sont les boucles, les tests, les affectations, les variable, les types (primitif et ou définis par l'utilisateur) et que l'on t'avais incité à "jouer au processeur" pour vérifier si ta logique mène bien au résultat espéré, que l'on t'avais présenté (schéma à l'appui) les structures de base (piles, files, listes, arbres binaires) et que l'on t'avait habitué à jouer avec tout cela, tu aurais sans doute passé quelques heures de franche rigolade, et tu en serais sans doute arrivé à écrire un algorithme de tri à bulles sans même... savoir qu'il s'agissait de cela.
    Globalement, tu restes quand même dans un schéma très "impératif" quand tu conseilles d'apprendre la théorie , ce qui n'aide pas pour l'ouverture d'esprit.

    Jouer au processeur c'est très bien pour la pensée impérative, mais lorsqu'il s'agit de problèmes plus abstraits, dont la décomposition en étapes trop fines complexifie la compréhension du problème, ben ça marche plus très bien.

    Exemple : tu as parlé il y a quelques posts des tours de Hanoï. "La" bonne manière de résoudre simplement le problème, c'est de raisonner par récurrence (ou récursivité... une approche plutôt "mathématique").
    Si l'on devait débugger en jouant au processeur avec toute la profondeur de pile... Je pense que tu en ressortirais fou .

  8. #108
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Une matrice est une représentation mathématique d'une application dans un espace vectoriel.
    Une matrice est un objet mathématique avec des règles pour les manipuler (addition, produit, ...) . Ca peut servir à représenter une application linéaire, mais aussi un système linéaire d'équation ou encore un réseau de neurone. Dire que ca ne sert qu'au application linéaire est une grosse approximation.

    Un déterminant est un tableau carré, représentation simplifiée d'un certain nombre de valeurs. Un déterminant a une valeur numérique.
    Faux, le déterminant d'une matrice est un nombre calculé d'une certaine manière.
    Il est bien évident que si les étudiants de Joel F ne savent pas cela (ce n'est pas de l'informatique, mais des mathématiques) comment leur reprocher quoi que ce soit.
    C'est sympa l'attaque perso alors que vous même êtes loin d'être inattaquable sur le plan des compétences.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #109
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Exemple : tu as parlé il y a quelques posts des tours de Hanoï. "La" bonne manière de résoudre simplement le problème, c'est de raisonner par récurrence (ou récursivité... une approche plutôt "mathématique").
    Si l'on devait débugger en jouant au processeur avec toute la profondeur de pile... Je pense que tu en ressortirais fou .
    Personnellement, je ne suis pas exactement d'accord sur ce point, on peut très bien la résoudre par récurrence sans même savoir ce qu'est la récursivité avec un exemple simple d'une tour de 3 étages en se rendant compte après essais (erreurs), observation, logique (et l'appui d'un pédagogue pour les non-autodidactes) que finalement on fait toujours la même chose:
    1. Prendre le plus petit plateau excepté celui qu'on a déplacé en dernier et le déplacer à un emplacement valide
    2. Reprendre au point 1
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  10. #110
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Personnellement, je ne suis pas exactement d'accord sur ce point, on peut très bien la résoudre par récurrence sans même savoir ce qu'est la récursivité avec un exemple simple d'une tour de 3 étages en se rendant compte après essais (erreurs), observation, logique (et l'appui d'un pédagogue pour les non-autodidactes) que finalement on fait toujours la même chose:
    1. Prendre le plus petit plateau excepté celui qu'on a déplacé en dernier et le déplacer à un emplacement valide
    2. Reprendre au point 1
    Exactement... Si l'algorithme fonctionne pour trois plateaux, il fonctionnera pour 6, 10 ou 64 (au delà, et même pour 64, attend toi à passer des années à attendre que ca finisse )

    Mais 2^3-1 ne fait jamais que 7 mouvements, ce qui n'est pas encore *si* compliqué à gérer "à mano"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #111
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    Citation Envoyé par Davidbrcz Voir le message
    Une matrice est un objet mathématique avec des règles pour les manipuler (addition, produit, ...) . Ca peut servir à représenter une application linéaire, mais aussi un système linéaire d'équation ou encore un réseau de neurone. Dire que ca ne sert qu'au application linéaire est une grosse approximation.
    Je comprends tout à fait ce que tu veux dire mais pour information une matrice représente toujours une application linéaire, quel que soit le contexte, pour la bonne raison que les matrices sont des applications linéaires.

  12. #112
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    <HS>Un ensemble de matrices et un ensemble d'application linéaires sont isomorphe en posant las bases adéquates, mais ce sont bien deux ensembles distincts d'entités mathématiques qui existent par eux-même sans lien immédiat (sans définir de bases impossible de passer de l'un à l'autre), donc dire "les matrices sont des applications linéaires" est, AMHA, un peu fort.</HS>

  13. #113
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Globalement, tu restes quand même dans un schéma très "impératif" quand tu conseilles d'apprendre la théorie , ce qui n'aide pas pour l'ouverture d'esprit.
    Je ne suis pas si impératif que cela, vu que je parle au conditionnel

    Je ne fait que présenter un certain nombre de conditions dont il est vrai que j'ai tendance à croire qu'elles iront d'elles-même dans une situation "idéale"

    Le problème est que le débutant, surtout s'il apprend de manière autodidacte, a souvent une idée de ce qu'est un processeur et de son mode de fonctionnement qui est très loin de la réalité.

    Quand j'écris, en exagérant à peine qu'il ne comprend que le 0 et le 1 et qu'il est, à la base, capable exclusivement de trois choses: lire le contenu d'une adresse mémoire, copier le contenu d'une adresse mémoire et changer une valeur dans une adresse mémoire, on me prend à la limite pour un fou, car on ne peut pas imaginer que la petite centaine d'instructions qu'il utilise n'est capable que de faire cela.

    Pourtant, à l'usage, on se rend compte que la réalité est quand même fort proche de ce que j'écris

    Lorsque j'insiste sur le fait que le compilateur ne se posera jamais de question et qu'il se contentera d'exécuter les instructions dans l'ordre dans lequel elles arrivent, sans s'inquiéter de savoir s'il est effectivement cohérent de les exécuter dans cet ordre particulier et non dans un autre, c'est un fait dont il faut être conscient, qui met en évidence la nécessité de lui fournir une logique "à toutes épreuves".

    A partir du moment où l'on a pu convaincre le débutant de ces deux aspects purement réaliste, on lui a déjà à la limite donné tout ce qu'il faut pour lui permettre de jouer à se faire "aussi bête qu'un ordinateur", et on l'aura déjà mis dans une situation où tout le reste lui semblera "naturel".
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #114
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    <HS> +1 Flob90 qui tape dans le vrai. Une matrice c'est un tableau de nombre avec des opérations dessus. Point. Après, le coté représentation d'une fonction linéaire, ce n'est qu'une interprétation.

    Dans le même registre, c'est comme confondre une fonction f: R->R, son expression et son graphe dans un repère. Ce sont trois choses différentes car pas de la même nature.
    </HS>
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  15. #115
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Points : 46
    Points
    46
    Par défaut
    J'ai toujours pensé que l'algorithme est la base de tout.En effet, il faut d'abord avoir la solution au problème à résoudre avant de programmer.L'algorithme pourra ensuite être traduit dans le langage de choix du developpeur.
    Selon moi, en théorie, on pourrait traduire un algorithme dans tous les langages de programmation existant. Le seul problème restera les limites d'un langage par rapport à un autre pour exprimer tel ou tel aspect de l'algorithme.
    On doit donc rechercher un langage qui permette de faire tel ou tel chose en fonction des besoins de l'algorithme. Un peu comme ces mots anglais qui n'ont pas d'équvalent en français (traduction) mais qui une fois définit se comprennent tout de même -c'est juste qu'il n'existe pas de mots en français pour traduire le même concept-
    De même, avant de comprendre un langage de programmation objet, il faut comprendre le concept objet.Une fois le concept maîtriser, on pourra utiliser n'importe quel langage OO pour l'implémentation.
    Toute fois, il y'a des concepts qui s'expliquent difficilement, et qu'on comprend facilement après en avoir vu un exemple ie après un peu de pratique. Il faut noter dans ce cas qu'on apprend donc en regardant l'autre faire, mais justement celà ne constitue t'il pas la phase théorique, la phase pratique intervenant au moment où l'on s'y met soit même?

  16. #116
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    </HS>

    Citation Envoyé par Davidbrcz Voir le message
    Une matrice c'est un tableau de nombre avec des opérations dessus. Point.


    Citation Envoyé par Flob90 Voir le message
    Un ensemble de matrices et un ensemble d'application linéaires sont isomorphe en posant las bases adéquates, mais ce sont bien deux ensembles distincts d'entités mathématiques qui existent par eux-même sans lien immédiat (sans définir de bases impossible de passer de l'un à l'autre
    En fait, si je comprends bien, tu distingues une application linéaire et sa matrice.
    C'est effectivement comme cela qu'on l'enseigne et c'est très bien comme cela.
    Sur ce point, je suis tout à fait d'accord avec toi.

    Ceci dit, tu peux tout de même dire qu'une matrice est une application linéaire.
    Soient un corps K, un K-espace vectoriel E de dimension finie n.
    Pour deux vecteurs u et v de E, une matrice A de K^(nxn), un scalaire lambda de K, on a
    A*(u+lambda*v) = A*u+lambda*A*v.
    Autrement dit, A est une application linéaire de E dans Im(A).

    Bien sûr, derrière tout cela, comme tu fais bien de le noter, se cache la notion d'isomorphisme.
    Et comme tu le sais sûrement, on identifie entre eux les espaces qui sont isomorphes les uns aux autres.
    En passant, la propriété d'isomorphisme entre deux espaces finis est indépendante du choix des bases.

    Citation Envoyé par Flob90 Voir le message
    donc dire "les matrices sont des applications linéaires" est, AMHA, un peu fort.
    Non, c'est juste trop fort!

    </HS>

  17. #117
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je vais tenter de donner mon avis sur la question initiale, bien que je n'ai que survolé les autres posts sur le sujet.

    J'ai l'impression qu'il y a eu un glissement sur la question. Au début, c'était :
    Lors de l'apprentissage, faut-il commencer par la théorie ou par la pratique ?
    Mais beaucoup de post que j'ai pu lire étaient plus orientés :
    Lorsqu'on est confronté à un nouveau problème, faut-il commencer par une phase de réflexion ou par sa réalisation ?

    Je pense que ces questions appellent des réponses différentes. Et pour la première, je dirais : Commencer par la pratique, sans hésiter.

    Pourquoi ? Principalement pour deux raison :
    Déjà, la théorie, c'est un peu le mythe de Sisyphe, on croit aborder la théorie, on pousse sa pierre, pour finalement se rendre compte en arrivant en haut qu'on ne faisait que mettre en pratique une autre théorie sous-jacente, et on recommence. Appliquer en C++, la théorie sur les langages informatiques nous entraîne vers l'informatique formelle d'un côté, vers l'électronique numérique de l'autre. Faire de la théorie sur l'électronique numérique nous entraînera vers la physique du solide, la physique statistique... Commencer par la théorie me semble impossible à mettre en œuvre pour cette raison théorique.

    Et surtout, parce que la théorie est bien plus abstraite et complexe, et que si on n'a pas déjà une certaine compréhension intuitive des concepts manipulés auxquels se raccrocher, le risque d'être submergé est très grand. Je vais prendre quelques exemples :

    On a tous commencé les math par apprendre à compter, puis par apprendre à faire des opérations. L'algèbre de Peano vient bien après (et pour beaucoup, elle ne vient même jamais). Et je ne pense pas qu'il soit possible de voir où l'on va avec l'algèbre de Peano si on n'a pas en tête que quelque part, ça sert à définir ce qu'est 3 et ce que signifie 2 + 3.

    Quand on étudie une langue vivante, on commence toujours (sauf si on fait de la linguistique, mais c'est une contexte différent) par apprendre plus ou moins par cœur quelques textes basique où l'on apprend à dire bonjour (une sorte de Hello world! ), on étend autour de ces exemples simples, puis seulement après, quand on a un minimum de vocabulaire, on commence à nous parler de la structure grammaticale de la langue en question, et de ses règles de conjugaison, déclinaisons...

    Un exemple plus proche de l'informatique : Dans mon école d'ingénieur, à mon époque, on avait un cours de génie logiciel en première année. J'avais déjà fait de la programmation avant, je m'étais déjà cassé les dents sur un programme de plus de 100 lignes, j'ai trouvé ce cours intéressant, il posait les bons concepts. J'en ai discuté avec pas mal d'amis qui n'avaient pas cette expérience préalable, l'avis était unanime : Le cours était simplement pour eux imbattable, incompréhensible et inutile. A tel point qu'ils ont réussi à le faire supprimer de l'enseignement. Il était pour moi simplement mal placé.

    Il y a une image que j'aime beaucoup dans le dernier Stroustrup, qui prend à contre pied une idée pré-construite, qui est de dire qu'il faut apprendre à marcher avant d'apprendre à courir. Il fait remarquer que quand on regarde un bébé, il commence par savoir courir (en tombant régulièrement, bien entendu, mais ce n'est pas grave), avant d'apprendre la maîtrise fine et subtile des ses mouvements nécessaire pour marcher.

    Je pense qu'en C++, c'est un peu pareil, il faut commencer par des programmes simples, des aspects bassement techniques qui passent par la syntaxe ou la manière de compiler son code. Une fois ces bases apprises, il faut laisser le temps de jouer un peu avec ces programmes simple, en faire des un peu plus complexes, laisser l'étudiant écrire du code spaghetti, lui demander de faire une modification dans son code, le laisser en baver un peu.

    Comme ça, quand on lui présentera enfin des outils qui lui permettent d'organiser le code, le principe open-closed, il saura quels sont les enjeux derrière, et il aura la motivation et les prérequis nécessaires pour passer aux aspects plus théoriques.

    Pour prendre un ultime exemple, les règles du C++ pour séparer son code en plusieurs fichiers sont, il faut bien l'avouer, tordues, mal faites, antédiluviennes. Pourtant, j'ai vécu leur découverte comme une vraie libération, car j'avais du bosser avec du relativement gros code mono-fichier auparavant. Et à cette époque, je savais déjà (approximativement) la différence entre déclaration et définition, et les notions de classe, fonctions, variables. Du coup, avec la motivation et le bagage nécessaire, je n'ai pas eu de problèmes pour les apprendre, et comprendre ce qui les motivait.

    Attention, quand je plaide pour la pratique en premier, je ne plaide pas du tout pour la pratique uniquement ! La théorie est nécessaire à un moment ou à un autre, et la pratique seule ne peut pas permettre de prétendre à une maîtrise suffisante du sujet. Simplement, pour moi, elle vient en second, chronologiquement parlant.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  18. #118
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Totalement d'accord!

  19. #119
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par susanoo Voir le message
    J'ai toujours pensé que l'algorithme est la base de tout.
    Je dirais une des bases de tout. Pour programmer, il y a pour moi au moins besoin d'avoir 4 bases :
    - L'algorithmie,
    - Le génie logiciel (organisation de code, la POO en est simplement un aspect),
    - La syntaxe du langage utilisé,
    - Une certaine connaissance du domaine du problème.

    Il y a un grand nombre de lignes de code (au pif 80%) dans les programmes que je fais où les algorithmes sont triviaux, et ne méritent pas qu'on leur accorde la moindre attention spécifique. Et il y a même des développeurs (par exemple dans ce qui est lié à l'IHM) qui sont avant tout des assembleurs et qui ne voient jamais le moindre véritable algorithme de leur vie.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #120
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je dirais une des bases de tout. Pour programmer, il y a pour moi au moins besoin d'avoir 4 bases :
    - L'algorithmie,
    - Le génie logiciel (organisation de code, la POO en est simplement un aspect),
    - La syntaxe du langage utilisé,
    - Une certaine connaissance du domaine du problème.
    Je ne sais pas s'il était voulu de ta part de placer ces bases dans cet ordre particulier, mais de mon point de vue, ce sont effectivement les quatre bases nécessaires, et il faut les apprendre... dans cet ordre précis.

    Quand elle est nécessaire (comprend: dés qu'il faut faire autre chose que de monter un mur avec les briques faites par d'autre), l'algorithmie sera absolument nécessaire avant de pouvoir passer à la deuxième étape qui est le génie logiciel.

    De même, je trouve que la syntaxe du langage utilisé ne sera utile qu'une fois le génie logiciel plus ou moins maitrisé, car:
    • Si on apprend à créer une classe sans savoir de quoi il retourne ni pourquoi le faire, cela ne sert finalement pas à grand chose.
    • Ou, si on accorde trop d'importance à la syntaxe d'un langage particulier, on devra pour ainsi dire "tout reprendre à zero" si, d'aventure, on décide de se tourner vers un langage équivalent (en terme de possibilités et de concepts utilisés) mais présentant une syntaxe trop différente.


    Il y a un grand nombre de lignes de code (au pif 80%) dans les programmes que je fais où les algorithmes sont triviaux, et ne méritent pas qu'on leur accorde la moindre attention spécifique.
    C'est vrai lorsque l'on a déjà été mis en présence de suffisamment de cas pour se rendre compte que ces algorithmes sont triviaux, je ne dis absolument pas le contraire.

    Par contre, si tu te remet dans le cadre d'un débutant qui est confronté à un problème pourtant trivial pour la première fois, le problème n'a pas l'air si trivial pour lui

    Tu as donc deux solutions: soit, "un bon samaritain" lui donne l'algorithme "tout fait" en lui disant "cet algorithme s'appelle XXX, c'est lui que tu dois utiliser", soit le débutant doit réfléchir "de lui-même" à la logique à mettre en oeuvre, car, comment trouver, même sur internet, une information dont on ignore tout

    Si on n'a pas déjà appris au débutant à réfléchir à la logique, à être attentifs à certains points particuliers, il ne sera sans doute pas en mesure de donner un résultat correct autrement que par... essais (et échecs) successifs, en ne sachant à la limite pas ce qu'il essaye d'une fois à l'autre.
    Et il y a même des développeurs (par exemple dans ce qui est lié à l'IHM) qui sont avant tout des assembleurs et qui ne voient jamais le moindre véritable algorithme de leur vie.
    Tout à fait...

    Mais là, nous arrivons dans une situation réellement particulière
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Débat : Les stages sont ils une bonne chose pour les jeunes
    Par pmithrandir dans le forum Politique
    Réponses: 23
    Dernier message: 27/05/2011, 02h32
  2. Réponses: 43
    Dernier message: 02/03/2011, 11h20
  3. Théorie avant la pratique : le commencement. secteur de boot
    Par golden boy dans le forum Programmation d'OS
    Réponses: 6
    Dernier message: 03/12/2010, 19h49
  4. Réponses: 24
    Dernier message: 06/01/2010, 16h36
  5. Réponses: 14
    Dernier message: 20/05/2009, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo