Scala, vale a pena?

55 respostas
N

Um colega do trabalho fala muito bem de Scala. Tentei dar uma procurada sobre mercado para Scala, e não encontrei muita coisa.

Vocês acham que vale a pena investir no estudo desta linguagem?
Indicam algum fórum, blog, referências?

Abraços

55 Respostas

E

O “mercado” em si é bem específico mas há certa procura (acho que mais no estrangeiro que aqui mesmo). Um diretor aqui na empresa (que casualmente também tem um instituto educacional) estava feito doido procurando um instrutor de Scala, e como ele não é de dar ponto sem nó, provavelmente deve entrar em moda daqui a algum tempo.

N

entanglement:
O “mercado” em si é bem específico mas há certa procura (acho que mais no estrangeiro que aqui mesmo). Um diretor aqui na empresa (que casualmente também tem um instituto educacional) estava feito doido procurando um instrutor de Scala, e como ele não é de dar ponto sem nó, provavelmente deve entrar em moda daqui a algum tempo.

Você já chegou a dar uma estudada?

Conhece algum fórum ou blogs legais para acompanhar?

abraço

D

“O bom programador deve aprender uma nova linguagem de programação todo ano.”
Esse eu aprendi scala. Particular eu amo essa linguagem. Usando scala vc chega a uma redução de aproximadamento 30% no número de linhas do seu código em relação ao código Java quando vc está usando um framework Java, ou seja, um framework q ñ tira proveito das vantagens da sintaxe e da API da scala. Quando vc tem uma API/framework scala essa redução chega a ~60% no número de linhas. Desde q aprendi scala, quando classe Java q escrevo me deixa mais triste :cry: pois ñ consigo deixar de imaginar como seria mais fácil faze-lo em scala.

O futuro ainda é incerto mas eu apostaria q em scala. Ao menos o pessoal do Twitter apostou :smiley: !

A

Acho bacana essa ascenção de linguagens alternativas ao Java que rodam na JVM… Cara, se a sintaxe lhe agradar, aprenda com certeza, motive amigos a aprender, faça Projetos, participe da comunidade… O futuro de uma tecnologia depende da adoção dela… Não adianta esperar pra saber se vai dar certo… Faça dar certo…

Tô pra começar a estudar Groovy + GRails… Já dei uma olhada no Scala, pessoalmente gostei mais do Groovy, mas é uma questão de puro gosto pessoal, quem sabe um dia com calma não precise aplicar Scala em algum Projeto…

Nova tecnologia vale a pena… Sempre…

Abs :wink:

F

Eu tambem estou apostando em Scala, até o momento estou gostando muito, a linguagem realmente é facinante, eu diria um pouco complicadinha no começo, mas depois vai de boa.
Eu vejo a comunidade de Scala crescendo a cada dia, em forum/grupos, ja começa a ser frequente gente oferecendo vaga, mas como o colega falou, no Brasil nem tanto.

Um lugar que ta bem movimentado é o stackoverflow: http://stackoverflow.com/questions/tagged/scala

Temos tambem um google grupo, mas anda meio parado, mas sempre que alguem pergunta sempre tem alguem respondendo: http://groups.google.com/group/scala-br

E por ultimo um blog, que um cara do grupo scala-br criou e esta postando algumas coisas: scala-br.org

Se for pensando em ganhar dinheiro imediato, talvez devesse ficar com java, mas se for para aprender uma nova linguagem para usar em seus projetos pessoais e tambem para fazer uma boa aposta para o um futuro nao muito distante, com certeza eu indico scala.

N

Muito legal as opiniões.

Também estou na dúvida de estudar Groovy ou Scala.

Dei uma pesquisada sobre Groovy e vi algumas coisas ruins sobre a performance dele. A performance é realmente notável? Vale a pena estudar Groovy?

J

Em termos de mercado de trabalho eu não sei. Mas se ela é uma ferramenta útil vale a pena.

A

cara… como eu te falei, eu to na estudando ainda… to na fase da Sintaxe da linguagem pra poder insvestir no GRails… Ouvi falar algo também sobre a performance, porém a idéia da linguagem Groovy é facilitar o Desenvolvimento WEB em Java, Sistemas não críticos…

Tenho um conhecido que está usando Groovy já misturado em seu código Java… Eu já quero, depois partir pro GRails…

Li em algum lugar que o criador do Groovy afirmou que se tivesse conhecido Scala antes, não teria criado o Groovy… Não te dou certeza, mas Scala tá em um caminho muito bom… Porém acho o Groovy mais comercial… Isso é só minha opnião, não posso te passar nada com certeza absoluta…

Abs []

F

É uma tecnologia que nao vai te agregar profissionalmente em nada, mas termos de puro e simples conhecimento é interessante.

