Pergunta

Eu sou um programador experiente C ++ com habilidades médias Python. As razões que eu estudei Python em primeiro lugar foram:

  • para obter uma perspectiva diferente sobre a programação (estático vs dinâmico, interpretado vs compilado, etc.)
  • para aumentar a amplitude de projetos que eu possa trabalhar (Python me permite fazer desenvolvimento web, desenvolver para telefones Symbian ou bater-se scripts de administração do sistema rápidas)
  • para complementar minhas habilidades de C ++.

Eu acho que o Python é grande e eu acredito que eu tenha alcançado os objetivos acima. Vou continuar a usá-lo para pequenos projetos, scripts e desenvolvimento web.

Eu duvido que eu possa usá-lo para médias e grandes projectos embora. Enquanto a tipagem dinâmica é conveniente, pois permite uma certa classe de erros que eu acho preocupante. O teste de unidade e linting pode aliviar este problema, mas tipagem estática elimina completamente.

Depois de olhar para algumas linguagens de programação, eu acho que Scala parece um bom candidato: Eu gosto do tipo de inferência e ele é executado na JVM por isso deve estar disponível onde quer que a JVM está disponível. Eu também pode aprender mais sobre programação funcional quando usá-lo.

Mas ... Eu também tenho algumas dúvidas, e é aí que eu espero que a comunidade Stack Overflow pode ajudar:

  • Portabilidade: Linux e Windows, pelo menos eu espero. E sobre telefones celulares, é possível obtê-lo para correr lá?
  • compatibilidade C ++: Eu posso misturar código C ++ com Scala? (JNI?)
  • Programação de paradigma: Eu não me sinto confortável com a mudança para a programação funcional (FP) neste momento. Posso usar orientada a objeto e processual com algum FP em primeiro lugar e, em seguida, alterar as proporções como eu aprender?
  • maturidade cadeia ferramenta: qual é a sua experiência com IDEs e depuradores? Estou usando o Eclipse agora e parece OK.
  • Velocidade de aprendizado:? Considerando minha experiência, o quão rápido você acha que eu possa chegar a um nível viável com Scala
  • Implantação: como exatamente você implantar um programa Scala? É um frasco, é um executável?

Finalmente, o que você acha que são algumas das desvantagens Scalas?

Foi útil?

Solução

  • Portabilidade: Linux e Windows, pelo menos eu espero. E sobre telefones celulares, alguém conseguir que ele seja executado lá?

Sim. Há algum movimento sobre Scala no Android. Quanto J2ME, vi algo a esse respeito, mas não muito. Há algum código pertencente a J2ME no repositório de código fonte. Eu não sei como viável é, mas parece-me que não há muita demanda para isso.

Eu também vou mencionar que não é / foi uma piscina no Scala-Lang sobre as plataformas alvo desejado, e J2ME era um deles, muito baixa no totem.

  • compatibilidade C ++: Eu posso misturar código C ++ com Scala? (JNI?)

Assim como você pode misturar C ++ com Java, por qualquer que vale a pena. Se você não tiver nenhuma experiência com isso, você pode apenas ler os recursos Java, como qualquer coisa neles será aplicável com Scala sem mudanças (além de sintaxe Scala).

  • Programação de paradigma: Eu não me sinto confortável com a mudança para FP neste momento. Posso usar OO e processual com algum FP em primeiro lugar e, em seguida, alterar as proporções como eu aprender?

Definitivamente, sim. Scala sai dele é maneira de se certificar de que você não precisa de programa em um estilo funcional. Esta é a principal crítica do Scala de pessoas funcionais, como uma questão de fato:. Alguns não consideram uma linguagem funcional a menos que obriga o programador a escrever em estilo funcional

De qualquer forma, você pode ir para a direita em fazer as coisas à sua maneira. Minha aposta, porém, é que você vai pegar hábitos funcionais, mesmo sem perceber que eles são funcionais.

Talvez você pode olhar para o Matrizes série em meu próprio blog sobre como escrever um classe Matrix. Mesmo que ele se parece com código OO padrão, é, de fato, muito funcional.

  • maturidade cadeia ferramenta: qual é a sua experiência com IDEs e depuradores? Estou usando o Eclipse agora e parece ok.

IDEA (IntelliJ), NetBeans e Eclipse todos têm um bom suporte para Scala. Parece IDEA é o melhor, e NetBeans / keep Eclipse sapo pulando uns aos outros, embora NetBeans tem sido certamente mais estável do que o Eclipse da tarde. Por outro lado, o apoio em Eclipse está tomando um caminho muito promissor que deve produzir resultados nos próximos 6 meses ou mais - é apenas que é uma rota de colisão. : -)

Alguns sinais interessantes de Scala ferramentas para estes ambientes é o fato de que o plugin Eclipse em desenvolvimento utiliza AOP para mesclar mais perfeitamente com todo o IDE, que os NetBeans plugin está sendo totalmente reescrito em Scala, e que há um Power Pack Scala a ideia de que suportes, entre outras coisas, traduzindo o código Java em código Scala.

O pessoal EMACS tem ferramentas extensivas para Scala, bem como, e muitos editores menores têm suporte para ele também. Estou muito confortável com o apoio do jEdit para pequenos programas e scripts, por exemplo.

Há também suporte boa Maven - na verdade, a forma padrão para instalar Elevador é instalar Maven, e depois construir um arquétipo de elevação. Isso vai puxar uma versão apropriada Scala. Há um alvo scala:cc que vai fazer desencadeada recompilação também.

