Scala, vale a pena?

[quote=fredferrao]Alguns pontos:

Não, Scala não serve apenas para conhecimento, como ja dito a comunidade cresce a cada dia, e tem companhias adotando em seus produtos, pra citar algumas:

  • Twitter
  • Novell
  • Xerox
  • The Guardian
  • FourSquare
  • Sony
  • Siemens
  • e mais

Então como visto, tem gente grande usando, sem falar nas startups por ai a fora.

Com relação ao SEMPRE dito TANTO FAZ A LINGUAGEM, eu não acho que TANTO FAZ não, então tanto faz eu escrever 10.000 linha em cobol ou 800 em Scala ou outra coisa?? Tanto faz?? fala serio.

Scala, Ruby e outras tem açucares sintaticos que ajudam e muito na produtividade, Scala por ser tambem funcional resolve tambem um dos grandes problemas de concorrencia que é a alteração de estado, e ainda traz a abordagem de Actors semelhante ao Erlang, alem de outras tantas coisas, como a poderosa api de Collections, closures, etc.

Então eu acho um pouco sem senso dizer que TANTO FAZ a linguagem, as linguagens são melhores umas que as outras em determinados pontos e ainda umas são melhores que outras na media geral das features, entao não acho que tanto faz.[/quote]

Acho que fui mail interpretado com meu “tanto faz”. Com certeza existem linguagens que são melhores para fazer uma coisa e não para outras. O que eu quis dizer com meu tanto faz lá atrás, se vc prestar atenção, foi que se a pessoa pensa em abrir seu negócio e não trabalhar para empresas, não precisa se preocupar com linguagem mais procurada pelo mercado. Nessa caso, de programação pessoal, tanto faz a linguagem. Apenas pasta escolher uma que se goste e pronto. Quanto ao número de linhas código, a linguagem influencia bastante, mas o fundamental é o programador.

Engraçado que se vc ler com calma, perceberá que estou defendendo a posição de o amigo estudar a nova linguagem.

[]s

[quote=renzonuccitelli]
Acho que fui mail interpretado com meu “tanto faz”. Com certeza existem linguagens que são melhores para fazer uma coisa e não para outras. O que eu quis dizer com meu tanto faz lá atrás, se vc prestar atenção, foi que se a pessoa pensa em abrir seu negócio e não trabalhar para empresas, não precisa se preocupar com linguagem mais procurada pelo mercado. Nessa caso, de programação pessoal, tanto faz a linguagem. Apenas pasta escolher uma que se goste e pronto. Quanto ao número de linhas código, a linguagem influencia bastante, mas o fundamental é o programador.

Engraçado que se vc ler com calma, perceberá que estou defendendo a posição de o amigo estudar a nova linguagem.

[]s[/quote]

Não é com voce :wink:

Para o pessoal que já deu uma olhada em Scala.

Ele é mais PRODUTIVO do que java?

Porque uma coisa que me chamou atenção em utilizar groovy com grails é a questão de ajudar na produtividade…com facilidades para criar cruds básicos e etc.

[quote=Nykolas Lima]Para o pessoal que já deu uma olhada em Scala.

Ele é mais PRODUTIVO do que java?

Porque uma coisa que me chamou atenção em utilizar groovy com grails é a questão de ajudar na produtividade…com facilidades para criar cruds básicos e etc.[/quote]

Uma coisa é a linguagem, no caso Groovy e Scala e outra são os frameworks web, no caso do groovy o Grails, em scala tem o Lift, mas não sei dizer ao certo o quanto ele se assemelha aos rails da vida, estuda-lo é meu proximo passo.
Mas dizem que é legal, e seu criador jura de pé junto que ninguem precisa de Scaffolding no Lift como precisam em outros frameworks, para provar ele criou um “templatezinho” chamado CRUDify, que faz todo o trabalho de CRUD muito facil, eu ja até fiz um hello world com ele, realmente é facil, mas não posso falar muito porque realmente ainda nao comecei meus estudos no Lift.

[quote=fredferrao]Alguns pontos:

Não, Scala não serve apenas para conhecimento, como ja dito a comunidade cresce a cada dia, e tem companhias adotando em seus produtos, pra citar algumas:

  • Twitter
  • Novell
  • Xerox
  • The Guardian
  • FourSquare
  • Sony
  • Siemens
  • e mais

Então como visto, tem gente grande usando, sem falar nas startups por ai a fora.

Com relação ao SEMPRE dito TANTO FAZ A LINGUAGEM, eu não acho que TANTO FAZ não, então tanto faz eu escrever 10.000 linha em cobol ou 800 em Scala ou outra coisa?? Tanto faz?? fala serio.

