01/04/2022

The motto: release early, release often

Five years ago, I've read a post (King's Day Speech) written by Guido van Rossum on his blog. As I've read it again recently, I would like to share with you the main key point of his post. 

People studying or working in computer science should be quite familiar with the name Guido van Rossum. In fact, he is the Dutch genius programmer behind the creation of Python programming language. Python is great and has regain a huge popularity nowadays with the rise of data science and applied artificial intelligence (machine learning, deep learning, etc.). If you are a developer or software engineer and you have never heard about Python, please stop reading this post and go sleep (hahaha 😄....). Else let's continue.

In his post, Guido points out that the success of the Python language relies on two principal points:

  1. the growing up of the internet in 1990.
  2. the motto: release early, release often.

By releasing early and often the python code to the community, the language core team benefit from the users experiences and feedbacks. Even if the internet was slow at that moment (year 1990), it helps them to have more members in the python community. People around the world, no matters where they live have access to the code and can give feedbacks. The feedbacks help the improvements and the growing of the language. 

This point out the sharing believe behind this language. They share their code to benefit from feedbacks. This believe helps the language to become what it becomes now: one of the most powerful and used programming languages in the world. The mind of sharing source codes and softwares are known today as open source and is popularized by the Free Software Foundation.

Back to today, Python is one of the first  programming language developed on the Internet, entirely open, by a community of volunteers and passionate programmers.  The moto release early, release often has helped the language to grow very fast. The same motto can be applied in many others fields. For example, many sub-projects in Java world also implement this motto. Furthermore in project management in general, release early the PoC (Proof of Concept) of the product can help get the first feedbacks from the clients and deliver later a product that fits the needs of the client. 

26/03/2022

Java: un langage, une communauté et des versions

Java est un langage de programmation très populaire. Il est l'un des langages de programmation les plus utilisés dans le monde professionnel et universitaire. A cause de sa machine virtuelle JVM (Java Virtual Machine), Java peut s'exécuter sur différents systèmes d'exploitation sans modification du code source initial. Il implémente le paradigme write once, run everywhere.  La plateforme Java a la particularité de proposer trois versions: 

  • Java SE (Java Platform, Standard Edition): qui contient les APIs de base du langage, et permet de développer des applications desktop et de faire plein de petites choses.
  • Java EE (Java Platform, Enterprise Edition): qui étend Java SE pour permettre de créer des applications web et des services pour les entreprises.
  • Java ME (Java Platform, Micro Edition): qui contient des APIs pour développer des applications pour les systèmes embarqués et les mobiles. 
Avec ces trois versions, la plateforme Java peut résoudre presque tous les problèmes d'automatisation et de transformation numérique. Sa robustesse, son indépendance par rapport au système d'exploitation de la machine et son large éventail de librairies déjà disponibles dans la communauté font qu'il est très prisé dans le monde professionnel avec des offres d'emploi à foison et des salaires intéressants et compétitifs. Malheureusement, la prise en main du langage et son concept de base de POO (Programmation Orienté Objet) peuvent rapidement refroidir les ardeurs des nouveaux apprenants.

C'est évident que le langage est mature, solide, robuste et connaît plusieurs améliorations mineures et majeures depuis sa création dans les années 1995 par James Gosling et ses collègues au sein de la société Sun Microsystems (racheté en 2009 par Oracle). 

