Domanda

Al momento sto sviluppando principalmente in C/C++, ma ho scritto alcune piccole utilità in Python per automatizzare alcune attività e lo adoro davvero come linguaggio (specialmente la produttività).

Fatta eccezione per le prestazioni (problema che a volte potrebbe essere risolto grazie alla facilità di interfacciare Python con i moduli C), ritieni che sia adatto all'uso produttivo nello sviluppo di applicazioni complesse stand-alone (si pensi ad esempio ad un elaboratore di testi o uno strumento grafico)?

Quale IDE suggeriresti?L'IDLE fornito con Python secondo me non è sufficiente nemmeno per piccoli progetti.

È stato utile?

Soluzione

Abbiamo utilizzato IronPython per creare la nostra applicazione di punta per fogli di calcolo (codice di produzione 40kloc - ed è Python, che IMO significa che loc per funzionalità è basso) a Sistemi risolutori, quindi direi sicuramente che è pronto per l'uso in produzione di app complesse.

Ci sono due modi in cui questa potrebbe non essere una risposta utile per te :-)

  1. Stiamo utilizzando IronPython, non il più comune CPython.Questo ci dà l'enorme vantaggio di poter utilizzare le librerie di classi .NET.Potrei prepararmi per il flaming qui, ma direi che non ho mai visto un'applicazione CPython che sembrasse "professionale", quindi avere accesso al set di widget WinForms è stata una grande vittoria per noi.IronPython ci offre anche il vantaggio di poter passare facilmente a C# se abbiamo bisogno di un aumento delle prestazioni.(Anche se ad essere onesti lo abbiamo Mai necessario per farlo.Tutti i nostri problemi di prestazioni fino ad oggi sono dovuti al fatto che abbiamo scelto algoritmi stupidi piuttosto che al linguaggio lento.) Usare C# da IP è molto più semplice che scrivere un'estensione C per CPython.
  2. Siamo un negozio di programmazione estrema, quindi scriviamo test prima di scrivere codice.Non scriverei codice di produzione in un linguaggio dinamico senza prima scrivere i test;la mancanza di una fase di compilazione deve essere coperta da qualcosa e, come altri hanno sottolineato, il refactoring senza di essa può essere difficile.(La risposta di Greg Hewgill suggerisce che ha avuto lo stesso problema.D'altra parte, non penso che scriverei - o soprattutto refactoring - il codice di produzione Qualunque lingua oggigiorno senza prima scrivere i test - ma YMMV.)

Rif:l'IDE: ci siamo trovati abbastanza bene con ogni persona che utilizza il proprio editor di testo preferito;se preferisci qualcosa di un po' più pesante allora WingIDE è piuttosto ben considerato.

Altri suggerimenti

Troverai principalmente due risposte a questa domanda: quella religiosa (Sì!Ovviamente!È la migliore lingua di sempre!) e l'altra religiosa (mi stai prendendo in giro!Pitone?NO...non è abbastanza maturo).Forse salterò l'ultima religione (Python?!Usa Ruby!).La verità, come sempre, è tutt’altro che ovvia.

Professionisti:è facile, leggibile, batterie incluse, ha molte buone librerie praticamente per tutto.La sua digitazione espressiva e dinamica lo rende più conciso in molti casi.

Contro:come linguaggio dinamico, ha un supporto IDE decisamente peggiore (corretto completamento della sintassi richiede tipizzazione statica, sia esplicita in Java che dedotta in SML), il suo sistema di oggetti è lungi dall'essere perfetto (interfacce, qualcuno?) ed è facile ritrovarsi con un codice disordinato che ha metodi che restituiscono int o boolean o object o qualche tipo sotto circostanze sconosciute.

La mia opinione: adoro Python per lo scripting, l'automazione, le piccole app web e altre attività semplici e ben definite.Secondo me lo è di gran lunga il migliore linguaggio dinamico del pianeta.Detto questo, lo farei Mai usarlo Qualunque linguaggio tipizzato dinamicamente per sviluppare un'applicazione di dimensioni sostanziali.

Diciamo: andrebbe bene usarlo per Stack Overflow, che ha tre sviluppatori e immagino non più di 30k righe di codice.Per cose più grandi: prima il tuo sviluppo sarebbe super veloce, e poi, una volta che il team e la base di codice crescono, le cose rallenteranno più di quanto farebbero con Java o C#.È necessario compensare la mancanza di controlli del tempo di compilazione scrivendo più unittest, i refactoring diventano più difficili perché non sai mai cosa si è rotto il tuo refacoring finché non esegui tutti i test o anche l'intera grande app, ecc.

Ora: decidi quanto sarà grande il tuo team e quanto dovrebbe essere grande l'app una volta completata.Se hai 5 o meno persone e la dimensione target è all'incirca Stack Overflow, vai avanti, scrivi in ​​Python.Finirai in pochissimo tempo e sarai soddisfatto di una buona base di codice.Ma se vuoi scrivere secondo Google o Yahoo, starai molto meglio con C# o Java.

Nota a margine su C/C++ che hai menzionato:se non stai scrivendo un software critico per le prestazioni (ad esempio un enorme raytracer parallelo che funzionerà per tre mesi per il rendering di un film) o un sistema molto critico per la missione (ad esempio un lander su Marte che volerà per tre anni di fila e ha solo una possibilità di atterrare correttamente, altrimenti perderai $400 milioni) non usarlo.Per le app Web, la maggior parte delle app desktop e la maggior parte delle app in generale non è una buona scelta.Morirai eseguendo il debug dei puntatori e dell'allocazione della memoria in una logica aziendale complessa.

Secondo me Python è più che pronto per lo sviluppo di applicazioni complesse.Vedo la forza di Python più sul lato server che sulla scrittura di client grafici.Ma dai un'occhiata http://www.resolversystems.com/.Sviluppano un intero foglio di calcolo in Python utilizzando il port .net ironpython.

Se hai familiarità con l'eclissi, dai un'occhiata pydev che fornisce il completamento automatico e il supporto per il debug per Python con tutte le altre funzionalità di Eclipse come il supporto svn.Il ragazzo che lo sta sviluppando è stato appena acquistato da aptana, quindi questa sarà una scelta solida per il futuro.

@Marcin

Contro:Come linguaggio dinamico, ha un supporto IDE molto peggio (il completamento della sintassi adeguata richiede una tipizzazione statica, esplicita in Java o dedotta in SML),

Hai ragione, l'analisi statica potrebbe non fornire il completamento completo della sintassi per i linguaggi dinamici, ma penso che pydev svolga il lavoro molto bene.Inoltre ho uno stile di sviluppo diverso durante la programmazione di Python.Ho sempre una sessione di ipython aperta e con un F5 non solo ottengo il completamento perfetto di ipython, ma anche l'introspezione e la manipolazione degli oggetti.

Ma se vuoi scrivere secondo Google o Yahoo, starai molto meglio con C# o Java.

Google ha appena riscritto jaiku per funzionare su App Engine, tutto in Python.E per quanto ne so usano molto Python anche all'interno di Google.

Mi piace molto Python, di solito è il mio linguaggio preferito al giorno d'oggi per piccole cose (non gui) che faccio da solo.

Tuttavia, per alcuni progetti Python più grandi che ho affrontato, ho scoperto che non è esattamente la stessa cosa della programmazione, ad esempio, in C++.Stavo lavorando su un parser linguistico e avevo bisogno di rappresentare un AST in Python.Questo rientra certamente nell'ambito di ciò che Python può fare, ma ho avuto qualche problema con alcuni refactoring.Stavo modificando la rappresentazione del mio AST e cambiando molto metodi e classi, e ho scoperto che mi mancava la digitazione forte che sarebbe stata disponibile per me in una soluzione C++.La digitazione a papera di Python era quasi pure flessibile e mi sono ritrovato ad aggiungerne molti assert codice per provare a controllare i miei tipi durante l'esecuzione del programma.E quindi non potevo essere sicuro che tutto fosse digitato correttamente a meno che non avessi effettuato un test di copertura del codice al 100% (cosa che non avevo fatto in quel momento).

In realtà, questa è un'altra cosa che a volte mi manca.È possibile scrivere codice sintatticamente corretto in Python che semplicemente non verrà eseguito.Il compilatore non è in grado di dirtelo finché non esegue effettivamente il codice, quindi nei percorsi di codice usati di rado come i gestori di errori puoi facilmente avere bug invisibili in agguato.Anche il codice semplice come stampare un messaggio di errore con una stringa di formato % può fallire in fase di esecuzione a causa di tipi non corrispondenti.

Non ho usato Python per nessuna parte della GUI, quindi non posso commentare quell'aspetto.

Python è considerato (tra i programmatori Python :) un ottimo linguaggio per la prototipazione rapida.Non c'è molta sintassi estranea che ostacola i tuoi processi mentali, quindi la maggior parte del lavoro che svolgi tende a finire nel codice.(Sono necessari molti meno idiomi per essere coinvolti nella scrittura di un buon codice Python che nella scrittura di un buon C++.)

Detto questo, la maggior parte dei programmatori Python (CPython) attribuiscono alla filosofia "l'ottimizzazione prematura è la radice di tutti i mali".Scrivendo codice Python di alto livello (e significativamente più lento), è possibile ottimizzare i colli di bottiglia utilizzando i collegamenti C/C++ quando l'applicazione è prossima al completamento.A questo punto diventa più chiaro quali siano gli algoritmi ad uso intensivo del processore attraverso una corretta profilazione.In questo modo, scrivi la maggior parte del codice in modo molto leggibile e gestibile, consentendo al tempo stesso accelerazioni lungo il percorso.Vedrai diversi moduli della libreria Python scritti in C proprio per questo motivo.

La maggior parte delle librerie grafiche in Python (ad es.wxPython) sono comunque solo wrapper Python attorno alle librerie C++, quindi stai praticamente scrivendo su un backend C++.

Per rispondere alla tua domanda sull'IDE, SPE (Stani's Python Editor) è un buon IDE che ho usato e Eclisse con PyDev porta a termine anche il lavoro.Entrambi sono OSS, quindi puoi provarli gratuitamente!

