Райан Даль: «Снижать сложность всегда полезно»
Вступление
Райан Даль (Ryan Dahl) — основатель и первый разработчик Node.js и Deno — среды исполнения JavaScript и TypeScript. Нам предоставилась возможность поговорить с Райаном о его проектах. Он рассказал об основных задачах по развитию Deno, поделился мнением о будущем JavaScript и TypeScript, поведал о сторонних проектах экосистемы Deno и о том, как бы он изменил свой подход к Node.js, если бы мог путешествовать во времени.
Интервью
Evrone: Твой новый проект Deno произвел сильное впечатление на разработчиков. Чем ты сейчас в основном занимаешься?
Райан: Я работаю над Deno большую часть времени. Deno — это довольно большая коллекция программ, объединенных в исполняемый файл, который мы поставляем. Мы улучшаем среду выполнения Deno, а также работаем над применением базовой инфраструктуры в коммерческих проектах.
Evrone: У тебя есть опыт работы со множеством языков программирования: C, Rust, Ruby, JavaScript, и TypeScript. С которым из них тебе больше всего нравится работать?
Райан: Сейчас мне интереснее всего писать на Rust. Его непросто изучать, и он не годится для многих задач, но для того, над чем я сейчас работаю, подходит идеально. Он как улучшенная версия
JavaScript никогда не был моим фаворитом, просто это самый распространенный язык и потому подходит для воплощения многих идей. TypeScript я отдельным языком не считаю. Его прелесть в том, что это типизированный JavaScript. TypeScript позволяет строить на JavaScript более крупные и надежные системы. Можно сказать, что это мой основной язык для небольших обыденных задач.
С помощью Deno мы пытаемся устранить сложность транспайлинга
Evrone: В ядро языков Python, PHP и Ruby успешно добавили gradual typing. Что,
Райан: Типы были добавлены в JavaScript с помощью TypeScript. И получилось это намного удачнее, чем с Python, PHP или Ruby. TypeScript — JavaScript с типами. Правильнее было бы спросить: что мешает комитету по стандартам JavaScript (TC39) принять TypeScript? Стандартизация, по самой своей природе, проводится медленно и осторожно. Сначала изучают возможность
Evrone: Как преданный пользователь VIM, что ты думаешь о современных редакторах для программистов, например, Visual Studio Code? Достаточно ли они хороши для старой гвардии?
Райан: Все, с кем я работаю, пользуются VScode и вполне довольны. Наверное, большинству стоит его использовать.
Я продолжаю юзать VIM по двум причинам.
Evrone: Среда выполнения Deno продемонстрировала возможные способы решения давно наболевших проблем с управлением зависимостями, безопасностью и многим другим. Вы хотите, чтобы он был, как Haskell, полем экспериментов, или нацеливаетесь на
Райан: Не стоит путать новизну с экспериментом. Deno абсолютно практичная вещь, основанная на многолетнем опыте работы с JS на стороне сервера. Я и мои коллеги нацелены на создание практической среды выполнения динамического языка. В отношении безопасности и управления зависимостями мы выбрали довольно консервативный подход. Мы могли бы легко ввести еще одну централизованную систему, подобную NPM, но предпочли систему ссылок на основе
Deno — новое программное обеспечение, и потому не во всех случаях подходит для использования. Но также Deno — это большая база
Evrone: В 2020 году большинство конференций разработчиков программного обеспечения стали «онлайн» и «виртуальными». Пробовал ли ты новый формат, и что ты думаешь о нём?
Райан: Я участвовал в нескольких; но сейчас я их избегаю. Для меня лучшая часть конференций — это неформальное общение. Этого важного аспекта нет при
Evrone: Идея децентрализации графа зависимостей из одного файла в отдельные файлы исходного кода была решена в Webpack и одобрена многими разработчиками. Но управление зависимостями — сложная задача, на переход платформы Node.js с Common.js на ESM ушли годы. Какие основные проблемы управления зависимостями вы хотите решить с помощью Deno?
Райан: Браузеры не благословили ни один CDN на распространение JavaScript, ведь децентрализованный характер Интернета — его главное преимущество. Я не понимаю, почему это не может работать и для серверного JavaScript. Я хочу, чтобы Deno не зависела ни от какой централизованной базы данных кода.
Evrone: Python и JavaScript соревнуются за титул лучшего универсального языка программирования. Как ты считаешь, который из них будущим разработчикам стоит изучать первым?
Райан: Скриптовые языки хорошо подходят для начинающих. Python и JavaScript — по сути, довольно похожие системы, с разным синтаксисом и немного различающейся семантикой. Языком JavaScript управляет международный комитет по стандартам. JS работает на любой платформе, примерно на порядок быстрее, чем Python (если сравнивать V8 и CPython) и имеет больше пользователей. С другой стороны, для некоторых областей, особенно для научных расчетов, доступно больше библиотек Python. В зависимости от того, что пытается сделать начинающий программист, ему может подойти Python. Однако я считаю, что, как правило, лучше начинать с JavaScript.
Evrone: Парадигма асинхронной конкурентности с одним основным потоком и небольшими вызываемыми обработчиками была одним из краеугольных камней Node.js. Теперь, благодаря новому синтаксису async/await и концепции сопрограмм (корутин) эта идея дополнительно усиливается. Как автор платформы, что ты думаешь о них и их альтернативах, таких как «горутины» в Go или конкурентность на основе потоков в Ruby?
Райан: Потоки ОС плохо масштабируются для приложений с высоким уровнем многозадачности. Не используйте Ruby, если у вас будет много конкурентных подключений.
Горутины удивительно просты в использовании и обеспечивают максимальную производительность. Node и Deno, как и Go, построены на неблокирующих системах
Evrone: В условиях жесткой конкуренции, каким ты видишь будущее JavaScript и TypeScript, особенно в отношении бэкенда, встраиваемых систем и машинного обучения?
Райан: Динамические, или скриптовые языки очень полезны. Часто основная проблема заключается не в производительности компьютеров, а в сроках разработки. Очень важна возможность быстрой разработки и развертывания. Из динамических языков JavaScript (чистый JavaScript или JavaScript с типами) является самым популярным и самым быстрым. Я думаю, что в будущем единственным динамическим языком, к которому мы придем, будет этот странный эволюционировавший язык, выросший из
Я уже говорил, что динамические языки имеют свои ограничения и подходят не для всех проблемных областей. Если вы программируете базу данных, имеет смысл писать на языке, который дает максимальный контроль над компьютером — например, Rust или C ++. Если вы пишете высококонкурентный
Evrone: Современные операционные системы и ваша новая среда выполнения Deno предоставляют гранулярные права доступа, чтобы компенсировать риски безопасности стороннего программного обеспечения и зависимостей. Но могут ли конечные пользователи и разработчики, использующие зависимости, принимать правильные решения, «разрешая» и «отклоняя» запросы защиты приложений? Как ты думаешь, будем ли мы через несколько лет автоматом кликать «Разрешить всё», как большинство из нас делает сейчас с «подтверждениями безопасности» файлов cookie
Райан: Всплывающие окна cookie — не совсем подходящая аналогия. Это довольно бесполезный юридический побочный продукт. Лучше встроенный диалог, который предлагает: «Разрешить этому
Программисты запускают на своих компьютерах множество случайных процессов автоматизации. Ни у кого нет времени на аудит всего запускаемого кода, и запуск его в
Evrone: Новая идея
Райан: Снижать сложность всегда полезно. Чем меньше языков, виртуальных машин, фреймворков и концепций, с которыми должен взаимодействовать программист, тем лучше.
Evrone: Каким образом вы планируете управлять обновлениями версий для самого языка TypeScript? В экосистеме Node.js обновления синтаксиса JavaScript с движком V8 часто приводят к тому, что некоторые пакеты не работают.
Райан: Пользователям не стоит полагаться на новейшие возможности языков, они могут быть нестабильными. Однако язык TypeScript близится к полной стабилизации.
Evrone: Каким ты видишь хорошее образование для разработчика ПО? Нужна ли ему «компьютерная наука» со всей математикой, алгоритмами и структурами данных, или нужно
Райан: Тому, кто хочет заняться программированием, стоит идти в университет и изучать информатику. Конечно, можно изучать смежные дисциплины, например, электротехнику, математику, физику. Есть много талантливых инженеров, у которых вообще нет специального образования. Но несколько лет изучения основ и выполнения множества очень сложных лабораторных работ даёт
Evrone: Есть ли уже реализованные сторонние проекты экосистемы Deno, которые тебе нравятся?
Райан: Да, конечно:
- один из фреймворков React;
веб-фреймворк (наподобие Express); веб-интерфейсы для десктопных приложений; - библиотека puppeteer (такая же, как для Node);
- визуализация графов зависимостей между модулями;
- минималистичный, но гибкий генератор статических сайтов.
Evrone: С появлением социальных платформ, подобных GitHub, как отдельные разработчики, так и крупные компании могут легко использовать открытый исходный код, а также вносить свой вклад. Наступил ли «золотой век» открытого исходного кода или есть незаметные с первого взгляда проблемы?
Райан: Конечно, открытый исходный код теперь стал стандартом, ситуация с лицензированием нашла всеобщее понимание и в целом урегулирована.
Evrone: Deno уже исполнилось несколько лет. Какие основные технические задачи вы сейчас решаете в рамках проекта?
Райан: Происходит много всего. Мы создаём привязки к
Evrone: Наш фирменный вопрос о путешествиях во времени: если бы ты мог отправиться в то время, когда только начал разрабатывать Node.js, и дать себе
Райан: На начальном этапе работы с Node я сомневался смогут ли начинающие программисты легко освоить асинхронный
Evrone: Что ты посоветуешь разработчикам, которые хотят поддержать Deno своими пакетами npm?
Райан: Использовать
Заключение
Мы активно поддерживаем