Falando de recompilação, nem Maven e, particularmente, nem Ant fazer um trabalho bom em identificar o que precisa ser recompilados. A partir desse problema arqueadas SBT (Simple Desenvolver Tool), escrito em Scala, que resolve esse problema através da utilização de Scala compilador de encaixe. SBT usa o mesmo layout do projeto como Maven, bem como repositórios Maven / Ivy, mas configurações de projeto são feitas em código Scala, em vez de XML -. Com suporte para arquivos de configuração Maven / Ivy bem

  • Velocidade de aprendizado: considerando minha experiência, o quão rápido você acha que eu possa chegar a umnível viável com Scala?

Muito rápido. Como uma linguagem puramente OO, Scala já apresenta algumas características interessantes, comparáveis ??a algumas coisas que está presente em C ++, mas não Java, embora eles funcionam de forma diferente. A esse respeito, uma vez que você percebe que tais características são para e relacioná-los com material C ++, você estará muito à frente de programadores Java, como você já sabe o que fazer com eles.

  • Implantação: como exatamente você implantar um programa Scala? É um frasco, é um executável?

A mesma coisa que Java. Você pode implantar JARs, guerras, ou qualquer outro dos alvos Java, porque o compilador scala gerar arquivos de classe. Na verdade, você usar jar do Java para gerar arquivo JAR do Scala a partir dos arquivos de classe, e as metas do Maven para suporte de elevação construir arquivos WAR.

Há uma alternativa para arquivos de script, no entanto. Você pode chamar de "scala" para executar Scala código fonte diretamente, semelhante a um script Perl de Shell. Ele também pode ser feito no Windows. No entanto, mesmo com o uso de um daemon de compilação para acelerar a execução, o arranque vezes são suficientes lento que o uso eficaz de Scala em um ambiente de scripting pesado precisa de algo como Nailgun .

Como para desvantagens do Scala, dê uma olhada na minha resposta (e outras do) em este pergunta Stack Overflow.

Outras dicas

Scala é uma pena bem a língua evoluir para investir, especialmente se você está vindo do mundo Java. Scala é amplamente coberto em Artima . Veja este artigo de Bill Venners e também ler sobre Twitter e Scal um

.

Quanto às suas questões:

  • Java pode ser executado sempre que há uma JVM. Sem sorte com os telefones móveis no entanto. Você precisa de um JRE completo, não o subconjunto que está disponível lá.
  • Isto é possível com JNI. Se algo é possível com Java, então é possível com Scala. Scala pode chamar classes Java.
  • A programação funcional é um ponto forte do Scala - você precisa fazer para aprender. No entanto, você também pode começar a usá-lo sem tirar o máximo proveito dela e sua maneira de trabalhar com ele.
  • Existe um plug-in do Eclipse. Não é melhor, mas vai fazer o trabalho. Mais detalhes aqui .
  • Se você é experiente, eu diria muito rápido. Eu recomendo que você encontrar um livro para começar.
  • Ver esta entrada faq para implantação.

paradigma de programação: Eu não me sinto confortável com a mudança para FP neste momento. Posso usar OO e processual com algum FP em primeiro lugar e, em seguida, alterar as proporções como eu aprender?

Scala tem suporte completo para programação imperativa, escrever programas sem elementos PF em que é uma brisa (no entanto, FP é útil e vale a pena aprender de qualquer maneira).

velocidade de aprendizado:? Considerando minha experiência, o quão rápido você acha que eu possa chegar a um nível viável com Scala

rapidamente. Há uma série de características interessantes em Scala, que pode não ser familiar para as pessoas provenientes de um C ++, Java ambiente, como por exemplo algumas das características do sistema de digitação. Alguns argumentam que o fato de que há muito a aprender no Scala antes que você sabe tudo isso é uma problema com a linguagem; Discordo. A presença daqueles característica é uma vantagem da língua. Quanto mais recursos, melhor. Afinal, você não tem que usá-los todos de uma vez, assim como você não tem que comprar tudo o que está sendo vendido na loja.

velocidade de aprendizado:? Considerando minha experiência, o quão rápido você acha que eu possa chegar a um nível viável com Scala

Eu também venho de uma ++ fundo C, uma coisa que eu reparei é que desde que você vai escrever muito menos código, em comparação com C ++ para uma tarefa comparável, o seu aprendizado será acelerada como você vai fazer mais no mesmo período de tempo . Este foi o mesmo fenômeno que eu experimentei com Ruby.

Na verdade - se eu fosse você - eu estudar paradigmas em vez de linguagens de programação. Claro que você tem que estudar uma língua exemplo para estudar o paradigma. Sabendo as desvantagens e vantagens de diferentes paradigmas permite visualizar os seus problemas de um lado diferente e faz de você um programador melhor (mesmo nas línguas você já sabe).

Pegando uma linguagem de um paradigma já conhecido é uma tarefa fácil relativly se necessário. Desde Scala é FP (pelo menos você mencionou) e C ++ / Python é OOP, é uma linguagem boa para você, eu diria.

Você deve se inscrever neste curso pelo Criador de si mesmo Scala.

https://www.coursera.org/course/progfun

James Strachan (produtiva Java desenvolvedor open source, para aqueles que não no circuito) tem uma interessante discussão sobre Scala aqui , e por que ele sente que é uma progressão de Java (a langauge, não a plataforma).

Scala parece que está ganhando muita tração. Eu não acho que é um flash na panela, e atualmente está na minha lista de idiomas para aprender (em parte para o aspecto funcional)

Aqui está uma evidência anedótica sobre capacidade de aprendizado de Scala.

Na nossa empresa, temos vários estagiários de U.Waterloo. Eles foram orientados a escrever em Scala; Nunca vi isso antes.

Eles pegaram Scala e Elevador notavelmente rápida; agora eles estão produzindo código Scala; ele pode não ser perfeito, mas perfeito de ninguém.

Assim, o fato de que um gerente não sabe Scala pode não ser o melhor argumento quando você decidir sobre a adopção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top