[Modifica] @Marcin:Hai avuto esperienza nella scrittura di> 30k LOC in Python?È anche divertente che tu menzioni le preoccupazioni sulla scalabilità di Google, dal momento che sono i maggiori sostenitori di Python!Anche una piccola organizzazione chiamata NASA usa frequentemente Python ;) vedi "Un programmatore e 17.000 righe di codice dopo".

Niente da aggiungere alle altre risposte, Oltretutto che se scegli Python tu dovere usa qualcosa di simile pilinto di cui nessuno ha parlato finora.

Un modo per giudicare a cosa serve Python è guardare quali prodotti utilizzano Python al momento.Questo pagina di Wikipedia ha un lungo elenco che include vari framework web, sistemi di gestione dei contenuti, sistemi di controllo della versione, app desktop e IDE.

Come dice Qui - "Alcuni dei progetti più grandi che utilizzano Python sono il server delle applicazioni Zope, YouTube e il client BitTorrent originale.Le grandi organizzazioni che utilizzano Python includono Google, Yahoo!, CERN e NASA.ITA utilizza Python per alcuni dei suoi componenti."

Quindi, in breve, sì, è "adatto per l'uso in produzione nello sviluppo di applicazioni complesse autonome".Lo stesso vale per molte altre lingue, con vari pro e contro.Qual è il linguaggio migliore per il tuo caso d'uso particolare è troppo soggettivo per rispondere, quindi non ci proverò, ma spesso la risposta sarà "quello che i tuoi sviluppatori conoscono meglio".

