Итоги PiterJS 23 (ITGM 12)
Привет!
17-го марта прошел PiterJS 23 в рамках IT Global Meetup 12.
Программа ITGM была очень насыщенной и интересной.
Хотим с вами поделиться видео, слайдами и фото нашего JavaScript островка.
Давайте по порядку:
1. Web Components для практичных людей @ Артём Пендюрин
Мы уже давно увязли в абстракциях наших библиотек и фреймворков, но как же нативные инструменты нашего любимого языка? Как же API браузеров?
Артём провел исследование, можно ли сейчас, используя web components, создать что-либо полезное для продакшена.
Пример реализованного им datepicker можно посмотреть здесь.
А вот слайды и видео доклада:
2. Зависимости в приложении @ Евгений Щепотьев
Евгений разобрал несколько принципов и подходов модульности, а также описал, какая с ними ситуация в экосистеме JS. Рассказал о правилах разрешения циклических зависимостей по спецификации и как это делают происходит при транспиляции современными сборщиками (спойлер: не все правильно это делают).
Поведение программы становится непредсказуемым и неожиданным с циклическими зависимостями. Особенно тяжело это ощущается в больших проектах, где графы модулей очень развесистые и тяжело найти концы.
Подробный разбор этой темы найдете в слайдах и видео:
3. Дебаты: так ли нужна статическая типизация?
Дисклеймер: этот формат был создан не для того, чтобы установить единственную истину, а для того, чтобы показать плюсы и минусы статической и динамической типизаций.
В этой статье — только вопросы команд. Вопросы из зала и ответы только в видеозаписях дебатов.
Дебаты открыла команда статической типизации. Начали свои вопросы они «с самого злого».
Soundness
Относительно статических систем типов приличными людьми принято доказывать какие-то определённые свойства.
Чаще всего это свойство soundness.
Принято ли в мире динамической типизации иметь строгие суждения о своих программах?
Обычно относительно системы типов формально доказываются некоторые свойства. Наиболее важным является soundness. Говоря по-русски: правдоподобность. В статической типизации есть по меньшей мере один формально надёжный инструмент для рассуждения о программах.
Затем право задать вопрос соперникам перешло к динамической команде. Первый вопрос оказался о сложности вхождения.
Порог вхождения и скорость разработки
Вы научились программировать на статически типизированных языках. И, наверное, был некий порог вхождения. Был он?
С динамикой программы пишутся быстрее, потому что не нужно тратить время на борьбу с тайпчекером и продумыванием наперёд.
Статически типизированный код еле самодокументирован. Написание тестов как формы документации и написание документации тоже требуют времени на поддержку.
Утверждение о том, что статическая типизация уменьшает количество ошибок является мифом. Нет ни одного исследования, доказывающего это. Наоборот, есть исследования, из которых выходит, что нет никакой корреляции между количеством ошибок и статической/динамической типизаций. Либо она есть, но исчезающе мала (в пользу статической типизации). Что же на самом деле эффективно снижает количество ошибок? Это TDD — исследования при поддержке Microsoft и IBM показали эффективность метода и снижение количества багов на 40–90%
Более того, динамическая типизация не отвергает проверку типов. Просто это переходит в рантайм.
Другой миф:
cтатическая типизация даёт возможность генерировать более эффективный код
Да, когда-то было так. И действительно, тот же Python не отличается производительностью. Однако, JS удивительно быстр, и тут ему помогает JIT, что позволяет играть на одном поле с компилируемыми статически-типизированными языками.
Статическая типизация сильно помогает IDE
К счастью, современные IDE достаточно умны, чтобы анализировать динамически типизируемый код, делать мощный автокомплит, выводить примитивные типы из дефолтных значений и производить автоматический рефакторинг. Более того, при наличии тестов, IDE способны творить настоящие чудеса с кодом во время его написания (посмотрите на Wallaby), позволяя писать код в REPL-режиме.
Плюсы статической типизации:
* Корректность при построении — то что ты подразумевал, то и написал
* Помощь в документировании — типовые сигнатуры как спецификация
* Корректность по построению — типизация позволяет срезать углы (TDD)
* Упрощает рефакторинг
Плюсы динамической типизации:
* Отсутствие синтаксического шума и когнитивного оверхеда на чтение сложных типов
* Простота написания Generic function и полиморфизма
* Простая композиция
* Простота метапрограммирования, что ведёт к простоте программ в целом, а простота это надёжность
* Утиная типизация упрощает реализацию и поддержку
* Проще писать универсальные алгоритмы и конструкции, такие как декораторы, ORM
* Меньшая зависимость от изменчивой внешней среды
Немножко дополнительной инфы:
http://www.olioapps.com/blog/type-driven-development-with-typescript/
https://cacm.acm.org/magazines/2017/10/221326-a-large-scale-study-of-programming-languages-and-code-quality-in-github/fulltext
Результат голосования:
И видео:
До встречи на PiterJS №24!
Регистрация уже открыта, подробности можно найти ниже по ссылке:
За творческий подход в фотографии и написании текстов огромное спасибо Ярославне!