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

Kotlin/Multiplatform — your shortest (nope) and pain(-ful/-less) way to becoming a Fullstack Developer

Kotlin/Multiplatform — your shortest (nope) and pain(-ful/-less) way to becoming a Fullstack Developer

Stanislav Talanov, New Cloud Technologies at #MOSDROID 17 Chlorine

Поговорим о том, является ли K/N product-ready solution и почему, а также расскажем о нашем опыте внедрения его в релиз.

Бонус для жаждущих хлеба и зрелищ: мое горение

MOSDROID

May 30, 2019
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. Kotlin/Multiplatform
    What have we been doing for a month without development experience

    View Slide

  2. Kotlin/Multiplatform
    What have we been doing for a month without development experience
    done

    View Slide

  3. Kotlin/Multiplatform
    What have we been doing for a month without development experience
    How we suffered
    done

    View Slide

  4. Kotlin/Multiplatform
    t.me/talanov
    linkedin.com/in/talanovs
    Stanislav Talanov
    New Cloud Technologies

    View Slide

  5. DISCLAIMER
    Я вообще смузи iOS разработчик, права на мнение не имею, как
    и права тут выступать. Вас предупреждали — вы сами пришли.
    Тут будет rant не то, что джуна, а вообще трэйни. Еще раз,
    внимательно, вы слушаете сейчас доклад человека, который
    еле-еле Gradle осилил (как он тогда думал) за неделю
    коллективными силами чатика на 50 человек, о чем вообще
    идет речь? Это абсолютно многострадальная презентация и
    должна она была выйти еще полгода назад, поэтому тут
    Франкенштейн из первоначальной версии презентации
    (Internal), той самой (с) и добавлений в последний момент за
    день до МосДроида. Если ты джун с горящими глазами — не
    лезб, оно тебя сожретб!

    View Slide

  6. Cold statistics

    View Slide

  7. 1 month
    Spare time after work

    View Slide

  8. 1 developer
    Without Kotlin experience

    View Slide

  9. 1 QA Engineer
    Without development experience

    View Slide

  10. Скриншот приложения

    View Slide

  11. Why?

    View Slide

  12. View Slide

  13. PLACE FOR YOU

    View Slide

  14. Why exactly Kotlin/MPP?

    View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. React Native
    Main thread
    Общая незрелость экосистемы
    Архитектура в разы сложнее
    Хороший, качественный код
    Отсутствие возможности работы с Accessibility
    JSCore — iOS / Android — ВИРТУАЛЬНАЯ МАШИНА
    LLVM-несовместимый?
    “Свой компонент” — даже TextView
    Royalty?
    GroundBreaking Changes
    Future-Proof?
    Security?
    Возможность писать без участия Native разработчиков
    Не может в сторонние библиотеки
    Ограничения использования API
    Быстродействие
    Актуализация кодовой базы
    – React Native Immaturity - непредсказуемые
    задержки из-за сырости
    – Maintaining a Fork of React Native - пришлось делать
    форк RN и дорого его поддерживать
    – JavaScript Tooling - сложно масштабировать
    написанное на JS
    – Refactoring - тяжело рефакторить RN код
    – JavaScriptCore inconsistencies - нет JSCore на
    Android
    – React Native Open Source Libraries - кривые либы
    – Parallel Infrastructure and Feature Work - пришлось с
    нуля наводить мосты между компонентами на RN

    View Slide

  19. React Native
    – React Native Immaturity - непредсказуемые задержки из-за сырости
    – Maintaining a Fork of React Native - пришлось делать форк RN и дорого его поддерживать
    – JavaScript Tooling - сложно масштабировать написанное на JS
    – Refactoring - тяжело рефакторить RN код
    – JavaScriptCore inconsistencies - нет JSCore на Android
    – React Native Open Source Libraries - недостаточная поддержка
    – Parallel Infrastructure and Feature Work - пришлось с нуля наводить мосты между
    компонентами на RN
    – Crash Monitoring - не все креши приходили в систему и тяжело дебажились
    – Native Bridge - не стабильна интеграция с нейтивом
    – Initialization Time - долго запускается аппа
    – Initial Render Time - рендер дольше из-за чего мигает UI
    – App Size - бинарник тяжелее
    – 64-bit - 64бита на андроиде пока невозомжно
    – Gestures - приходится отключать сложные жесты
    – Long Lists - лагают длинные списки
    – Upgrading React Native - тяжелый апдейт с версии на версию
    – Accessibility - слабо поддерживаются режимы для инвалидов
    – Troublesome Crashes - невозпроизводимые креши
    – SavedInstanceState Across Processes on Android - невозможность сохранить стейт при
    выключении из фона

    View Slide

  20. React Native
    https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a
    https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-
    https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88
    https://habr.com/company/qlean/blog/416097/
    https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at-
    udacity-89975d6a8102

    View Slide

  21. Scade React/Native Kotlin/Native Flutter Xamarin
    No third-party
    IDE for Code /
    Build
    ⛔ ⛔ ⚠ ⛔ ⛔
    Vendor
    Independence
    ⛔ ⚠ ⚠ ⚠ ⛔
    Native UI
    ⚠ ⛔ ✅ ⛔ ⚠
    Bridge -> Native
    ⛔ ✅ ✅ ✅ ⛔
    Native for both
    platforms
    (iOS/Android)
    ⛔ ⛔ ✅ ⛔ ⛔

    View Slide

  22. View Slide

  23. Kotlin/Native
    * Kotlin — Boilerplate-free
    * iOS/Android native support
    * Kotlin круто
    * Linux
    * MacOS
    * Web Assembly
    * Windows
    * and so on…

    View Slide

  24. ПРОСТО НЕ ПОЛУЧИТСЯ

    View Slide

  25. What is Kotlin/MPP?

    View Slide

  26. Kotlin/Multiplatform
    KOTLIN MESSENGER CORE
    UI

    View Slide

  27. Kotlin/Multiplatform
    UI
    Business Logic

    View Slide

  28. Kotlin/Multiplatform
    UI
    Business Logic
    Network

    View Slide

  29. Kotlin/Multiplatform
    UI
    Business Logic
    Network
    Data Access

    View Slide

  30. Kotlin/Multiplatform
    KOTLIN MESSENGER CORE
    UI

    View Slide

  31. Kotlin/Multiplatform
    UI
    *.framework
    LLVM
    LLDB
    *.*
    Native
    Debugger +

    View Slide

  32. Kotlin/Multiplatform
    Sources Kotlin IR
    LLVM
    Bitcode
    LLVM
    Native
    binary
    * Kotlin-frontend
    * Kotlin Native-backend
    * Machine Code
    * System Linker
    Xcode / Android Studio
    Gradle
    LLDB

    View Slide

  33. Святослав Щербина
    Kotlin для написания
    общего кода под
    Android и iOS
    youtu.be/BDTgkXUgXPk

    View Slide

  34. Kotlin/Multiplatform
    KOTLIN MESSENGER CORE
    UI

    View Slide

  35. Kotlin/Multiplatform
    KOTLIN MESSENGER CORE
    UI
    BACKEND / FRONTEND

    View Slide

  36. Support

    View Slide

  37. Code example
    protocol RoomProfile {
    var profileID: String { get }
    var title: String { get }
    var abbreviation: String { get }
    var colorIndex: Int { get }
    var type: Type { get }
    }
    enum Type {
    case unknown
    case user(_ id: String)
    case group
    }
    interface RoomProfile {

    val profileID: String

    val title: String

    val abbreviation: String

    val colorIndex: Int

    val type: Type

    }
    sealed class Type {

    object Unknown: Type()

    class User(val id: String): Type()

    object Group: Type()

    }

    View Slide

  38. Code example
    // Syntax sugar from Swift
    fun List.joined(separator: String): String {
    val string = StringBuilder()
    for (s in this) {
    if (string.isNotEmpty()) {
    string.append(separator)
    }
    string.append(s)
    }
    return string.toString()
    }
    fun String.replacingOccurrences(of: String, with: String) = replace(of, with)

    View Slide

  39. Minute of my personal butthurt

    View Slide

  40. Святослав Щербина
    Kotlin для написания
    общего кода под
    Android и iOS
    youtu.be/BDTgkXUgXPk

    View Slide

  41. * Immutability
    * Fast pace / Beta
    * Painful migrations
    * Android Studio & IDEA have different behaviour
    * Lack of documentation
    * Examples don’t match documentation
    * Heisenbugs, Bohrbugs, Mandelbugs
    * And more…

    View Slide

  42. View Slide

  43. View Slide

  44. PLACE FOR
    YOU

    View Slide

  45. The starting point

    View Slide

  46. So… Is it a product-ready solution?

    View Slide

  47. Cons
    — Fast-paced beta
    — You need to participate
    — There’s no better solution for native*

    View Slide

  48. Pros
    — Common tests
    — You must write platform-specific code
    — Scalability

    View Slide

  49. Pros
    — Release
    — Independence
    — Open-source

    View Slide

  50. Questions?
    t.me/talanov
    linkedin.com/in/talanovs
    Stanislav Talanov
    New Cloud Technologies

    View Slide