Il refactoring è inevitabile su basi di codice più grandi e la mancanza di tipizzazione statica rende questo molto più difficile in Python che nei linguaggi tipizzati staticamente.

E per quanto ne so usano molto Python anche all'interno di Google.

Beh, lo spero, il creatore di Python lavora ancora su Google se non sbaglio?

Per quanto riguarda l'uso di Python, penso che sia un ottimo linguaggio per app autonome.È molto utilizzato in molti programmi Linux e sono disponibili alcuni widget utili per aiutare nello sviluppo delle GUI.

Python è un piacere da usare.Lo uso regolarmente e scrivo anche molto codice per lavorare in C#.Ci sono due svantaggi nello scrivere codice dell'interfaccia utente in Python.uno è che non esiste un unico framework dell'interfaccia utente accettato dalla maggior parte della comunità.quando scrivi in ​​c#, il runtime .NET e le librerie di classi sono tutti pensati per funzionare insieme.Con Python ogni libreria dell'interfaccia utente ha una propria semantica che spesso è in contrasto con la mentalità pythonica con cui stai cercando di scrivere il tuo programma.Non sto incolpando gli scrittori della biblioteca.Ho provato diverse librerie (wxwidgets, PythonWin[Wrapper around MFC], Tkinter), mentre lo facevo spesso avevo la sensazione di scrivere codice in un linguaggio diverso da Python (nonostante fosse Python) perché le librerie non lo sono t esattamente Pythonic sono un port da un'altra lingua che sia c, c++, tk.

Quindi per me scriverò il codice dell'interfaccia utente in .NET (per me C#) a causa dell'IDE e della coerenza delle librerie.Ma quando potrò scriverò la logica aziendale in Python perché è più chiara e più divertente.

So che probabilmente sto affermando l'ovvio, ma non dimenticare che la qualità del team di sviluppo e la loro familiarità con la tecnologia avranno un impatto notevole sulla tua capacità di fornire risultati.

Se hai una squadra forte, probabilmente non è un problema se hanno familiarità.Ma se hai persone di età compresa tra 9 e 5 anni che non hanno familiarità con la tecnologia, avranno bisogno di più supporto e dovresti fare una chiamata se i guadagni di produttività valgono qualunque sia il costo di tale supporto.

Ho avuto solo un'esperienza con Python, il mio progetto trash-cli.

So che probabilmente alcuni o tutti i problemi dipendono dalla mia inesperienza con Python.

Ho trovato frustranti queste cose:

  1. la difficoltà di trovare un buon IDE gratuitamente
  2. il supporto limitato al refactoring automatico

Inoltre:

  1. la necessità di introdurre due livelli di raggruppamento di pacchetti e moduli mi confonde.
  2. mi sembra che non esista una convenzione di denominazione dei codici ampiamente adottata
  3. mi sembra che ci siano alcuni documenti sulle API della libreria standard che sono incompleti
  4. il fatto che alcune librerie standard non siano completamente orientate agli oggetti mi dà fastidio

Anche se alcuni programmatori Python mi dicono che non hanno questi problemi, o dicono che non sono problemi.

Prova Django o Pylons, scrivi una semplice app con entrambi e poi decidi quale si adatta meglio a te.Ce ne sono altri (come Turbogears o Werkzeug) ma questi sono i più utilizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top