Python é bom para grandes projetos de software (não baseados na web)?

StackOverflow https://stackoverflow.com/questions/35753

  •  09-06-2019
  •  | 
  •  

Pergunta

No momento estou desenvolvendo principalmente em C/C++, mas escrevi alguns pequenos utilitários em Python para automatizar algumas tarefas e adoro isso como linguagem (especialmente a produtividade).

Exceto pelo desempenho (um problema que às vezes pode ser resolvido graças à facilidade de interface do Python com módulos C), você acha que é adequado para uso em produção no desenvolvimento de aplicativos complexos independentes (pense, por exemplo, em um processador de texto ou uma ferramenta gráfica)?

Qual IDE você sugeriria?O IDLE fornecido com Python não é suficiente nem mesmo para pequenos projetos, na minha opinião.

Foi útil?

Solução

Usamos o IronPython para construir nosso principal aplicativo de planilha (código de produção de 40kloc - e é Python, que IMO significa que o loc por recurso é baixo) em Sistemas de resolução, então eu definitivamente diria que está pronto para uso em produção de aplicativos complexos.

Existem duas maneiras pelas quais esta pode não ser uma resposta útil para você :-)

  1. Estamos usando o IronPython, não o CPython mais comum.Isso nos dá a enorme vantagem de poder usar bibliotecas de classes .NET.Posso estar me preparando para ser criticado aqui, mas diria que nunca vi um aplicativo CPython que parecesse "profissional" - portanto, ter acesso ao conjunto de widgets WinForms foi uma grande vitória para nós.IronPython também nos dá a vantagem de podermos passar facilmente para C# se precisarmos de um aumento de desempenho.(Embora, para ser honesto, tenhamos nunca precisava fazer isso.Todos os nossos problemas de desempenho até o momento ocorreram porque escolhemos algoritmos burros e não porque a linguagem era lenta.) Usar C# a partir de IP é muito mais fácil do que escrever uma extensão C para CPython.
  2. Somos uma loja de Extreme Programming, então escrevemos testes antes de escrever código.Eu não escreveria código de produção em uma linguagem dinâmica sem primeiro escrever os testes;a falta de uma etapa de compilação precisa ser coberta por alguma coisa e, como outras pessoas apontaram, refatorar sem ela pode ser difícil.(A resposta de Greg Hewgill sugere que ele teve o mesmo problema.Por outro lado, não acho que escreveria - ou especialmente refatoraria - o código de produção em qualquer linguagem hoje em dia sem escrever os testes primeiro - mas YMMV.)

Ré:o IDE - estamos muito bem com cada pessoa usando seu editor de texto favorito;se você preferir algo um pouco mais pesado então WingIDE é muito bem visto.

Outras dicas

Você encontrará basicamente duas respostas para isso – a religiosa (Sim!Claro!É a melhor língua de todas!) e a outra religiosa (devem estar brincando comigo!Pitão?Não...não está maduro o suficiente).Talvez eu pule a última religião (Python?!Use Ruby!).A verdade, como sempre, está longe de ser óbvia.

Prós:é fácil, legível, com baterias incluídas, tem muitas bibliotecas boas para praticamente tudo.Sua digitação expressiva e dinâmica o torna mais conciso em muitos casos.

Contras:como uma linguagem dinâmica, tem suporte IDE muito pior (completamento de sintaxe adequado requer tipagem estática, seja explícita em Java ou inferida em SML), seu sistema de objetos está longe de ser perfeito (interfaces, alguém?) e é fácil acabar com um código confuso que tem métodos retornando int ou booleano ou objeto ou algum tipo sob circunstâncias desconhecidas.

Minha opinião – adoro Python para scripts, automação, pequenos aplicativos da web e outras tarefas simples e bem definidas.Na minha opinião é de longe o melhor linguagem dinâmica do planeta.Dito isto, eu faria nunca use-o qualquer linguagem digitada dinamicamente para desenvolver uma aplicação de tamanho substancial.

Digamos – seria bom usá-lo para Stack Overflow, que tem três desenvolvedores e acho que não tem mais do que 30 mil linhas de código.Para coisas maiores – primeiro seu desenvolvimento seria super rápido e, depois que a equipe e a base de código crescem, as coisas ficam mais lentas do que aconteceriam com Java ou C#.Você precisa compensar a falta de verificações de tempo de compilação escrevendo mais unittests, as refatorações ficam mais difíceis porque você nunca sabe o que sua refatoração quebrou até executar todos os testes ou até mesmo todo o grande aplicativo, etc.

Agora – decida o tamanho da sua equipe e o tamanho do aplicativo quando estiver pronto.Se você tem 5 pessoas ou menos e o tamanho alvo é aproximadamente Stack Overflow, vá em frente, escreva em Python.Você terminará rapidamente e ficará satisfeito com uma boa base de código.Mas se você quiser escrever segundo o Google ou o Yahoo, será muito melhor com C# ou Java.

