Novo Projeto - O que usar?

Bom dia pessoal, sei que já responderam milhares de perguntas como essa, mas cá estou eu com a mesma dúvida…

Estou pra começar um projeto de grande porte, que tem uma pegada de rede social no mesmo, e estou com dúvida com qual tecnologia devo utilizar.

Veja o motivo de cada uma:

  • Java (Hibernate, Spring e etc) ou Java (Play! Framework)

    • Motivo:
      Maior mercado de profissionais, grande apoio, excelente documentação e etc (Acho que não preciso listar os motivos do Java, certo?) O problema talvez seja a lentidão…
  • Groovy/Grails

    • Motivo:
      Muito fácil de utilizar, e a partir do momento que vc conhece Java, tem uma curva muito pequena, o grande problema é que não tem um grande mercado profissional apesar de vir crescendo muito, muito produtiva, porém também considero-a um pouco lenta.
  • PHP

    • Motivo:
      EXTREMAMENTE fácil, grande mercado de profissionais, talvez o problema seja que as pessoas iniciam no php, e é difícil achar pessoas que se aprofundam da mesma maneira como acontece no Java, pois as empresas não utilizam muito.
  • Python

    • Motivo:
      Assim como groovy/grails é uma linguagem de script, muito simples de utilizar e bem produtiva

A pergunta vale também para bancos de dados:

Vale a pena utilizar um NoSQL? Exemplo Mongo ou db4o?

Ou vale a pena mais um MySQL ou Postgre?

Já achei diversos comparadores de linguagens, desempenho e etc, mas a dúvida permanece, gostaria de quem teve experiências de projetos grandes, com número grande de requisições a todo momento nas linguagens pudesse me dar seu relato, acredito que talvez valha mais do que números apenas =)

Obrigado!

Usa MySQL com certeza.

Play! Framework 2.0 foca em scala e ficou mais complicado. Procura na net por Play1 x Play2.

Se quer produtividade e curva de aprendizado pequena vai de Mentawai. Garanto que o projeto vai ficar pronto e com qualidade na metade do tempo que levaria com qualquer um desses outros.

Um site feito com o Mentawai em 3 semanas => http://www.flipinion.com

Sobre performance:

Existe sites parrudos em cima do Mentawai em produção, como um sistema completo de reserva de passagens, estilo Orbitz e Expedia.

Um dos muitos feedbacks que recebemos:

http://forum.mentaframework.org/posts/list/15/157.page#9216

http://forum.mentaframework.org/posts/list/45/157.page#58732

Eu levaria mais em conta questões como prazo e complexidade do projeto.

Se o projeto tem prazo apertado, utilizar tecnologias novas, ou que vc e sua equipe não dominam, vc pode ter problemas… melhor ir com o que vc já conhece.

[quote=saoj]Usa MySQL com certeza.

Play! Framework 2.0 foca em scala e ficou mais complicado. Procura na net por Play1 x Play2.

Se quer produtividade e curva de aprendizado pequena vai de Mentawai. Garanto que o projeto vai ficar pronto e com qualidade na metade do tempo que levaria com qualquer um desses outros.

Um site feito com o Mentawai em 3 semanas => http://www.flipinion.com

Sobre performance:

Existe sites parrudos em cima do Mentawai em produção, como um sistema completo de reserva de passagens, estilo Orbitz e Expedia.

Um dos muitos feedbacks que recebemos:

http://forum.mentaframework.org/posts/list/15/157.page#9216

http://forum.mentaframework.org/posts/list/45/157.page#58732

[/quote]

Bem interessante, mas e a curva de aprendizado, a comunidade? Qual a idade do framework? Me interessei…

No momento prazo não é problema, e também por enquanto só sou eu de desenvolvedor que vou startar o projeto, e acredito que depois de ter experimentado tantas linguagens, bancos, a curva de aprendizado pra qualquer coisa não está grande mais, por isso quero coletar experiências das pessoas para ver o que recomendam e o que não recomendam…

O que mais me preocupo é desempenho do software e velocidade de desenvolvimento…

Curva de aprendizado baixíssima. Simplicidade é o lema do framework. Dá uma ollhada nos diversos feedbacks sobre isso aqui => http://forum.mentaframework.org/posts/list/157.page

O framework nasceu em 2005…

A comunidade é grande, com várias perguntas no nosso fórum… Tem a vantagem de possuir a documentação recentemente atualizada e toda em português… E suporte em português da equipe do framework…

Se o projeto é pessoal, eu escolheria o que conheço melhor e/ou o que me dá mais prazer de programar. Em relação à bd eu uso postgres, mas não por achar o melhor, mas simplesmente porque comecei a partir dele na faculdade e tem me atendido até hoje.