E

Será? Se fosse assim então todo mundo ainda estaria na era do Cobol (se bem que o Java é o Cobol da década de '00 :slight_smile: )

A

Não acho que são inúteis profissionalmente.

Acredito que um grande diferencial destas linguagens (groovy, scala ou clojure) é justamente rodar na jvm.

Com isso, em empresas menos burocráticas, imagino que ocorrerá uma tendência para se mesclar fontes java com outras linguagens.

Especialmente quando estas linguagens se tornarem mais conhecidas e suas vantagens mais divulgadas.

E

Será? Se fosse assim então todo mundo ainda estaria na era do Cobol (se bem que o Java é o Cobol da década de '00 :slight_smile: )

E Scala é a pia da cozinha. Tem tudo dentro e fede.

J

Não acho que são inúteis profissionalmente.

Acredito que um grande diferencial destas linguagens (groovy, scala ou clojure) é justamente rodar na jvm.

Com isso, em empresas menos burocráticas, imagino que ocorrerá uma tendência para se mesclar fontes java com outras linguagens.

Especialmente quando estas linguagens se tornarem mais conhecidas e suas vantagens mais divulgadas.

Pode ser. Mas isso é uma coisa relativa, entende? Porque para você scala pode ser agradável, já para outro não. É tão relativo que no final o bytecode é o mesmo. Então qual a vantagem de se usar outra linguagem? Simplesmente comodidade, ou seja, depende da pessoa que usa.

do mesmo jeito que c++ é cômodo para mim.

O diferencial deve estar em realizar tarefas com mais produtividade. Digitar menos para realizar determinada coisa.

E

Um exemplo.
Em Scala é relativamente simples escrever certas coisas que precisariam de muitas linhas em Java, como filtrar coleções.
O problema é que é normalmente necessário escrever uma série de comentários para que um programador que venha a ler seu programa e não esteja muito acostumado com o paradigma funcional possa entender o que está ocorrendo (ou você mesmo, depois de um determinado tempo).
O que o programador Java resolve com um monte de fors e ifs, um programador Scala resolve com 2 ou 3 linhas, mas aí ele precisa escrever um comentário grande indicando o que ele está realmente querendo fazer.

A

Mas aí é que está, o custo de se misturar java com scala por exemplo, não é tão alto. Você gera o mesmo .class
Então, teoricamente, cada um poderia programar na linguagem que acha mais agradável.

Claro que se for uma coisa solta assim geraria bagunça.
Mas para módulos específicos, onde uma linguagem apresenta vantagens, você poderia usá-la de forma transparente para o resto do projeto.

Acredito que a vantagem seja as features de cada linguagem.

Scala, por exemplo, tem mecanismos para lidar melhor com concorrência, sobrecarga de operadores.
Clojure tem o mecanismo de transação para alteração de estado (similar a um banco de dados).

Você pode fazer as mesmas coisa em Java, mas com mais trabalho, mais código e estando mais propenso a erro.

juliocbq:
Pode ser. Mas isso é uma coisa relativa, entende? Porque para você scala pode ser agradável, já para outro não. É tão relativo que no final o bytecode é o mesmo. Então qual a vantagem de se usar outra linguagem? Simplesmente comodidade, ou seja, depende da pessoa que usa.

do mesmo jeito que c++ é cômodo para mim.

O diferencial deve estar em realizar tarefas com mais produtividade. Digitar menos para realizar determinada coisa.

Ah sim, cada um tem uma linguagem em que se é mais fluente.
Mas veja a diferença entre C++ e Scala para JVM. A integração é mais simples. Como você disse, o bytecode do Scala é o mesmo.
Essa facilidade de integração que acredito seja um diferencial que permitirá o uso comercial dessas linguagens.

Boa parte dessas linguagens para VM dizem precisar de menos código para realizar a mesma coisa.

Pra mim produtividade tem mais a ver com seu grau de proficiência na linguagem do que a linguagem em si.
Mas com certeza estas novas linguagens apresentam features que enchem os olhos e seria ótimo poder desfrutar disso.

R

dev.rafael:
“O bom programador deve aprender uma nova linguagem de programação todo ano.”
Esse eu aprendi scala. Particular eu amo essa linguagem. Usando scala vc chega a uma redução de aproximadamento 30% no número de linhas do seu código em relação ao código Java quando vc está usando um framework Java, ou seja, um framework q ñ tira proveito das vantagens da sintaxe e da API da scala. Quando vc tem uma API/framework scala essa redução chega a ~60% no número de linhas. Desde q aprendi scala, quando classe Java q escrevo me deixa mais triste :cry: pois ñ consigo deixar de imaginar como seria mais fácil faze-lo em scala.

O futuro ainda é incerto mas eu apostaria q em scala. Ao menos o pessoal do Twitter apostou :smiley: !

++

Só que no meu caso aprendi Lua. A linguagem tem poucos tipos (8 no total) sendo que 99% vc trabalha só com 4 (Função, Tabela, String e Number). O livro Programming in Lua é uma viagem pelo mundo da programação, muito bem escrito e aborda vários conceitos que eu sempre tive curiosida, como por exemplo, mostrar como se implementa herança de forma simples e concisa. Além de tudo foi criada por brazucas.

Realmente depois de ver uma linguagem mais dinâmica da uma tristeza programar em Java, mas dizer isso no GUJ pode gerar flame :twisted:

Atualmente estou aprendendo Python por causa do Google App Engine. Fiz uma app nele em Java utilizando a tecnologia, mas usando o Python fica bem melhor.

Quanto ao Scala já ouvi um amigo falar muito bem. Ele curte Lisp e disse que é bem parecido.

Também que o mercado busca muita gente que manja de .Net ou Java, e atualmente tenho visto procura por Adobe Flex.

Mas se vc pensar “fora da caixa” e pensa em montar seus próprios softwares, tanto faz a tecnologia que vc escolher.

E

Minha opinião: Fuja de qualquer tecnologia obscura que exija que você descreva sua intenção sob a forma de comentários, exceto se for a ÚNICA maneira de resolver o problema.

R

Acho que isso depende mais do programador que da tecnologia…

F

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.

R

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.

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

F

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

Não é com voce :wink:

N

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.

F

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.

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.

J

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.

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.

D

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.)

E

Acho que isso depende mais do programador que da tecnologia…

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…

N

Acho que isso depende mais do programador que da tecnologia…

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…

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

M

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.)

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.

