¿Python es bueno para grandes proyectos de software (no basados ​​en web)?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

En este momento estoy desarrollando principalmente en C/C++, pero escribí algunas pequeñas utilidades en Python para automatizar algunas tareas y realmente me encanta como lenguaje (especialmente la productividad).

Excepto por el rendimiento (un problema que a veces podría resolverse gracias a la facilidad de interconectar Python con módulos C), ¿crees que es apropiado para uso en producción en el desarrollo de aplicaciones complejas independientes (pensemos, por ejemplo, en un procesador de textos? o una herramienta gráfica)?

¿Qué IDE sugerirías?En mi opinión, el IDLE proporcionado con Python no es suficiente ni siquiera para proyectos pequeños.

¿Fue útil?

Solución

Hemos utilizado IronPython para crear nuestra aplicación de hoja de cálculo insignia (código de producción de 40 kloc, y es Python, lo que en mi opinión significa que la ubicación por función es baja) en Sistemas de resolución, por lo que definitivamente diría que está listo para el uso en producción de aplicaciones complejas.

Hay dos formas en las que esta podría no ser una respuesta útil para usted :-)

  1. Estamos usando IronPython, no el CPython más habitual.Esto nos brinda la gran ventaja de poder utilizar bibliotecas de clases .NET.Puede que me esté preparando para ser criticado aquí, pero diría que nunca he visto una aplicación CPython que pareciera "profesional", por lo que tener acceso al conjunto de widgets de WinForms fue una gran victoria para nosotros.IronPython también nos brinda la ventaja de poder acceder fácilmente a C# si necesitamos mejorar el rendimiento.(Aunque para ser honesto tenemos nunca necesario para hacer eso.Todos nuestros problemas de rendimiento hasta la fecha se deben a que elegimos algoritmos tontos y no a que el lenguaje fuera lento). Usar C# desde IP es mucho más fácil que escribir una extensión C para CPython.
  2. Somos un taller de programación extrema, por lo que escribimos pruebas antes de escribir código.No escribiría código de producción en un lenguaje dinámico sin escribir las pruebas primero;la falta de un paso de compilación debe cubrirse con algo y, como han señalado otras personas, refactorizar sin él puede ser difícil.(La respuesta de Greg Hewgill sugiere que él ha tenido el mismo problema.Por otro lado, no creo que escribiría (o especialmente refactorizaría) código de producción en cualquier lenguaje en estos días sin escribir las pruebas primero, pero YMMV).

Re:el IDE: nos ha parecido bastante bien que cada persona utilice su editor de texto favorito;Si prefieres algo un poco más pesado entonces AlaIDE está bastante bien considerado.

Otros consejos

Encontrarás principalmente dos respuestas a eso: la religiosa (¡Sí!¡Por supuesto!¡Es el mejor idioma que existe!) y el otro religioso (¡debes estar bromeando!¿Pitón?No...no es lo suficientemente maduro).Quizás me salteé la última religión (¿Python?!¡Usa Rubí!).La verdad, como siempre, está lejos de ser obvia.

Ventajas:es fácil, legible, incluye pilas y tiene muchas bibliotecas buenas para prácticamente todo.Su escritura expresiva y dinámica lo hace más conciso en muchos casos.

Contras:como lenguaje dinámico, tiene un soporte IDE mucho peor (finalización adecuada de la sintaxis requiere tipado estático, ya sea explícito en Java o inferido en SML), su sistema de objetos está lejos de ser perfecto (interfaces, ¿alguien?) y es fácil terminar con código desordenado que tiene métodos que devuelven int o boolean u object o algún tipo bajo circunstancias desconocidas.

Mi opinión: me encanta Python para secuencias de comandos, automatización, pequeñas aplicaciones web y otras tareas sencillas y bien definidas.En mi opinión es con diferencia el mejor lenguaje dinámico en el planeta.Dicho esto, yo nunca úsalo cualquier lenguaje tipado dinámicamente para desarrollar una aplicación de tamaño sustancial.

Digamos que estaría bien usarlo para Stack Overflow, que tiene tres desarrolladores y supongo que no más de 30.000 líneas de código.Para cosas más importantes, primero su desarrollo sería súper rápido y luego, una vez que el equipo y la base de código crezcan, las cosas se ralentizarán más que con Java o C#.Debe compensar la falta de comprobaciones del tiempo de compilación escribiendo más pruebas unitarias, las refactorizaciones se vuelven más difíciles porque nunca se sabe qué se rompió hasta que ejecuta todas las pruebas o incluso toda la aplicación grande, etc.

Ahora, decida qué tan grande será su equipo y qué tan grande se supone que será la aplicación una vez que esté terminada.Si tiene 5 personas o menos y el tamaño objetivo es aproximadamente Stack Overflow, adelante, escriba en Python.Terminarás en poco tiempo y estarás contento con un buen código base.Pero si quieres escribir en segundo lugar en Google o Yahoo, será mucho mejor con C# o Java.