Scala, Ruby e outras tem açucares sintaticos que ajudam e muito na produtividade, Scala por ser tambem funcional resolve tambem um dos grandes problemas de concorrencia que é a alteração de estado, e ainda traz a abordagem de Actors semelhante ao Erlang, alem de outras tantas coisas, como a poderosa api de Collections, closures, etc.

Então eu acho um pouco sem senso dizer que TANTO FAZ a linguagem, as linguagens são melhores umas que as outras em determinados pontos e ainda umas são melhores que outras na media geral das features, entao não acho que tanto faz.[/quote]

Bom, eu discordo. Até porque quem dita isso é o profissional. O que faz a diferença é o know how dele(em cima da linguagem). Uma pessoa experiente em java pode render muito mais que uma de scala ou qualquer outra com menos experiência. Isso no quesito “gerar código”.

Acredito que a linguagem vá influenciar se essa é uma linguagem específica para determinada coisa, como prolog é para sistemas especialistas e problemas de ia.
Linguagens de propósitos gerais como c++, java, c# e pascal possuem praticamente o mesmo foco(a diferença não é tão grande em aspectos e apesar de eu achar java a mais produtiva delas).
Só não posso dizer o mesmo de scala porque nunca a usei.

Cara… eu estudei um pouco scala e achei uma linguagem nao muito clara. Com certeza vc reduz MUITO a quantidade de linhas, mas nao necessariamente a complexidade do algoritmo.

Particularmente eu tenho estudado Pyton, que pra mim eh uma linguagem mais bem estabelecida, possui caracteristicas funcionais e tem um mega framework o DJango. (Alem de ser usado pelo google e outras grandes empresas.)

Acho que isso depende mais do programador que da tecnologia…[/quote]

Cara, quando se fala de comunicação você tem que considerar esses fatores: emissor, receptor, meio e mensagem

Os 4 fatores influenciam no sucesso da comunicação. Por exemplo, se eu quiser descrever uma peça de carro usando linguagem natural, pode ficar muito complicado de entender. Seria mais fácil usar um desenho esquemático. Nesse caso, o meio escolhido para passar a mensagem não foi adequado.

O mesmo acontece com linguagens de programação. Algumas linguagens são ideais para descrever determinados tipos de problemas. Outras são de propósito geral e moderadamente adequadas para descrever as classes mais comuns de problemas de software. Ainda outras têm uma diversidade tamanha de elementos ou seus elementos são tão peculiares que se torna difícil entende-la sem muito treinamento. Usando as linguagens naturais como analogia, veja o chinês: é uma linguagem que possui alfabeto e fonemas próprios, além de uma enorme variedade de símbolos. É uma linguagem difícil para qualquer um que não seja nativo. Outro exemplo é o Basco que possui raiz própria, sem relação com nenhuma outra linguagem existente e é considerado um dos idiomas mais difíceis de aprender do mundo.

Eu falei que Scala fede, por brincadeira. Na verdade, a linguagem é fascinante mesmo, abre a mente para outras possibilidades. Por outro lado, é ingênuo achar que desenvolver CRUD na Web em Scala vai te dar um ganho de produtividade a curto ou longo prazo. Não vai mesmo. E mais, acho que qualquer ganho de produtividade derivado de mudança de linguagem será muito menor do que você gostaria que fosse.

Em suma, se você quer aprender Scala para abrir a cabeça, resolver problemas novos ou mesmo resolver aqueles problemas que foram “feitos para a linguagem”, faz muito sentido. Por outro lado, não acho que você vai resolver aquele mesmo velho problema em 50% do tempo…

Acho que isso depende mais do programador que da tecnologia…[/quote]

Cara, quando se fala de comunicação você tem que considerar esses fatores: emissor, receptor, meio e mensagem

Os 4 fatores influenciam no sucesso da comunicação. Por exemplo, se eu quiser descrever uma peça de carro usando linguagem natural, pode ficar muito complicado de entender. Seria mais fácil usar um desenho esquemático. Nesse caso, o meio escolhido para passar a mensagem não foi adequado.

O mesmo acontece com linguagens de programação. Algumas linguagens são ideais para descrever determinados tipos de problemas. Outras são de propósito geral e moderadamente adequadas para descrever as classes mais comuns de problemas de software. Ainda outras têm uma diversidade tamanha de elementos ou seus elementos são tão peculiares que se torna difícil entende-la sem muito treinamento. Usando as linguagens naturais como analogia, veja o chinês: é uma linguagem que possui alfabeto e fonemas próprios, além de uma enorme variedade de símbolos. É uma linguagem difícil para qualquer um que não seja nativo. Outro exemplo é o Basco que possui raiz própria, sem relação com nenhuma outra linguagem existente e é considerado um dos idiomas mais difíceis de aprender do mundo.