E

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).

M

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:

F

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.

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.

J

fredferrao:
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.

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.

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.

D

mochuara:
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.)

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.

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.

F

mochuara:
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.)

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.

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.

A

juliocbq:

Agora entre java e c++ posso te dizer que não hà praticamente nenhuma diferença.

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ê.

J

AbelBueno:
juliocbq:

Agora entre java e c++ posso te dizer que não hà praticamente nenhuma diferença.

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ê.

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.

M

- 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

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.

F

mochuara:
- 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

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.

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:

E

throw new GalhoDentroException();

M

fredferrao:

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:

O que Scala oferece como recurso de linguagem (ou até mesmo de framework) para lidar com estado mutável (como monads em Haskell e refs em Clojure)?

Nada.

Portanto é tão funcional, quanto C pode ser OO.

F

mochuara:
fredferrao:

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:

O que Scala oferece como recurso de linguagem (ou até mesmo de framework) para lidar com estado mutável (como monads em Haskell e refs em Clojure)?

Nada.

Portanto é tão funcional, quanto C pode ser OO.

Acabei de ler uma discussão bem grande sobre Scala ser funcional ou não, no fim das contas, nenhuma das linguagens, nem mesmo as que voce citou, são 100% PURAS, haskell é a que mais chega perto segundo os caras, Clojure tem side effects com mutable references e uncontrolled I/O.
É uma boa leitura sobre o assunto, mas leiam os comentarios, é la que esta a discussao do assunto: http://www.codecommit.com/blog/scala/is-scala-not-functional-enough

Então eu digo, scala pode não ser pura, mas SUPORTA programação funcional, tem mecanisnos para isto e cabe entao ao programador fazer uso.

O que voce quer dizer com “lidar com estado mutável”? Eu nao conheco haskell ou Clojure para pegar a referencia.

Mas Scala tem todo um pacote de collections imutaveis scala.collection.immutable, todas as data structures dentro deste pacote são imutaveis, scala te encoraja a usar sempre val ao inves de var, uma vez declarado uma variavel com val ela se torna imutavel, Scala tem Higher-order funcions, e tudo mais ja citado, então cabe ao developer programar funcionalmente ou não.

Por fim, o mais correto então seria dizer que Scala não é pure-functional, mas sim suporta programação funcional, assim como as outras tambem de um jeito ou outro nao são 100% puras, tambem poderiamos dizer que haskell é mais funcional que Scala, mas isto tambem nao quer dizer que Scala nao tenha sua parte funcional.

O cara do post para dizer que scala não é funcional leva em conta que uma linguagem para ser chamada de funcional não pode ter qualquer tipo de mutabilidade ou side effects, porem nos comentarios viu-se que todas as outras ditas funcionais tambem tem sua parte de mutabilidade e side effects, inclusive Clojure, Erlang, etc, então tambem seriam impuras.

E

Martin Odersky vai adicionar STM a Scala… mais um treco na pia da cozinha!! :lol:

