В этой статье мы собираемся выяснить, почему молодые языки программирования с современными функциями не могут быть быстро адаптированы. Кроме того, мы собираемся взглянуть на один исключительный пример, у которого есть определенные параметры, подходящие для того, чтобы быть одновременно молодым, современным и зрелым, просто готовым к внедрению в малом и большом масштабе.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: некоторые детали намеренно опущены. При чтении держите свой разум открытым. Если что-то кажется наивным или не совсем верным, имейте в виду, что автор продумал как лицевую, так и оборотную стороны монеты, а также невидимую третью сторону медали. Приглашаем вас в комментарии для более подробного обсуждения - оно обязательно того стоит!

Все мы знаем, что большинство из нас, разработчиков программного обеспечения, любят гоняться за блестящими вещами так же сильно, как мы любим их создавать. То же самое и с языками программирования.

И в наши дни новые молодые языки программирования появляются как эти грибы:

Почему нельзя быстро освоить новые современные языки?

Отличительной чертой молодого языка является то, что создатели и сообщество получают возможность экспериментировать с различными функциями и конструкциями, чтобы потенциально исправить некоторые проблемы существующих зрелых языков. Имейте в виду, любое решение любой проблемы повлечет за собой еще как минимум две тонкие проблемы. Так что этот цикл постоянного совершенствования никогда не закончится.

Хотя молодые языки могут изучать более продвинутые функции и конструкции, у них обычно нет надежной экосистемы библиотек, фреймворков и инструментов. Более того, когда сообщество их разработает, людям все равно придется их изучать, а это означает, что они (хотя и временно) будут гораздо менее продуктивными. И я даже не буду говорить о потенциальных уязвимостях, ошибках и т. Д.

Разве не было бы замечательно, если бы новый молодой современный язык мог опираться на существующую зрелую экосистему? Разве не было бы замечательно, если бы использование существующих библиотек, фреймворков и инструментов было совершенно естественным и нисколько не неудобным?

Если вы зададите мне эти вопросы, я скажу, что вы, возможно, описываете Котлин. Kotlin - это язык программирования, на котором вы можете естественно использовать любую библиотеку, фреймворк или инструмент из экосистемы JVM без каких-либо затруднений.

Раньше были языки, которые тоже могли это делать, например Scala, Groovy, Clojure и так далее. И все они что-то не так: естественное использование.

Почему эти языки не хотят полагаться на существующую зрелую экосистему?

Либо было неестественно использовать один и тот же фреймворк или библиотеку, либо было даже невозможно использовать один и тот же инструментарий. И в сценарии, где можно было бы естественно использовать те же инструменты, фреймворк и библиотеки; каким-то образом большая часть сообщества вышла и создала новые инструменты, фреймворки и библиотеки (я смотрю на вас, Scala и sbt).

Я подозреваю, что это происходит потому, что большинство первых последователей этих новых языков («обещанные замены для Java») имеют несколько враждебные отношения с языком Java и экосистемой JVM.

Они это ненавидят.

Как первые последователи, они задают правила игры, потому что они составляют подавляющее большинство в сообществе в течение первых нескольких лет существования нового молодого языка. Таким образом, они могут писать все новые блестящие инструменты, фреймворки и библиотеки. И именно они запускают новые проекты на этих языках в реальных компаниях и стартапах.

Таким образом, устанавливается стиль сообщества: уникальный инструментарий, фреймворки и наборы библиотек, которыми пользуются люди. Иногда они даже специально разрабатываются, чтобы радикально отличаться от своих старых альтернатив от сообщества JVM.

Это делает кривую обучения очень крутой, и поэтому язык принимается только единомышленниками и бедными разработчиками, у которых просто нет другого выбора, кроме как поддерживать кодовые базы, в которых этот набор инструментов уже используется.

Как привлечь различных ранних последователей, которые будут счастливы использовать существующую экосистему?

Kotlin кардинально отличается от этого подхода. Правило игрового поля номер один: «100% двунаправленное взаимодействие с экосистемой Java и JVM».

Таким образом, сообщество привлекает людей, которые не стремятся делать все совершенно иным подходом; вместо этого им нужен более современный язык, И они хотят передать свои навыки, знания и опыт работы со зрелой экосистемой, такой как JVM.

Эти первые последователи не хотят полностью переписывать свои существующие кодовые базы из-за их большого размера, поэтому возможность писать только новый код на Kotlin и сохранять старый код на Java очень помогает!

Маленькая история друга-программиста

Приведу наглядный пример:

Клара - инженер-программист, работающая в большой организации, в основном работающая с Java, JVM и Spring Boot. У Клары высокий профессиональный уровень и, возможно, даже выше:

  • она применяет лучшие практики программного обеспечения,
  • умеет итеративно разрабатывать простое программное обеспечение,
  • может решить любую сложную задачу, которую вы ей бросите,
  • знает свою аудиторию при написании кода (текущий и ожидаемый в будущем уровень членов своей команды),
  • отличный коммуникатор и командный игрок,
  • обучает и наставляет других разработчиков,
  • может взять на себя роль тимлида сегодня,
  • и живет жизнью ученика, который всю жизнь учится.

Ее текущий рабочий процесс разработки включает создание приложения и автоматизацию задач разработки с помощью Gradle, а ее кодирование выполняется в современной среде IDE, такой как IntelliJ. Она не испытывает враждебных настроений по отношению к любому из этих инструментов и технологий.

Напротив: она их любит!

Иногда, однако, она испытывает зависть ко всем этим классным современным языкам программирования, где у вас могут быть однострочные классы данных, меньше шаблонов в целом, а исключение с нулевым указателем не является страшной угрозой на каждом этапе.

А вот и язык программирования Kotlin, который недавно стал «готовым к производству».

