No SO, deparei-me com uma pergunta sobre qual plataforma, Java ou Python é melhor para o desenvolvimento no Google AppEngine. Muitas pessoas estavam se gabando do aumento de produtividade obtido com o uso do Python sobre Java. Uma coisa que eu diria sobre o argumento da produtividade Python x Java, é que o Java possui excelentes IDE para acelerar o desenvolvimento, onde o Python está realmente ausente nessa área por causa de sua natureza dinâmica.
Portanto, mesmo que eu prefira usar o Python como uma linguagem, não acredito que isso proporcione um aumento de produtividade em comparação ao Java, especialmente ao usar uma nova estrutura. Obviamente, se fosse Java vs Python e o único editor que você pudesse usar fosse o VIM, o Python lhe proporcionaria um enorme aumento de produtividade, mas quando os IDEs são trazidos para a equação, isso não é tão claro.
Eu acho que os méritos de Java geralmente são avaliados apenas em nível de linguagem e com base em suposições desatualizadas, mas o Java tem muitos benefícios externos à própria linguagem, por exemplo, a JVM (frequentemente criticada, mas oferece um enorme potencial), excelentes IDE e ferramentas, grandes números de terceiros. bibliotecas de partido, plataformas etc.
Pergunta: As linguagens dinâmicas relacionadas ao Python / realmente oferecem os enormes aumentos de produtividade frequentemente comentados? (considerando o uso de novas estruturas e o trabalho com aplicativos de médio a grande porte).
Respostas:
Uma das principais vantagens do Python é sua filosofia "pilhas incluídas": uma biblioteca padrão extensa e simples de usar. Em Java, apenas ler um arquivo de texto requer várias linhas de código, leitores aninhados e assim por diante. Em Python é
f.read()
. Definitivamente, isso será um enorme aumento de produtividade, especialmente em prototipagem rápida. Em Python, a linguagem também é geralmente menos detalhada, o que não é uma coisa ruim (embora eu ache que a importância da verbosidade versus concisão geralmente é exagerada).No entanto, se você já está trabalhando em alguma estrutura, como o GAE, esperaria que as diferenças fossem muito menores e, principalmente, até a fluência pessoal no idioma. Você estará basicamente conectando a estrutura à sintaxe de sua escolha, e a excelente biblioteca padrão do Python ajuda pouco.
fonte
List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));
. Não é tão ruim! (Este é o java 7, que ainda não foi lançado em 11 de março).Aqui estão os meus 2 centavos. Na minha experiência, o Python é bom para projetos de pequeno e médio porte, enquanto que para projetos maiores eu sou mais produtivo com Java.
Em geral, posso usar uma linguagem de tipo dinâmico como Python (ou PHP) para projetos menores: não é muito complexo, você quer fazer isso rapidamente e não há muito que possa dar errado. Nesse caso, acho que o Python pode ser mais prático de usar.
No entanto, quando tenho que desenvolver um software maior, prefiro uma linguagem de tipo estaticamente como Java, porque prefiro que o compilador execute o máximo de verificações possível para mim. Minha experiência é que, em projetos maiores, tenho que gastar mais tempo corrigindo bugs com Python do que com Java, por isso não me importo se demorar um pouco mais para escrever o código em Java, pois isso economizará tempo mais tarde.
fonte
Sou muito mais produtivo em linguagens mais poderosas como Python ou Ruby. Não importa se parte do código Java pode ser gerado por um IDE. Há mais código para ler e manter. Leva mais tempo para percorrer o código repetitivo e encontrar as partes importantes e mais tempo para alterá-lo. Tudo bem que o Eclipse possa converter
para:
mas toda vez que eu abrir a aula, verei esse lixo e preciso passar por ele para encontrar as partes interessantes. Além disso, durante a manutenção, erros podem ser introduzidos no código gerado.
Eu preferiria ver:
Para mim, a necessidade de um IDE funcionar efetivamente com Java é um bom motivo para escolher outra linguagem.
Talvez com mais força, compare este código Ruby:
contra código Java semelhante:
O código Ruby é uma tradução direta da especificação: o peso médio das pessoas com altura superior a 200 (cm). Um comentário seria totalmente redundante.
O código Java requer um trabalho considerável para escrever e ler.
Paul Graham faz um argumento convincente para a brevidade nas linguagens de programação neste ensaio . Tendo feito alguma matemática no nível de pós-graduação, considero seus argumentos convincentes e os argumentos contra a brevidade fracos. Certamente, uma única linha em uma linguagem de alto nível pode ser mais difícil de entender do que uma única linha em uma linguagem de baixo nível, assim como uma equação diferencial parcial é mais difícil de compreender do que uma simples adição. Mas uma única linha em uma linguagem poderosa é mais fácil de entender do que as cinco ou dez linhas que ela substitui. Imagine ler um texto matemático que foi escrito usando palavras em vez de símbolos.
fonte
dateOfBirth
público. Se a lógica precisar ser adicionada posteriormente a get ou set, adicione a_dateOfBirth
para armazenar os dados e crie umproperty
nomedateOfBirth
com os métodos get e set. O código de chamada não precisa ser alterado no Python. Java usa apenas acessadores porque não possui o conceito de "propriedade" s.people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
Mudei de Java para Python há alguns anos e, pessoalmente, sinto que sou mais produtivo. Como o @Joonas aponta, grande parte da produtividade vem da biblioteca empacotada. Mas parte disso é da própria linguagem. Não consigo imaginar não ter dicionários, listas de compreensão, funções de ordem superior e um shell.
Lembre-se de que, se você já conhece Java, levará algum tempo para se tornar fluente em Python.
fonte
Essa é uma pergunta antiga, mas eu gostaria de adicionar meus $ 0,03. Eu acho que isso depende muito da maneira como você pensa. Eu realmente não suporto linguagens dinâmicas interpretadas. Eu sou, por outro lado, um grande fã de linguagens estaticamente tipadas. Claro, o uso do Java pode ser mais detalhado, mas acho mais fácil ler e manter uma vez que tudo já foi dito e feito. Acho Python, Ruby e Perl extremamente difíceis de ler (para mim). Eu simplesmente não consigo entender, mesmo que eu tenha tentado. Dito isto, posso escrever código no Scala muito bem e não é grande coisa. Eu acho que depende do que você está confortável. No final das contas, Java será muito mais poderoso; mais do que Ruby, Python ou Perl. A JVM é uma peça de tecnologia atraente e aprender a aproveitar o poder dela pode ser muito benéfico para você.
fonte
Acho que Python, Ruby, Javascript e SQL são muito mais produtivos do que linguagens compiladas, como Java, porque essas linguagens têm um ciclo de feedback muito rápido. Você pode executar algumas linhas de código em uma linha de comando e saber imediatamente se o código está correto ou não. Se ele lançar exceções, você saberá imediatamente. Com o Java, você precisa compilar, empacotar e implantar, o que geralmente leva alguns minutos para sistemas grandes, e isso resulta em um ciclo de feedback muito lento.
O rápido ciclo de feedback permite iterar rapidamente para uma boa solução, e é isso que torna as linguagens dinâmicas mais produtivas.
fonte
feedback loop
Eu tenho feito muito mais python recentemente e sou programador de java há muito tempo, e para novos desenvolvimentos, acho que sou um pouco mais produtivo em python. muitas coisas bastante simples em java podem ser um pouco tediosas, como processamento de arquivos / fluxos, ler coisas de um URL, serializar XML etc. por "tedioso", quero dizer o que leva cinco linhas de código em java geralmente parece pegue apenas um em python. usar as ferramentas certas, como goiaba ou outra API de coleções, pode realmente ajudar com isso.
Eu acho que estou dizendo que uma vantagem do python é que ele vem com muitos recursos que você precisa usar uma biblioteca de terceiros em java para obter.
tudo dito, para certas coisas, eu seria muito mais produtivo em java do que em python, principalmente quando se trata de refatorar e trabalhar com grandes bases de código, etc.
fonte