Desenvolvedores Scala, Ruby, a jugular está preparada

[quote=Luca]…Gosto também bastante de Scala que permite fazer as mesmas coisas (ou um pouco mais) que o Java faz porém escrevendo muito menos linhas. Não é só a redução de linhas que me seduz. É que o código fica mais condensado nas questões relativas ao problema a resolver.
[/quote]

Pois é, também considero isso uma vantagem. Mas uma desvantagem não seria que você fica com muita responsabilidade em menos linhas? Por isso citei o código do números aleatórios no Falando em Java. Aquela linha fazia umas cinco ou seis coisas diferentes. Acho isso confuso.

Posso estar errado, mas não é justamente isso que a Da Vinci Virtual Machine vai resolver?

[quote=Luiz Aguiar]…
Acho que se sair em alguns meses um Rails-like forte e eficiente como o próprio Rails é para Rubu, só que apra Scala, é bem possível que a linguagem ganhe muitos adeptos, muita gente preferiria algo mais java-like(Scala) do que script-like (Ruby) na hora de ter alternativa ao Java.
[/quote]

A semelhança com Java é realmente um ótimo atrativo. Segue um trecho de hello world retirado da wikipedia:

object HelloWorld extends Application { println("Hello, world!") }

Abraços

[quote=elomarns][quote=Luiz Aguiar]Me corrijam se estiver errado, mas a subtituicão do core do Twitter esta sendo feito para Scala né? tanto que um dos “donos” lá esta até vendendo um livro sobre Scala rs… o front-end vai continuar com Rails, por enquanto pelo menos.

Acho que se sair em alguns meses um Rails-like forte e eficiente como o próprio Rails é para Rubu, só que apra Scala, é bem possível que a linguagem ganhe muitos adeptos, muita gente preferiria algo mais java-like(Scala) do que script-like (Ruby) na hora de ter alternativa ao Java.

@Luca que bom vc por aqui de novo amigo :)[/quote]
Se não me engano, não foi todo o código Ruby no backend que foi substituído pelo código equivalente em Scala. Foi “só” o Starling, que é o message queue escrito em Ruby por eles, que foi substituído pelo Kestrel, um message queue escrito em Scala e também desenvolvido pela equipe do Twitter.

Muitos desenvolvedores da comunidade Ruby/Rails reclamaran dessa mudança, acusando os desenvolvedores do Twitter de serem ruins, principalmente por emularem um sistema de tipagem estática no Ruby através do uso compulsivo do método kind_of?, ou por não considerarem outras hipóteses, como utilizar o RabbitMQ, que é um message queue escrito em Ruby, e, aparentemente, bem melhor que o Starling, que foi o desenvolvido por eles.

P.S.: O Alex Payne, autor do livro sobre Scala, não chega a ser um dos donos do Twitter, é “só” um dos principais desenvolvedores.[/quote]
Acho que o Starling foi o principal motivo devido a ruindade imensa que conseguiram fazer, mas pelo que lembro dos blogs/sites ai no começo do ano se não me engano, quando começou pipocar esse assunto, com a saída do Starling, outras coisas que eram em Ruby foram consumidas pela nova implementação que fizeram em Scala.

[]s

[quote=Luiz Aguiar]Acho que o Starling foi o principal motivo devido a ruindade imensa que conseguiram fazer, mas pelo que lembro dos blogs/sites ai no começo do ano se não me engano, quando começou pipocar esse assunto, com a saída do Starling, outras coisas que eram em Ruby foram consumidas pela nova implementação que fizeram em Scala.

[]s[/quote]
Eu também acho que migraram algumas outras coisas pra Scala, lembro até de ter lido a respeito, mas como não guardei a fonte, não tenho certeza se isso ocorreu mesmo, mas é bem provável que sim.

[quote=celso.martins][quote=Luca]…Gosto também bastante de Scala que permite fazer as mesmas coisas (ou um pouco mais) que o Java faz porém escrevendo muito menos linhas. Não é só a redução de linhas que me seduz. É que o código fica mais condensado nas questões relativas ao problema a resolver.
[/quote]