Quanto a NoSQL sei que o Redis tem muitos bons usos como sistema de cache ou processamento de mensagens, no Rails tem o resque que faz bom uso, mas nunca usei… tenho estudado o MongoDB para um trabalho de faculdade e está me deixando bem satisfeito.

Já fiz um trabalho de Java usando db4o também… mas não o escolheria para um projeto sério, simplesmente acho que as vantagens dele não valem tanto assim, em comparação a um SQL.

Baseado só nas tecnologias que você citou, e sem saber o que seria o tal projeto, eu provavelmente iria de Python/Django e PostgreSQL… dá pra começar bem e, só depois, quando perceber demanda, vou ajustando o código de acordo com a necessidade.

Aproveitando o tópico, vou engatar outro assunto relacionado: faz realmente sentido pensar em performance pra um software que ainda nem começou a ser projetado? Quero dizer, não dá pra saber com clareza a carga que o sistema terá, então não seria um tipo de desperdício?

[quote=lsmagalhaes]Se o projeto é pessoal, eu escolheria o que conheço melhor e/ou o que me dá mais prazer de programar. Em relação à bd eu uso postgres, mas não por achar o melhor, mas simplesmente porque comecei a partir dele na faculdade e tem me atendido até hoje.

Quanto a NoSQL sei que o Redis tem muitos bons usos como sistema de cache ou processamento de mensagens, no Rails tem o resque que faz bom uso, mas nunca usei… tenho estudado o MongoDB para um trabalho de faculdade e está me deixando bem satisfeito.

Já fiz um trabalho de Java usando db4o também… mas não o escolheria para um projeto sério, simplesmente acho que as vantagens dele não valem tanto assim, em comparação a um SQL.

Baseado só nas tecnologias que você citou, e sem saber o que seria o tal projeto, eu provavelmente iria de Python/Django e PostgreSQL… dá pra começar bem e, só depois, quando perceber demanda, vou ajustando o código de acordo com a necessidade.

Aproveitando o tópico, vou engatar outro assunto relacionado: faz realmente sentido pensar em performance pra um software que ainda nem começou a ser projetado? Quero dizer, não dá pra saber com clareza a carga que o sistema terá, então não seria um tipo de desperdício?[/quote]

Então cara, eu me dou bem igualmente entre Java, Php e Groovy/Grails, sou pleno em todas, então minha dúvida a princípio seria entre essas, porém preferi estender para as que eu já tive uma experiência, pois chega num ponto que fica fácil aprender novas tecnologias.

Então, eu imagino que quando vamos fazer um projeto temos que analisar para que ele foi feito, e no caso esse projeto está relacionado com redes sociais, o que geralmente trás muito tráfego de dados, gravação de arquivos e acessos, então se for um sistema lento, ele já perde o sentido de existir, afinal, hoje as coisas têm que ser cada vez mais rápidas, não?

Veja bem, quando vamos fazer um projeto, temos que pensar nos requisitos dele, e há sistemas que se não tiver um bom desempenho não tem problema, mas outros dependendo do público-alvo é muito crítico um desempenho ruim.

Entende o motivo da minha preocupação?

Agora, quanto ao Python, vc já desenvolveu com ele? O Django é um framework também, certo? Eu conheço pouco de Python, fiz um curso uma vez porém nada avançado…

Entendo sua colocação, não sei como é o seu projeto, mas por aqui (faço parte de uma empresa júnior), andamos praticando para não pensar em todos os requisitos do projeto de início, especialmente escalabilidade. É bastante complicado perceber o quanto devemos otimizar algo, às vezes vamos pagar caro para manter uma aplicação que nem exige tanto assim. O exercício que fazemos é o inverso: otimizamos quando é preciso otimizar, é este o pensamento ágil que procuramos.

Voltando pro seu caso, há uma boa porção de artigos na web não recomendando o que você sugere, que é otimizar por antecipação. Concordo contigo que a aplicação que você sugere exige boa performance, mas não vejo porque não fazer uma boa primeira versão usando um banco de dados e um bom cache… se precisar de mais, você otimiza. Se desejar, posso linkar alguns desses artigos pra você dar uma lida… só preciso encontrá-los de novo.

[quote=Mitidiero]
Agora, quanto ao Python, vc já desenvolveu com ele? O Django é um framework também, certo? Eu conheço pouco de Python, fiz um curso uma vez porém nada avançado…[/quote]

