Scala seria uma boa escolha em vez de Java?

11

Iniciaremos um novo projeto que envolverá o treinamento de todos os desenvolvedores .net em Java (frameworks / sistema ECO etc). Temos muito código escrito em C # e parece que tudo isso será desperdiçado, pois precisamos reescrever tudo em Java. O problema que vejo é que, no primeiro ano (provavelmente 2 anos), não teremos nada para entregar, pois passaremos a maior parte do tempo reproduzindo o que tínhamos antes, mas agora em Java.

Como nossa equipe está distribuída em diferentes escritórios em todo o mundo e temos um grande número de desenvolvedores java (20 a 30) e 10 desenvolvedores usando .net, queremos que todos os desenvolvedores usem o mesmo idioma / plataforma para que possamos começar a reutilizar componentes / módulos. Para que eu possa entender o ponto de vista da gerência.

Ontem me deparei com o Scala e fiquei pensando se seria melhor usá-lo com o produto atual (que está escrito em C #) e, pelo menos, teremos um produto em funcionamento em um ano. Também em um ano, temos módulos que podem ser usados ​​no mundo Java enquanto migramos outras partes do produto.

O Scala seria uma escolha melhor do que Java, considerando o que estamos tentando alcançar?

JD01
fonte
2
Reescrevendo tudo em outro idioma? E 2 anos sem nada para entregar? Soa como uma decisão de gestão terrível e como você pode precisar de um novo emprego em meio ano;)
zvrba
Sim, isso foi considerado. Não tenho certeza onde eu deveria começar a olhar agora e vara para C # :)
JD01
1
Isso é sons como você está prestes a fazer uma coisa que você nunca deve fazer
back2dos

Respostas:

15

Alguns pontos a considerar:

  • Scala é uma ótima linguagem - mas vale a pena notar que também é uma linguagem bastante desafiadora para aprender e usar corretamente. Não é apenas a minha opinião - até especialistas experientes do Scala dizem isso . Dependendo do nível de habilidades da sua equipe, provavelmente é o mais adequado como uma ferramenta para os desenvolvedores mais experientes / especialistas
  • Java e C # são bem parecidos em muitos aspectos - não demorará muito para que os desenvolvedores treinados em um se desloquem (a sintaxe é semelhante, é apenas um caso de aprender as peculiaridades de cada um e entender as diferentes bibliotecas, que geralmente têm funcionalidade semelhante, mas são empacotados de maneira diferente e / ou têm nomes diferentes). Eu pessoalmente mudei de Java para C # e voltei para Java novamente sem nenhuma dificuldade.
  • Também é importante notar que todas as linguagens da JVM (Java e Scala, mas também JRuby e Clojure etc.) são muito compatíveis - elas compartilham a mesma plataforma fundamental da JVM e podem compartilhar código / bibliotecas com muita facilidade.

Dado tudo isso, você pode querer proteger suas apostas e optar por uma estratégia Java / Scala mista - ou seja, migrar para a plataforma JVM e se concentrar inicialmente em Java, mas mantenha aberta a opção de usar o Scala quando seus desenvolvedores estiverem confortáveis ​​e / ou ele se encaixa no problema em questão.

Da perspectiva do gerenciamento, isso tem muitas vantagens:

  • Você ainda pode compartilhar todas as bibliotecas para que seus investimentos estejam seguros
  • Seus desenvolvedores menos experientes poderão transferir C # -> Java rapidamente
  • Seus desenvolvedores mais experientes podem aproveitar ao máximo os recursos avançados do Scala
  • Todas as ferramentas são compatíveis / podem ser compartilhadas (sistemas de construção, IDEs, ferramentas de implantação etc.)
  • Você obtém acesso gratuito ao amplo ecossistema de bibliotecas de código aberto na JVM (além da portabilidade entre plataformas, esse é sem dúvida o melhor motivo para estar na plataforma JVM)
  • Seus desenvolvedores usam a linguagem que os torna mais produtivos, considerando suas habilidades / a tarefa em questão (Java em alguns casos, Scala em outros, talvez outras linguagens como o Clojure no futuro)

A desvantagem é que você ainda tem dois idiomas principais para oferecer suporte. Mas você provavelmente já tem muito mais do que apenas dois (scripts de shell? Formatos XML específicos do domínio? Arquivos de configuração? Mecanismos de regras? HTML? Javascript?); Portanto, você pode argumentar que não é realmente um grande problema.