Pois é, também considero isso uma vantagem. Mas uma desvantagem não seria que você fica com muita responsabilidade em menos linhas? Por isso citei o código do números aleatórios no Falando em Java. Aquela linha fazia umas cinco ou seis coisas diferentes. Acho isso confuso.
[/quote]

Eu também acho que código legível é melhor do que codigo condensado em 1 linha. Mas acho que o Luca quis dizer isso mesmo, escrever apenas o código necessário para descrever o problema (ainda que eu ache que programa feito em Scala ou Ruby não é assim tão idiomático.)

Olá

Certo. Quer um exemplo?

Java

[code]
class MyClass {
private int index;
private String name;
public MyClass(int index, String name) {
this.index = index;
this.name = name;
}

}[/code]

Scala (com a ressalva de que as 2 variáveis de instância são finais neste exemplo)

class MyClass(index: Int, name: String)

Nada de chaves, ponto e vírgula, declaração de variável em2 linhas e nada de construtor. O Scala já faz tudo isto por nós.

Poderia dar um monte de exemplos. Seria até covardia escolher uma classe em Java com um monte de getters e setters. E isto sem falar nas características funcionais da linguagem que quando bem usadas são bem poderosas. Só não podemos esquecer que tudo isto depois vai para a JVM convertido em bytecode e usando os tipos do Java.

[]s
Luca

Ae laguiar,

Não sei se vc já tinha lido esse post do akita http://akitaonrails.com/2009/04/07/a-controversia-do-twitter-e-scala

Pois é, também considero isso uma vantagem. Mas uma desvantagem não seria que você fica com muita responsabilidade em menos linhas? Por isso citei o código do números aleatórios no Falando em Java. Aquela linha fazia umas cinco ou seis coisas diferentes. Acho isso confuso.
[/quote]

Eu também acho que código legível é melhor do que codigo condensado em 1 linha. Mas acho que o Luca quis dizer isso mesmo, escrever apenas o código necessário para descrever o problema (ainda que eu ache que programa feito em Scala ou Ruby não é assim tão idiomático.)[/quote]

Jogar Perl Golf em sistema em produção nunca foi bom.

Linguagens como o Ruby tem o que eu chamo de um alto grau de expressividade. Expressividade é a medida do quanto uma linguagem pode fazer o mesmo que outras linguagens fazem, escrevendo menos código e ainda se mantendo bastante legível.

Código pequeno é importante por que nós entendemos melhor coisas pequenas que coisas grandes, o que em programação se traduz em escrever códigos simples em favor de escrever códigos complexos. Por isso que desde as primeiras linguagens temos o conceito de modularidade, escrevemos funções, métodos, subprogramas em geral para resolver parte dos problemas sem misturar com as outras partes. A modularidade então evoluiu para encapsulamento, responsabilidade, e termos relacionados como a delegação. Daí então criamos os design patterns para catalogar e reaplicar as responsabilidades, a modularidade do código, a ajudar a manter o código simples e pequeno.

Código expressivo e pequeno também é rápido de codificar, o upload da mente para o teclado é rápido, e o download da tela para a mente também é rápido.

Bacana o post mencionando a jugular :slight_smile:

a maior preocupação de pessoas que interagem com as entranhas do computador é reduzir o gap entre o que você tenta expressar e o que você expressa de fato para o computador processar o que você precisa.

com viabilidade de hardware cada vez mais transparante, a tendência clara é termos linguagens de programação cada vez mais empáticas com as nossas necessidades, moldadas de maneira mais natural ao que precisamos. É o gap entre uma linguagem de programação interpretada por computador e uma linguagem natural interpretada, são computadores mais ricos em interpretar simbolos e signos, mais abstraídos de características físicas de hardware, mais proximos de serem resolvedores de problemas responsivamente, aceitar que existe uma pilha de lições aprendidas que mostram os pontos de overhead na interação programador/computador, nos levando para um patamar mais convencionado, natural e humano de interagir com o computador de um modo mais flexível.

T+

[quote=Luca]Olá

Certo. Quer um exemplo?

Java

[code]
class MyClass {
private int index;
private String name;
public MyClass(int index, String name) {
this.index = index;
this.name = name;
}

}[/code]

Scala (com a ressalva de que as 2 variáveis de instância são finais neste exemplo)

