Итоги PiterJS 23 (ITGM 12)

Vadim Gorbachev
PiterJS
Published in
4 min readApr 2, 2018
dynamic vs static

Привет!

17-го марта прошел PiterJS 23 в рамках IT Global Meetup 12.

Программа ITGM была очень насыщенной и интересной.

Хотим с вами поделиться видео, слайдами и фото нашего JavaScript островка.

«Есть ещё вопросы?» — спрашивает Андрей

Давайте по порядку:

1. Web Components для практичных людей @ Артём Пендюрин

Артём Пендюрин рассказывает про web components

Мы уже давно увязли в абстракциях наших библиотек и фреймворков, но как же нативные инструменты нашего любимого языка? Как же API браузеров?

Артём провел исследование, можно ли сейчас, используя web components, создать что-либо полезное для продакшена.

Пример реализованного им datepicker можно посмотреть здесь.

А вот слайды и видео доклада:

Видео доклада Артёма Пендюрина — Web Components для практичных людей

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

Результат голосования:

И видео:

Дебаты 1 часть
Дебаты 2 часть

До встречи на PiterJS №24!

Регистрация уже открыта, подробности можно найти ниже по ссылке:

За творческий подход в фотографии и написании текстов огромное спасибо Ярославне!

--

--