A

Nykolas Lima:
Um colega do trabalho fala muito bem de Scala. Tentei dar uma procurada sobre mercado para Scala, e não encontrei muita coisa.

Vocês acham que vale a pena investir no estudo desta linguagem?
Indicam algum fórum, blog, referências?

Abraços

Oi Nykolas Lima,

Não sei nada sobre essa linguagem,a não ser o que acabei de ler nesse tópico,mas acho que sempre vale a pena estudar uma nova linguagem… :wink:

J

Anime:
Nykolas Lima:
Um colega do trabalho fala muito bem de Scala. Tentei dar uma procurada sobre mercado para Scala, e não encontrei muita coisa.

Vocês acham que vale a pena investir no estudo desta linguagem?
Indicam algum fórum, blog, referências?

Abraços

Oi Nykolas Lima,

Não sei nada sobre essa linguagem,a não ser o que acabei de ler nesse tópico,mas acho que sempre vale a pena estudar uma nova linguagem… :wink:

Depende Anime. Temos que estudar linguagens que focam diretamente a nossa área. Analista de sistemas estudando fortran pode não ter um aproveitamento profissional tão bom quanto para um matemático. A não ser que seja para adquirir conhecimento mesmo.

Mas acho que você tem razão sim. Agregar conhecimento sempre é uma ótima idéia.

M

Tem um framework para STM em Scala mas como a linguagem não é funcional e estruturas de dados não são persistentes não é tão eficiente como em Clojure. Estrutura de dados em Scala são apenas imutáveis.

E

Em Scala há 2 tipos de estruturas de dados: as que são mutáveis (no pacote scala.collection.mutable) e as que não o são (em scala.collection.immutable). Como o compilador do Scala é um pouco mais esperto que o do Java, é suficiente escrever:

immutable.Vector

ou

mutable.Vector

em vez de usar

scala.collection.immutable.Vector

http://www.scala-lang.org/sites/default/files/sids/admin/Tue,%202010-07-20,%2010:39/collections.pdf

E de fato, o esquema de mônadas do Haskell é meio difícil de usar para quem está acostumado com Java. O esquema do Scala é muito mais simples nesse ponto.

F

Monads

Scala Monads tutorials

Bom como podem ver Scala tambem tem monads. Mais algum pré-requisito para podermos dizer que Scala suporta Programação Funcional?

M

entanglement:
Em Scala há 2 tipos de estruturas de dados: as que são mutáveis (no pacote scala.collection.mutable) e as que não o são (em scala.collection.immutable). Como o compilador do Scala é um pouco mais esperto que o do Java, é suficiente escrever:

immutable.Vector

ou

mutable.Vector

em vez de usar

scala.collection.immutable.Vector

Estruturas de dados mutáveis não são usadas com STM.

M

fredferrao:

Bom como podem ver Scala tambem tem monads. Mais algum pré-requisito para podermos dizer que Scala suporta Programação Funcional?

Bom, parece que vc mesmo chegou a conclusão que Scala não é uma linguagem funcional, apesar de suportar esse estilo de programação.

E

Tem um framework para STM em Scala mas como a linguagem não é funcional e estruturas de dados não são persistentes não é tão eficiente como em Clojure. Estrutura de dados em Scala são apenas imutáveis.

“Scala não é funcional” é uma conclusão e não uma premissa. Acho que é um dos pontos centrais da discussão.

Por favor, explique os seguintes pontos:
Por que as estruturas de dados imutáveis de Scala não seriam também persistentes?
Por que uma estrutura de dados não persistente seria menos “eficiente” do que uma persistente?
Qual o contexto em torno da palavra “eficiente” (eficiente em memória, em CPU…)?

M

Sr Ordesky vai adicionar estrutura de dados persistentes a Scala tb.

Em algum ponto a diferença será apenas na motivação, em Clojure ela resolve um problema, em Scala ela é adicionado como mais uma feature.

M

esmiralha:

“Scala não é funcional” é uma conclusão e não uma premissa. Acho que é um dos pontos centrais da discussão.

O que eu quis dizer é que Scala não é funcional porque suas estruturas de dados não são persistentes.

Estrutura de dados em Clojure além de imutáveis são persistentes, isto significa que quando “modificadas”, as versões anteriores são preservadas e aqueles nós não afetados pela “atualização” são compartilhados com a nova estrutura, ao invés de serem copiadas.

E

Scala possui uma implementação “nativa” de vetor e mapa persistentes.

M

Já tem? hm… legal. Qual o pacote?

F

Já tem? hm… legal. Qual o pacote?

Criado 3 de novembro de 2010
Ultima resposta 8 de nov. de 2010
Respostas 55
Participantes 13