class MyClass(index: Int, name: String)

Nada de chaves, ponto e vírgula, declaração de variável em2 linhas e nada de construtor. O Scala já faz tudo isto por nós.

Poderia dar um monte de exemplos. Seria até covardia escolher uma classe em Java com um monte de getters e setters. E isto sem falar nas características funcionais da linguagem que quando bem usadas são bem poderosas. Só não podemos esquecer que tudo isto depois vai para a JVM convertido em bytecode e usando os tipos do Java.

[]s
Luca

[/quote]

E como fica o encapsulamento em Scala? Estes atributos sao privados ou publicos? Ou nao há encapsulamento em Scala.
Tava dando uma pesquisada e achei esta apresendação: Uma introdução à linguagem Scala: mais uma linguagem JVM ou o futuro de JAVA?

La o cara sita assim:

Mas e se eu nao quiser que a classe faça tudo pra mim? e se eu nao quiser que ela tenha tal contrutor que o "Scala faz por voce", tem como?

E outra esse negocio de tudo em uma linha é muito subjetivo de ser melhor ou nao, é como ja citaram acima, onde vai parar a legibilidade do codigo, imagina uma classe com 20, 30 ou 40 atritutos, ja imaginou que nojeira que nao fica, parecendo aquelas procedure/function do Delphi que aceita 3 milhoes de parametros.

Eu poderia fazer os atributos em uma linha no java.

public class MyClass{
    private int id; String nome;
}

Voce diz nada de chaves, nada de ponto e virgula, porem voce nao tem chave mas tem parentese, nao tem ponto e virgula mas tem virgula eae?? Fica apenas a questao do contrutor que eu nao precisaria fazer, se é que eu realmente quero tal contrutor.

E por fim eu concordo com o post do Celso Martins, esse negocio de replace e bala de prata como ele diz.
Fico doido quando chega um e fala: "Java morreu negocio agora é Ruby, e parece que era :lol: porque agora java morreu e o negocio não é Ruby, é Scala. Pra mim por enquanto ta igual Ruby só Fogo de Palha.
E antes que venha algum falar, sim sempre é bom aprender novas linguagens pra nao ficar bitolado, ter outras maneiras de resolver a mesma coisa e tals, eu mesmo tava querendo comprar um livro de Ruby, mas pelo visto é melhor eu comprar um de Scala que ta na moda agora(alguem indica um?).
Resumindo, eu nao vou vender minha cama por causa disso, nao pelos proximos hummm 5~10 :? anos?? Se nao eu ja tinha vendido quando a dois anos atraz um amigo chegou dos EUA e disse, java morreu negocio agora é Ruby.

Olá

Fica igual ou melhor do que Java. Scala tem praticamanente tudo que o Java tem (não tem Static por exemplo e algumas sintaxes diferem como os índices dos arrays também como exemplo) e mais algumas outras coisas bem interessantes.

Li rápido. Em Scala tudo é objeto, inclusive inteiros. Mas na hora em que vai para a JVM, se possível, objetos são convertidos para os tipos primitivos para não perder desempenho. E Scala tem coisas que o Java não tem como por exemplo Pattern Matching.

Ora, é só você definir do jeito que quer. Aliás, há casos em que os livros de Scala recomendam fortemente o uso das chaves e também não há problema se você quiser ponto e vírgula ou fizer copy & paste de código Java com ponto e vírgula.

Isto é código ruim em qualquer linguagem. Scala desestimula isto mas tanto quanto Java e Ruby, não proíbe. Como sempre, ser mau programador é uma opção livre do programador.

Não é só isto. As classes ficam menos poluídas sem getters e setters. Mas repito, quem quiser pode usar.

Não é bala de prata… muito pelo contrário… a idéia é usar a coisa certa no momento certo. Fazer como o Jean-Francois Arcand mostra hoje no Java.net que rapidamente fez uma aplicação em Scala usando Comet

Quanto a questão da cama posso dizer que sei que muita gente aqui ganha a vida fazendo CRUD usando Java. Só digo uma coisinha: se esta turma usasse Ruby ao invés de Java para fazer CRUD, o trabalho exigiria menos horas e a turma ganharia menos. Um dia os patrões perceberão isto.