Nota lateral sobre C/C++ que você mencionou:se você não estiver escrevendo um software de desempenho crítico (digamos, um enorme raytracer paralelo que funcionará por três meses renderizando um filme) ou um sistema de missão crítica (digamos, um módulo de pouso em Marte que voará três anos seguidos e terá apenas uma chance de pousar corretamente ou você perderá US$ 400 milhões) não o use.Para aplicativos da web, a maioria dos aplicativos de desktop e a maioria dos aplicativos em geral, não é uma boa escolha.Você morrerá com ponteiros de depuração e alocação de memória em lógica de negócios complexa.

Na minha opinião, o python está mais do que pronto para desenvolver aplicativos complexos.Vejo a força dos pythons mais no lado do servidor do que na escrita de clientes gráficos.Mas dê uma olhada http://www.resolversystems.com/.Eles desenvolvem uma planilha inteira em python usando a porta .net ironpython.

Se você está familiarizado com eclipse, dê uma olhada em pydev que fornece preenchimento automático e suporte de depuração para python com todos os outros recursos do Eclipse, como suporte a svn.O cara que o desenvolveu acabou de ser comprado por aptana, então esta será uma escolha sólida para o futuro.

@Marcin

Contras:Como linguagem dinâmica, tem um suporte de IDE muito pior (a conclusão adequada da sintaxe requer digitação estática, explicita em Java ou inferida em SML),

Você está certo, essa análise estática pode não fornecer a conclusão completa da sintaxe para linguagens dinâmicas, mas acho que o pydev faz o trabalho muito bem.Além disso, tenho um estilo de desenvolvimento diferente ao programar python.Sempre tenho uma sessão ipython aberta e com um F5 não só obtenho a conclusão perfeita do ipython, mas também a introspecção e manipulação de objetos.

Mas se você quiser escrever segundo Google ou Yahoo, será muito melhor com C# ou Java.

O Google acabou de reescrever jaiku para trabalhar no App Engine, tudo em python.E até onde eu sei eles também usam muito python dentro do Google.

Eu realmente gosto de python, geralmente é minha linguagem preferida atualmente para coisas pequenas (não-gui) que faço sozinho.

No entanto, para alguns projetos Python maiores que abordei, estou descobrindo que não é exatamente o mesmo que programar, digamos, C++.Eu estava trabalhando em um analisador de linguagem e precisava representar um AST em Python.Isso certamente está dentro do escopo do que o Python pode fazer, mas tive alguns problemas com algumas refatorações.Eu estava mudando muito a representação do meu AST e mudando muito os métodos e classes, e descobri que sentia falta da digitação forte que estaria disponível para mim em uma solução C++.A digitação de pato do Python foi quase também flexível e me vi adicionando muitos assert código para tentar verificar meus tipos enquanto o programa é executado.E então eu não poderia ter certeza de que tudo estava digitado corretamente, a menos que eu tivesse 100% de teste de cobertura de código (o que não fiz na época).

Na verdade, isso é outra coisa que às vezes sinto falta.É possível escrever código sintaticamente correto em Python que simplesmente não funciona.O compilador é incapaz de informá-lo sobre isso até que realmente execute o código, portanto, em caminhos de código usados ​​com pouca frequência, como manipuladores de erros, você pode facilmente ter bugs invisíveis à espreita.Mesmo um código tão simples quanto imprimir uma mensagem de erro com uma string de formato % pode falhar em tempo de execução devido a tipos incompatíveis.

Eu não usei Python para nenhuma interface gráfica, então não posso comentar sobre esse aspecto.

Python é considerado (entre os programadores Python :) uma ótima linguagem para prototipagem rápida.Não há muita sintaxe estranha atrapalhando seus processos de pensamento, então a maior parte do trabalho que você faz tende a ir para o código.(Há muito menos expressões necessárias para escrever um bom código Python do que escrever um bom C++.)

Diante disso, a maioria dos programadores Python (CPython) atribuem a filosofia "otimização prematura é a raiz de todo mal".Ao escrever código Python de alto nível (e significativamente mais lento), é possível otimizar os gargalos usando ligações C/C++ quando seu aplicativo estiver quase concluído.Neste ponto, fica mais claro quais são os algoritmos que fazem uso intensivo do processador por meio do perfil adequado.Dessa forma, você escreve a maior parte do código de uma maneira muito legível e fácil de manter, ao mesmo tempo que permite acelerações no futuro.Você verá vários módulos da biblioteca Python escritos em C exatamente por esse motivo.

A maioria das bibliotecas gráficas em Python (ou seja,wxPython) são apenas wrappers Python em torno de bibliotecas C++, então você está praticamente escrevendo em um back-end C++.

