Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Casser la barrière du langage pour souder vos é...

Casser la barrière du langage pour souder vos équipes

Vos équipes parlent-elles la même langue ? Quelles sont les limites de la collaboration ?

Plus vous avez de langages de programmation à travers le backend, les scripts, et les applications WEB, mobiles, desktop, plus c'est compliqué de collaborer, sans même parler des différents frameworks et multiples bibliothèques.

Peut-on éviter cette fatalité sans s'empêcher de réaliser des produits logiciels de qualité ? Grâce à certains langages multiplateformes, notamment Kotlin, oui c'est aujourd'hui possible. À quel point, et sous quelles conditions ?

Louis CAD

May 27, 2023
Tweet

More Decks by Louis CAD

Other Decks in Programming

Transcript

  1. Combien de langages de programmation ? D'après votre CV •

    Java? • TypeScript? • Python? • PHP? • Kotlin? • Swift? • Rust? • Dart? • C#? • C vite fait D'après les o ff res d'emploi • Java(Script) • PHP • Python • Ruby • Rust • Kotlin • Swift • TypeScript • Dart • Scala • Perl • Lisp • Elixir • Haskell • bash • batch • C# • C/C++ • C tout?
  2. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise
  3. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso
  4. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso
  5. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso = 36
  6. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise = 1024 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso = 36
  7. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso Facilité de collaboration ≈ ⍺ × (nperso/nentreprise)
  8. Combien de langages de programmation ? 🏢Dans votre entreprise* *ou

    équipe, si vous préférez nentreprise 👩💻Avec lesquels vous êtes à l'aise ?* *parmi ceux utilisés dans votre entreprise nperso Facilité de collaboration ≈ ⍺ × (nperso/nentreprise) Di ff iculté de collaboration ≈ β × (nentreprise/nperso)
  9. Les différents aspects d'un langage de programmation Conception -> Productivité

    Lisibilité Complexité "Intuitivité", choix par défaut Pièges & embuches
  10. Les différents aspects d'un langage de programmation Conception -> Productivité

    Champ des possibles Plateformes compatibles Interopérabilité avec les autres langages API intégrées et de première partie Écosystème de bibliothèques Lisibilité Complexité "Intuitivité", choix par défaut Pièges & embuches
  11. Les pièges (C'est une manière de voir les choses) •

    Mutable par défaut (Java, JavaScript, Python, PHP…) 🤯 • Pas de typage (JavaScript) 😶 • Typage optionnel (Python…) 🤞 • Nullabilité non déclarée (Java) 💣 • Héritage & surcharge ouverts par défaut 👻 • Gestion manuelle de la mémoire (C++/C) 🧨
  12. Les embuches (C'est une manière de voir les choses) •

    Répétitions : constructeurs, champs, getters (& setters?) (Java) • Créer une classe pour écrire une fonction (Java) • Indirections • Limites d'abstraction • Détails techniques importants (C++, Rust…)
  13. Les murs • Runtime trop gros (Scala…) • Pas de

    multi-threading (JavaScript, TypeScript…) • Non compatibilité avec certains environnements d'exécution (tous…)
  14. La ségrégation des bases de code platforms.forEach { writeAllTheCode() }

    C# JavaScript Swift Kotlin Swift C++ JavaScript
  15. La ségrégation des bases de code platforms.forEach { writeAllTheCode() }

    JavaScript Swift Kotlin Ruby JavaScript Dart Dart
  16. La ségrégation des bases de code platforms.forEach { writeAllTheCode() }

    TypeScript Swift Kotlin TypeScript Dart Dart Dart
  17. La ségrégation des bases de code platforms.forEach { writeAllTheCode() }

    TypeScript Swift Kotlin TypeScript Dart Dart Dart
  18. La ségrégation des bases de code Peut-on éviter cette fatalité

    sans s'empêcher de réaliser des produits logiciels de qualité ?
  19. La ségrégation des bases de code Peut-on éviter cette fatalité

    sans s'empêcher de réaliser des produits logiciels de qualité ? JavaScript Non ?
  20. La ségrégation des bases de code Peut-on éviter cette fatalité

    sans s'empêcher de réaliser des produits logiciels de qualité ? TypeScript Non plus ?
  21. Grosses "fractures numériques" en dev Une équipe par plateforme ?

    Alors vous avez "tout gagné". • Backend (Langage X + framework) • Web frontend (JavaScript ou TypeScript + framework) • Scripting, DevOps (Shell/bash, batch, Python, Rust, Go…) • Android, Wear OS… (Kotlin, Dart, Java, JavaScript) • iOS, watchOS… (Swift, Kotlin, Dart, Objective-C, JavaScript) • Desktop (C++, C#, Swift, Java, Kotlin, Rust, JavaScript…)
  22. Il ne s'agit pas de réécrire systématiquement toute une base

    de code en Kotlin ! Aucun intérêt économique. ⚠
  23. Démo de KMM wizard Bon example d'interop avec JavaScript Utilise

    Compose HTML (anciennement appelé Compose for Web)
  24. Un peu de contexte : Frameworks d'UI déclaratifs React (JS,

    Web) Vue (JS, Web) Flutter (Android, iOS, Desktop, Web) SwiftUI (iOS, macOS, watchOS, tvOS) Compose Multiplatform (Android, iOS, macOS, Desktop, Web/WASM, HTML/JS)
  25. Aperçu de la syntaxe de Compose @Composable fun Greeting(name: String)

    { Text(text = "Hello $name!”) } @Preview(showBackground = true) @Composable fun Names() { Column { Text("Pierre") Text("Paul") Text("Jacques") } }
  26. Compose Web Compiler Runtime Compose UI Android UI Compose Desktop

    Compose HTML Wear Compose Compose iOS Compose Web Canvas RenderNode Skia/Skiko Canvas RenderNode Skia/Skiko Metal WASM Canvas Alpha Experimental
  27. KMP ou KMM ? KMP : Kotlin Multiplatform JS (Web

    & nodejs) WASM (Web et autres) JVM (Desktop, Server, Android) Native iOS, watchOS, tvOS, macOS Android NDK Linux (ARM_64 & X86_64) Windows (X86_64) KMM : Kotlin Multiplatform Mobile Spécialisation iOS et Android… …ainsi que watchOS et Wear OS
  28. Kotlin est directement interoperable avec les langages de programmation suivants

    • Java (deux sens) • JavaScript (deux sens, quelques gotchas) • TypeScript (deux sens, quelques gotchas) • Objective-C (deux sens, quelques gotchas) • Swift (via Objective-C pour le moment, ou via des plugins tiers dédiés) • C (deux sens, quelques gotchas)
  29. Si vous voulez faire du KMM… Talk tout frais (mardi

    23 mai 2023) au PAUG Vidéo sur Twitch : bit.ly/3WCaRlx Slides bit.ly/3MvASyq
  30. Les forces de Kotlin • Syntaxe concise, typage fort, stdlib

    • Null safety (adieu les NullPointerException, ça ne compilera plus) • Asynchronisme annulable (coroutines) • Ecosystème(s), interopérabilité • Conversion de Java à Kotlin dans IntelliJ IDEA et Android Studio
  31. Classes open class Vehicle(val name: String) 
 
 class CargoBike(name:

    String) : Vehicle(name) class RecumbentBike(name: String) : Vehicle(name)
  32. WASM et WASI • Honnêtement, j'y connais pas encore grand

    chose • WASM : WebAssembly, fonctionne avec plein de langages • WASI : permettra d'utiliser une bibliothèque Python en TypeScript ou en Kotlin
  33. Et moi, je fais quoi avec Kotlin ? Plein de

    trucs ! 2014-2022 : une application Android pour travailleur isolé, haute f iabilité requise (Beepiz) Un SDK de graphiques : charts.kt (KMP : Web, iOS, Android, Desktop, server SVG) Des plugins Gradle trop cools (comme refreshVersions) Des bibliothèques open source pour faire des applications encore plus facilement (Splitties) depuis 2016 Des applications pour montres Wear OS (WIP)
  34. Question bienvenues ! Dispo en DM Twitter, par email (voir

    pro f il GitHub), et autres… Slides dispo sur devfestlille2023.louiscad.com