Mes 2 centimes
Je pense qu'il est plus facile d'écrire de manière générale à ce sujet, plutôt que de parler de C / C ++. Premièrement, les bibliothèques dans des langages tels que Python ne sont pas nécessairement utilisées pour obtenir un avantage en termes de vitesse, même si cela est une conséquence. Je pense que
@David a assez bien expliqué les raisons.
En partant du haut, l'implémentation du langage dicte dans une certaine mesure les bibliothèques auxquelles vous avez accès. Les langages couramment utilisés en informatique comprennent C, C ++, Python, Perl, Java, Fortran et R. Des exemples moins courants pourraient être Ocaml et Common Lisp. Maintenant, puisque la plupart de ces langages sont écrits en C, ils ont une interface de fonction étrangère naturelle avec C. Cependant, il n’est pas si facile d’appeler, par exemple, une bibliothèque Perl de Python ou inversement. Donc, dans la pratique, les gens ont tendance à
Utiliser une bibliothèque écrite dans leur langage d'implémentation, généralement quelque chose qui fait partie des bibliothèques standard, ou qui est par ailleurs largement disponible, ou
Appelez une bibliothèque C / C ++ via les langages FFI. Cela suppose qu’une enveloppe n’existe pas déjà, car si elle existe, elle ne se distingue pas facilement de (1).
(2) est généralement plus difficile, car vous devez envelopper vous-même la fonction C / C ++. En outre, vous devez regrouper la bibliothèque ou ajouter une dépendance supplémentaire. Pour cette raison, les gens sont plus susceptibles d’utiliser les bibliothèques de langues intégrées plutôt que GSL par exemple, qui est en C.
Pour les routines très génériques, par exemple pour générer des échantillons aléatoires à partir de distributions, ou des routines numériques de base telles que la quadrature des intégrales, il est facile et courant de réutiliser une bibliothèque. À mesure que la fonctionnalité que l'on essaie d'implémenter devient plus complexe, il devient de plus en plus improbable que l'on trouve la fonction exacte souhaitée dans une autre bibliothèque, et même celle-ci, on pourrait passer beaucoup de temps à chercher et à adapter la fonction nécessaire (le style / la conception du code pourrait par exemple poser problème). Et comme discuté ci-dessus, on n'a accès qu'à un sous-ensemble des bibliothèques existantes. D'autre part, implémenter soi-même un algorithme s'il est complexe et non l'objectif principal peut être décourageant, et bien sûr, il faut gérer ces problèmes de vitesse embêtants.
Cela devient donc un problème d'optimisation dans l'analyse coûts / avantages. Mon expérience est que même pour des techniques relativement standard comme MCMC, je finis généralement par écrire mon propre code, car cela correspond mieux à la façon dont je conçois le logiciel dans son ensemble.
Bien sûr, même si vous n'utilisez pas le code, il est possible d'apprendre du code des autres. Cependant, je ne sais pas à quelle fréquence les scientifiques se donnent la peine de le faire. Mon impression est que lire le code des autres pour apprendre est davantage une affaire d'ingénieur en logiciel.