Avec mon premier ordinateur (un SinclairZX81), ainsi qu'avec ceux que je me suis offerts par la suite (y compris mes calculatrices HP), mon activité principale a toujours été la programmation. Durant un certains temps, j'ai papillonné entre différents langages, essentiellement différentes versions de BASIC.
Lors de ma première année de mon cursus informatique, on a vu plusieurs langages, mais essentiellement à titre d'information (Fortran, LISP, Prolog, divers assembleurs...), pour finalement se concentrer sur le Pascal. Dés lors, je développais tous mes logiciels en GFA Basic sur mon Amiga, avant de les transcrire en (Turbo-)Pascal, pour pouvoir les faire tourner sur nos PC du lycée, qui faisait tourner MS-DOS.
Puis j'ai découvert le C. Enfin pouvoir faire tourner (après recompilation, évidemment) tous mes programmes développés sur mon Amiga sur les PC du lycée sans avoir à les transcrire. Bon, évidemment, j'ai été confronté a quelques problèmes de portabilité, mais qui ont vite été résolu avec quelques directives préprocesseurs bien senties.
Puis j'ai été amené à choisir entre le C++ (oui, on y arrive) et Java. J'ai hésité pendant assez longtemps pour finalement choisir le C++. Rétrospectivement, je me rend compte que j'ai choisi le C++ pour des mauvaises raisons, dû à une certaine méconnaissance de Java, mais que j'ai finalement quand même fait le bon choix.
Je suis quasiment resté au C++ de mes débuts. Les seules nouveautés que j'ai adoptées sont les mutables (parcimonieusement), mais surtout, et c'est relativement récent, les variadics templates (je ne connais pas le terme français). J'étais souvent tenté d'utiliser les fonctions variadiques, issues du C, mais je me réfrénais car ce sont de vrais appeaux à bugs. Mais, depuis que je peux utiliser les variadics templates à la place, je me lâche. Ceci dit, il m'arrive encore d'utiliser les fonctions variadiques, car il y a des situations où l'on ne peut les remplacer par des variadics templates.
Quand je fais référence au langage que j'utilise pour développer, je parle de C/C++, mais pas au sens donné dans la dépêche. Je signifie par ce terme que je développe en langage C++, mais sans utiliser les bibliothèques C++, ni même C, standards. Comment ce fait-ce ?
J'ai, un jour, était engagé sur une mission durant laquelle je devais développer un logiciel en C++, logiciel destiné à être utilisé en production. Comme compilateur, je disposais d'une des premières versions de Visual C++ (sur cette version, le multitâche était une option expérimentale qui devait être explicitement activée ; par défaut, lorsqu'on lançait une compilation, on ne pouvait pas manipuler les fichiers sources en même temps !). Je prend donc la documentation papier officiel sur la STL, et voit, en première page, une notice enjoignant de ne pas utiliser la STL en production car celle-ci n'est pas suffisamment stable. Donc, exit la STL.
Pour les autres bibliothèques, j'ai été un jour été confronté à une fonction de la bibliothèque C++ standard qui ne se comportait pas de la même façon sur mon Amiga que sur un PC sous Windows. Du coup, je l'ai recodée en m'appuyant sur des fonctions de la bibliothèque C standard. Malheureusement, l'une de ce fonctions était sérieusement buguée. Du coup, j'ai recodé ma fonction en utilisant les bibliothèques systèmes, et j'ai constaté un net gain en matière de performance par rapport à la même fonction proposée par la bibliothèque standard. C'est là que j'ai commencé à développer et à utiliser mon propre jeu de bibliothèques basées sur des fonctions des bibliothèques systèmes, et à définitivement tourner le dos aux bibliothèques C et C++ standards.
Je n'ai jamais regretté d'avoir choisi le C++, car j'ai toujours pu compter sur lui pour développer de nouvelles fonctionnalités. Je me suis longtemps cantonné aux daemons et aux utilitaires en ligne de commande, puis j'ai du développer des interfaces bureau. Pour ce faire, je me suis appuyé sur XULRunner (https://linuxfr.org/users/epeios/journaux/xulrunner-et-c), codé en C++, et donc avec une APIC++, bien que mal documentée, l'API officielle étant celle en JavaScript. J'ai également développé mes premières applications web, de type CGI, en C++, bien que, déjà à l'époque, on prétendait que le C++ n'était pas adapté à cet usage.
Cependant, les applications web CGI ne sont pas adaptées à certains types d'applications qui réclament un minimum de réactivité, et je me suis demandé si, encore une fois, je pouvais compter sur le C++ pour réaliser une bibliothèque me permettant de développer des applications web du même niveau que celles réalisés avec les meilleurs technologies actuelles. Là, j'avoue que ça n'a pas été facile, mais, encore une fois, il ne m'a pas laissé tombé, et je peux ainsi prétendre être un développeur C++fullstack, pour reprendre un terme à la mode (c'est important les termes à la mode pour trouver du boulot !).
Pour en revenir au sujet de la dépêche, est-ce qu'aujourd'hui encore, avec tout le choix de langages actuel, choisirais-je encore le C++ ? Si c'est pour parvenir au même confort d'utilisation que j'ai aujourd'hui grâce à mes bibliothèques, et sachant qu'il n y a rien qui ne puisse être fait avec les langages actuellement disponibles que je ne puisse faire en C++, la réponse est oui.
Mais, d'un autre coté, le développement de ces bibliothèques prends du temps. J'ai eu de la chance de pouvoir développer les fonctionnalités relatives à certaines technologies au fur et à mesure qu'elles se sont répandues. Quand j'ai commencé à travailler sur mes bibliothèques, Internet n'était pas démocratisé, et le web n'existait pas. J'ai testé mes bibliothèques réseaux sur un réseau constitué de ma machine de développement reliée à l'une de mes vieilles machines, n'ayant pas alors accès à Internet.
Bref, j'ai pu entreprendre à l'époque, vu le contexte, une démarche qui est inenvisageable aujourd'hui, car elle me prendrait trop de temps avant de pouvoir être concurrentiel par rapport à la plupart des développeurs au regard de toutes les fonctionnalités disponibles en standard avec la plupart des autres langages. Donc, aujourd'hui, le C++, juste avec les bibliothèques standards ou des bibliothèques tierces, ne me parait plus être le plus adapté pour certains types de logiciels, surtout si l'on peut apprendre plusieurs langages pour choisir lequel on utilise en fonction du type d'application à développer...
Zelbinium: pour la génération qui crée, pas celle qui scrolle...
# Mon histoire avec le C++
Posté par Claude SIMON (site web personnel) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 10. Dernière modification le 27 juillet 2018 à 18:05.
Avec mon premier ordinateur (un Sinclair ZX81), ainsi qu'avec ceux que je me suis offerts par la suite (y compris mes calculatrices HP), mon activité principale a toujours été la programmation. Durant un certains temps, j'ai papillonné entre différents langages, essentiellement différentes versions de BASIC.
Lors de ma première année de mon cursus informatique, on a vu plusieurs langages, mais essentiellement à titre d'information (Fortran, LISP, Prolog, divers assembleurs...), pour finalement se concentrer sur le Pascal. Dés lors, je développais tous mes logiciels en GFA Basic sur mon Amiga, avant de les transcrire en (Turbo-)Pascal, pour pouvoir les faire tourner sur nos PC du lycée, qui faisait tourner MS-DOS.
Puis j'ai découvert le C. Enfin pouvoir faire tourner (après recompilation, évidemment) tous mes programmes développés sur mon Amiga sur les PC du lycée sans avoir à les transcrire. Bon, évidemment, j'ai été confronté a quelques problèmes de portabilité, mais qui ont vite été résolu avec quelques directives préprocesseurs bien senties.
Puis j'ai été amené à choisir entre le C++ (oui, on y arrive) et Java. J'ai hésité pendant assez longtemps pour finalement choisir le C++. Rétrospectivement, je me rend compte que j'ai choisi le C++ pour des mauvaises raisons, dû à une certaine méconnaissance de Java, mais que j'ai finalement quand même fait le bon choix.
Je suis quasiment resté au C++ de mes débuts. Les seules nouveautés que j'ai adoptées sont les mutables (parcimonieusement), mais surtout, et c'est relativement récent, les variadics templates (je ne connais pas le terme français). J'étais souvent tenté d'utiliser les fonctions variadiques, issues du C, mais je me réfrénais car ce sont de vrais appeaux à bugs. Mais, depuis que je peux utiliser les variadics templates à la place, je me lâche. Ceci dit, il m'arrive encore d'utiliser les fonctions variadiques, car il y a des situations où l'on ne peut les remplacer par des variadics templates.
Quand je fais référence au langage que j'utilise pour développer, je parle de C/C++, mais pas au sens donné dans la dépêche. Je signifie par ce terme que je développe en langage C++, mais sans utiliser les bibliothèques C++, ni même C, standards. Comment ce fait-ce ?
J'ai, un jour, était engagé sur une mission durant laquelle je devais développer un logiciel en C++, logiciel destiné à être utilisé en production. Comme compilateur, je disposais d'une des premières versions de Visual C++ (sur cette version, le multitâche était une option expérimentale qui devait être explicitement activée ; par défaut, lorsqu'on lançait une compilation, on ne pouvait pas manipuler les fichiers sources en même temps !). Je prend donc la documentation papier officiel sur la STL, et voit, en première page, une notice enjoignant de ne pas utiliser la STL en production car celle-ci n'est pas suffisamment stable. Donc, exit la STL.
Pour les autres bibliothèques, j'ai été un jour été confronté à une fonction de la bibliothèque C++ standard qui ne se comportait pas de la même façon sur mon Amiga que sur un PC sous Windows. Du coup, je l'ai recodée en m'appuyant sur des fonctions de la bibliothèque C standard. Malheureusement, l'une de ce fonctions était sérieusement buguée. Du coup, j'ai recodé ma fonction en utilisant les bibliothèques systèmes, et j'ai constaté un net gain en matière de performance par rapport à la même fonction proposée par la bibliothèque standard. C'est là que j'ai commencé à développer et à utiliser mon propre jeu de bibliothèques basées sur des fonctions des bibliothèques systèmes, et à définitivement tourner le dos aux bibliothèques C et C++ standards.
Je n'ai jamais regretté d'avoir choisi le C++, car j'ai toujours pu compter sur lui pour développer de nouvelles fonctionnalités. Je me suis longtemps cantonné aux daemons et aux utilitaires en ligne de commande, puis j'ai du développer des interfaces bureau. Pour ce faire, je me suis appuyé sur XULRunner (https://linuxfr.org/users/epeios/journaux/xulrunner-et-c), codé en C++, et donc avec une API C++, bien que mal documentée, l'API officielle étant celle en JavaScript. J'ai également développé mes premières applications web, de type CGI, en C++, bien que, déjà à l'époque, on prétendait que le C++ n'était pas adapté à cet usage.
Cependant, les applications web CGI ne sont pas adaptées à certains types d'applications qui réclament un minimum de réactivité, et je me suis demandé si, encore une fois, je pouvais compter sur le C++ pour réaliser une bibliothèque me permettant de développer des applications web du même niveau que celles réalisés avec les meilleurs technologies actuelles. Là, j'avoue que ça n'a pas été facile, mais, encore une fois, il ne m'a pas laissé tombé, et je peux ainsi prétendre être un développeur C++ fullstack, pour reprendre un terme à la mode (c'est important les termes à la mode pour trouver du boulot !).
En outre, le C++ est relativement facilement interfaçable avec à peu prés n'importe quel langage. J'en ai donc profité pour écrire des bindings de la bibliothèque ci-dessus pour différents langages (https://linuxfr.org/users/epeios/journaux/le-developpement-full-stack-facilite).
Pour en revenir au sujet de la dépêche, est-ce qu'aujourd'hui encore, avec tout le choix de langages actuel, choisirais-je encore le C++ ? Si c'est pour parvenir au même confort d'utilisation que j'ai aujourd'hui grâce à mes bibliothèques, et sachant qu'il n y a rien qui ne puisse être fait avec les langages actuellement disponibles que je ne puisse faire en C++, la réponse est oui.
Mais, d'un autre coté, le développement de ces bibliothèques prends du temps. J'ai eu de la chance de pouvoir développer les fonctionnalités relatives à certaines technologies au fur et à mesure qu'elles se sont répandues. Quand j'ai commencé à travailler sur mes bibliothèques, Internet n'était pas démocratisé, et le web n'existait pas. J'ai testé mes bibliothèques réseaux sur un réseau constitué de ma machine de développement reliée à l'une de mes vieilles machines, n'ayant pas alors accès à Internet.
Bref, j'ai pu entreprendre à l'époque, vu le contexte, une démarche qui est inenvisageable aujourd'hui, car elle me prendrait trop de temps avant de pouvoir être concurrentiel par rapport à la plupart des développeurs au regard de toutes les fonctionnalités disponibles en standard avec la plupart des autres langages. Donc, aujourd'hui, le C++, juste avec les bibliothèques standards ou des bibliothèques tierces, ne me parait plus être le plus adapté pour certains types de logiciels, surtout si l'on peut apprendre plusieurs langages pour choisir lequel on utilise en fonction du type d'application à développer...
Zelbinium: pour la génération qui crée, pas celle qui scrolle...