Eu falei que Scala fede, por brincadeira. Na verdade, a linguagem é fascinante mesmo, abre a mente para outras possibilidades. Por outro lado, é ingênuo achar que desenvolver CRUD na Web em Scala vai te dar um ganho de produtividade a curto ou longo prazo. Não vai mesmo. E mais, acho que qualquer ganho de produtividade derivado de mudança de linguagem será muito menor do que você gostaria que fosse.

Em suma, se você quer aprender Scala para abrir a cabeça, resolver problemas novos ou mesmo resolver aqueles problemas que foram “feitos para a linguagem”, faz muito sentido. Por outro lado, não acho que você vai resolver aquele mesmo velho problema em 50% do tempo…
[/quote]

E você acha que talvez utilizando uma linguagem como groovy com grails eu ganharia em produtividade?

[quote=deniswsrosa]Cara… eu estudei um pouco scala e achei uma linguagem nao muito clara. Com certeza vc reduz MUITO a quantidade de linhas, mas nao necessariamente a complexidade do algoritmo.

Particularmente eu tenho estudado Pyton, que pra mim eh uma linguagem mais bem estabelecida, possui caracteristicas funcionais e tem um mega framework o DJango. (Alem de ser usado pelo google e outras grandes empresas.)
[/quote]

Se fosse assim qualquer linguagem com funções tem “caracteristica funcional”. Mas Ruby, Python e Scala são orientadas a objeto, são imperativas e portanto não funcionais.

Meu conhecimento de Grails é zero. Eu conheço Groovy, mas usei apenas para scripts e nunca para um sistema inteiro. O que eu posso dizer com alguma certeza é que o ganho de produtividade depende também do conhecimento que a equipe tem do framework e do tipo de problema que você vai resolver.

Cuidado ao ler anúncios do tipo: “Depois que passamos a usar X, nossa produtividade aumentou em 60%!!! Obrigado, criador de X!!”. Normalmente, a medida de produtividade é viciada ou a história não está bem contada (a produtividade aumentou depois que trocaram para X E contrataram 10 consultores experts em X E trabalharam 6 meses com X E usaram X em um projeto onde X se adequava perfeitamente).

Convencer a diretoria a usar um “Java diferente” é facil, porque Java pra quem não programa significa a plataforma, mas tem programador que nem sabe o que é plataforma e ainda acredita que a linguagem Java é o futuro, e essas novas linguagens não são Java (felizmente), e convencer outros programadores da equipe que não tem interesse em aprender uma nova linguagem é o mais complicado.

Mas até ai é um problema seu e não da linguagem, que são muito mais produtivas sim que o Java. :wink:

[quote=juliocbq]
Bom, eu discordo. Até porque quem dita isso é o profissional. O que faz a diferença é o know how dele(em cima da linguagem). Uma pessoa experiente em java pode render muito mais que uma de scala ou qualquer outra com menos experiência. Isso no quesito “gerar código”.

Acredito que a linguagem vá influenciar se essa é uma linguagem específica para determinada coisa, como prolog é para sistemas especialistas e problemas de ia.
Linguagens de propósitos gerais como c++, java, c# e pascal possuem praticamente o mesmo foco(a diferença não é tão grande em aspectos e apesar de eu achar java a mais produtiva delas).
Só não posso dizer o mesmo de scala porque nunca a usei.[/quote]

Eu acho que estamos discutindo linguagens aqui neste tópico e não profissionais, então se estamos discutindo linguagem temos que levar em conta que é: 1 Profissional 100% fluente em Scala x 1 Profissional 100% fluente em Cobol x 1 Profissional 100% fluente em C x 1 Profissional 100% fluente em Java x …

Então voce ainda acha que fica no 0 x 0?? Sinceramente eu acho que não!! Então repito mais uma vez, eu continuo achando que NÃO tanto faz a linguagem não.

[quote=fredferrao][quote=juliocbq]
Bom, eu discordo. Até porque quem dita isso é o profissional. O que faz a diferença é o know how dele(em cima da linguagem). Uma pessoa experiente em java pode render muito mais que uma de scala ou qualquer outra com menos experiência. Isso no quesito “gerar código”.

Acredito que a linguagem vá influenciar se essa é uma linguagem específica para determinada coisa, como prolog é para sistemas especialistas e problemas de ia.
Linguagens de propósitos gerais como c++, java, c# e pascal possuem praticamente o mesmo foco(a diferença não é tão grande em aspectos e apesar de eu achar java a mais produtiva delas).
Só não posso dizer o mesmo de scala porque nunca a usei.[/quote]

Eu acho que estamos discutindo linguagens aqui neste tópico e não profissionais, então se estamos discutindo linguagem temos que levar em conta que é: 1 Profissional 100% fluente em Scala x 1 Profissional 100% fluente em Cobol x 1 Profissional 100% fluente em C x 1 Profissional 100% fluente em Java x …

