Будет ли Scala хорошим выбором вместо Java?

11

Мы начнем новый проект, который будет включать обучение всех разработчиков .net на Java (frameworks / ECO system и т. Д.). У нас есть много кода, написанного на C #, и кажется, что все это будет потрачено впустую, так как мы должны переписать все это на Java. Проблема, которую я вижу, состоит в том, что в первый год или около того (возможно, 2 года) нам нечего будет доставлять, поскольку мы будем проводить большую часть времени, воспроизводя то, что у нас было раньше, но сейчас на Java.

Поскольку наша команда распределена по разным офисам по всему миру, и у нас большое количество разработчиков Java (от 20 до 30) и 10 разработчиков, использующих .net, мы хотим, чтобы все разработчики использовали один и тот же язык / платформу, чтобы мы могли начать повторно использовать компоненты / модули. Так что я могу понять точку зрения управления.

Вчера я наткнулся на Scala и подумал, будет ли лучше использовать это с текущим продуктом (который написан на C #), и тогда, по крайней мере, у нас будет рабочий продукт через год. Также через год у нас есть модули, которые можно использовать в мире Java, пока мы переносим другие части продукта.

Будет ли Scala лучшим выбором, чем Java, учитывая то, что мы пытаемся достичь?

JD01
источник
2
Переписать все на другом языке? А 2 года ни с чем не доставили? Звучит как ужасное управленческое решение, и, может быть, вам понадобится новая работа через полгода;)
zvrba
Да, это было учтено. Не уверен, где я должен начать искать сейчас и придерживаться C # :)
JD01
1
Похоже, вы собираетесь делать то , что никогда не должны делать
back2dos

Ответы:

15

Некоторые моменты для рассмотрения:

  • Scala - отличный язык, но стоит отметить, что это также довольно сложный язык для правильного изучения и использования. Не только мое мнение - так говорят даже опытные эксперты Scala . В зависимости от уровня навыков в вашей команде, он, вероятно, лучше всего подходит в качестве инструмента для ваших самых опытных / опытных разработчиков
  • Java и C # во многом схожи - разработчикам, обученным одному, не понадобится много времени, чтобы перейти (синтаксис схож, в основном это всего лишь случай изучения особенностей каждого и понимания различных библиотек, которые часто имеют схожую функциональность, но упакованы по-разному и / или имеют разные названия). Я лично без каких-либо проблем переключился с Java на C # и снова на Java.
  • Стоит также отметить, что все языки JVM (Java и Scala, а также JRuby, Clojure и т. Д.) Очень совместимы - они используют одну и ту же фундаментальную платформу JVM и могут очень легко совместно использовать код / ​​библиотеки.

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

С точки зрения управления это имеет много преимуществ:

  • Вы все еще можете поделиться всеми библиотеками, чтобы ваши инвестиции были в безопасности
  • Ваши менее опытные разработчики смогут довольно быстро перенести C # -> Java
  • Ваши более опытные разработчики могут в полной мере воспользоваться расширенными функциями Scala
  • Все инструменты совместимы / могут использоваться совместно (системы сборки, IDE, инструменты развертывания и т. Д.)
  • Вы получаете бесплатный доступ к очень широкой экосистеме библиотек с открытым исходным кодом на JVM (наряду с межплатформенной переносимостью, это, пожалуй, лучшая причина для работы на платформе JVM)
  • Ваши разработчики могут использовать язык, который делает их наиболее продуктивными, учитывая их навыки / текущую задачу (Java в некоторых случаях, Scala в других, возможно, другие языки, такие как Clojure в будущем)

Недостатком является то, что у вас еще есть два основных языка для поддержки. Но у вас, вероятно, на самом деле есть гораздо больше, чем только два (сценарии оболочки, специфичные для домена форматы XML, файлы конфигурации, движки правил, HTML, Javascript), поэтому вы можете утверждать, что на самом деле это не так уж и важно.

