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

Server languages for mobile devs

Server languages for mobile devs

Sobolev Nikita

October 22, 2019
Tweet

More Decks by Sobolev Nikita

Other Decks in Programming

Transcript

  1. X
    Никита Соболев
    github.com/sobolevn
    1

    View Slide

  2. Я люблю
    программирование
    2

    View Slide

  3. >_
    X
    Много языков на
    сервере...
    3

    View Slide

  4. >_
    X
    А писать не на
    чем!
    4

    View Slide

  5. !5

    View Slide

  6. Цель: просветить
    6

    View Slide

  7. Цель: вдохновить
    7

    View Slide

  8. Цель: повеселиться
    8

    View Slide

  9. Сколько всего языков
    программирования?
    9

    View Slide

  10. ~3595
    codelani.com/lists/languages.html
    10

    View Slide

  11. Чего не будет?
    11

    View Slide

  12. Чего не будет?
    > Java, Kotlin, Scala
    11

    View Slide

  13. Чего не будет?
    > Java, Kotlin, Scala
    > TypeScript, JavaScript, Dart
    11

    View Slide

  14. Чего не будет?
    > Java, Kotlin, Scala
    > TypeScript, JavaScript, Dart
    > C#, F#
    11

    View Slide

  15. Чего не будет?
    > Java, Kotlin, Scala
    > TypeScript, JavaScript, Dart
    > C#, F#
    > Swift
    11

    View Slide

  16. Я извиняюсь
    12

    View Slide

  17. >_
    X
    Топчик
    13

    View Slide

  18. 14

    View Slide

  19. 15

    View Slide

  20. Top 1* ❤
    16

    View Slide

  21. Красота
    17

    View Slide

  22. Красота
    > Синтаксис и читаемость
    17

    View Slide

  23. Красота
    > Синтаксис и читаемость
    > Инфраструктура
    17

    View Slide

  24. Красота
    > Синтаксис и читаемость
    > Инфраструктура
    > Сообщество
    17

    View Slide

  25. Красота
    > Синтаксис и читаемость
    > Инфраструктура
    > Сообщество
    > Опциональная статическая типизация
    17

    View Slide

  26. Фу
    18

    View Slide

  27. Фу
    > Производительность
    18

    View Slide

  28. Фу
    > Производительность
    > Модель асинхронности
    18

    View Slide

  29. Фу
    > Производительность
    > Модель асинхронности
    > Странные новые фичи (!?)
    18

    View Slide

  30. Фу
    > Производительность
    > Модель асинхронности
    > Странные новые фичи (!?)
    > Управляющий совет
    18

    View Slide

  31. Фу
    > Производительность
    > Модель асинхронности
    > Странные новые фичи (!?)
    > Управляющий совет
    > Изменяющаяся область применения
    18

    View Slide

  32. Фу
    > Производительность
    > Модель асинхронности
    > Странные новые фичи (!?)
    > Управляющий совет
    > Изменяющаяся область применения
    > Pythonic / Unpythonic
    18

    View Slide

  33. f'Hello, {name}!'
    'Hello, {name}'.format(name)
    'Hello, %s' % name
    'Hello, ' + name
    19

    View Slide

  34. f'Hello, {name}!'
    'Hello, {name}'.format(name)
    'Hello, %s' % name
    'Hello, ' + name
    20

    View Slide

  35. f'Hello, {name}!'
    'Hello, {name}'.format(name)
    'Hello, %s' % name
    'Hello, ' + name
    21

    View Slide

  36. f'Hello, {name}!'
    'Hello, {name}'.format(name)
    'Hello, %s' % name
    'Hello, ' + name
    22

    View Slide

  37. 23

    View Slide

  38. array_len = len(some_array)
    if array_len > 5:
    print(array_len)
    if array_len := len(some_array) > 5:
    print(array_len)
    24

    View Slide

  39. array_len = len(some_array)
    if array_len > 5:
    print(array_len)
    if array_len := len(some_array) > 5:
    print(array_len)
    25

    View Slide

  40. for angl in range(360):
    print(
    f'{angle=} {(th:=rads(angl))=:.3f} {sin(th)}'
    )
    26

    View Slide

  41. Хватит! Дайте нам:
    27

    View Slide

  42. Хватит! Дайте нам:
    > Паттерн матчинг
    27

    View Slide

  43. Хватит! Дайте нам:
    > Паттерн матчинг
    > Нормальные лямбды
    27

    View Slide

  44. Хватит! Дайте нам:
    > Паттерн матчинг
    > Нормальные лямбды
    > |> (aka pipe operator)
    27

    View Slide

  45. Хватит! Дайте нам:
    > Паттерн матчинг
    > Нормальные лямбды
    > |> (aka pipe operator)
    > Больше типов
    27

    View Slide

  46. Хватит! Дайте нам:
    > Паттерн матчинг
    > Нормальные лямбды
    > |> (aka pipe operator)
    > Больше типов
    > Перформанса
    27

    View Slide

  47. Спасение рядом
    github.com/wemake-services/wemake-python-styleguide
    28

    View Slide

  48. 29

    View Slide

  49. github.com/dry-python
    30

    View Slide

  50. 31

    View Slide

  51. 32

    View Slide

  52. 33

    View Slide

  53. Показания к применению
    34

    View Slide

  54. Показания к применению
    > Питон лучший второй язык
    для любой задачи
    34

    View Slide

  55. 35

    View Slide

  56. 36

    View Slide

  57. 37

    View Slide

  58. Ruby is Dead:
    youtube.com/watch?
    v=x0JlOxdXA_g
    38

    View Slide

  59. Красота
    39

    View Slide

  60. Красота
    > DSL
    39

    View Slide

  61. Красота
    > DSL
    > Новая волна архитектуры
    39

    View Slide

  62. Красота
    > DSL
    > Новая волна архитектуры
    > Пробуждение сообщества
    39

    View Slide

  63. Фу
    40

    View Slide

  64. Фу
    > Производительность
    40

    View Slide

  65. Фу
    > Производительность
    > Ruby on Rails
    40

    View Slide

  66. Фу
    > Производительность
    > Ruby on Rails
    > Магия
    40

    View Slide

  67. 41

    View Slide

  68. 42

    View Slide

  69. 43

    View Slide

  70. 44

    View Slide

  71. Показания к применению
    45

    View Slide

  72. Показания к применению
    > У вас есть рубисты
    45

    View Slide

  73. 46

    View Slide

  74. 47

    View Slide

  75. 48

    View Slide

  76. 49

    View Slide

  77. Красота
    50

    View Slide

  78. Красота
    > Самый быстрый язык из скриптов
    50

    View Slide

  79. Красота
    > Самый быстрый язык из скриптов
    > Опциональная статическая типизация
    50

    View Slide

  80. Фу
    51

    View Slide

  81. Фу
    > Стандартная библиотека
    51

    View Slide

  82. Фу
    > Стандартная библиотека
    > php-программисты
    51

    View Slide

  83. 52

    View Slide

  84. 53

    View Slide

  85. 54

    View Slide

  86. Показания к применению
    55

    View Slide

  87. Показания к применению
    > У вас мало денег
    55

    View Slide

  88. Показания к применению
    > У вас мало денег
    > Вы в регионе
    55

    View Slide

  89. Показания к применению
    > У вас мало денег
    > Вы в регионе
    > У вас уже есть пыхеры
    55

    View Slide

  90. 56

    View Slide

  91. 57

    View Slide

  92. 58

    View Slide

  93. Красота
    59

    View Slide

  94. Красота
    > gofmt
    59

    View Slide

  95. Красота
    > gofmt
    > Перформанс
    59

    View Slide

  96. Красота
    > gofmt
    > Перформанс
    > Потоки – как идея
    59

    View Slide

  97. Красота
    > gofmt
    > Перформанс
    > Потоки – как идея
    > Минимализм – как идея
    59

    View Slide

  98. Фу
    60

    View Slide

  99. Фу
    > Все остальное
    60

    View Slide

  100. Показания к применению
    61

    View Slide

  101. Показания к применению
    > Нужно перекладывать json из одного
    API в другой
    61

    View Slide

  102. Показания к применению
    > Нужно перекладывать json из одного
    API в другой
    > Вы не хотите учить нормальные
    языки
    61

    View Slide

  103. Показания к применению
    > Нужно перекладывать json из одного
    API в другой
    > Вы не хотите учить нормальные
    языки
    > Вы считаете людей тупыми
    61

    View Slide

  104. The key point here
    is our programmers
    are Googlers,
    they’re not
    researchers.
    62

    View Slide

  105. They’re typically,
    fairly young, fresh
    out of school,
    probably learned
    Java, maybe learned
    C or C++, probably
    learned Python.
    63

    View Slide

  106. They’re not capable
    of understanding a
    brilliant language
    but we want to use
    them to build good
    software.
    64

    View Slide

  107. So, the language
    that we give them
    has to be easy for
    them to understand
    and easy to adopt.
    65

    View Slide

  108. 66

    View Slide

  109. >_
    X
    Серединка
    67

    View Slide

  110. 68

    View Slide

  111. 69

    View Slide

  112. 70

    View Slide

  113. 71

    View Slide

  114. 72

    View Slide

  115. Красота
    73

    View Slide

  116. Красота
    > Простота и глубина
    73

    View Slide

  117. Красота
    > Простота и глубина
    > Модель асинхронности
    73

    View Slide

  118. Красота
    > Простота и глубина
    > Модель асинхронности
    > Неубиваемость
    73

    View Slide

  119. Красота
    > Простота и глубина
    > Модель асинхронности
    > Неубиваемость
    > Масштабируемость
    73

    View Slide

  120. Красота
    > Простота и глубина
    > Модель асинхронности
    > Неубиваемость
    > Масштабируемость
    > Коробка
    73

    View Slide

  121. Красота
    > Простота и глубина
    > Модель асинхронности
    > Неубиваемость
    > Масштабируемость
    > Коробка
    > Feature-complete
    73

    View Slide

  122. Фу
    74

    View Slide

  123. Фу
    > Найм
    74

    View Slide

  124. Фу
    > Найм
    > Применимость в бизнес задачах
    74

    View Slide

  125. Фу
    > Найм
    > Применимость в бизнес задачах
    > Инфраструктура
    74

    View Slide

  126. 75

    View Slide

  127. 76

    View Slide

  128. Показания к применению
    77

    View Slide

  129. Показания к применению
    > Очень много IO
    77

    View Slide

  130. Показания к применению
    > Очень много IO
    > Очень высокие требования к
    доступности
    77

    View Slide

  131. Показания к применению
    > Очень много IO
    > Очень высокие требования к
    доступности
    > Особенные требования к
    масштабированию
    77

    View Slide

  132. Показания к применению
    > Очень много IO
    > Очень высокие требования к
    доступности
    > Особенные требования к
    масштабированию
    > Сильная команда
    77

    View Slide

  133. 78

    View Slide

  134. 79

    View Slide

  135. Are we web yet?
    80

    View Slide

  136. arewewebyet.org
    You can build stuff!
    81

    View Slide

  137. 82

    View Slide

  138. Красота
    83

    View Slide

  139. Красота
    > Модель работы с памятью
    83

    View Slide

  140. Красота
    > Модель работы с памятью
    > Типы данных
    83

    View Slide

  141. Красота
    > Модель работы с памятью
    > Типы данных
    > Компилятор
    83

    View Slide

  142. Красота
    > Модель работы с памятью
    > Типы данных
    > Компилятор
    > Абстракции
    83

    View Slide

  143. Фу
    84

    View Slide

  144. Фу
    > Чрезмерная сложность для веба
    84

    View Slide

  145. Фу
    > Чрезмерная сложность для веба
    > Очень сырые библиотеки
    84

    View Slide

  146. 85

    View Slide

  147. 86

    View Slide

  148. Показания к применению
    87

    View Slide

  149. Показания к применению
    > У вас не веб
    87

    View Slide

  150. Показания к применению
    > У вас не веб
    > Вам нужно супер быстро
    87

    View Slide

  151. Показания к применению
    > У вас не веб
    > Вам нужно супер быстро
    > Жесткие ограничения на память
    87

    View Slide

  152. 88

    View Slide

  153. 89

    View Slide

  154. И тут я сделаю
    исключение...
    90

    View Slide

  155. Хотя в Haskell'е
    нет исключений! *
    91

    View Slide

  156. Красота
    92

    View Slide

  157. Красота
    > Чистота
    92

    View Slide

  158. Красота
    > Чистота
    > Система типов
    92

    View Slide

  159. Красота
    > Чистота
    > Система типов
    > Компилятор
    92

    View Slide

  160. Красота
    > Чистота
    > Система типов
    > Компилятор
    > Сообщество
    92

    View Slide

  161. Фу
    93

    View Slide

  162. Фу
    > Синтаксис
    93

    View Slide

  163. Фу
    > Синтаксис
    > Чрезмерная сложность для веба
    93

    View Slide

  164. Фу
    > Синтаксис
    > Чрезмерная сложность для веба
    > Вообще ничего нет!
    93

    View Slide

  165. Показания к применению
    94

    View Slide

  166. Показания к применению
    > Для само-развития
    94

    View Slide

  167. >_
    X
    Днище
    95

    View Slide

  168. 96

    View Slide

  169. 97

    View Slide

  170. # A very basic HTTP server
    require "http/server"
    server = HTTP::Server.new do |context|
    context.response.content_type = "text/plain"
    context.response.print "Hello world!"
    end
    puts "Listening on http://127.0.0.1:8080"
    server.listen(8080)
    98

    View Slide

  171. Красота
    99

    View Slide

  172. Красота
    > Типизация и вывод типов
    99

    View Slide

  173. Красота
    > Типизация и вывод типов
    > Скорость работы
    99

    View Slide

  174. Красота
    > Типизация и вывод типов
    > Скорость работы
    > Знакомый синтаксис
    99

    View Slide

  175. Красота
    > Типизация и вывод типов
    > Скорость работы
    > Знакомый синтаксис
    > Приятные макросы
    99

    View Slide

  176. Красота
    > Типизация и вывод типов
    > Скорость работы
    > Знакомый синтаксис
    > Приятные макросы
    > Каналы (как в Go)
    99

    View Slide

  177. Поживем – увидим
    crystal-lang.org
    100

    View Slide

  178. Показания к применению
    101

    View Slide

  179. Показания к применению
    > В будущем: безопасный и быстрый
    ruby
    101

    View Slide

  180. 102

    View Slide

  181. 103

    View Slide

  182. Красота
    104

    View Slide

  183. Красота
    > Акторы
    104

    View Slide

  184. Красота
    > Акторы
    > Типизация
    104

    View Slide

  185. Красота
    > Акторы
    > Типизация
    > Память (AOT)
    104

    View Slide

  186. Красота
    > Акторы
    > Типизация
    > Память (AOT)
    > Исключения
    104

    View Slide

  187. Красота
    > Акторы
    > Типизация
    > Память (AOT)
    > Исключения
    > Скорость работы
    104

    View Slide

  188. 105

    View Slide

  189. Поживем – увидим
    ponylang.io
    106

    View Slide

  190. Показания к применению
    107

    View Slide

  191. Показания к применению
    > Для само-развития
    107

    View Slide

  192. Показания к применению
    > Для само-развития
    > Сможете говорить: я еще в 2019 на
    нем писал!
    107

    View Slide

  193. Показания к применению
    > Для само-развития
    > Сможете говорить: я еще в 2019 на
    нем писал!
    > В будущем: безопасный и быстрый
    веб
    107

    View Slide

  194. >_
    X
    Разное
    108

    View Slide

  195. Заслуживают упоминания
    109

    View Slide

  196. Заслуживают упоминания
    > Clojure / Nim
    109

    View Slide

  197. Заслуживают упоминания
    > Clojure / Nim
    > Coq / Agda / Idris
    109

    View Slide

  198. Заслуживают упоминания
    > Clojure / Nim
    > Coq / Agda / Idris
    > Elm
    109

    View Slide

  199. Заслуживают упоминания
    > Clojure / Nim
    > Coq / Agda / Idris
    > Elm
    > ReasonML / OCalm
    109

    View Slide

  200. Заслуживают упоминания
    > Clojure / Nim
    > Coq / Agda / Idris
    > Elm
    > ReasonML / OCalm
    > Dark
    109

    View Slide

  201. >_
    X
    Выводы
    110

    View Slide

  202. Учите языки
    111

    View Slide

  203. Учите концепции
    112

    View Slide

  204. Обсуждайте идеи
    113

    View Slide

  205. t.me/
    opensource_findings
    !114

    View Slide

  206. sobolevn.me
    Вопросы?
    github.com/sobolevn
    115

    View Slide