Slide 1

Slide 1 text

The State of KOTLIN ZAN MARKAN DEVELOPER EVANGELIST @ PUSHER

Slide 2

Slide 2 text

The State of KOTLIN ZAN MARKAN DEVELOPER EVANGELIST @ PUSHER

Slide 3

Slide 3 text

KOTLIN @ PUSHER Used for all new SDK development for Android ▸ Chatkit ▸ Push Notifications ▸ Feeds © @zmarkan 2018 | @pusher

Slide 4

Slide 4 text

SURVEY GOALS ▸ Learning ▸ Promote Kotlin usage ▸ Give back to the community ▸ Hoping for 1000 responses © @zmarkan 2018 | @pusher

Slide 5

Slide 5 text

DOING THE SURVEY ▸ December - Jan -> Questions ▸ Jan - March -> Survey running ▸ prize -> Nikola Curilovic © @zmarkan 2018 | @pusher

Slide 6

Slide 6 text

2744 RESPONSES © @zmarkan 2018 | @pusher

Slide 7

Slide 7 text

33% COMPLETION RATE © @zmarkan 2018 | @pusher

Slide 8

Slide 8 text

13M14S AVG TIME TO COMPLETE © @zmarkan 2018 | @pusher

Slide 9

Slide 9 text

CATEGORIES SURVEYED ▸ Usage ▸ Learning ▸ Features ▸ Zeitgeist ▸ Demographics © @zmarkan 2018 | @pusher

Slide 10

Slide 10 text

STATE OF KOTLIN © @zmarkan 2018 | @pusher

Slide 11

Slide 11 text

KOTLIN USAGE © @zmarkan 2018 | @pusher

Slide 12

Slide 12 text

58% CURRENTLY USE KOTLIN ON A PROJECT © @zmarkan 2018 | @pusher

Slide 13

Slide 13 text

HAVE YOU EVER USED KOTLIN? © @zmarkan 2018 | @pusher

Slide 14

Slide 14 text

ON WHAT KIND OF PROJECTS? © @zmarkan 2018 | @pusher

Slide 15

Slide 15 text

80% OF PEOPLE USE IT FOR ANDROID APPS © @zmarkan 2018 | @pusher

Slide 16

Slide 16 text

WORK PROJECTS © @zmarkan 2018 | @pusher

Slide 17

Slide 17 text

OTHER PROJECTS ▸ Games ▸ Scripting ▸ Experiments ▸ Learning & Koans ▸ Data Science © @zmarkan 2018 | @pusher

Slide 18

Slide 18 text

55% vs 25% KOTLIN-ONLY PROJECTS © @zmarkan 2018 | @pusher

Slide 19

Slide 19 text

KOTLIN IN WORK PROJECTS © @zmarkan 2018 | @pusher

Slide 20

Slide 20 text

KOTLIN IN SIDE PROJECTS © @zmarkan 2018 | @pusher

Slide 21

Slide 21 text

Other programming languages OF KOTLIN COMMUNITY © @zmarkan 2018 | @pusher

Slide 22

Slide 22 text

JAVA, SWIFT, JS, NODE, PYTHON, ... © @zmarkan 2018 | @pusher

Slide 23

Slide 23 text

MIGRATIONS FROM JAVA TO KOTLIN (and back again) © @zmarkan 2018 | @pusher

Slide 24

Slide 24 text

87% MIGRATED JAVA TO KOTLIN © @zmarkan 2018 | @pusher

Slide 25

Slide 25 text

HOW HAVE YOU DONE THE MIGRATION? © @zmarkan 2018 | @pusher

Slide 26

Slide 26 text

25% REVERTED MIGRATION © @zmarkan 2018 | @pusher

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

REASONS ▸ Reflection, dependencies - Dagger, GreenDAO, Realm & Data classes ▸ Early days: Spring DI and JaxRS ▸ Organisational reasons © @zmarkan 2018 | @pusher

Slide 29

Slide 29 text

"Made to do it due to organizational rules" !

Slide 30

Slide 30 text

"Another team took the code and didn’t want Kotlin" !

Slide 31

Slide 31 text

"Migration tri!ered a number of changes in the Java code" !

Slide 32

Slide 32 text

"Migration doesn't provide idiomatic kotlin and puts lot of nu! assertions" !

Slide 33

Slide 33 text

LEARNING KOTLIN © @zmarkan 2018 | @pusher

Slide 34

Slide 34 text

WHEN DID YOU PICK UP KOTLIN? © @zmarkan 2018 | @pusher

Slide 35

Slide 35 text

WHY? ▸ Google, JetBrains support ▸ Tooling support ▸ Community folk: Jake Wharton, Christina Lee, Antonio Leiva ▸ JB folk: Hadi Hariri, Svetlana Isakova, Andrey Breslav © @zmarkan 2018 | @pusher

Slide 36

Slide 36 text

"The popularity of Kotlin in a short period of time" !

Slide 37

Slide 37 text

"Java was very verbose and Kotlin is just "

Slide 38

Slide 38 text

"It's like Java++"

Slide 39

Slide 39 text

TOP LEARNING RESOURCES © @zmarkan 2018 | @pusher

Slide 40

Slide 40 text

DEVELOPER BACKGROUNDS © @zmarkan 2018 | @pusher

Slide 41

Slide 41 text

FAVOURITE FEATURES © @zmarkan 2018 | @pusher

Slide 42

Slide 42 text

FAVOURITE FEATURES © @zmarkan 2018 | @pusher

Slide 43

Slide 43 text

Other FAVOURITE FEATURES ▸ when ▸ reified ▸ sealed classes ▸ lambdas © @zmarkan 2018 | @pusher

Slide 44

Slide 44 text

FIRST ORDER FUNCTIONS? © @zmarkan 2018 | @pusher

