Bonjour,
Je viens de poster une question à laquelle Mayti4 a eu la gentillesse de répondre (merci encore), et après réflexion et une remise à l'étrier depuis quelques jours, je m'en pose une autre.
En tant qu'étudiant, nos profs nous avaient présenté le Pascal, Fortran et Latex comme des outils de création classique. Par là je veut dire des présentation comme "bon, ce problème est à résoudre pour la semaine prochaine, le compilateur xxxx est sur votre compte vax (ou autre)".
Ensuite la création, bien que laborieuse au début, se faisait via quelques docs épars (internet n'en n'était qu'à ses débuts fin 80 début 90), mais le gros du travail restait le bon fonctionnement du résultat à atteindre. L'apprentissage ne représentait que 20-30% tu temps et de l'effort. Comme je faisais des maths le but n'était pas de faire de la programmation, mais de créer des algorithmes, la programmation en suivait naturellement.
Quelques années plus tard j'ai été confronté à l'Objet, pas en tant que
défi, mais en tant qu'une nouvelle (et plus simple / logique) approche au développement. D'abord via VB, que j'ai trouvé excessivement simple à utiliser, créant un prog de maths facilement (en tant que contexte de formation perso) et appréciant la facilité de créer des interfaces graphiques.
Dans la foulée j'ai approché les MFC, sachant que c'était la façon C++ de faire des IHM. J'en ai été très rapidement dégoûté, constatant qu'il fallait beaucoup d'effort pour faire des choses simples (plusieurs 100aines de Ko pour une fenêtre, code créé par VS afin de "simplifier" les choses).
Le C a été relativement simple, les struct étant assez logiques, les pointeurs un peu moins. Je comprend à peu près leur utilité dans le concept de la gestion dynamique de l'information, mais n'en n'ai jamais réellement eu besoin.
Puis est venu le C++.
Là je dois dire que je ne comprends plus. Autant la nature atomique de l'assembleur me paraît un mal nécessaire puisque nous faisons appel au langage "mathématique" de base du proc, autant la difficulté d'apprentissage du C++ me paraît absurde.
Je m'explique : le concept de l'objet, les classes et leur puissance, ok, je vois en quoi cela est utile pour de gros codes : par expérience faire un prog de plusieurs 1000ers ou 10aines/100aines de milliers de lignes (typique pour les codes de calculs scientifiques - mon domaine) devient très lourd à gérer. La structure de gestion de l'information fournie par le C++ me paraît alors bonne et intelligente (je ne suis pas paternaliste ou arrogant ici), cependant même en lisant des livres sur le C++, comme LE PROGRAMMEUR ou le Soustrup, je ne vois pas ni comment ni pourquoi associer un nom de string - ligne - à c_str(). Je comprends que c_str() est une fonction de la classe string appelée ligne (je crois que c'est çà) mais comment puis-je le savoir ? Où puis-je trouver une liste / description des classes et leur fonctions associées?
Mon problème n'est pas tant d'ecrire un algo, çà je sais le faire depuis belle lurette, mais quels sont les outils / fonctions/ mots-clés disponibles et comment fonctionnent-ils?
Sous VB les "dépendances" sont fournies quand on écrit le code, où puis-je trouver ces éléments ? Passer 3 jours pour lire un texte et l'utiliser comme nom de fichier en C++ est hallucinant.
Je sais maintenant que ligne.c_str() fait le job, mais je ne sais toujours pas pourquoi, c'est-à-dire ce que fait c_str(), ni qu'elles sont les autres fonctions associées à ligne ni comment les utiliser.
Et je dois dire que lire 1600 pages avant de pouvoir commencer est décourageant (j'exagère bien sûr). Dans tous les autres languages, pour chaque tâche il était possible de trouver quelques lignes de code qui donne en deux temps trois mouvements la façon de faire les choses. Dans ces 1600 pages je n'ai trouvé que de la théorie qui renvoyait à d'autre méthodes théoriques qui renvoyaient à .....
Je sais que le C++ est un langage difficile, mais je pense que c'est surtout dû au changement de paradigme de programmation, on ne peut plus coder linéairement, mais réfléchir aux liens abstraits entre les différents éléments d'information et d'autres affaires de gestion de mémoire etc, mais ceci n'a rien à voir avec savoir quels sont les outils et comment les utiliser afin de coder suivant ce paradigme.
Pour ma part ce n'est pas - en tout cas je ne pense pas que ce le soit - la façon de réflechir à la codification, mais comment j'utilise quoi pour le faire.
Ex : en fortran pour lire le contenu d'un fichier on utilise open, puis on donne le nom du fichier, puis on lui attribue un chiffre de référence. Ensuite pour ecrite ou lire on utilise read ou write puis le chiffre, puis un autre chiffre de référence de format (si on veut) puis la variable contenant l'info.
en C++ il faut ouvrir, ce qui est l'apprentissage d'une autre syntaxe, ifstream, mais ensuite il faut savoir que c_str() existe et comment on l'utilise.
Alors j'obtiens des réponse du style : lit stl, ou : tout çà c'est dans la bibliothèque, etc ...
Je comprend que pour être pro il faille 3 ans, mais pour faire des choses simples, quelques jours devraient suffire non ? Surtout si on a plusieurs années de dev derrière soi.
Donc voilà, ce que je cherche et espérais trouver dans ces bouquins est non seulement la théorie (que je trouve très utile), mais aussi des "recettes" pour faire des choses simples afin d'apprendre rapidement. La compréhension de fond des choses arrivera plus tard, une fois le fonctionnement maitrisé.
On n'apprends pas une langue (humaine) en ouvrant un livre, mais en le baragouinant au départ et en étant soumis à nombre d'exemples, en testant, en se plantant, mais en comprenant grosso modo comment çà marche. L'autonomie çà vient après.
Un exemple de mon état de frustration (pour ceux qui connaissent): une personne demande comment on peu prévoir la météo, je réponds : apprends les EDP.
Je comprendrais parfaitement que sa réponse soit du genre : pourquoi? Quel rapport? Et qu'est-ce ?
Et bien c'est truc machin chouette.
Ok, et alors ??
etc ...
Autrement dit je lui demande de comprendre, plutôt que de donner l'info mathématique en disant comment l'utiliser. Une fois que çà "tourne" il pourra, si çà lui chante, approfondir.
Bon j'arrète là. Je remercie encore celles et ceux qui participent et fournissent de l'info à des pauvre âmes un peu paumées comme moi, et j'espère devenir assez compétent rapidement pour faire de même, comme je le fais dans d'autres domaines.
Commentaires appréciés.
Partager