Então voce ainda acha que fica no 0 x 0?? Sinceramente eu acho que não!! Então repito mais uma vez, eu continuo achando que NÃO tanto faz a linguagem não.[/quote]

Ae realmente é outra coisa. E como eu disse não conheço scala para dizer o contrário. Agora entre java e c++ posso te dizer que não hà praticamente nenhuma diferença.

[quote=mochuara][quote=deniswsrosa]Cara… eu estudei um pouco scala e achei uma linguagem nao muito clara. Com certeza vc reduz MUITO a quantidade de linhas, mas nao necessariamente a complexidade do algoritmo.

Particularmente eu tenho estudado Pyton, que pra mim eh uma linguagem mais bem estabelecida, possui caracteristicas funcionais e tem um mega framework o DJango. (Alem de ser usado pelo google e outras grandes empresas.)
[/quote]

Se fosse assim qualquer linguagem com funções tem “caracteristica funcional”. Mas Ruby, Python e Scala são orientadas a objeto, são imperativas e portanto não funcionais. [/quote]

Quando disse sobre “caracteristicas funcionais”, me referi a linguagens que tendem a ser hibridas e nao OO puro. Eu comecei estudando Scala, mas hoje entre Ruby, Pyton e Scala, aprender Scala tem a menor prioridade.

[quote=mochuara][quote=deniswsrosa]Cara… eu estudei um pouco scala e achei uma linguagem nao muito clara. Com certeza vc reduz MUITO a quantidade de linhas, mas nao necessariamente a complexidade do algoritmo.

Particularmente eu tenho estudado Pyton, que pra mim eh uma linguagem mais bem estabelecida, possui caracteristicas funcionais e tem um mega framework o DJango. (Alem de ser usado pelo google e outras grandes empresas.)
[/quote]

Se fosse assim qualquer linguagem com funções tem “caracteristica funcional”. Mas Ruby, Python e Scala são orientadas a objeto, são imperativas e portanto não funcionais. [/quote]

Função é apenas um nome. Scala É funcional e Scala É Orientada a Objetos, no quesito funcional ela é como deve ser como funções matematicas, ou seja:

  • Funções não tem side effects
  • Funções compostas por outras funções
  • Funções podem receber outras funções como argumentos(Higher-Order Functions)
  • Funções podem retornar funções
  • Imutabilidade
  • etc

O que Scala não te obriga é ter funções puras, ou te obriga a ter somente variaveis imutaveis, mas te encoraja a seguir nesta linha e tem tudo o que é preciso para isto.
Voce tem 2 vias a seguir: pode desenvolver funcionalmente o que é fortemente encorajado, mas voce é livre para escrever proceduralmente e orientado a objetos onde for mais apropriado.

O que é dito é que Orientado a Objetos x Funcional não se contradizem, como parece superficialmente, pelo contrario eles mais se complementam em Scala do que se contradizem.

[quote=juliocbq]
Agora entre java e c++ posso te dizer que não hà praticamente nenhuma diferença.[/quote]

O fato de se preocupar com a gerência de memória não diminui sua produtividade com C++ em relação a Java?

Considerando que utiliza um C++ puro, sem qualquer ferramenta ou framework que faça isso por você.

[quote=AbelBueno][quote=juliocbq]
Agora entre java e c++ posso te dizer que não hà praticamente nenhuma diferença.[/quote]

O fato de se preocupar com a gerência de memória não diminui sua produtividade com C++ em relação a Java?

Considerando que utiliza um C++ puro, sem qualquer ferramenta ou framework que faça isso por você.[/quote]

Não, de maneira alguma. Quem programa em c++ cria objetos e desaloca memória direto no destrutor. Fora os smart pointers que são mecanismos de gerência automática de memória.

[quote]- Funções não tem side effects

  • Funções compostas por outras funções
  • Funções podem receber outras funções como argumentos(Higher-Order Functions)
  • Funções podem retornar funções
  • Imutabilidade
    [/quote]

Existem várias linguagem com closures e nem por isso elas são funcionais. Da mesma forma, Scala é OO com closures. Mas não é funcional.

[quote=mochuara][quote]- Funções não tem side effects

  • Funções compostas por outras funções
  • Funções podem receber outras funções como argumentos(Higher-Order Functions)
  • Funções podem retornar funções
  • Imutabilidade
    [/quote]

Existem várias linguagem com closures e nem por isso elas são funcionais. Da mesma forma, Scala é OO com closures. Mas não é funcional.
[/quote]

Bom não vou perder meu tempo com voce, sua reputação ja é bem conhecida por aqui, ja foi falado que é hibrido, Funcional e Orientada a objetos, ja foi explicado como e tudo mais.

Agora quer persistir nos teus flames, então explique pra todo mundo aqui, o que uma linguagem funcional deve suportar, se é que voce tem conhecimento para isto :shock:

throw new GalhoDentroException();