Slide 45

Slide 45 text

77% HAVE USED EXTENSION FUNCTIONS © @zmarkan 2018 | @pusher

Slide 46

Slide 46 text

WHAT FOR? ▸ Reducing Android boilerplate ▸ Replacing Util classes ▸ “nicer” FP ▸ Conversions → strings, etc… ▸ DSLs © @zmarkan 2018 | @pusher

Slide 47

Slide 47 text

"We felt like going overboard with them Now trying to find a happy medium" !

Slide 48

Slide 48 text

"The most important use case is lambda parameters for DSL- style builders." !

Slide 49

Slide 49 text

"For clean code mostly They make the code more readable" !

Slide 50

Slide 50 text

29% HAVE USED COROUTINES © @zmarkan 2018 | @pusher

Slide 51

Slide 51 text

WHAT FOR? ▸ Threading, I/O, UI ▸ Replacement for RxJava ▸ Lazy generators ▸ Serverside - with Ktor ▸ C# "expats" © @zmarkan 2018 | @pusher

Slide 52

Slide 52 text

"I've used it with the library Arrow" !

Slide 53

Slide 53 text

"Stopped using it because it’s experimental" ⚗

Slide 54

Slide 54 text

"Fu!y in production for a fintech solution" !

Slide 55

Slide 55 text

"They provide a very funny API when used to wrap JS promises" !

Slide 56

Slide 56 text

26% USED NON-JVM FEATURES © @zmarkan 2018 | @pusher

Slide 57

Slide 57 text

NON-JVM FEATURES © @zmarkan 2018 | @pusher

Slide 58

Slide 58 text

BUILD TOOLS © @zmarkan 2018 | @pusher

Slide 59

Slide 59 text

41% HAVE USED A DSL © @zmarkan 2018 | @pusher

Slide 60

Slide 60 text

DSL USAGE © @zmarkan 2018 | @pusher

Slide 61

Slide 61 text

24% HAVE DEVELOPED A DSL THEMSELVES © @zmarkan 2018 | @pusher

Slide 62

Slide 62 text

WHAT FOR? ▸ ML & AI ▸ Jake Wharton's Testing Robots ▸ UI Declarations (Android & Java) ▸ Configurations, tooling ▸ Custom Data Structures - typed JSON © @zmarkan 2018 | @pusher

Slide 63

Slide 63 text

REPLACING C WITH K? © @zmarkan 2018 | @pusher

Slide 64

Slide 64 text

© @zmarkan 2018 | @pusher

Slide 65

Slide 65 text

KOTLIN ZEITGEIST © @zmarkan 2018 | @pusher

Slide 66

Slide 66 text

29% ARE MISSING THINGS IN KOTLIN © @zmarkan 2018 | @pusher

Slide 67

Slide 67 text

MOST MISSED ▸ Ternary operator ▸ SAM for Kotlin classes ▸ Pattern matching ▸ More syntax sugar ▸ LINQ © @zmarkan 2018 | @pusher

Slide 68

Slide 68 text

MORE MISSED... ▸ Literal bitwise operations ▸ Custom operations ▸ Single multiplatform IDE ▸ VueJS support ▸ Swift’s guard © @zmarkan 2018 | @pusher

Slide 69

Slide 69 text

21% DISLIKE FEATURES... © @zmarkan 2018 | @pusher

Slide 70

Slide 70 text

MOST HATED ▸ Companion objects / statics ▸ Too many "exotic" keywords ▸ Public by default ▸ No package-local modifier ▸ Not a dynamic language © @zmarkan 2018 | @pusher

Slide 71

Slide 71 text

WHAT DO YOU LIKE THE MOST? ▸ Features ▸ moden programming language, similar to Swift, NOT Java ▸ Syntactic sugar, stdlib, easy to learn ▸ It's fun ▸ Platform independent © @zmarkan 2018 | @pusher

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

"It can be read like a story" !

Slide 74

Slide 74 text

"I smile again when writing code" !

Slide 75

Slide 75 text

"The language doesn't get in the way of getting the job done" !

Slide 76

Slide 76 text

"Mortal Kombat: The Programming Language" !

Slide 77

Slide 77 text

DEMOGRAPHICS © @zmarkan 2018 | @pusher

Slide 78

Slide 78 text

KOTLINERS ARE EVERYWHERE ! " © @zmarkan 2018 | @pusher

Slide 79

Slide 79 text

EMPLOYMENT © @zmarkan 2018 | @pusher

Slide 80

Slide 80 text

YEARS WORKING AS DEVELOPER OR SWE © @zmarkan 2018 | @pusher

Slide 81

Slide 81 text

NUMBER OF PEOPLE YOUR ORG © @zmarkan 2018 | @pusher

Slide 82

Slide 82 text

KOTLIN DEVS IN YOUR ORG © @zmarkan 2018 | @pusher

Slide 83

Slide 83 text

SECTORS AND INDUSTRY © @zmarkan 2018 | @pusher

Slide 84

Slide 84 text

FUTURE OF STATE OF KOTLIN? WHAT WOULD YOU LIKE TO ASK? © @zmarkan 2018 | @pusher

Slide 85

Slide 85 text

Zan Markan [email protected] @zmarkan © @zmarkan 2018 | @pusher

Slide 86

Slide 86 text

REFERENCES ▸ JW's whitepaper from Square: docs.google.com/document/d/ 1ReS3ep-hjxWA8kZi0YqDbEhCqTt29hG8P44aA9W0DM8 ▸ Kotlin Future Features survey: blog.jetbrains.com/kotlin/2017/06/ kotlin-future-features-survey-results ▸ StackOvervlow Survey: insights.stackoverflow.com/survey/2018 © @zmarkan 2018 | @pusher