Поэтому она пытается создать крошечное веб-приложение (немного сложнее, чем «Hello world»). И похоже, что она все еще может использовать тот же инструмент сборки - Gradle; и она по-прежнему может использовать любую из своих любимых библиотек, и, что более важно, она может использовать ту же веб-платформу - Spring Boot.

И пользоваться всем этим совсем не неудобно, и кажется таким же естественным, как в их «домашней» среде - Java.

Теперь у нее возникает следующий вопрос: «Этот язык отличный, но довольно новый… мне нужно потерять все замечательные функции моей IDE?» Потому что это то, что происходит с большинством современных языков - поддержка IDE сильно отстает… сильно отстает.

И теперь она приятно удивлена: 95% необходимых ей функций IDE есть и поддерживаются:

  • базовый и расширенный рефакторинг,
  • перейти к определению,
  • найти обычаи,
  • запуск приложения и тестов из IDE,
  • запуск одного теста в текущем контексте,
  • отладчик
  • автозавершение кода, даже кросс-языковое,
  • и т.п.

И это имеет большой смысл, потому что язык разработан той же компанией, которая разрабатывает IDE (JetBrains). Это, безусловно, гарантирует, что инструментарий будет, по крайней мере, в какой-то степени соответствовать новому современному языку.

«Все это звучит великолепно!» Клара думает: «Должна ли я теперь полностью переписывать мое рабочее приложение на Kotlin?»

Наиболее важные правила игрового поля, способствующие усыновлению

И здесь она тоже приятно удивляется. Все, что ей действительно нужно сделать, это добавить плагин Kotlin Gradle (несколько строк изменений в одном файле), и она может начать добавлять файлы Kotlin в базу исходного кода. Все старые файлы, написанные на Java, по-прежнему работают правильно.

Более того, межъязыковые вызовы работают из коробки: она может вызывать Java-код из Kotlin, а Kotlin-код из Java; И все это кажется таким же естественным. Почти в любой момент вызывающий код даже не знает, что он вызывает то или иное, потому что нет никакой разницы.

Это то, что с самого начала может сделать «100% совместимость» наиболее важным правилом игрового поля для нового современного языка!

Поэтому, если вы собираетесь разработать новый язык программирования, я предлагаю вам рассмотреть возможность внедрения его в качестве одного из главных приоритетов, поскольку он позволит гораздо лучше усвоить его. И какой создатель библиотеки, инструмента или языка не хочет такой суперсилы по внедрению? 😉

Как вы могли заметить, Клара не ищет совершенно другого подхода к кодированию, а вместо этого ищет способ сохранить 75% того, что работает хорошо, и, возможно, использовать несколько более современных функций языка для улучшения. остальные 25% значительно.

Это может уменьшить количество шаблонов, позволяя языку определять очевидное, чтобы вам не приходилось указывать его каждый раз. Это также может быть другое решение сделать все выражением, что делает определенные сценарии намного более эргономичными и более удобными для чтения, например, блок try-catch, где вам нужно установить переменную в части «try» и повторно запустить усиленная ошибка в «ловушке».

Эти и другие вещи значительно улучшают читаемость.

Кроме того, возможность иметь первоклассные неизменяемые переменные и типы, допускающие / не допускающие значения NULL, исключает целые классы возможных ошибок и ошибок. Это фантастически!

Встаньте на плечи гигантов!

Большинство современных языков созданы для автономного использования, отдельно от существующей библиотеки и инструментальной экосистемы, либо намеренно, либо «принудительно» руководящими принципами сообщества или культурой.

Эти современные языки могут получить некоторое распространение, но в конечном итоге они вымрут или останутся в небольшой нише, потому что большинство профессионалов просто продолжат использовать зрелые языки, потому что у них лучшая поддержка буквально для всего. Есть редкие, нечастые исключения из этого правила.

Если новый язык программирования хочет оставаться сильным, он должен встать на плечи гигантов.

Итак, вместо того, чтобы идти против прежнего зрелого языка и делать все по-другому, используйте как можно больше из зрелой экосистемы и добавляйте к этому еще больше пользы. Таким образом, людям, изучающим этот язык, не нужно ни от чего отказываться, и они только выиграют - настоящая беспроигрышная ситуация!

Это вызвало у вас интерес к Котлину?

Я написал 4-х частей (всего 350 страниц) Ultimate Tutorial: Getting Started With Kotlin (+ еще больше), и вы можете получить его в качестве бесплатного бонуса, став участником моего ежемесячного информационный бюллетень.

Помимо Kotlin, в нем есть множество полезных вещей, таких как TDD, чистый код, архитектура программного обеспечения, влияние на бизнес, 5 WHY, критерии приемки, персонажи и многое другое.

- Зарегистрируйтесь здесь и начните учиться создавать полноценные приложения Kotlin!

Спасибо и прошу вас!

Большое спасибо за чтение этой статьи! Надеюсь, вам понравилось. Расскажите, пожалуйста, в комментариях, что вы думаете по этому поводу!

Кроме того, я был бы намного счастливее, если бы вы могли дать мне средние аплодисменты (до 50) и поделиться этим постом со своими друзьями и коллегами, которым, по вашему мнению, это может пригодиться. Или вы можете поделиться им в своих любимых социальных сетях!

Приглашаем вас прочитать мой блог о Kotlin и мой блог о TDD и лучших практиках разработки программного обеспечения.

И давайте подключимся к LinkedIn: я публикую короткие еженедельные обновления о продуктивности и счастье разработчиков программного обеспечения, совместной работе, психическом здоровье и немного о Kotlin.

Если вы хотите услышать больше моих мнений, подписывайтесь на меня в Твиттере.

Первоначально опубликовано на iwillteachyoukotlin.com 7 января 2019 г.