Para responder à sua pergunta sobre IDE, SPE (Editor Python de Stani) é um bom IDE que usei e Eclipse com PyDev também faz o trabalho.Ambos são OSS, então você pode experimentá-los gratuitamente!

[Editar] @Marcin:Você já teve experiência em escrever > 30k LOC em Python?Também é engraçado que você mencione as preocupações de escalabilidade do Google, já que eles são os maiores apoiadores do Python!Além disso, uma pequena organização chamada NASA também usa Python com frequência;) veja "Um codificador e 17.000 linhas de código depois".

Nada a acrescentar às outras respostas, além do mais que se você escolher python você deve use algo como pilar que ninguém mencionou até agora.

Uma maneira de julgar para que o python é usado é observar quais produtos usam o python no momento.Esse página da Wikipédia tem uma longa lista que inclui vários frameworks web, sistemas de gerenciamento de conteúdo, sistemas de controle de versão, aplicativos de desktop e IDEs.

Como diz aqui - "Alguns dos maiores projetos que usam Python são o servidor de aplicativos Zope, o YouTube e o cliente BitTorrent original.Grandes organizações que utilizam Python incluem Google, Yahoo!, CERN e NASA.ITA usa Python para alguns de seus componentes."

Resumindo, sim, é "adequado para uso em produção no desenvolvimento de aplicativos complexos independentes".O mesmo acontece com muitas outras línguas, com vários prós e contras.Qual é a melhor linguagem para o seu caso de uso específico é muito subjetivo para ser respondido, então não tentarei, mas muitas vezes a resposta será "aquela que seus desenvolvedores conhecem melhor".

A refatoração é inevitável em bases de código maiores e a falta de digitação estática torna isso muito mais difícil em python do que em linguagens de tipo estaticamente.

E até onde eu sei eles também usam muito python dentro do Google.

Bem, espero que sim, o criador do python ainda trabalha no Google, se não me engano?

Quanto ao uso de Python, acho que é uma ótima linguagem para aplicativos independentes.É muito usado em muitos programas Linux, e existem alguns conjuntos de widgets interessantes para ajudar no desenvolvimento de GUIs.

Python é uma delícia de usar.Eu o uso rotineiramente e também escrevo muitos códigos para trabalhar em C#.Existem duas desvantagens em escrever código de UI em Python.uma é que não existe uma única estrutura de interface do usuário que seja aceita pela maioria da comunidade.quando você escreve em c#, o tempo de execução do .NET e as bibliotecas de classes devem funcionar juntos.Com o Python, cada biblioteca de UI possui uma semântica própria, que muitas vezes está em desacordo com a mentalidade pitônica na qual você está tentando escrever seu programa.Não estou culpando os escritores da biblioteca.Eu tentei várias bibliotecas (wxwidgets, PythonWin[Wrapper around MFC], Tkinter). Ao fazer isso, muitas vezes senti que estava escrevendo código em uma linguagem diferente de Python (apesar de ser python) porque as bibliotecas não são Não são exatamente pitônicos, eles são uma porta de outra linguagem, seja c, c++, tk.

Então, para mim, escreverei código de UI em .NET (para mim, C#) por causa do IDE e da consistência das bibliotecas.Mas quando puder, escreverei lógica de negócios em python porque é mais clara e divertida.

Sei que provavelmente estou afirmando o óbvio, mas não se esqueça de que a qualidade da equipe de desenvolvimento e sua familiaridade com a tecnologia terão um grande impacto na sua capacidade de entrega.

Se você tem uma equipe forte, provavelmente não será um problema se eles estiverem familiarizados.Mas se você tiver pessoas com mais de 9 a 5 anos que não estão familiarizadas com a tecnologia, elas precisarão de mais suporte e você precisará fazer uma ligação se os ganhos de produtividade valerem qualquer que seja o custo desse suporte.

Tive apenas uma experiência com python, meu projeto trash-cli.

Eu sei que provavelmente alguns ou todos os problemas dependem da minha inexperiência com python.

Achei frustrantes essas coisas:

  1. a dificuldade de encontrar um bom IDE de graça
  2. o suporte limitado à refatoração automática

Além disso:

  1. a necessidade de introduzir dois níveis de agrupamento de pacotes e módulos me confunde.
  2. parece-me que não existe uma convenção de nomenclatura de código amplamente adotada
  3. parece-me que existem alguns documentos de APIs de biblioteca padrão que estão incompletos
  4. o fato de algumas bibliotecas padrão não serem totalmente orientadas a objetos me irrita

Embora alguns programadores python me digam que não têm esses problemas, ou dizem que não são problemas.

Experimente Django ou Pylons, escreva um aplicativo simples com ambos e decida qual deles combina melhor com você.Existem outros (como Turbogears ou Werkzeug) mas esses são os mais utilizados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top