Quand l’oubli des fondamentaux du code finit par coûter cher

J’utilise MongoDB comme base de données principale et j’en suis globalement satisfait. Mais j’ai l’impression que depuis un certain temps la tendance consiste à le dénigrer. Souhaitant comprendre ce qu’on lui reproche réellement, je suis à l’affût de retours d’expériences. C’est ainsi que j’ai récemment lu cet article publié le 21 novembre 2017 : Why We Moved From NoSQL MongoDB to PostgreSQL.

Je n’ai malheureusement pas appris grand chose sur MongoDB en le lisant, mais je trouve que cet article est un cas d’école qui nous montre ce qu’il se passe quand on s’assoie sur les bonnes pratiques de développement. Je vous propose donc dans cet article d’étudier ça plus en profondeur. Continuer la lecture de Quand l’oubli des fondamentaux du code finit par coûter cher

L’héritage, un concept usé et abusé

Un outil puissant

L’héritage est un concept du célèbre et populaire paradigme de programmation dénommé orienté objet. Ce concept est le moyen qui permet en orienté objet de supporter le polymorphisme, principe qui consiste simplement à faire en sorte d’avoir plusieurs comportements (implémentations) différents derrière un même objet (contrat).

Le polymorphisme est un outil redoutablement efficace en orienté objet. C’est d’ailleurs lorsqu’on travaille dans des langages qui ne disposent pas de ce concept qu’on se rend compte à quel point il est pratique.

Dans la suite de cet article, la notion d’héritage qui est utilisée est celle qui correspond à l’héritage d’état (donc au mot-clé extends sur des classes en Java). La notion d’héritage de comportement (implémentation d’une interface en Java) ne rentre donc pas dans le terme héritage. Certains langages ne distinguent pas ces deux notions mais dans les faits ces deux types d’héritage apparaissent aussi. Continuer la lecture de L’héritage, un concept usé et abusé

En finir avec les NullPointerExceptions en Java grâce à Optional

Une des erreurs que la JVM doit lever le plus souvent lors de l’exécution d’un programme Java est très certainement la NullPointerException.

L’origine de cette erreur d’exécution est très simple. Lorsqu’on manipule un objet d’un type donné, on sait qu’il peut être compatible avec ce type (lui-même ou un type fils) ou null. Lorsque qu’il s’agit de null, il suffit d’accéder à une propriété (attribut ou méthode) de l’objet en question, qui en fait n’existe pas, pour engendrer cette fameuse NullPointerException. Rappelons que cette erreur d’exécution existe dans la plupart des langages. En C ou C++ cela provoque une erreur de segmentation et c’est encore plus gênant parce que cela provoque l’arrêt du processus. En Python cela conduit à AttributeError. Continuer la lecture de En finir avec les NullPointerExceptions en Java grâce à Optional

Un code de qualité

Au risque d’être un peu polémique, je vais essayer de définir ce qu’est, de mon point de vue, un code de qualité. Je tenterai ensuite d’expliquer quels sont pour moi les moyens qui permettent d’écrire du bon code.

Pour ceux qui ne sont pas d’accord avec moi, les commentaires sont ouverts pour en débattre ! Je précise simplement que je me place dans le contexte d’un code qui va vivre et être exploité en production, et pas un code de POC  destiné à être jeté. Continuer la lecture de Un code de qualité

Analyse statique de code

L’actualité de ces derniers jours tombe à pic par rapport à ce que j’avais écrit à propos du typage statique et la sécurité que cela apporte. Une faille de sécurité a été corrigée par Apple, dans du code open-source, et elle a fait couler beaucoup d’encre car il s’agit d’une erreur assez grossière dans une section de code assez critique (couche SSL/TLS). Nous allons voir en quoi l’analyse statique de code aurait permis d’éviter tout cela. Continuer la lecture de Analyse statique de code