[]s
Luca

[quote=Luca]Olá


[]s
Luca[/quote]

Legal, se tem como fazer tudo e a opção de usar ou nao como no java.

Agora como citei, ja temos ae o Phyton, Ruby, agora o Scala é o fogo de palha da vez, digo fogo de palha porque quando acende parece que vai ser o maior fogo do mundo, mas logo apaga, e ano que vem o que vai ser? Porque ate agora nao vi essas linguagens se firmarem de vez. RoR ja esta ae a um bom tempo, tem la sua comunidade tem os que fazem seus projetinho com ele, mas a nivel de mercado ta muito longe ainda. Essas lingagens por enquanto tao mais como “Mais uma linguagem da VM” do que como um substituto ao java.

[quote=fredferrao]E como fica o encapsulamento em Scala? Estes atributos sao privados ou publicos? Ou nao há encapsulamento em Scala.
Tava dando uma pesquisada e achei esta apresendação: Uma introdução à linguagem Scala: mais uma linguagem JVM ou o futuro de JAVA?

La o cara sita assim:

Mas e se eu nao quiser que a classe faça tudo pra mim? e se eu nao quiser que ela tenha tal contrutor que o "Scala faz por voce", tem como?
[/quote]

O seu conceito de encapsulamento é confuso.

Vamos lá, encapsulamento deve ser visto mais como uma convenção adotada pelos programadores do que uma característica da linguagem. Por que? Porque é muito fácil quebrar as convenções de encapsulamento de uma linguagem OO, inclusive Java!. Um exemplo são os famosos getters e setters criados para todos os atributos privados. Isso quebra o encapsulamento, porque quando acontece uma alteração em uma propriedade privada, ocorre na sequencia a alteração de seu getter e setter.

Scala tem private, protected e public e mais um monte de permissões finas que só ela tem. A diferença é que, se você não colocar o modificador, o default é public. Mas isso deveria ser até irrelevante, porque um programador mané quebra os modificadores facilmente; enquanto que um programador bom mantém o encapsulamento mesmo em linguagens que não a oferecem, como Python.

[quote=fredferrao]E outra esse negocio de tudo em uma linha é muito subjetivo de ser melhor ou nao, é como ja citaram acima, onde vai parar a legibilidade do codigo, imagina uma classe com 20, 30 ou 40 atritutos, ja imaginou que nojeira que nao fica, parecendo aquelas procedure/function do Delphi que aceita 3 milhoes de parametros.

Eu poderia fazer os atributos em uma linha no java.

public class MyClass{
    private int id; String nome;
}

Voce diz nada de chaves, nada de ponto e virgula, porem voce nao tem chave mas tem parentese, nao tem ponto e virgula mas tem virgula eae?? Fica apenas a questao do contrutor que eu nao precisaria fazer, se é que eu realmente quero tal contrutor.

[/quote]

É possível sim ter construtores vazios e ter propriedades que não inicializam na construção. Mas qual a vantagem disso numa linguagem que é também funcional e que suporta concorrência via atores? Porque, nesses paradigmas, objetos imutáveis são essenciais e toda a inicialização precisa ser feita via construtor.

Não existe encapsulamento quando uma classe tem 20 ou 40 propriedades. Uma classe bem coesa tem no máximo, sei lá, uns sete atributos, ou nove estourando. 20 ou 40 atributos é “cheiro” de design ruim, pra qualquer linguagem utilizada. Então, não vejo problema ter as propriedades todas numa linha só. Se ficar muito comprida, faça a identação, ué.

Uma coisa que não foi falada é que, quando é colocado os atributos no construtor, é gerado, automaticamente, o “setter” e o “getter” pra ele. Por isso, o seu código Java em uma linha só não faz o que o código Scala faz.

