Slide 1

Slide 1 text

Casser la barrière du langage pour souder vos équipes Louis CAD - DevFest Lille 2023

Slide 2

Slide 2 text

Hoeveel talen spreek je goed?

Slide 3

Slide 3 text

Casser la barrière du langage pour souder vos équipes Louis CAD - DevFest Lille 2023

Slide 4

Slide 4 text

Hoeveel talen spreek je goed?

Slide 5

Slide 5 text

Combien de langues parlez-vous bien ? 🇳🇱🇪🇸🇵🇹🇬🇧🇧🇪🇩🇪🇮🇹🇭🇷🇫🇷 Dans une démarche d'inclusion, chaque diapositive sera dans une langue différente.

Slide 6

Slide 6 text

Combien de langages de programmation ?

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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?

Slide 9

Slide 9 text

Combien de langages de programmation ? 🏢Dans votre entreprise* *ou équipe, si vous préférez

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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)

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

Les différents aspects d'un langage de programmation

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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) 🧨

Slide 21

Slide 21 text

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…)

Slide 22

Slide 22 text

Les murs • Runtime trop gros (Scala…) • Pas de multi-threading (JavaScript, TypeScript…) • Non compatibilité avec certains environnements d'exécution (tous…)

Slide 23

Slide 23 text

La ségrégation des bases de code

Slide 24

Slide 24 text

La ségrégation des bases de code platforms.forEach { writeAllTheCode() }

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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é ?

Slide 40

Slide 40 text

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 ?

Slide 41

Slide 41 text

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 ?

Slide 42

Slide 42 text

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…)

Slide 43

Slide 43 text

Le rêve

Slide 44

Slide 44 text

Le rêve Avec un langage élu au su f f

Slide 45

Slide 45 text

Le rêve Avec un langage élu au su f f

Slide 46

Slide 46 text

La réalité* 🗳

Slide 47

Slide 47 text

La réalité* 🗳

Slide 48

Slide 48 text

La réalité* *un seul candidat 🗳

Slide 49

Slide 49 text

La réalité* *un seul candidat (🗳)

Slide 50

Slide 50 text

La réalité(1) (1) : avec Kotlin(2) (🗳) (2) : on parlera de Dart après

Slide 51

Slide 51 text

Il ne s'agit pas de réécrire systématiquement toute une base de code en Kotlin ! Aucun intérêt économique. ⚠

Slide 52

Slide 52 text

Démo de KMM wizard Bon example d'interop avec JavaScript Utilise Compose HTML (anciennement appelé Compose for Web)

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

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)

Slide 55

Slide 55 text

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") } }

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Il n'est pas nécessaire de faire du 100 % Kotlin pour en pro f iter ! ℹ

Slide 59

Slide 59 text

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)

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Basics de chez basique

Slide 63

Slide 63 text

Variables val attendees = 23

Slide 64

Slide 64 text

Variables val attendees = 23 attendees++

Slide 65

Slide 65 text

Variables val attendees = 23 attendees++ // compilation error Immutable reference

Slide 66

Slide 66 text

Variables var attendees = 23 attendees++ Mutable reference

Slide 67

Slide 67 text

Variables var attendees = 23 attendees++ // ok Mutable reference

Slide 68

Slide 68 text

Functions fun welcomeMessage(name: String): String { 
 return "Welcome back " + name 
 }

Slide 69

Slide 69 text

Functions fun welcomeMessage(name: String): String = "Welcome back " + name

Slide 70

Slide 70 text

Functions fun welcomeMessage(name: String) = "Welcome back " + name

Slide 71

Slide 71 text

Classes class User

Slide 72

Slide 72 text

Classes class User()

Slide 73

Slide 73 text

Classes class User(val firstName: String, val lastName: String, val middleName: String = "")

Slide 74

Slide 74 text

Classes class User( val firstName: String, val lastName: String, val middleName: String = "" )

Slide 75

Slide 75 text

Classes data class User( val firstName: String, val lastName: String, val middleName: String = "" )

Slide 76

Slide 76 text

Classes open class User( val firstName: String, val lastName: String, val middleName: String = "" )

Slide 77

Slide 77 text

Classes open class Vehicle(val name: String) 
 
 class CargoBike(name: String) : Vehicle(name) class RecumbentBike(name: String) : Vehicle(name)

Slide 78

Slide 78 text

kotl.in/learn

Slide 79

Slide 79 text

kotl.in/docs

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Et moi, je fais quoi avec Kotlin ?

Slide 82

Slide 82 text

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)

Slide 83

Slide 83 text

Détruire les barrières, sans détruire les gens.

Slide 84

Slide 84 text

Question bienvenues ! Dispo en DM Twitter, par email (voir pro f il GitHub), et autres… Slides dispo sur devfestlille2023.louiscad.com