Aujourd’hui je vais vous parler d’un livre intitulé « Programmation Efficace – Les 128 Algorithmes Qu’Il Faut Avoir Compris et Codés en Python au Cours de sa Vie ». Les auteurs sont Christoph Dürr et Jill-Jênn Vie. Comme d’habitude, je vous colle le lien amazon : c’est ici pour acheter.
Pour faire un full disclosure, il faut que je vous raconte encore une fois un bout de ma vie (heureusement que j’écris sur un blog). Je suis rarement impressionné par des algorithmiciens. Souvent ils sont bons théoriquement mais ils sont à coté de la plaque sur la réalité et l’efficacité (ils manquent de pragmatisme). D’autres sont au contraire trop dans la pratique et font donc des algos mauvais car ils ne connaissent pas la théorie.
Christoph, dont j’ai partagé le bureau au tout début de ma thèse dans l’équipe de recherche en algorithmique de la fac d’Orsay, est à la confluence des deux approches (théorique et pratique). Il fait donc partie des rares personne capable de résoudre réellement des problèmes à l’aide d’algos bien conçus.
Quand j’ai vu qu’il sortait ce livre, je me suis jeté dessus.
Il ne s’agit pas d’un livre pour apprendre l’algorithmique, pour cela je vous envoie vers le Cormen, référence du genre (Algorithmique – 3ème édition – Cours avec 957 exercices et 158 problèmes), mais plutôt d’un livre pour comprendre comment on résout des problèmes à l’aide d’algorithmes. Je n’ai pas peur de dire que c’est le meilleur livre que j’ai lu sur le sujet.
Il est structuré de manière très simple : après la traditionnelle introduction chaque chapitre va se consacrer à un sujet spécifique (les chaînes de caractères, les arbres, les flots, l’exploration, etc.). Au sein d’un chapitre, on passe en mode « résolution de problème » : explication d’un problème, définitions utiles, commentaires divers, et enfin code complet en python.
C’est ce qui fait la force de ce livre : il explique de manière simple et accessible comment on résout réellement chaque problème évoqué.
Par exemple, une section du chapitre 3 porte sur le calcul de la distance de Levenshtein entre deux chaînes de caractères. C’est l’approche de programmation dynamique qui est mise en avant, avec un exemple permettant de bien comprendre, et le code (10 lignes) qui implémente l’algo.
Plus loin (chapitre 13), on trouve une section sur comment trouver le plus grand rectangle sous un histogramme. Inutile ? Non, car l’algorithme qui réalise le calcul peut s’appliquer directement en télécommunications par exemple, de la mème manière que dans le dernier chapitre, les auteurs introduisent l’algo des liens dansants, qui vous permettra de résoudre automatiquement le sudoku, les chiffres et les lettres, etc.
Bref, un excellent livre que doit avoir toute personne qui développe et qui voit au delà de la programmation de cochon ^^ Ce n’est pas un livre de chevet, qu’on va lire d’un bout à l’autre et ranger, c’est un livre dont chaque page doit se lire, se relire, se travailler. C’est un livre qui fera de vous un meilleur développeur.
Voilà, comme d’habitude, les commentaires sont ouverts, dans la joie et la bonne humeur.
A noter : si vous savez faire tout ce qu’il y a dans le livre, vous savez répondre à toutes les questions des entretiens d’entrée dans les boites tech de la silicon valley (en ce qui concerne les algos ;)).