[quote=fredferrao]E por fim eu concordo com o post do Celso Martins, esse negocio de replace e bala de prata como ele diz.
Fico doido quando chega um e fala: "Java morreu negocio agora é Ruby, e parece que era :lol: porque agora java morreu e o negocio não é Ruby, é Scala. Pra mim por enquanto ta igual Ruby só Fogo de Palha.
E antes que venha algum falar, sim sempre é bom aprender novas linguagens pra nao ficar bitolado, ter outras maneiras de resolver a mesma coisa e tals, eu mesmo tava querendo comprar um livro de Ruby, mas pelo visto é melhor eu comprar um de Scala que ta na moda agora(alguem indica um?).
Resumindo, eu nao vou vender minha cama por causa disso, nao pelos proximos hummm 5~10 :? anos?? Se nao eu ja tinha vendido quando a dois anos atraz um amigo chegou dos EUA e disse, java morreu negocio agora é Ruby.
[/quote]

Aí cada um faz o que achar melhor. Mas é por sua conta e risco.

[quote=Kenobi]
Também acredito que no futuro, a tendência é Scala virar uma forte candidata à projetos Enterprise, como construção de frameworks, containers e por aí vai. Para a implementação de negócio, ficaria com algo mais leve como Ruby, que é uma delícia de programar e vicia !! :slight_smile: [/quote]

humm, pelo q eu estava lendo do scala, a idéia é justamente ter uma linguagem mais escalável. Segundo o autor, quando vc muda de uma linguagem pra outra vc sempre acaba perdendo muita informação sobre os tipos. Um exemplo que ele deu é quando um tipo java se torna uma consulta sql e vice versa.
Não tem jeito, sempre que vc tiver linguagens diferentes na conversão de tipos vai perder informação sobre o objeto, e quanto menos isso acontecer melhor.

Prefiro ruby à java, e acho legal pensarmos com muito cuidado sobre todas as novidades meteóricas, pois no final é pior pra gente e injusto o cliente ter que pagar por isso.

Aqui há uma introdução da arquitetura do twitter, explicando o que usam: http://www.infoq.com/news/2009/06/Twitter-Architecture

[quote=fredferrao]

Legal, se tem como fazer tudo e a opção de usar ou nao como no java.

Agora como citei, ja temos ae o Phyton, Ruby, agora o Scala é o fogo de palha da vez, digo fogo de palha porque quando acende parece que vai ser o maior fogo do mundo, mas logo apaga, e ano que vem o que vai ser? Porque ate agora nao vi essas linguagens se firmarem de vez. RoR ja esta ae a um bom tempo, tem la sua comunidade tem os que fazem seus projetinho com ele, mas a nivel de mercado ta muito longe ainda. Essas lingagens por enquanto tao mais como “Mais uma linguagem da VM” do que como um substituto ao java.[/quote]

Olha, sinceramente, não sei se no teu mercado de trabalho é assim, mas aqui em São Paulo (que acredito ser o maior do Brasil) já existe algumas empresas adotando Ruby On Rails. Além do mais, grandes empresas já estão utilizando, houve migrações “insanas” de muitas “blue chips” (papo de investir bitolado rsrsrs) da internet aqui e continuará havendo na minha opinião.

Lembro que quando cheguei em 2006 aqui em SP já tinham alguns projetos, pessoal trocando JSF por Rails e assim por diante. Hoje em dia a coisa tá mais punk, por exemplo, no lugar onde eu trabalho eu entrei como desenvolvedor Java Sr., depois de 4 meses trabalhando resolveram usar só Rails e tem sido assim desde então, já fazem mais de 6 meses que as coisas estão assim e pelo visto só continuará crescendo. Se em 2006 já tinha utilizações, imagina agora.

Não quero tirar o mérito de Java, tanto é que continuo sendo muito entusiasta, mas certas linguagens e frameworks acabam se adaptando melhor a certos cenários e, Java não é bala de prata como muitos aqui no guj continuam pensando, inclusive já fui uma dessas pessoas.

[quote=Leozin][quote=fredferrao]

Legal, se tem como fazer tudo e a opção de usar ou nao como no java.

Agora como citei, ja temos ae o Phyton, Ruby, agora o Scala é o fogo de palha da vez, digo fogo de palha porque quando acende parece que vai ser o maior fogo do mundo, mas logo apaga, e ano que vem o que vai ser? Porque ate agora nao vi essas linguagens se firmarem de vez. RoR ja esta ae a um bom tempo, tem la sua comunidade tem os que fazem seus projetinho com ele, mas a nivel de mercado ta muito longe ainda. Essas lingagens por enquanto tao mais como “Mais uma linguagem da VM” do que como um substituto ao java.[/quote]