Já desenvolvi algo em Django, sim, alguns sites com necessidade de trabalhar conteúdo dinâmico. Hoje estudo Python mais para desktop, mas para algo mais no estilo startup sem dúvida começaria com o Django ou mesmo o Rails. Não que eu esteja recomendando alguma dessas tecnologias pra você, são apenas as que me sinto mais à vontade de programar :wink:

[quote=lsmagalhaes][quote=Mitidiero]
Então, eu imagino que quando vamos fazer um projeto temos que analisar para que ele foi feito, e no caso esse projeto está relacionado com redes sociais, o que geralmente trás muito tráfego de dados, gravação de arquivos e acessos, então se for um sistema lento, ele já perde o sentido de existir, afinal, hoje as coisas têm que ser cada vez mais rápidas, não?

Veja bem, quando vamos fazer um projeto, temos que pensar nos requisitos dele, e há sistemas que se não tiver um bom desempenho não tem problema, mas outros dependendo do público-alvo é muito crítico um desempenho ruim.

Entende o motivo da minha preocupação?
[/quote]

Entendo sua colocação, não sei como é o seu projeto, mas por aqui (faço parte de uma empresa júnior), andamos praticando para não pensar em todos os requisitos do projeto de início, especialmente escalabilidade. É bastante complicado perceber o quanto devemos otimizar algo, às vezes vamos pagar caro para manter uma aplicação que nem exige tanto assim. O exercício que fazemos é o inverso: otimizamos quando é preciso otimizar, é este o pensamento ágil que procuramos.

Voltando pro seu caso, há uma boa porção de artigos na web não recomendando o que você sugere, que é otimizar por antecipação. Concordo contigo que a aplicação que você sugere exige boa performance, mas não vejo porque não fazer uma boa primeira versão usando um banco de dados e um bom cache… se precisar de mais, você otimiza. Se desejar, posso linkar alguns desses artigos pra você dar uma lida… só preciso encontrá-los de novo.

[quote=Mitidiero]
Agora, quanto ao Python, vc já desenvolveu com ele? O Django é um framework também, certo? Eu conheço pouco de Python, fiz um curso uma vez porém nada avançado…[/quote]

Já desenvolvi algo em Django, sim, alguns sites com necessidade de trabalhar conteúdo dinâmico. Hoje estudo Python mais para desktop, mas para algo mais no estilo startup sem dúvida começaria com o Django ou mesmo o Rails. Não que eu esteja recomendando alguma dessas tecnologias pra você, são apenas as que me sinto mais à vontade de programar ;)[/quote]

Então, veja bem, concordo plenamente com o pensamento ágil, inclusive onde trabalho usamos todos conceitos pregados por ele, porém nesse caso, que é um projeto pessoal, eu não estou querendo otimizar nada, simplesmente dar o melhor início para o projeto, que ao contrário do que muitos pensam, a escolha de uma tecnologia pode trazer parte do sucesso ou do fracasso do projeto, e eu penso que se eu for utilizar JSF por exemplo, que eu NUNCA consegui fazer ser tão ágil quanto php, ja prejudicaria o projeto, principalmente pq vc vê diversas redes sociais em JSF e nenhuma ficou legal por causa da lentidão.

Mitidiero acho que otimizações devem ser feitas o quanto antes possível e sempre que houver uma necessidade mesmo que essa otimização seja precoce em seu projeto,
uma otimização em fase inicial do seu projeto pode te livrar de uma baita dor de cabeça amanhã.

Quanto a frase acima, diversos fatores pode influência no resultado final, isso volta aquela boa e velha história sobre a performance do JSF, detalhes como um boa modelagem de
banco de dados é um fator primordial a um projeto ele pode definir boa parte da performance do seu projeto.
Lembrando que nenhum framework é uma bala de prata que ira resolver todos os seu problemas.

Acho que é uma questão de gosto pessoal porque tem documentação a rodo na net pra todas linguagens, nenhuma delas é nova de fato.

Mas vale ressaltar que quando o assunto é redes sociais, nunca vi uma que começou usando Java e banco de dados relacional.

[quote=Mitidiero]
Então, veja bem, concordo plenamente com o pensamento ágil, inclusive onde trabalho usamos todos conceitos pregados por ele, porém nesse caso, que é um projeto pessoal, eu não estou querendo otimizar nada, simplesmente dar o melhor início para o projeto, que ao contrário do que muitos pensam, a escolha de uma tecnologia pode trazer parte do sucesso ou do fracasso do projeto, e eu penso que se eu for utilizar JSF por exemplo, que eu NUNCA consegui fazer ser tão ágil quanto php, ja prejudicaria o projeto, principalmente pq vc vê diversas redes sociais em JSF e nenhuma ficou legal por causa da lentidão.[/quote]