Nota al margen sobre C/C++ que ha mencionado:si no está escribiendo software de rendimiento crítico (por ejemplo, un trazador de rayos paralelo masivo que funcionará durante tres meses renderizando una película) o un sistema de misión muy crítica (por ejemplo, un módulo de aterrizaje en Marte que volará tres años seguidos y solo tiene una oportunidad de aterrizar correctamente o perderá). $400 millones) no lo use.Para las aplicaciones web, la mayoría de las aplicaciones de escritorio y la mayoría de las aplicaciones en general, no es una buena opción.Morirás depurando punteros y asignando memoria en una lógica empresarial compleja.

En mi opinión, Python está más que preparado para desarrollar aplicaciones complejas.Veo que las Python se fortalecen más en el lado del servidor que en la escritura de clientes gráficos.Pero echa un vistazo http://www.resolversystems.com/.Desarrollan una hoja de cálculo completa en Python utilizando el puerto .net ironpython.

Si estás familiarizado con eclipse, echa un vistazo a pydev que proporciona soporte de depuración y autocompletado para Python con todas las demás ventajas de Eclipse, como la compatibilidad con svn.El tipo que lo desarrolla acaba de ser comprado por aptana, por lo que será una opción sólida para el futuro.

@Marcin

Contras:Como lenguaje dinámico, tiene un soporte IDE muy peor (la finalización adecuada de la sintaxis requiere una tipificación estática, ya sea explícita en Java o inferido en SML),

Tiene razón, es posible que el análisis estático no proporcione una finalización completa de la sintaxis para los lenguajes dinámicos, pero creo que pydev hace el trabajo muy bien.Además, tengo un estilo de desarrollo diferente al programar Python.Siempre tengo una sesión de ipython abierta y con un F5 no solo obtengo la finalización perfecta de ipython, sino también la introspección y manipulación de objetos.

Pero si quieres escribir segundo Google o Yahoo, serás mucho mejor con C# o Java.

Google acaba de reescribir jaiku para trabajar sobre App Engine, todo en Python.Y hasta donde yo sé, también usan mucho Python dentro de Google.

Realmente me gusta Python, generalmente es mi lenguaje preferido hoy en día para cosas pequeñas (que no son GUI) que hago por mi cuenta.

Sin embargo, en algunos proyectos Python más grandes que he abordado, descubro que no es lo mismo que programar en C++, por ejemplo.Estaba trabajando en un analizador de idiomas y necesitaba representar un AST en Python.Esto ciertamente está dentro del alcance de lo que Python puede hacer, pero tuve algunos problemas con algunas refactorizaciones.Estaba cambiando mucho la representación de mi AST y cambiando métodos y clases, y descubrí que echaba de menos la tipificación segura que estaría disponible para mí en una solución C++.La escritura del pato de Python era casi también flexible y me encontré añadiendo un montón de assert código para intentar verificar mis tipos mientras se ejecutaba el programa.Y luego no podía estar realmente seguro de que todo estuviera escrito correctamente a menos que tuviera una prueba de cobertura de código del 100% (lo cual no hice en ese momento).

En realidad, esa es otra cosa que a veces extraño.Es posible escribir código sintácticamente correcto en Python que simplemente no se ejecuta.El compilador es incapaz de informarle sobre esto hasta que realmente ejecuta el código, por lo que en rutas de código poco utilizadas, como los controladores de errores, es fácil que haya errores invisibles al acecho.Incluso el código que es tan simple como imprimir un mensaje de error con una cadena de formato % puede fallar en tiempo de ejecución debido a tipos no coincidentes.

No he usado Python para ninguna interfaz gráfica de usuario, por lo que no puedo comentar sobre ese aspecto.

Python se considera (entre los programadores de Python :) un gran lenguaje para la creación rápida de prototipos.No hay mucha sintaxis superflua que se interponga en tus procesos de pensamiento, por lo que la mayor parte del trabajo que haces tiende a centrarse en el código.(Se necesitan muchos menos modismos para escribir un buen código Python que para escribir un buen C++).

Teniendo en cuenta esto, la mayoría de los programadores de Python (CPython) se adhieren a la filosofía de que "la optimización prematura es la raíz de todos los males".Al escribir código Python de alto nivel (y significativamente más lento), se pueden optimizar los cuellos de botella utilizando enlaces C/C++ cuando la aplicación está a punto de finalizar.En este punto, queda más claro cuáles son los algoritmos de uso intensivo del procesador mediante la creación de perfiles adecuados.De esta manera, escribe la mayor parte del código de una manera muy legible y fácil de mantener, al tiempo que permite acelerar el proceso en el futuro.Verás varios módulos de la biblioteca Python escritos en C por esta misma razón.

La mayoría de las bibliotecas de gráficos en Python (es decir,wxPython) son solo contenedores de Python para bibliotecas de C++ de todos modos, por lo que prácticamente estás escribiendo en un backend de C++.