Olha, sinceramente, não sei se no teu mercado de trabalho é assim, mas aqui em São Paulo (que acredito ser o maior do Brasil) já existe algumas empresas adotando Ruby On Rails. Além do mais, grandes empresas já estão utilizando, houve migrações “insanas” de muitas “blue chips” (papo de investir bitolado rsrsrs) da internet aqui e continuará havendo na minha opinião.

Lembro que quando cheguei em 2006 aqui em SP já tinham alguns projetos, pessoal trocando JSF por Rails e assim por diante. Hoje em dia a coisa tá mais punk, por exemplo, no lugar onde eu trabalho eu entrei como desenvolvedor Java Sr., depois de 4 meses trabalhando resolveram usar só Rails e tem sido assim desde então, já fazem mais de 6 meses que as coisas estão assim e pelo visto só continuará crescendo. Se em 2006 já tinha utilizações, imagina agora.

Não quero tirar o mérito de Java, tanto é que continuo sendo muito entusiasta, mas certas linguagens e frameworks acabam se adaptando melhor a certos cenários e, Java não é bala de prata como muitos aqui no guj continuam pensando, inclusive já fui uma dessas pessoas.[/quote]
Olha, eu moro em SP tbm e não vejo o mercado de RoR desta maneira. Também gosto de RoR, mas nunca vi sequer uma vaga pra programador e nem ouvi falar de uma grande empresa utilizando o mesmo. Seria legal você postar exemplos de empresas, até pra gente interessada em ter a oportunidade de trabalhar com Ruby poder procurar nos lugares certos.

Pra mim o mercado em SP ainda é bem “atrasado” em relação a tecnologias. A maioria das empresas ainda quer o Java básico de 5~10 anos atrás (Struts, EJB, etc) e o resto está se atualizando (Spring, JSF, etc). RoR ao meu ver ainda não chegou com força.

Olá

Quanto a questão de linguagem bala de prata acho que todos concordam que não existe porque qualquer projetinho bobo usa no mínimo umas 3 ou 4 (Java, HTML, SQL, Javascript, xml, etc.)

Mas vejam somente o slide 13 desta apresentação sobre um projeto da BBC (Feeds Hub) mostrando um monte de linguagens e frameworks: Introducing BBC Feeds Hub (BBC Radiolabs)

Será que uma só pessoa domina tudo isto? É claro que não. Mas alguém tem que ter uma razoável noção para enxergar o sistema como um todo e este alguém não é um programador monoglota.

[]s
Luca

[quote=Juk]Seria legal você postar exemplos de empresas, até pra gente interessada em ter a oportunidade de trabalhar com Ruby poder procurar nos lugares certos.
[/quote]

Em SP que eu conheço a Abril e se não me engano a Toyota.

Com a falta de programadores Ruby no mercado, sabe se essas empresas tendem a contratar desenvolvedores experientes em outras linguagens e treiná-los internamente, ou preferem tentar a sorte pedindo currículos com experiência na linguagem?

Sim é uma convenção, porem a linguagem poderia/deveria te dar uma maneira de forçar essa convenção, pois podem haver programadores bons e manés trabalhando no mesmo lugar/sistema/framework, e acho que a ideia do javabean com getter e setter foi essa, voce esconde o atributo e força o usuario a passar por um “filtro”.

Porem da maneira como a maioria faz hoje, getters e setters vazios, sem codigos, que nao fazem nada alem de setar ou retornar o valor, um pra cada propriedade, voce esta certo, mudou-se a propriedade tem que mudar o getter/setter. Eu penso que se é pra nao ter nenhum codigo dentro deles entao ponto pro Scala, pois nao ha sentido eles existirem, pois é como se eles fossem os proprios atributos.

O que deveria ser mostrado para o usuario é apenas o que ele precisa, por exemplo eu poderia ter uma classe com 10 atributos e apenas 5 getter/setter tratando tudo e abastecendo os 10 atributos, entao neste caso eu poderia sim manter a interface do usuario caso eu necessite alterar/adicionar/remover um atributo. Não para casos extremos é claro.