Les vrais programmeurs sont capables de d’écrire en Java comme s’ils codaient en FORTRAN
Je suis codeur Java et je travaille sur des systèmes de trading haute fréquence. Je sais que certains contestent que la supériorité de Java pour le travail à très faible latence, mais selon mon expérience, il est parfaitement fiable. J’ai vu du code Java optimisé qui n’était que 20 à 30% plus lent que du code C optimisé à l’extrême, et c’est excellent. L’application était à chaque fois en mesure de répondre aux signaux du marché en moins de dix microsecondes.
Les vrais programmeurs peuvent écrire du FORTRAN dans n’importe quel langage. Il est parfaitement possible d’écrire du code à faible latence en Java, le problème n’est pas là - mais plutôt dans le manque d’outils. Il y a très peu de choses utilisables dans les bibliothèques Java standards. Vous vous retrouvez donc réduits à vous arracher les cheveux pour résoudre le moindre problème – comme gérer la mémoire sans résultat et vous retrouver subitement à générer une forte latence justement là où vous ne le voulez pas.
Si vous pouvez coder en Java de type FORTRAN, vous parviendrez à surmonter tout cela. Sans compter que Java présente de multiples avantages :
- Java est un langage plus simple que C++, mais il permet aussi une modélisation simple des objets, une option non disponible en C. Son champ de fonctionnalités plus restreint aide par ailleurs les développeurs à rester concentrés sur la logique de l’application plus que sur l’expression de leur supériorité technique en recourant à tous les artifices disponibles (ce qui rend souvent le code C++ plus difficile à lire et à améliorer par d’autres).
- Java est plus simple à déboguer que C++. Il génère des rapports de crash très clairs sous forme de traces d’appel qui permettent au développeur de trouver très rapidement les dysfonctionnements.
- Selon la sensibilité d’une application à la latence, le développeur Java peut choisir une autre technique de gestion de la mémoire. L’approche zero garbage n’est pas toujours nécessaire. Par exemple, vous pouvez toujours utiliser un récupérateur de mémoire récent, ce qui permet d’accélérer le développement. Si les pauses ne sont pas souhaitables, elles sont cependant tolérables tant qu’elles ne sont pas trop fréquentes et restent courtes, et que la solution à faible latence peut continuer à fonctionner. Ces critères varient de toute évidence en fonction du marché, du client ou de la stratégie de trading.
- Java est un langage bien établi. C’est aussi le premier langage de programmation pour de nombreux développeurs présentant des niveaux d’expérience très divers. Il peut être difficile de ‘désapprendre’ ce que vous savez déjà, mais bien souvent, les mêmes développeurs, s’ils sont correctement formés, peuvent coder des modules à faible latence aussi bien que des applications web ou d’entreprise.
- Java propose un écosystème de développement riche et peut être utilisé par les développeurs directement sous Windows, Mac et diverses distributions de Linux. La Java Virtual Machine (JVM) gère la plupart des différences. Le même programme (JAR) fonctionnera sur toutes les plateformes – même si quelques bibliothèques mineures peuvent être nécessaires en complément pour optimiser les résultats sur le front de la faible latence.
- Java dispose du mot-clé « assert », qui permet d’automatiser les tests au sein d’une application. La logique peut être activée ou désactivée sélectivement suivant le niveau de surcharge acceptable et la stratégie de test. En production, la logique « auto-test » est ignorée, évitant ainsi toute recompilation. C’est très utile pour vérifier le maintien de la cohérence lors de la mise en commun/la réutilisation d’objets durant les tests unitaires et d’intégration, ainsi que dans les environnements QA/UAT en temps réel.
Je suis sûr que certains ne sont pas d’accord avec moi sur l’un ou l’autre de ces points, mais j’ai vu le fonctionnement de Java à faible latence dans la pratique. Certaines entreprises utilisent Java en trading électronique depuis plus de 15 ans, et investissent aujourd’hui activement en R&D pour améliorer leur vitesse et leur qualité d’exécution. De la même manière, d’autres jusqu’ici centrées exclusivement sur la faible latence/le trading haute fréquence chercheront toujours des moyens d’affirmer leur supériorité dans leur niche d’activité. Certaines utilisent C/C++ et des réseaux logiques programmables (FPGA) ou d’autres techniques spécialisées pour réduire leur retard d’une simple nanoseconde. J’ai vu des utilisations en parallèle de Java, C++ et FPGA.
Frank Becker est un pseudonyme
Crédit photo : Michael Dziedzic sur Unsplash
Have a confidential story, tip, or comment you’d like to share? Contact: sbutcher@efinancialcareers.com in the first instance. Whatsapp/Signal/Telegram also available. Bear with us if you leave a comment at the bottom of this article: all our comments are moderated by human beings. Sometimes these humans might be asleep, or away from their desks, so it may take a while for your comment to appear. Eventually it will – unless it’s offensive or libelous (in which case it won’t.)