J'ai choisi la plateforme web "Medium Daily Digest" comme outil de veille. Cet outil me permet de recevoir chaque jour des mails sur des sujets de mon choix. Ces sujets m'ont permis de progresser en programmation dans le sens général mais également dans mes projets, aussi bien en formation, qu'en entreprise et même pour mes projets personnels. Pour cette veille technologique, j'ai sélectionné les sujets suivants :
04/2025
JavaScript
Grâce à cet article j'ai appris une méthode permettant d'aplatir des tableaux imbriqués pour en faire une liste simple et unique. J'ai pu réaliser une version "maison" de la fonction Array.prototype.flat(), appelée customFlat, qui utilise la récursivité*1 pour parcourir et aplatir des tableaux jusqu'à la profondeur voulue. Grâce à cela, j'ai compris le concept de polyfills*2 plus facilement.
*1 : En programmation, la récursivité est une technique où une fonction s'appelle elle-même pour résoudre un problème. Dans l'exemple customFlat, la fonction se rappelle sur les sous-tableaux jusqu'à atteindre la profondeur d'aplatissement désirée.
*2 : Un polyfill est un morceau de code qui fournit une fonctionnalité moderne aux navigateurs plus anciens qui ne la supportent pas nativement. Notre fonction customFlat représente l'esprit d'un polyfill : recréer une fonctionnalité existante pour la compréhension ou la compatibilité.
01/2025
Python
Cet article m'a montré comment réaliser diverses tâches en une seule ligne de code, souvent en utilisant des bibliothèques tierces* ou en simplifiant notre façon d'approcher les problèmes. L'article couvrait large éventail d'opérations : par exemple, on y apprend à nettoyer des données textuelles, formater des grands nombres pour une meilleure lisibilité, générer un mot de passe aléatoire, aplatir une liste à deux dimensions en une seule, ou encore démarrer un simple serveur de partage de fichiers.
* : Ce sont des ensembles de code, d'outils et de fonctions développés par la communauté ou des entreprises, que l'on peut importer dans nos projets Python pour étendre ses fonctionnalités sans avoir à tout réécrire.
12/2024
JavaScript
Cet article m'a fait réaliser à quel point JavaScript est un langage étrange, qui peut surprendre même les développeurs aguerris. On y apprend par exemple que l'expression +[] donne 0, que typeof null retourne "object" (un bug historique conservé pour la rétrocompatibilité*1), ou encore que les fonctions sont des objets de première classe*2 et peuvent donc avoir des propriétés. Mais également le fait que les calculs à virgule flottante sont imprécis (par exemple, 0.1 + 0.2 qui ne donne pas exactement 0.3).
*1 : C'est une propriété d'un système, logiciel ou standard qui lui permet de fonctionner avec des versions antérieures de lui-même ou des technologies plus anciennes. Dans le cas de typeof null, changer son comportement "casserait" une grande quantité de code JavaScript existant sur le web.
*2 : En informatique, cela signifie qu'une entité (ici, une fonction JavaScript) peut être traitée comme n'importe quelle autre valeur. Elle peut être stockée dans une variable, passée comme argument à une autre fonction, retournée par une fonction, et avoir ses propres propriétés.
10/2024
JavaScript
Scinder JavaScript en deux versions : JS Zéro (JS0) et JS Sugar. Voilà l'idée qui a été publicisée en Octobre 2024. JS0 serait la version stable et performante implémentée par les moteurs des navigateurs, tandis que JS Sugar contiendrait les nouvelles fonctionnalités qui nécessiteraient une transpilation*1 en JS0 via des outils de build. L'objectif serait de stabiliser le cœur du langage pour les utilisateurs normaux tout en permettant son innovation via des outils. Cependant, cette idée a agité les développeurs, dû à la dépendance accrue aux outils de build pour tous et une potentielle complexification de l'écosystème. Il était aussi question de l'impact sur la facilité d'utilisation du "vanilla JS" et de la charge de travail pour les mainteneurs d'outils et "moteurs JavaScript"*2.
*1 : C'est le processus de convertir du code source écrit dans un langage (ou une version d'un langage, comme JS Sugar) en un code source équivalent dans un autre langage (ou une autre version, comme JS0).
*2 : Ce sont les programmes qui exécutent le code JavaScript, principalement dans les navigateurs web (comme V8 pour Chrome, SpiderMonkey pour Firefox).
08/2024
JavaScript
Porffor est un projet expérimental qui explore la compilation AOT *1 de JavaScript vers du WebAssembly*2. L'objectif principal démontré n'était pas tant une amélioration de la vitesse d'exécution, mais plutôt de réduire la taille des binaires finaux et la consommation de mémoire en évitant d'embarquer un moteur JavaScript complet. Le projet, a été mené par un développeur ayant contribué à Test262*3. Celui-ci en est à ses débuts mais est considéré comme prometteur pour des cas d'usage où la légèreté est critique, bien que des limitations existent, notamment pour le contenu dynamique des navigateurs ou l'utilisation de fonctionnalités comme eval.
*1 : Signifiant "Ahead-Of-Time", c'est une stratégie de compilation où le code source est transformé en code machine avant son exécution, contrairement à la compilation JIT (Just-In-Time) qui se fait pendant l'exécution.
*2 : C'est un format binaire de bas niveau conçu pour le web, permettant d'exécuter du code (souvent écrit dans des langages comme C++, Rust, etc) à des performances proches du natif dans les navigateurs.
*3 : La suite de tests officielle utilisée pour vérifier la conformité des moteurs JavaScript aux standards ECMAScript.
04/2024
Python
Cet article m'a servi d'introduction au traitement asynchrone en Python. L'idée principale est de permettre à un programme d'exécuter plusieurs tâches en concurrence*1, sans que le programme principal soit bloqué en attendant la fin de chaque tâche, comme c'est le cas en mode synchrone. C'est particulièrement utile pour les opérations d'entrée/sortie (I/O) qui peuvent être longues, comme les appels réseau. En Python, cela se fait beaucoup avec le module asyncio, qui utilise les mots-clés async pour définir une coroutine*2 et await pour marquer un point où la coroutine peut être mise en pause en attendant un résultat, permettant à d'autres tâches de s'exécuter.
*1 : C'est la capacité de gérer plusieurs tâches qui semblent s'exécuter en même temps, même si elles sont en réalité traitées par morceaux en alternance par un seul processeur. asyncio permet ce type de fonctionnement sur un seul thread.
*2 : En Python avec asyncio, c'est une fonction définie avec async def. Son exécution peut être suspendue (avec await) et reprise plus tard, permettant à d'autres coroutines de s'exécuter pendant la suspension.
03/2024
JavaScript
Cet article m'a enseigné de nombreuses façons de coder en JavaScript pour réduire le nombre de lignes de mes programmes via l'utilisation de one-liners*1. Par exemple, l'article montre comment générer une chaîne de caractères aléatoire, mettre en majuscule la première lettre de chaque mot, convertir une chaîne en camelCase*2, supprimer les doublons ou les valeurs dites "falsy" d'un tableau, ou encore calculer une moyenne. L'idée générale était d'améliorer la lisibilité et l'efficacité du code grâce à ces astuces.
*1 : En programmation, un "one-liner" (littéralement "une seule ligne") est un morceau de code qui accomplit une tâche spécifique en une seule ligne.
*2 : C'est une convention de nommage très répandue en programmation. Quand un identifiant (comme un nom de variable ou de fonction) est composé de plusieurs mots, le premier mot commence par une minuscule et les mots suivants commencent par une majuscule, sans espace ni ponctuation entre eux (par exemple : maVariableEnCamelCase).
02/2024
Python
La fonction print en python est un outil puissant, mais dont on ne connait pas forcément les capacités entières. Cet article m'a permis d'améliorer mon utilisation jusque-là basique de celui-ci. J'ai appris l'existance de paramètres optionnels, tels que : sep, end et file. Ainsi que l'existence des raw strings*.
* : Un raw string est une chaîne de caractères non formattée, elle permet l'utilisation des backslash (caractère "\") sans avoir besoin de le doubler. Ce qui s'avère utile lors de l'écriture d'expressions régulières, de chemins de fichiers Windows ou d'autres cas où les backslashes sont fréquemment utilisés.
01/2024
Python
Avec cet article j'ai pu apprendre de nombreux concepts en python que j'ignorais. Parmi eux se trouve notamment la différence entre l'utilisation de *args et **kwargs* lors de la création de fonctions, les fonctions lambda, les décorateurs et les générateurs.
* : La différence entre *args et **kwargs est que le premier accepte n'importe quel argument positionnel, stockés dans un tuple, et le deuxième accepte des arguments nommés, stockés dans un dictionnaire.
12/2023
JavaScript
J'ai pu apprendre de nombreuses façons de déboguer mon code grâce à cet article. Il nous apprend l'utilité des diverses méthodes d'écriture dans la console, plutôt que d'utiliser des console.log* pour tout type de messages. Nous y apprenons l'existance de méthodes telles que console.error pour afficher des erreurs avec une alerte rouge, console.time et console.timeEnd pour avoir des informations relatives au temps d'exécution de notre programme, et j'en passe. Grâce à ça, j'ai pu améliorer à la fois mes réalisations et mon expérience en tant que développeur.
* : Console.log représente la méthode traditionnelle d'afficher du texte dans la console en JavaScript.
D'autres articles vont être publiés...