La programmation en C++ est difficile, le g�nie logiciel en C++ est encore plus difficile
La programmation en C++ est difficile, le g�nie logiciel en C++ est encore plus difficile
Citation:
EDUARDO ROCHA 26-06-2023 G�nie logiciel
Mis � jour le 6 juillet 2023.
Il existe probablement une corr�lation entre les comp�tences en programmation C++ d�une personne donn�e et sa capacit� � d�velopper des logiciels dans ce langage. Cependant, ces deux aspects sont distincts et n'�voluent pas toujours ensemble. Il est naturel de supposer que la ma�trise de C++ se traduit directement par la capacit� de d�velopper des logiciels en C++, mais les deux ne sont pas toujours synonymes. Cet article explique comment la complexit� du C++ cr�e des d�fis pour le g�nie logiciel. Il traite �galement de l'importance de la simplicit� pour la maintenabilit� et le succ�s � long terme.
Le g�nie logiciel et la programmation ne sont pas la m�me chose.
� Le g�nie logiciel peut �tre consid�r� comme une "programmation int�gr�e au fil du temps". �
_ G�nie logiciel chez Google
C++ est complexe, le g�nie logiciel n�aime pas �a
C++ est un cas particulier en raison de sa complexit�. Il offre de nombreuses fa�ons d'accomplir la m�me chose et il comporte �galement de nombreux pi�ges. C++ est un langage si puissant que les d�veloppeurs ont mis au point une infinit� de mod�les de programmation. Toutefois, le g�nie logiciel n'aime pas la complexit� et ne s'entend pas naturellement avec le C++. Peut-�tre que cela n'est pas visible dans les petits projets ou les �quipes, mais consid�rez les d�fis lorsque des dizaines, voire des centaines d'ing�nieurs travaillent sur la m�me base de code comprenant des centaines de milliers de lignes.
Tout comme C, C++ attend du d�veloppeur qu'il soit un expert et qu'il l'utilise avec soin. Se tirer une balle dans le pied est assez facile. Pour les projets � grande �chelle avec plusieurs d�veloppeurs, o� seulement quelques-uns seront des experts, le soin et l'attention de toutes les personnes impliqu�es sont indispensables.
Par exemple, consid�rez les principes de g�nie logiciel suivants :
- �Vous n'en aurez pas besoin. � �You aren�t gonna need it� (YAGNI) stipule qu'un programmeur ne doit pas ajouter de fonctionnalit�s avant de les avoir jug�es n�cessaires. C++ propose de nombreuses mani�res diff�rentes d�aller � l�encontre de ce principe. Il est tentant de faire d'une fonction ou d'une classe un mod�le afin qu'il puisse �tre r�utilis� pour diff�rents types de donn�es, m�me s'il est actuellement utilis� pour un seul type. Cela rend le code plus difficile � lire, augmente le temps de compilation et d�grade l'utilisation d'outils tels que les analyseurs statiques et les compl�teurs de code. Par cons�quent, cela ne devrait pas �tre fait � moins qu'il n'y ait un besoin pour cela.
- �vitez l'optimisation pr�matur�e. C'est un principe bien connu qui peut �tre ignor� dans n'importe quel langage de programmation. Toutefois, si vous utilisez C++ dans un projet, c�est probablement parce que vous avez besoin de bonnes performances. Donc, un certain niveau d'optimisation est n�cessaire ; parfois, il faudra m�me beaucoup d'optimisation. Le probl�me est qu'il est difficile de d�limiter, au sein d'un projet, le code qui doit �tre optimis� et le code qui n�en aura pas besoin. C++ nous donne les outils pour tout optimiser et nous optimisons souvent plus que n�cessaire.
J'adore C++ et c'est mon langage de pr�dilection par d�faut. S'il est utilis� correctement, il fera au moins aussi bien que la plupart des autres langages. Cependant, reconna�tre les dangers et les pi�ges potentiels du langage est la premi�re �tape vers un d�veloppement sain.
La simplicit� est la cl� d'une bonne ing�nierie logicielle et C++ par d�faut n'est pas simple.
Simplifiez lorsque cela est possible !
Le parcours d'apprentissage de C++ a souvent plusieurs pics de confiance. Plus vous apprenez, plus vous r�alisez � quel point vous ne savez pas. Et je crois que cela cr�e un mod�le int�ressant. Les d�veloppeurs exp�riment�s ont tendance � se limiter � des sous-ensembles du langage et � des sous-ensembles de mod�les de programmation suffisants et s�rs. Cette approche est efficace pour simplifier le langage pour un d�veloppement facile et maintenable.
Je ne fournirai pas de recette pour le faire. Je ne suis pas s�r d'�tre qualifi� pour le faire. Une chose que je peux dire, c'est qu'un code simple est g�n�ralement meilleur que le code optimal et le plus performant. En C++, le code optimal est souvent difficile � lire, difficile � comprendre et, surtout, difficile � maintenir. Je dirais qu'une grande partie de la programmation C++ peut �tre d�crite comme une optimisation pr�coce � petite �chelle.
Un autre probl�me est que l'�criture de code complexe peut �tre amusante et, parfois, belle. De nombreux d�veloppeurs tombent amoureux de C++ pour cela. Beaucoup d'entre nous trouveront de la joie en utilisant des motifs complexes pour le plaisir. N�anmoins, le probl�me est que le code devient souvent plus compliqu� qu'il ne devrait l'�tre. Moi-m�me, j'en suis coupable. Les d�veloppeurs qui entrent dans ce groupe devraient au moins �tre conscients de ce qu'ils font afin qu'ils puissent r�fl�chir � deux fois avant de trop compliquer les choses pour le plaisir. J'ai travaill� avec des gens qui s'int�grent tr�s bien dans ce groupe, mais qui ne le savent pas. Beaucoup per�oivent l'ajout d'une complexit� inutile comme une d�monstration de comp�tence et ne voient pas ses inconv�nients (ou ne s'en soucient tout simplement pas).
� Le d�bogage est deux fois plus difficile que l'�criture du code. Par cons�quent, si vous �crivez le code aussi intelligemment que possible, vous n'�tes, par d�finition, pas assez intelligent pour le d�boguer.
� Brian Kernighan
Si la simplification n'est pas possible, encapsulez les bits complexes
Si vous utilisez C++, c�est probablement parce votre projet n�cessite de bonnes performances. En outre, des mod�les de conception plus complexes peuvent �tre n�cessaires ou peuvent entra�ner un code plus simple. Dans ces cas, C++ fournira les bons outils pour le travail, mais le code r�sultant peut ne pas �tre facilement lisible ou facile � lire ou � comprendre.
Heureusement, C++ fournit �galement les outils pour encapsuler correctement et cacher cette complexit�. Ici, suivre les principes de l'ing�nierie logicielle comme SOLID avec une attention et un soin suppl�mentaires peut guider le d�veloppeur vers le succ�s.
Le temps suppl�mentaire n�cessaire pour le faire correctement pour les pans les plus complexes (par exemple, une conception plus approfondie et des r�visions de code) en vaut la peine � long terme.
Principaux points � retenir
- C++ est connu pour sa grande complexit� et offre de nombreux mod�les de programmation. Cependant, le g�nie logiciel, qui met l'accent sur la simplicit� et la maintenabilit�, peut ne pas s'aligner facilement avec les subtilit�s du C++.
- Simplifiez C++ pour un d�veloppement maintenable. L'�criture de code facile � comprendre et � maintenir est g�n�ralement plus pr�cieuse pour le succ�s � long terme que l'�criture de code optimal et all�g�.
- Soyez conscient de la complication excessive et de l'optimisation pr�coce. Tenez-vous et vos coll�gues responsables.
La prochaine fois que vous interviewerez quelqu'un pour un poste senior en C++, ne demandez pas au candidat � quel point il est bon en C++, posez-lui des questions sur les pi�ges du C++ pour le g�nie logiciel. Il sera tr�s facile d'identifier des ing�nieurs ayant une exp�rience de d�veloppement pertinente.
Faire ce qui pr�c�de est plus facile � dire qu'� faire. Parfois, des mod�les de programmation complexes avec des fonctionnalit�s de langage complexes se traduiront par un code plus simple et meilleur. Apprendre � le faire n�cessite non seulement de l'exp�rience, mais aussi de la sensibilisation. J'esp�re que ce billet augmentera votre sensibilisation.
Je tiens � souligner que cet article a �t� �crit sur la base de mes propres fortes opinions. Donc, si vous �tes d'accord ou si vous avez un point de vue diff�rent, j'aimerais l'entendre ! N'h�sitez pas � laisser un commentaire ou � nous contacter.
:fleche: La version originale de cet article
Et vous ?
:fleche: Que pensez-vous de la programmation en C++ ?
:fleche: Pensez-vous que la programmation en C++ est vraiment difficile ? Partagez vos avis.