Concordo plenamente que a escolha da tecnologia antes é fundamental, e de fato escolher um BD que deve mais te atender no presente e no futuro é realmente uma questão estratégica, assim como linguagem, framework e outras tecnologias relacionadas.

O que não concordo bem é otimizar no ponto de vista de adicionar mais complexidade ao sistema desnecessariamente, sem saber exatamente a demanda. De toda forma, acho que me expressei mal antes, me desculpe =D

[quote=lsmagalhaes]
O que não concordo bem é otimizar no ponto de vista de adicionar mais complexidade ao sistema desnecessariamente, sem saber exatamente a demanda. De toda forma, acho que me expressei mal antes, me desculpe =D[/quote]

Cara o grande problema que eu vejo neste pensamento seu é o seguinte posso até estar errado mais se você abrir um post perguntando quantas pessoas já teve problema com projetos mais projetados, que no começo do projeto não pensarão que o sistema poderia crescer e assim otimizar de modo que se tivesse uma grande carga não teria grandes problemas, bom acho que muita gente vai relatar experiências. Bom isso e algo difícil de se mensurar uma vez que a carga do sistema pode não ser grande amanhã… mais daqui uma semana se o sistema cresce de forma inesperada? uma otimização pode ser bem mais custosa do que se tive sido pensado nisso la no começo do projeto.

Cara, tem sistemas que tem uma carga grande feitos em java, php, ruby, python… Em se tratando de web, para escalar uma aplicação é o de sempre, cachear o máximo possível, balancear carga entre varios nós, jogar processamento pesado pra background, etc. Isso qualquer que seja a linguagem.

O que é mais chato de escalar (na minha opinião) é o banco. Os NoSQL, em teoria escalam com mais facilidade, mas vc tem que entender os tradeoffs (vc perde o ACID por exemplo)… eu ainda prefiro usar um banco relacional, que eu já conheço bem e sei como administrar. Mas isso depende muito, quem conhece melhor NoSQL pode opinar melhor sobre o que muda, como modelar, etc.

Então, se tua preocupação é velocidade de desenvolvimento, escolhe a que vc programa mais rápido. Os desafios que vc vai encontrar pra escalar são basicamente os mesmos, independente da linguagem.

Muita hora nessa calma.

Escalar com certeza é importante, mas acho que o ponto não é esse, eu andei vendo uns comparativos, e mostram que algumas linguagens são realmente mais rápidas o processamento do que outras, eu reparei que quando vc vai rodar o python na JVM é muuuito mais lento do que rodando fora, e uma coisa que acho importante discutir também, é mercado, afinal, não pode se começar um projeto que não tem mão-de-obra adequada, nem escolher tecnologias muito recentes que até hoje não vi um projeto realmente grande e famoso (algumas linguagens da JVM por exemplo)

E de banco Não relacional, qual vcs escolheriam? pq? Qual experiência tiveram? Vamos começar por aqui

Que tipo de processamento tua aplicação vai realizar?

[off]
Se pensarmos apenas em performance, todo mundo deveria programar em assembly, ou no máximo em C :D.
[/off]

O principal é indexação, consulta de arquivos, gravação de dados…

Aliás, isso foi uma boa idéia… Será que compensa montar o lado do servidor em C, e só a camada de apresentação alguma linguagem web, chamando os comandos do servidor? =)

Agora, a questão não é SÓ performance, tem que olhar o melhor custo benefíco, mercado de pessoas, assim como disse anteriormente.

Cara, isso é bobagem. Existem muitos outros gargalos que você pode tratar antes de otimizar o processamento. Em uma aplicação Web, o principal gargalo é o acesso a dados. Escalar as requisições é relativamente simples, é só usar balanceamento de carga. Mas de nada adianta balancear a carga em vários nós se o acesso a dados é centralizado.

Existe ainda uma série de otimizações que podem ser feitas na interface que são muito mais significativas para o usuário:

Sendo assim, em termos de linguagem, duvido muito que exista diferença significativa entre Java, Ruby, Python, etc. A diferença pode existir entre os frameworks. Por exemplo, eu sou desconfiado do JSF por ele manter estado de componentes do lado do servidor … mas isso é uma característica do JSF, não da linguagem Java.

Porque vc não dá uma olhada em uma engine de indexação, como o solr? É extramamente rápido e tem um monte de recursos.

Ao invés de um novo projeto… que tal ser meu sócio ?

É pra tentar ficar rico ? Bora tentar junto.

Já está online.

http://www.guj.com.br/java/281936-proposta-parceria—mercado-de-milhas