Mikera
fonte
Obrigado pela informação. Estou apenas tentando descobrir qual é o melhor caminho a seguir e você forneceu algumas informações excelentes. No momento, temos alguns bons desenvolvedores de OO, mas ninguém familiarizado com programação funcional.
JD01 20/09
1
Feliz em ajudar! Vale a pena estar ciente de que o Scala é mais uma linguagem baseada em vários paradigmas / OOP. Embora você certamente possa fazer FP no Scala, se você quiser idiomas que sejam mais claramente funcionais em foco, Haskell ou Clojure provavelmente estarão mais próximos.
Mikera
Quanto à reutilização de código, se eu usasse o Clojure ou o Scala desde o primeiro dia ou mesmo como você disse em uma estratégia mista, eu poderia reutilizar o código do Clojure / Scala no .net e no Java? Gostaria de saber se este é um bom ponto de venda para a gerência. Dessa forma, ainda poderíamos lançar um produto (o produto antigo com novos recursos) e também estar no caminho de reescrever o código existente em Java com a reutilização de código dos módulos clojure / scala. Estou correto no meu pensamento aqui ou isso abre outros problemas?
JD01 21/09
1
Você pode expor a funcionalidade Clojure / Scala como um serviço da Web ou interface REST, se quiser. Essa é uma sobrecarga um pouco maior do que apenas construir diretamente uma biblioteca (que seria a melhor opção se você quisesse chamar a funcionalidade de Java / outra linguagem JVM), mas certamente daria a flexibilidade de chamar o código de qualquer cliente que você gostasse (. Net, Java, Ruby, etc.)
mikera
Obrigado Mike. Eu acho que o caminho de reutilização de código pelo menos mostraria ao gerenciamento que uma reescrita completa não é necessária com a opção Scala / Clojure. Não quero que terminemos como o Netscape :). De volta à construção de uma biblioteca, eu simplesmente não poderia usá-la em .net e java sem serviços da web?
JD01 21/09
15

Vou adicionar uma terceira opção. Alguém na sua organização analisou a interoperabilidade entre seus módulos C # e Java? Como você está expondo a funcionalidade C #? Os serviços web SOAP ou RESTFul são uma opção?

Uma reescrita de 2 anos pode ser um sinal de morte para uma organização (basta perguntar à Netscape). No entanto, uma migração gradual, enquanto o código existente funciona bem entre si, tem potencialmente menos impacto nos negócios.

Martijn Verburg
fonte
3

Reescrever C # para Scala será tão difícil quanto reescrever para Java. Quanto ao idioma "melhor", esse ponto é discutível, cada idioma possui seus próprios pontos positivos e negativos.

Eu não sei o tamanho da sua base de código, mas 2 anos para 30 desenvolvedores parecem enormes para uma simples reescrita. É fácil pegar Java quando você conhece C #. Levei um dia ou dois para me sentir confortável com isso.

Meu conselho seria deixar o gerenciamento seguir o seu caminho e aproveitar o fato de você ser pago para expandir seu conjunto de habilidades.

Tom Squires
fonte
Apenas cerca de 10 desenvolvedores estarão trabalhando no novo produto. Estou apenas tentando descobrir quais seriam os prós e os contras de ir com o Scala.
JD01 20/09
1
Não sei o suficiente sobre as especificidades do seu projeto ou do Scala para lhe dar uma resposta defiante. No entanto, parece-me que a introdução de uma terceira língua que ninguém sabe apenas complicaria as coisas.
Tom Squires
Você pode estar certo. Eu estava pensando nisso em termos de lançamento de um produto em mais ou menos um ano e, ao mesmo tempo, poder reutilizar código em .net e java. Seus pontos são bem observou :)
JD01
1

Eu acho que a opção mais fácil seria fazer com que os desenvolvedores java aprendessem c #. Os dois idiomas são muito semelhantes em muitos aspectos e não leva muito tempo para um desenvolvedor Java pegar C #. Eu trabalhei com muitos desenvolvedores de java que aprenderam c # e geralmente é uma transição suave. A única área em que eles podem ficar presos por um tempo é o modelo de programação WebForms. Os desenvolvedores Java se ajustam melhor ao paradigma MVC. Dessa forma, você não precisa esperar um ano antes de começar a desenvolver novos recursos. No que diz respeito ao Scala, receio que isso introduza um novo problema com todos os 30 desenvolvedores que tentam aprender um novo idioma.

Sriram
fonte
Como existem muitos produtos escritos em Java, seria difícil fazer com que aprendessem C #. Eu esperava que, com o Scala, uma vez que tenhamos o novo produto, os desenvolvedores de java pudessem usar as bibliotecas como estão sem precisar aprender o Scala.
JD01 20/09
2
Não seria bom se você expusesse seu código .Net existente como serviços que os desenvolvedores java possam chamar e desenvolver todos os novos recursos em java.
Sriram
Isso já havia sido sugerido no passado, mas foi decidido que nos afastamos do .net.
JD01 20/09
Uau! Então eu manteria simples e reescreveria o código em java. Acho que Scala introduziria mais uma complexidade para gerenciar e seria difícil de vender para a gerência.
Sriram