De nos jours, la communauté Java est toujours en ébullition. Le langage évolue rapidement en incorporant de nouvelles fonctionnalités et en supprimant d'autres dépréciées. Le langage fait de plus en plus la part belle à la PF (Programmation Fonctionnelle) qui a le vent en poupe. Historiquement connu pour être un langage purement orienté objet, Java devient de plus en plus fonctionnel. Va t-il un jour délaissé complètement la POO pour la PF ? Personnellement, je ne le pense pas. C'est toujours intéressant d'avoir plusieurs paradigmes de résolution de problèmes. Bien que Java se tourne vers le fonctionnel pour sa concision et sa productivité, nombreux sont les développeurs qui continueront à utiliser l'orienté objet en dur sans faire appel à la puissance du fonctionnel pour plusieurs raisons. Au nombre desquelles, il y a la difficulté de changer sa manière de programmer (surtout lorsqu'on y est habituée depuis plus d'une dizaine d'années). Il y aussi le problème de maintenance de plusieurs applications legacy qui sont certes refactorisables en fonctionnel, mais à quel prix ? Le client a t-il envie de débourser de l'argent pour un nouveau paradigme sans un retour sur investissement tangible ? Par ailleurs, la POO n'est pas totalement en opposition à la PF. Les deux peuvent bien évidemment se côtoyer en Java. C'est même sur cet axe que Java sillonne actuellement. 

Avec l'ébullition de la communauté Java, Oracle a annoncé une nouvelle cadence de la livraison des versions de Java. Il y a une nouvelle version de Java chaque 6 mois. La cadence est inspirée d'autres communautés open source dont la plus connue est Ubuntu. Pourquoi cette nouvelle cadence pour Java ? L'ancienne cadence des versions de Java était d'environ 2 ans. Malheureusement le passage de Java 7 à Java 8 a été un vrai défi et Java 8 a été livré avec 8 mois de retard environ pour régler des problèmes de sécurité. De même Java 9 a connu environ 18 mois de retard à cause de l'intégration du projet Jigswa (Java Platform Module System). Pour éviter donc ces nombreux retards répétitifs et éviter d'avoir toutes les nouveautés majeures avant la livraison d'une version, Oracle a décidé de la cadence de 6 mois: si une nouveauté est prête, elle est intégrée à la version sinon elle apparaît dans une version future. Donc chaque année, au mois de Mars et au mois de Septembre il y a aura une nouvelle version du langage. Cette nouvelle cadence n'est pas sans répercussions sur les utilisateurs de Java et sur les projets informatiques qui l'utilise. 

Il y a quelques jours (le jeudi 17 Mars 2022), j'ai assisté  à une rencontre de la cellule d'expertise JAVA de mon actuel employeur. Le thème de la rencontre était: JAVA 8 à JAVA 17: Nouveautés et améliorations. A la date de cette formation, Java 18 n'était pas encore disponible. Le General Availability du JDK 18 a été fait le 22 Mars passé. Les trois collègues qui ont animé cette rencontre ont présenté les modifications majeures de chaque version de Java depuis la version 8 à la version 17. Même avec environ 75 min, ils n'ont pas pu parler des nouveautés majeures parce qu'elles sont nombreuses et il faut une bonne expérience pour comprendre l'utilité de certaines. De cette rencontre, j'ai juste retenir que la communauté Java est vraiment en ébullition et pour rester actif et marketable il faut se mettre à jour. 

Cadence de release de Java


Il y a des versions majeures LTS (Long Term Support) qui sont maintenues par Oracle au minimum pendant 3 ans. Cette maintenance peut être étendue à plusieurs autres années en fonction des besoins de la communauté. La version LTS exclue l'ajout de nouvelles fonctionnalités mais inclue le support de la stabilité, l'amélioration des performances et la fourniture des patchs de sécurité. Java 8, 11, 17 sont des versions LTS. Les nouveautés apportées par Java peuvent rapidement freiner les ardeurs des nouveaux venus dans la communauté. Même les utilisateurs expérimentés ont parfois du mal à comprendre l'utilité réelle et/ou les cas d'utilisation précis de certaines fonctionnalités. Pas sûr que toutes les nouveautés soient utilisées réellement dans des projets à déployer. Mais connaitre au minimum leur existence peut bien servir dans certains cas et alimenter des discussions entre javaistes. 

La nouvelle cadence apporte une autre difficulté pour les javaistes qui veulent passer la certification. A la fin de la rencontre de la cellule d'expertise JAVA, un des présentateurs m'a confié son embarras quand au choix de la version de Java pour la certification. Voilà qu'il pense à passer la certification Java 11 que déjà Java 17 est là et à un LTS plus élevé que la version 11. Cet embarras est légitime et plusieurs javaistes sont dans le cas. Quand j'y ai pensé plus sérieusement, j'en suis venu à la conclusion que peu importe qu'on ait la certification pour la version 8, 11 ou 17 c'est presque la même chose. L'utilité d'une certification est de juger de la maîtrise du langage. Les nouveautés, il y en a et il y en aura plein dans l'avenir. Une fois qu'on a la certification pour une version LTS, il faudra juste se mettre à jour sur une version LTS supérieure pour être marketable. 

En conclusion, Java est un langage qui a encore de beaux jours devant lui. Il subit une concurrence dure de la part d'autres langages qui s'exécutent sur la JVM - Scala, Kotlin, etc.- mais il continue d'être chaque année l'un des langages de programmation les plus utilisés au monde. Il est très présent surtout dans certains secteurs comme la banque et la recherche scientifique et est très prisé pour des projets volumineux en données ou complexes qui nécessitent une bonne dose d'abstraction. Sa robustesse, sa maturité, ses nombreuses librairies et sa communauté très réactive lui donne aussi une force et un bon avantage. 

02/01/2022

10 Jours de JavaScript - HackerRank (3/3)

Day 8: Create a Button (02.01.2022)

Dans css/button.css, on a:

#btn {
    width: 96px;
    height: 48px;
    font-size: 24px;
}

Dans js/button.js, on a:

var btn = document.createElement("button");
btn.id = "btn";
btn.innerHTML = 0;
document.body.appendChild(btn);

btn.onclick = function() {
    var nbr = Number(this.innerHTML);
    nbr += 1;
    this.innerHTML = nbr.toString();
    document.body.appendChild(this);
    
}

Dans index.html, on a:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="css/button.css" type="text/css">
        <title>Button</title>
    </head>
    <body>
        
        <script src="js/button.js" type="text/javascript"></script>
    </body>
</html>

01/01/2022

2022: a new year of hope

Dear fellows,  

2021 has ended. Today is the first day of 2022. I wish a happy new year to everybody. A new year means new hopes in the future. May this year brings good health, good opportunities and good luck. 

Personnally, 2021 was an unconventional year. I started it at Casablanca (Morocco) and finished it at Bohicon (Benin). I hope 2022 will be a better one. 

During this year, I will blog more often on software engineering, books and the "what's happening" in the Java world. Also I will be present/active on Twitter and LinkedIn.

Here are the first six songs I've listened today:

  1. Capable God (Judikay, 2019, Nigeria) [Link]
  2. More than Gold (Judikay ft Mercy Chinwo, 2019, Nigeria) [Link]
  3. Nigerian Praise (Agatha Moses, 2004, Nigeria) [Link]
  4. Yissé Non (Anna Teko, Benin) [Link]
  5. A toi la gloire (Yvan Pour Yesue, 2020, Benin) [Link]
  6. Il est bon de louer Dieu (Dorcas Kaja) [Link]

Let's hope and believe in the next 365 days.

See you !