mikera
источник
Спасибо за информацию. Я просто пытаюсь выяснить, как лучше двигаться вперед, а вы дали отличную информацию. На данный момент у нас есть несколько хороших разработчиков ОО, но никто не знаком с функциональным программированием.
JD01
1
Рад помочь! Стоит знать, что Scala - это язык, основанный на нескольких парадигмах / ООП. Хотя вы, безусловно, можете выполнять FP в Scala, если вы хотите, чтобы в фокусе были языки с более четкой функциональностью, то Haskell или Clojure, вероятно, ближе к цели.
Микера
Что касается повторного использования кода, если бы я использовал Clojure или Scala с первого дня или даже, как вы сказали в смешанной стратегии, могу ли я повторно использовать код Clojure / Scala как в .net, так и в Java? Мне интересно, если это хорошая точка продажи для управления. Таким образом, мы все еще могли бы выпустить продукт (старый продукт с новыми функциями), а также быть на пути к переписыванию существующего кода на Java с повторным использованием кода модулей clojure / scala. Я прав в своем мышлении здесь или это открывает другие проблемы?
JD01
1
Вы можете использовать функциональность Clojure / Scala как веб-сервис или интерфейс REST, если хотите. Это несколько дороже, чем просто сборка библиотеки (что было бы лучшим вариантом, если вы хотите вызывать функциональность из Java / другого языка JVM), но это, безусловно, дало бы гибкость для вызова кода с любого клиента, который вам нравится (. Net, Java, Ruby и т. Д.)
Микера
Спасибо майк Я думаю, что путь повторного использования кода, по крайней мере, покажет руководству, что полная перезапись не нужна с опцией Scala / Clojure. Я не хочу, чтобы мы заканчивали как Netscape :). Возвращаясь к созданию библиотеки, могу ли я просто не использовать ее в .net и java без веб-сервисов?
JD01
15

Я добавлю третий вариант. Кто-нибудь в вашей организации смотрел на взаимодействие между вашими модулями C # и Java? Как вы демонстрируете функциональность C #? Можно ли использовать веб-сервисы SOAP или RESTFul?

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

Мартейн Вербург
источник
3

Переписать C # на Scala будет так же сложно, как и на Java. Что касается того, какой язык «лучше», то этот вопрос является спорным, у каждого языка есть свои плюсы и минусы.

Я не знаю, насколько велика ваша кодовая база, но 2 года для 30 разработчиков кажутся огромными для простого переписывания. Поднять Java, когда вы знаете, C # легко. Мне потребовался день или два, чтобы освоиться с этим.

Я бы посоветовал руководству разобраться и получить удовольствие от того, что вам платят за расширение навыков.

Том Сквайрс
источник
Только около 10 разработчиков будут работать над новым продуктом. Я просто пытаюсь выяснить, какие плюсы и минусы у Scala.
JD01
1
Я не знаю достаточно о специфике вашего проекта или Scala, чтобы дать вам вызывающий ответ. Однако мне кажется, что введение третьего языка, который никто не знает, только усложнит ситуацию.
Том Сквайрс
Возможно, ты прав. Я думал об этом с точки зрения выпуска продукта через год или около того, в то же время имея возможность повторно использовать код в .net и java. Ваши очки хорошо отмечены :)
JD01
1

Я думаю, что более простым вариантом было бы заставить разработчиков Java изучать C #. Оба языка очень похожи во многих отношениях, и разработчику Java не понадобится много времени, чтобы освоить C #. Я работал со многими Java-разработчиками, которые изучили C #, и это обычно плавный переход. Единственная область, где они могут застрять - это модель программирования WebForms. Разработчики Java лучше адаптируются к парадигме MVC. Таким образом, вам не нужно ждать год, прежде чем вы начнете разрабатывать новые функции. Что касается Scala, я боюсь, что это создаст совершенно новую проблему для всех 30 разработчиков, пытающихся выучить новый язык.

Sriram
источник
На Java написано так много продуктов, что заставить их изучать C # будет сложно. Я надеялся со Scala, когда у нас появится новый продукт, разработчики java смогут использовать библиотеки без необходимости изучать Scala.
JD01
2
Разве не было бы хорошо, если бы вы представили свой существующий код .Net как сервисы, которые разработчики Java могут вызывать и разрабатывать все новые функции в Java.
Шрирам
Это предлагалось в прошлом, но было решено отойти от .net.
JD01
Вау! Тогда я бы оставил это простым и переписал код на Java. Я думаю, что Scala представит еще одну сложность в управлении, и это будет трудно продать руководству.
Шрирам