Para abordar su pregunta sobre IDE, SPE (Stani's Python Editor) es un buen IDE que he usado y Eclipse con PyDev también hace el trabajo.Ambos son OSS, ¡así que puedes probarlos gratis!

[Editar] @Marcin:¿Ha tenido experiencia escribiendo > 30k LOC en Python?También es curioso que menciones las preocupaciones de escalabilidad de Google, ¡ya que son los mayores partidarios de Python!Además, una pequeña organización llamada NASA también usa Python con frecuencia;) ver "Un codificador y 17.000 líneas de código después".

Nada que agregar a las otras respuestas, además que si eliges python tu debe usa algo como pylint que nadie mencionó hasta ahora.

Una forma de juzgar para qué se usa Python es observar qué productos usan Python en este momento.Este pagina de wikipedia tiene una larga lista que incluye varios marcos web, sistemas de gestión de contenidos, sistemas de control de versiones, aplicaciones de escritorio e IDE.

como dice aquí - "Algunos de los proyectos más grandes que utilizan Python son el servidor de aplicaciones Zope, YouTube y el cliente BitTorrent original.Las grandes organizaciones que utilizan Python incluyen Google, Yahoo!, CERN y NASA.ITA utiliza Python para algunos de sus componentes."

En resumen, sí, es "adecuado para uso en producción en el desarrollo de aplicaciones complejas independientes".También lo son muchos otros idiomas, con varios pros y contras.Cuál es el mejor lenguaje para su caso de uso particular es demasiado subjetivo para responder, así que no lo intentaré, pero a menudo la respuesta será "el que sus desarrolladores conocen mejor".

La refactorización es inevitable en bases de código más grandes y la falta de escritura estática hace que esto sea mucho más difícil en Python que en los lenguajes de escritura estática.

Y hasta donde yo sé, también usan mucho Python dentro de Google.

Bueno, eso espero, ¿el creador de Python todavía trabaja en Google si no me equivoco?

En cuanto al uso de Python, creo que es un lenguaje excelente para aplicaciones independientes.Se usa mucho en muchos programas de Linux y existen algunos conjuntos de widgets interesantes para ayudar en el desarrollo de GUI.

Es un placer utilizar Python.Lo uso habitualmente y también escribo mucho código para trabajar en C#.Hay dos inconvenientes al escribir código de interfaz de usuario en Python.Una es que no existe un marco de interfaz de usuario único que sea aceptado por la mayoría de la comunidad.Cuando escribes en C#, el tiempo de ejecución de .NET y las bibliotecas de clases están diseñadas para funcionar juntas.Con Python, cada biblioteca de UI tiene su propia semántica que a menudo está en desacuerdo con la mentalidad pitónica en la que intenta escribir su programa.No culpo a los escritores de la biblioteca.Probé varias bibliotecas (wxwidgets, PythonWin [Wrapper around MFC], Tkinter). Al hacerlo, a menudo sentí que estaba escribiendo código en un lenguaje distinto de Python (a pesar de que era Python) porque las bibliotecas no Son exactamente pitónicos, son un puerto de otro idioma, ya sea c, c++, tk.

Entonces, para mí, escribiré código de interfaz de usuario en .NET (para mí, C#) debido al IDE y la coherencia de las bibliotecas.Pero cuando pueda escribiré lógica empresarial en Python porque es más clara y divertida.

Sé que probablemente estoy diciendo lo obvio, pero no olvide que la calidad del equipo de desarrollo y su familiaridad con la tecnología tendrán un impacto importante en su capacidad de entrega.

Si tienes un equipo fuerte, probablemente no sea un problema si están familiarizados.Pero si tiene personas que tienen entre 9 y 5 años y no están familiarizadas con la tecnología, necesitarán más soporte y usted deberá hacer una llamada si las ganancias de productividad valen la pena, sea cual sea el costo de ese soporte.

Solo tuve una experiencia con Python: mi proyecto trash-cli.

Sé que probablemente algunos o todos los problemas dependan de mi inexperiencia con Python.

Encontré frustrantes estas cosas:

  1. lo difícil de encontrar un buen IDE gratis
  2. el soporte limitado a la refactorización automática

Además:

  1. La necesidad de introducir dos niveles de paquetes y módulos de agrupación me confunde.
  2. Me parece que no existe una convención de nomenclatura de códigos ampliamente adoptada.
  3. Me parece que hay algunos documentos de API de biblioteca estándar que están incompletos.
  4. Me molesta el hecho de que algunas bibliotecas estándar no estén completamente orientadas a objetos.

Aunque algunos codificadores de Python me dicen que no tienen estos problemas, o dicen que no son problemas.

Prueba Django o Pylons, escribe una aplicación sencilla con ambos y luego decide cuál te conviene más.Hay otros (como Turbogears o Werkzeug) pero esos son los más utilizados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top