efficient-coding-algorithms-language

Conseils pratiques pour écrire du code efficace

Rédigé par Vincent Béchard le 2020-04-21

Règles simples pour écrire du code efficace

Programmation de tâches intensives de traitement et d'analyse de données sur le processeur? Certains de mes clients sont impressionnés par la vitesse d’exécution de mon code, et je ne suis pas un développeur de logiciels professionnel! Néanmoins, voici quelques-unes de mes astuces simples à garder à l’esprit lorsque vous écrivez du code dans n’importe quel langage :

  • Faire les calculs une seule fois : éviter de répéter la même arithmétique, essayer de stocker les résultats en mémoire et de les réutiliser plus tard (oui, plus de gestion!)
  • Regarder le contenu des boucles… s'il contient du code répétitif et inefficace, ce code est déclenché plusieurs fois!
  • Exemple de code inefficace dans une boucle : instructions if/else et switch pour traiter les options utilisateur. Traiter les options en dehors de la boucle et écrire plusieurs variantes de la boucle !
  • Éviter d'écrire de nombreuses fonctions d'une ou deux lignes juste pour rendre les choses « mignonnes ». La pile d'appels peut devenir lourde et lente sur l'ordinateur
  • Utiliser les fonctionnalités intégrées du langage, par exemple les opérations vectorisées dans R, Matlab ou Python, ou les fonctions natives dans VBA et JavaScript (elles seront toujours plus rapides que votre propre implémentation)
  • Avec les langages orientés objet : écrire des classes! Le code est toujours plus propre et plus simple à déboguer.
  • Vous disposez d'un profileur de code ? Exécution du profil et travail sur les étapes les plus chronophages.
Encore une fois, ce ne sont là que quelques-unes des choses que je garde à l'esprit lorsque je code quelque chose… Mais ça aide beaucoup !

Le cas spécifique de la programmation statistique en science des données

En plus des conseils pratiques mentionnés ci-dessus, il existe des éléments spécifiques à considérer dans le contexte de la science des données. Pourquoi je passe du temps à écrire là-dessus? Parce que je suis un scientifique des données et que j’aime programmer en utilisant le langage ou l’environnement le plus efficace! Rapide illustration : si vous avez besoin de randomiser un vecteur, une implémentation efficace en C# est :

int[] randomNumbers = Shuffle(Enumerable.Range(0, 11), new Random()).ToArray();
public static IEnumerable<T> Shuffle<T>(this IEnumerable source, Random random)
{
    T[] list = source.ToArray();
    int count = list.Length;
    while (count > 1)
    {
        int index = random.Next(count--);
        T temp = list[index];
        list[index] = list[count];
        list[count] = temp;
    }
    return list;
}
Et en R, c'est simplement:
v <- sample(v)

Comparaison des performances du code de science des données

Je partage quelques résultats intéressants sur les performances du code. J'avais besoin d'implémenter un algorithme en R que j'avais précédemment écrit en C# pur. J'ai terminé avec 2 versions :

  • Version 1 : traduction directe du code C# vers R, avec des boucles explicites et en utilisant uniquement des fonctions personnalisées
  • Version 2 : implémentation exploitant les fonctionnalités natives telles que les boucles implicites et les opérations vectorisées

statistical-data-science-programming-language

Dans un environnement de programmation statistique, les manipulations de données sont bien plus faciles! Pour en revenir à mon algorithme à traduire, non seulement le code de la version 2 était beaucoup plus court, mais il était également beaucoup plus rapide sur différentes tailles de problèmes :

TailleVersion 1 (s)Version 2 (S)Ratio V1/V2
1 0001.070.157.1
10 0005.061.274.0
25 00011.863.213.7
50 00028.786.373.7
100 00048.9314.233.4

En résumé : tirer parti des fonctionnalités natives intégrées d'un environnement de programmation peut permettre de gagner du temps pour modifier le code et du temps pour exécuter ce code !

Vous désirez en savoir plus?

Chez Différence, notre expertise est axée sur la statistique et la science des données, les applications du Lean et l'Excellence opérationnelle, ainsi que sur la simulation. Nous pouvons former, coacher et aider les gens à utiliser la programmation statistique. N'hésitez pas à demander plus d'information en nous contactant.